From 8dc4ff6dd22b1603f33537ff03994cc63e658768 Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch <dimitri@stack.nl>
Date: Sun, 12 May 2013 13:04:34 +0000
Subject: Release-1.8.3.1-20130512

---
 INSTALL                              |    4 +-
 Makefile.in                          |    2 +-
 README                               |    4 +-
 addon/doxywizard/expert.cpp          |    9 +-
 addon/doxywizard/inputbool.cpp       |    4 +-
 addon/doxywizard/inputint.cpp        |   21 +-
 addon/doxywizard/inputint.h          |    1 +
 addon/doxywizard/inputstring.cpp     |   21 +-
 addon/doxywizard/inputstring.h       |    1 +
 addon/doxywizard/inputstrlist.cpp    |    3 +-
 configure                            |   24 +-
 doc/Doxyfile                         |    2 +-
 doc/changelog.doc                    | 1743 +++++++
 doc/commands.doc                     |    6 +-
 doc/config.doc                       |   53 +-
 doc/doxygen.1                        |    8 +-
 doc/doxygen_manual.tex               |    2 +-
 doc/extsearch.doc                    |    7 -
 doc/language.doc                     |    4 +-
 doc/searching.doc                    |    3 +-
 doc/translator_report.txt            |   30 +-
 jquery/Makefile                      |   42 +
 jquery/README                        |   16 +
 jquery/jquery-1.7.1.js               | 9266 ++++++++++++++++++++++++++++++++++
 jquery/jquery.ba-1.3-hashchange.js   |  390 ++
 jquery/jquery.scrollTo-1.4.2.js      |  215 +
 jquery/jquery.ui-1.8.18.core.js      |  319 ++
 jquery/jquery.ui-1.8.18.mouse.js     |  162 +
 jquery/jquery.ui-1.8.18.resizable.js |  808 +++
 jquery/jquery.ui-1.8.18.widget.js    |  272 +
 jquery/split_jquery.pl               |   25 +
 qtools/Doxyfile                      |    9 +-
 src/cite.cpp                         |   12 +-
 src/clangparser.cpp                  |  315 +-
 src/clangparser.h                    |   44 +-
 src/classdef.cpp                     |   44 +-
 src/code.l                           |   97 +-
 src/commentscan.l                    |   81 +-
 src/condparser.cpp                   |    2 +-
 src/config.h                         |   30 +-
 src/config.l                         |  117 +-
 src/config.xml                       |   34 +-
 src/configgen.py                     |    2 +
 src/configoptions.cpp                |   42 +-
 src/constexp.y                       |    2 +-
 src/dbusxmlscanner.cpp               |    4 +-
 src/dbusxmlscanner.h                 |    6 +-
 src/defgen.cpp                       |   16 +-
 src/definition.cpp                   |  204 +-
 src/definition.h                     |   23 +-
 src/diagram.cpp                      |    2 +-
 src/dirdef.cpp                       |   53 +-
 src/docbookgen.cpp                   |   18 +-
 src/docbookvisitor.cpp               |    2 +-
 src/docparser.cpp                    |  547 +-
 src/docparser.h                      |    6 +-
 src/doctokenizer.l                   |   10 +-
 src/dot.cpp                          |   64 +-
 src/dot.h                            |    2 -
 src/doxygen.cpp                      |  654 ++-
 src/doxygen.css                      |    5 +-
 src/doxygen.h                        |    1 -
 src/doxygen_css.h                    |    5 +-
 src/filedef.cpp                      |  424 +-
 src/filedef.h                        |  130 +-
 src/filename.cpp                     |   14 +-
 src/formula.cpp                      |    6 +-
 src/fortrancode.l                    |    3 +
 src/fortranscanner.h                 |    6 +-
 src/fortranscanner.l                 |   14 +-
 src/groupdef.cpp                     |   83 +-
 src/htags.cpp                        |    6 +-
 src/htmldocvisitor.cpp               |   39 +-
 src/htmlgen.cpp                      |    2 +-
 src/htmlhelp.cpp                     |    2 +-
 src/index.cpp                        |   24 +-
 src/jquery_fx.js                     |   12 +-
 src/jquery_fx_js.h                   |   12 +-
 src/jquery_p1.js                     |   21 +-
 src/jquery_p1_js.h                   |   21 +-
 src/jquery_p2.js                     |   13 +-
 src/jquery_p2_js.h                   |   13 +-
 src/jquery_p3.js                     |    5 +-
 src/jquery_p3_js.h                   |    5 +-
 src/jquery_ui.js                     |   28 +-
 src/jquery_ui_js.h                   |   26 +-
 src/language.cpp                     |    4 +-
 src/latexdocvisitor.cpp              |   10 +-
 src/latexgen.cpp                     |   14 +-
 src/layout.cpp                       |   16 +-
 src/libdoxygen.pro.in                |    1 -
 src/libdoxygen.t.in                  |    3 +
 src/markdown.cpp                     |   46 +-
 src/markdown.h                       |    6 +-
 src/memberdef.cpp                    |  707 +--
 src/memberdef.h                      |   18 +-
 src/memberlist.cpp                   |   39 +-
 src/message.cpp                      |   30 +-
 src/message.h                        |    1 +
 src/msc.cpp                          |    4 +-
 src/namespacedef.cpp                 |   54 +-
 src/outputgen.h                      |    2 +-
 src/outputlist.cpp                   |   48 +-
 src/outputlist.h                     |   12 +-
 src/pagedef.cpp                      |    8 +-
 src/parserintf.h                     |   25 +-
 src/perlmodgen.cpp                   |   28 +-
 src/pre.l                            |   75 +-
 src/printdocvisitor.h                |  224 +-
 src/pycode.l                         |    2 +
 src/pyscanner.h                      |    6 +-
 src/pyscanner.l                      |    6 +-
 src/resize.js                        |    2 +-
 src/resize_js.h                      |    2 +-
 src/rtfdocvisitor.cpp                |    2 +-
 src/rtfgen.cpp                       |   18 +-
 src/scanner.h                        |    6 +-
 src/scanner.l                        |  166 +-
 src/searchindex.cpp                  |   33 +-
 src/sqlite3gen.cpp                   |    2 +-
 src/tagreader.cpp                    |   80 +-
 src/tclscanner.h                     |    6 +-
 src/tclscanner.l                     |   10 +-
 src/textdocvisitor.cpp               |    2 +-
 src/translator_adapter.h             |    2 +-
 src/translator_ar.h                  |  392 +-
 src/translator_fi.h                  |    2 +-
 src/translator_kr.h                  |  119 +
 src/types.h                          |   13 +
 src/util.cpp                         |   98 +-
 src/util.h                           |    2 +
 src/vhdlcode.l                       |    2 +-
 src/vhdldocgen.cpp                   |   36 +-
 src/vhdlscanner.h                    |    6 +-
 src/vhdlscanner.l                    |    6 +-
 src/xmldocvisitor.cpp                |    2 +-
 src/xmlgen.cpp                       |   30 +-
 137 files changed, 16399 insertions(+), 2858 deletions(-)
 create mode 100644 doc/changelog.doc
 create mode 100644 jquery/Makefile
 create mode 100644 jquery/README
 create mode 100644 jquery/jquery-1.7.1.js
 create mode 100644 jquery/jquery.ba-1.3-hashchange.js
 create mode 100644 jquery/jquery.scrollTo-1.4.2.js
 create mode 100644 jquery/jquery.ui-1.8.18.core.js
 create mode 100644 jquery/jquery.ui-1.8.18.mouse.js
 create mode 100644 jquery/jquery.ui-1.8.18.resizable.js
 create mode 100644 jquery/jquery.ui-1.8.18.widget.js
 create mode 100644 jquery/split_jquery.pl

diff --git a/INSTALL b/INSTALL
index 54ef1f1..02f3338 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.8.3.1-20130402
+DOXYGEN Version 1.8.3.1-20130512
 
 Please read the installation section of the manual 
 (http://www.doxygen.org/install.html) for instructions.
 
 --------
-Dimitri van Heesch (02 April 2013)
+Dimitri van Heesch (12 May 2013)
diff --git a/Makefile.in b/Makefile.in
index 9183aec..606804f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -82,7 +82,7 @@ pdf: docs
 DISTFILES =  Doxyfile libmd5 addon tmake doc examples bin lib objects \
              qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
              Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
-             VERSION packages winbuild
+             VERSION packages winbuild jquery
 
 archive: clean
 	tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
diff --git a/README b/README
index e0063f7..a002402 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.8.3.1_20130402
+DOXYGEN Version 1.8.3.1_20130512
 
 Please read INSTALL for compilation instructions.
 
@@ -26,4 +26,4 @@ forum.
 
 Enjoy,
 
-Dimitri van Heesch (dimitri@stack.nl) (02 April 2013)
+Dimitri van Heesch (dimitri@stack.nl) (12 May 2013)
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index cf33192..e7b7507 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -270,11 +270,18 @@ QWidget *Expert::createTopicWidget(QDomElement &elem)
   child = elem.firstChildElement();
   while (!child.isNull())
   {
+    QString setting = child.attribute(SA("setting"));
     QString dependsOn = child.attribute(SA("depends"));
     QString id        = child.attribute(SA("id"));
-    if (!dependsOn.isEmpty())
+    if (!dependsOn.isEmpty() && 
+        (setting.isEmpty() || IS_SUPPORTED(setting.toAscii())))
     {
        Input *parentOption = m_options[dependsOn];
+       if (parentOption==0)
+       {
+         printf("%s has depends=%s that is not valid\n",
+             qPrintable(id),qPrintable(dependsOn));
+       }
        Input *thisOption   = m_options[id];
        Q_ASSERT(parentOption);
        Q_ASSERT(thisOption);
diff --git a/addon/doxywizard/inputbool.cpp b/addon/doxywizard/inputbool.cpp
index 62fcf62..9e28852 100644
--- a/addon/doxywizard/inputbool.cpp
+++ b/addon/doxywizard/inputbool.cpp
@@ -43,6 +43,8 @@ void InputBool::setEnabled(bool b)
 { 
   m_enabled = b;
   m_cb->setEnabled(b); 
+  m_lab->setEnabled(b); 
+  updateDefault();
   updateDependencies();
 }
 
@@ -69,7 +71,7 @@ void InputBool::setValue( bool s )
 
 void InputBool::updateDefault()
 {
-  if (m_state==m_default)
+  if (m_state==m_default || !m_lab->isEnabled())
   {
     m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
   }
diff --git a/addon/doxywizard/inputint.cpp b/addon/doxywizard/inputint.cpp
index 302c3ea..876a920 100644
--- a/addon/doxywizard/inputint.cpp
+++ b/addon/doxywizard/inputint.cpp
@@ -17,6 +17,15 @@
 
 #include <QtGui>
 
+class NoWheelSpinBox : public QSpinBox
+{
+  protected:
+    void wheelEvent(QWheelEvent *e)
+    {
+      e->ignore();
+    }
+};
+
 InputInt::InputInt( QGridLayout *layout,int &row,
                     const QString & id, 
                     int defVal, int minVal,int maxVal,
@@ -24,7 +33,7 @@ InputInt::InputInt( QGridLayout *layout,int &row,
   : m_default(defVal), m_minVal(minVal), m_maxVal(maxVal), m_docs(docs), m_id(id)
 {
   m_lab = new HelpLabel(id);
-  m_sp  = new QSpinBox;
+  m_sp  = new NoWheelSpinBox;
   m_sp->setMinimum(minVal);
   m_sp->setMaximum(maxVal);
   m_sp->setSingleStep(1);
@@ -56,7 +65,14 @@ void InputInt::setValue(int val)
     m_val = val;
     m_sp->setValue(val);
     m_value = m_val;
-    if (m_val==m_default)
+    updateDefault();
+  }
+}
+
+void InputInt::updateDefault()
+{
+  {
+    if (m_val==m_default || !m_lab->isEnabled())
     {
       m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
     }
@@ -72,6 +88,7 @@ void InputInt::setEnabled(bool state)
 {
   m_lab->setEnabled(state);
   m_sp->setEnabled(state);
+  updateDefault();
 }
 
 QVariant &InputInt::value() 
diff --git a/addon/doxywizard/inputint.h b/addon/doxywizard/inputint.h
index a6a87ed..846b7c2 100644
--- a/addon/doxywizard/inputint.h
+++ b/addon/doxywizard/inputint.h
@@ -56,6 +56,7 @@ class InputInt : public QObject, public Input
     void showHelp(Input *);
 
   private:
+    void updateDefault();
     QLabel   *m_lab;
     QSpinBox *m_sp;
     int       m_val;
diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp
index 9e0a0e1..36fe319 100644
--- a/addon/doxywizard/inputstring.cpp
+++ b/addon/doxywizard/inputstring.cpp
@@ -19,6 +19,16 @@
 
 #include <QtGui>
 
+class NoWheelComboBox : public QComboBox
+{
+  protected:
+    void wheelEvent(QWheelEvent *e)
+    {
+      e->ignore();
+    }
+};
+
+
 InputString::InputString( QGridLayout *layout,int &row,
                           const QString & id, const QString &s, 
                           StringMode m, const QString &docs,
@@ -30,7 +40,7 @@ InputString::InputString( QGridLayout *layout,int &row,
   if (m==StringFixed)
   {
     layout->addWidget( m_lab, row, 0 );
-    m_com = new QComboBox; 
+    m_com = new NoWheelComboBox; 
     layout->addWidget( m_com, row, 1, 1, 3, Qt::AlignLeft );
     m_le=0;
     m_br=0;
@@ -95,7 +105,13 @@ void InputString::setValue(const QString &s)
   {
     m_str = s;
     m_value = m_str;
-    if (m_str==m_default)
+    updateDefault();
+  }
+}
+void InputString::updateDefault()
+{
+  {
+    if (m_str==m_default || !m_lab->isEnabled())
     {
       m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
     }
@@ -114,6 +130,7 @@ void InputString::setEnabled(bool state)
   if (m_le)  m_le->setEnabled(state);
   if (m_br)  m_br->setEnabled(state);
   if (m_com) m_com->setEnabled(state);
+  updateDefault();
 }
 
 void InputString::browse()
diff --git a/addon/doxywizard/inputstring.h b/addon/doxywizard/inputstring.h
index 741f55d..ab2c8e2 100644
--- a/addon/doxywizard/inputstring.h
+++ b/addon/doxywizard/inputstring.h
@@ -72,6 +72,7 @@ class InputString : public QObject, public Input
     void help();
 
   private:
+    void updateDefault();
     QLabel       *m_lab;
     QLineEdit    *m_le;
     QToolBar     *m_br;
diff --git a/addon/doxywizard/inputstrlist.cpp b/addon/doxywizard/inputstrlist.cpp
index 2e6e624..23c20ff 100644
--- a/addon/doxywizard/inputstrlist.cpp
+++ b/addon/doxywizard/inputstrlist.cpp
@@ -141,6 +141,7 @@ void InputStrList::setEnabled(bool state)
   m_lb->setEnabled(state);
   if (m_brFile) m_brFile->setEnabled(state);
   if (m_brDir)  m_brDir->setEnabled(state);
+  updateDefault();
 }
 
 void InputStrList::browseFiles()
@@ -222,7 +223,7 @@ void InputStrList::update()
 
 void InputStrList::updateDefault()
 {
-  if (m_strList==m_default)
+  if (m_strList==m_default || !m_lab->isEnabled())
   {
     m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
   }
diff --git a/configure b/configure
index 623ffe1..db6ccdc 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=8
 doxygen_version_revision=3.1
 
 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=20130402
+doxygen_version_mmn=20130512
 
 bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
 
@@ -42,6 +42,7 @@ f_search=NO
 f_langs=nl,sv,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,mk,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa,sc,vi,tr,eo,am
 f_sqlite3=NO
 f_libclang=NO
+f_libclangstatic=NO
 
 while test -n "$1";  do
   case $1 in
@@ -105,6 +106,10 @@ while test -n "$1";  do
     --with-libclang | -with-libclang)
        f_libclang=YES
        ;;
+    --with-libclang-static | -with-libclang-static)
+       f_libclang=YES
+       f_libclangstatic=YES
+       ;;
     -h | -help | --help)
        f_help=y
        ;;
@@ -122,7 +127,8 @@ if test "$f_help" = y; then
 Usage: $0 [--help] [--shared] [--static] [--release] [--debug] 
           [--perl name] [--flex name] [--bison name] [--make name] 
           [--dot name] [--platform target] [--prefix dir] [--docdir dir] 
-          [--install name] [--english-only] [--enable-langs list] [--with-sqlite3]
+          [--install name] [--english-only] [--enable-langs list] 
+          [--with-sqlite3] [--with-libclang]
           [--with-doxywizard] [--with-doxysearch] [--with-doxyapp]
 
 Options: 
@@ -156,7 +162,7 @@ Options:
   --enable-langs list 	Include support for output languages listed in list.
   			[default: $f_langs]
   --with-sqlite3        Add support for sqlite3 output [experimental]
-  --with-libclang       Add support for libclang parsing [experimental]
+  --with-libclang       Add support for libclang parsing
   --with-doxywizard     Build the GUI frontend for doxygen. This
                         requires Qt version 4.
   --with-doxysearch     Build external search tools (doxysearch and doxyindexer)
@@ -450,7 +456,11 @@ if test "$f_libclang" = YES; then
   printf "  Checking for libclang ... "
   libclang_hdr_dir="/usr/include /usr/local/include /opt/local/include"
   libclang_lib_dir="/usr/lib /usr/local/lib /opt/local/lib"
-  libclang_lib_name="libclang.so libclang.dylib libclang.a"
+  if test "$f_libclangstatic" = NO; then
+    libclang_lib_name="libclang.so libclang.dylib libclang.a"
+  else
+    libclang_lib_name="libclang.a"
+  fi
   libclang_hdr=NO
   libclang_lib=NO
   libclang_link=
@@ -465,7 +475,11 @@ if test "$f_libclang" = YES; then
       for j in $libclang_lib_name; do
         if test -f "$i/$j"; then
           libclang_lib="$i/$j"
-          libclang_link="-L $i -lclang"
+          if test "$f_libclangstatic" = NO; then
+            libclang_link="-L $i -lclang"
+          else
+            libclang_link="$i/libLLVMBitReader.a $i/libLLVMMC.a $i/libLLVMMCParser.a $i/libLLVMSupport.a $i/libclang.a $i/libclangAST.a $i/libclangAnalysis.a $i/libclangBasic.a $i/libclangDriver.a $i/libclangEdit.a $i/libclangFrontend.a $i/libclangLex.a $i/libclangParse.a $i/libclangRewriteCore.a $i/libclangSema.a $i/libclangSerialization.a $i/libclangStaticAnalyzerCore.a"
+          fi
           break
         fi
       done
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 7d5470b..7269989 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -39,7 +39,7 @@ INPUT             = index.doc install.doc starting.doc docblocks.doc markdown.do
                     external.doc faq.doc trouble.doc features.doc \
 		    doxygen_usage.doc doxywizard_usage.doc \
 		    config.doc commands.doc htmlcmds.doc xmlcmds.doc language.doc \
-                    perlmod.doc perlmod_tree.doc arch.doc 
+                    perlmod.doc perlmod_tree.doc arch.doc changelog.doc
 FILE_PATTERNS     = *.cpp *.h *.doc
 EXAMPLE_PATH      = ../examples
 RECURSIVE         = NO
diff --git a/doc/changelog.doc b/doc/changelog.doc
new file mode 100644
index 0000000..f43bdff
--- /dev/null
+++ b/doc/changelog.doc
@@ -0,0 +1,1743 @@
+/** \page changelog Changelog
+\tableofcontents
+\section log_1_8 Release 1.8
+\subsection log_1_8_3_1 Release 1.8.3.1
+\htmlonly
+<b>(release date 20-01-2013)</b>
+<a name="1.8.3.1"></a>
+<h3>Changes</h3>
+<ul>
+<li>   Changed to way the search results for multiple projects can be linked 
+       together. A project is now no longer identified by the tag files name but
+       via new option EXTERNAL_SEARCH_ID giving a bit more flexibility.
+<li>   Disabled the disk cache for member data. Allows removing quite some complexity
+       in doxygen and is not really needed now that 64bit systems with &gt;4GB RAM 
+       are becoming more common. Let me know if you think you benefit from this caching.
+<li>   id 691607: Using $relpath$ in a custom footer could lead to ambiguities
+       when followed by a name that could also be a marker, like 'search'.
+       Now $relpath^ should be used instead. $relpath$ is still supported for
+       backward compatibility.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   You can now use EXTENSION_MAPPING on files without any extension using
+       no_extension as placeholder (thanks to Jason Majors for the patch).
+<li>   To make navindex section inside a layout file that links to 
+       a specific URL you can use usergroup with the url attribute.
+<li>   To make navindex section without any link inside a layout file you 
+       can use usergroup with special title [none].
+</ul>
+<h3>Bug fixes (ids refer to the <a href="http://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=NEEDINFO&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&newqueryname=&form_name=query&order=bugs.bug_id">bugzilla</a> database)</h3>
+<ul>
+<li>   id 644350: Fortran: Included patch to improve parsing line continuation 
+       characters.
+<li>   id 645423: Fortran: added support for protected attribute
+<li>   id 682550,691315: When using @copydoc, paragraphs breaks did not appear 
+       in the copied documentation.
+<li>   id 686581: Fortran: handle single quotes in normal Fortran comment.
+<li>   id 686689, 691335: Scope of forwardly declared template class was lost 
+       in the output.
+<li>   id 689713: Tcl: Inline source code was not rendered correctly.
+<li>   id 690787: Fixed case were a cyclic inheritance relation could crash 
+       doxygen.
+<li>   id 690831: Using @subpage in a -# style list was not handled properly.
+<li>   id 691000: For a mainpage without title the project name is now shown as
+       the title in the XML output.
+<li>   id 691277: The generated list of citations is now no longer included in 
+       the tag file.
+<li>   id 691073: Documenting strongly typed enum values outside of the enum 
+       did not work.
+<li>   id 691310: Python: = was missing in the output for variable assignment.
+<li>   id 691323: Doxygen could crash when creating inline msc graphs.
+<li>   id 691340: Members didn't have a More.. link to jump to detailed docs.
+<li>   id 691602: Doxygen did not probably distinguish between two template
+<li>   id 691798: regression: C++ style comments that started with a line of 
+       slashes did not get processed correctly anymore. 
+<li>   id 692031: Fixed parse error when left shift operator occurred as a 
+       default parameter.
+       members or functions that only differ in the return type.
+<li>   Setting SEARCH_INCLUDES to NO resulted in no include graphs and no
+       include files being listed in the output.
+<li>   Improved support for MinGW (thanks to a patch by Brecht Sanders).
+<li>   Removed the Graphviz/dot dependency when building the doxygen 
+       documentation.
+<li>   Anchors to sub pages were wrong in the XML output.
+<li>   Included VHDL patch by Martin Kreis that improves the flow chart 
+       generation.
+<li>   corrected several code pages and fontsets for proper RTF output for
+       a number of languages such as Greek.
+</ul>
+\endhtmlonly
+\subsection log_1_8_3 Release 1.8.3
+\htmlonly
+<a name="1.8.3"></a>
+<b>(release date 26-12-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li>   Expanding the tree in an index page of the HTML output, will now 
+       expand only one level instead of the whole sub-tree (thanks to
+       Pez Cuckow for the patch).
+<li>   A blockquote in Markdown does no longer require a whitespace
+       after the last '&gt;' if the '&gt;' is followed by a newline.
+<li>   id 682718: Included patch to add version info to all generated 
+       template files (headers, footers, stylesheets, layout files, etc).
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Added support for using external tools to index and search through 
+       the HTML documentation. An example index tool is provided (doxyindexer) 
+       and an example search engine (doxysearch.cgi).
+       To configure the external search engine the following new options
+       are added to the configuration file: EXTERNAL_SEARCH (to enable the
+       feature), SEARCHENGINE_URL (to specify the URL of the search engine),
+       SEARCHDATA_FILE (to specify the name of the raw search data to index),
+       EXTRA_SEARCH_MAPPINGS (for search through multiple projects).
+       See the <a href="extsearch.html">manual</a> for details.
+<li>   Added USE_MDFILE_AS_MAINPAGE config option to select a markdown page to
+       be used as the main page.
+<li>   id 630645: This patch (contributed by Albert) adds support for 
+       simple logic expressions for \cond, \if, and friends, i.e. you can do
+       \if (SOME_SECTION_NAME &amp;&amp; (!THIS_ALTERNATIVE || THAT_ALTERNATIVE))
+<li>   id 684152: Patch (contributed by Albert) adds a new configuration 
+       option MATHJAX_FORMAT to select the MathJax output format. Options are
+       HTML-CSS, NativeMML, or SVG.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 670853: Fixed compile issues with 0 to QCString cast for 
+       old compilers.
+<li>   id 678139: A class A deriving from another class B inside a namespace
+       not known to doxygen, caused class B to appear in the global scope.
+<li>   id 681209: Fixed problem processing .bib files when they were located
+       in a path containing spaces.
+<li>   id 681830: Using \addindex in a page will now produce a link to the
+       word, instead of the start of the page.
+<li>   id 681831: The TREEVIEW_WIDTH option did not have any effect.
+<li>   id 681898: Jumping from a level 3 section to a level 1 section did
+       not appear correctly in the page TOC.
+<li>   id 681976: C++11: Improved handling of noexcept expressions, e.g.:
+       <code>Test() noexcept ( noexcept(T::T()) ) = default;</code>
+<li>   id 682048: Improved SIGINT handling when running multiple dot instances.
+<li>   id 682602: Fixed problem processing .bib files when using a non default
+       output directory.
+<li>   id 682713: Comment for IDL_PROPERTY_SUPPORT in the config file template 
+       did not have line wrapping.
+<li>   id 682728: Setting SHOW_FILES to NO prevented call graphs from being
+       generated.
+<li>   id 682740: Fortran: In initialization statement the "=" was missing
+<li>   id 683284: Fortran: ALIASes where not replaced in !! and !&lt; comments.
+<li>   id 683976: Added meta tag "generator" to HTML output (thanks to
+       Albert for the patch).
+<li>   id 684781: Sections of the main page did not appear in the 
+       navigation tree until the main page had sub pages.
+       Also fixed bug in treeview that caused mainpage with title and
+       sections to appear at the same level as the sections.
+<li>   id 685125: Doxygen could select the wrong overloaded method when 
+       the only difference in parameter types was the template type of 
+       a typedef.
+<li>   id 685181: Inheriting member documentation did not work in combination
+       with Java interfaces.
+<li>   id 685623: Enum values did not appear in the detailed documentation 
+       when using C++11 style enums.
+<li>   id 685879: Even though HIDE_UNDOC_MEMBERS was enabled, the navigation
+       still showed undocumented members.
+<li>   id 685940: Fixed back button behaviour when using the navigation tree.
+<li>   id 686284: Added anchors to refs in the index.qhp TOC.
+<li>   id 686826: Added XML declaration to index.qhp TOC.
+<li>   id 686956: When a class and its base class has the same nested class,
+       the collaboration diagram could point to the wrong class.
+<li>   id 686983: Comments inside a function macro parameter appeared before 
+       the expanded macro, instead of being treated as part of the parameter.
+<li>   id 687301: Allow minus in the name of a HTML attribute.
+<li>   id 687572: Code fragments were wrapped too early in the latex output.
+<li>   id 688226: Fixed Qt version number in ./configure --help text.
+<li>   id 688463: Included patch to prevent processing identifiers starting
+       with _ or __ as markdown.
+<li>   id 688531: Horizontal ruler inside paragraph caused missing &lt;/p&gt;
+<li>   id 688542: Using "usergroup" in the layout.xml caused missing &lt;div&gt;
+<li>   id 688739: Fixed problem with user defined entries in the eclipse help
+       index (thanks to Rene Papenhoven for the fix).
+<li>   id 688647: Fixed problem parsing initializer list with C++11 style
+       uniform types.
+<li>   id 689341: \if around list item preceded by whitespace caused wrong
+       list in the output. 
+<li>   id 689461: Correct link in documentation of SIP_SUPPORT option.
+<li>   id 689720: Fixed bug that could prevent refman.tex from being generated.
+<li>   id 689833: Fixed missing space in Chinese translation.
+<li>   id 690093: Files added via HTML_EXTRA_STYLESHEET did not correct refer 
+       to files that where placed in a subdirectory.
+<li>   id 690190: Searching for multibyte characters did not work with the 
+       server based search engine.
+<li>   id 690250: Fixed case where line numbers got out of sync with the code.
+<li>   id 690341: First member of an anonymous C++11 style enum was not shown
+       properly.
+<li>   id 690385: Fixed case where _'s where falsely converted to Markdown 
+       emphasis.
+<li>   id 690403: Title not used when \ref'ing to a \section imported via 
+       a tag file.
+<li>   id 690418: Behavior of @cond was accidentally reversed by new expression
+       parser.
+<li>   id 690602: Fixed problems handling @cond inside /// comments.
+<li>   id 690629: Fixed case where doxygen would during preprocessing.
+<li>   id 690685: A file specified using HTML_EXTRA_STYLEHSHEET did not end
+       up in the Qt Help index.
+<li>   Improved the way enum's are rendered in the HTML output.
+<li>   When inlining structs (INLINE_SIMPLE_STRUCTS=YES) a &lt;p&gt; was missing
+       for members with a detailed description, causing invalid XHTML.
+<li>   Fixed problem loading the navigation tree when using .xhtml as the
+       file extension.
+<li>   The navigation tree was not always correctly positioned upon initial
+       load when using Chrome.
+<li>   HTML Navigation tree showed static members even when EXTRACT_STATIC was
+       set to NO.
+<li>   Same word could appear multiple times in the match list for an entry 
+       in the search results when using server based search.
+</ul>
+\endhtmlonly
+\subsection log_1_8_2 Release 1.8.2
+\htmlonly
+<a name="1.8.2"></a>
+<b>(release date 11-08-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li>   Using a fenched block (~~~~) in Markdown without explicit extension will 
+       now be interpreted as a @code..@endcode block instead 
+       of @verbatim..@endverbatim.
+<li>   Classes inheriting from an class that is outside the scope of doxygen
+       are still shown in diagrams. This does not hold for usage relations.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Added support for C++11:
+       <ul>
+       <li> strongly typed enums, e.g.:
+            <pre>enum class E</pre>
+       <li> enums with explicit type, e.g.: 
+            <pre>enum E : unsigned int { ... }</pre>
+       <li> id 678097: added support for final keyword on classes and methods.
+       <li> support for override keyword for methods.
+       <li> <code>nullptr</code> is new a type keyword in code fragments.
+       <li> support for variables with initializer lists, 
+         e.g.: <pre>const int var {10};</pre>
+       <li> support for trailing return types, 
+         e.g.: <pre>auto foo() -&gt; Bar;</pre>
+       <li> id 672372: added support for template aliases, 
+         e.g.: <pre>template&lt;typename T&gt; using A = B&lt;T&gt;;</pre>
+       <li> support for C++11 variadic templates, 
+         e.g.: <pre>template&lt;typename... Values&gt; class C;</pre>
+       <li> support for documenting template class declarations.
+       <li> id 680098: <code>static_assert(...);</code> inside a class is now ignored.
+       <li> id 679740: Add support parameters with default lambda functions, 
+         e.g.:  <pre>int foo(int i, std::function&lt;int(int)&gt; f = [](int x) -&gt; int { return x / 2; })</pre>
+       <li> default initializers for non-static data members, 
+         e.g.:  <pre>class C { public: int x = 4; int y {6}; int z = y*func(); };</pre>
+       <li> support for decltype as a way selecting a type for a variable, 
+         e.g.: <pre>int x; decltype(x) y;</pre>
+       <li> support for new string literals, 
+         e.g.  <pre>u8"utf8", u"utf-16", U"utf-32", L"wchar"</pre>
+       <li> support for raw string literals (with and without user defined 
+         delimiter), 
+         e.g.  <pre>R"(some"thing)", u8R"raw(some)"thing)raw"</pre>
+       <li> support for explictly deleted and defaulted special members 
+         (<code>=default</code> and <code>=delete</code>).
+       </ul>
+<li>   Made several improvements to the way Objective-C categories and protocols 
+       are handled:
+       <ul>
+       <li> Class extensions are now treated as part of the class, whereas 
+         categories are listed separately.
+       <li> Fixed parse problem where category had a { } section.
+       <li> Fixed parse problem for categories that implemented protocols.
+       <li> Fixed render bug for protocols in class diagrams.
+       <li> Attributes with the same name as a method are now no longer matched.
+       <li> Internal properties are now also marked with [implementation]
+       <li> Members of categories are shown in the class they extend as well, and 
+         cross reference links are made between these members.
+       <li> Class extension implementing protocols are now shown as protocols
+         inherited by the class itself, including the "Implemented by" relation.
+       </ul>
+<li>   Added option HTML_EXTRA_STYLESHEET which allows adding an additional
+       stylesheet without completely replacing doxygen.css.
+<li>   Added option AUTOLINK_SUPPORT which can be used to enable/disable
+       autolinking globally.
+<li>   Included language updates for Czech, Spanish, Greek, Slovak, and 
+       Esparanto.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   Fixed render glitch where template member of a base class was not
+       properly hidden in the derived class.
+<li>   Privately nested classes no longer appear in the declaration section 
+       of their parent if EXTRACT_PRIVATE is disabled.
+<li>   In the declaration section the separator line was in between the
+       member and its brief description.
+<li>   Fixed a couple of compiler warning with the new XCode 4.4 compiler.
+<li>   Added compilation support for Mountain Lion (Mac OS X 10.8).
+<li>   id 679631: Nested namespaces did not appear in the namespace list if the 
+       parent namespace was undocumented.
+<li>   id 680227: Fixed some spelling errors in the code comments.
+<li>   id 680398: Fortran:  comma at begin of argument list description in 
+       case of implicit type
+<li>   id 680405: Fortran: Entities on line with USE, ONLY were not hyperlinked 
+       in code.
+<li>   id 680408: Fortran: handle carriage return in non terminated strings.
+<li>   id 680492: Using Markdown formatting in @todo/@bug/.. like descriptions
+       did not work.
+<li>   id 680575: Fixed potential crash when &lt;code&gt; appeared inside &lt;summary&gt;
+       for C# code.
+<li>   id 680697: \xrefitems of the same type are not grouped together under
+       the same heading (just like \todo and friends). 
+<li>   Fixed case where full directory path was shown even though
+       FULL_PATH_NAMES was set to NO.
+<li>   id 680709: HTML output of template-derived classes contained unescaped 
+       characters.
+<li>   id 679963: "Class Index" appeared twice in the PDF TOC, Index at the 
+       end did not appear at all.
+<li>   In a declaration no link was created when referring to a class inside 
+       an undocumented namespace imported via a tag file.
+<li>   id 681281: Make default for TAB_SIZE 4 and added remark in Markdown
+       section of the manual about the effect of TAB_SIZE on code block 
+       processing when using tabs in the comment block.
+<li>   id 681023: Project logo was not included in the Qt help output.
+<li>   id 680992: Fixed a couple of typos in the comments.
+<li>   id 681350: Fixed a problem with Markdown processing of a @code block
+       inside an indented /// style comment.
+<li>   id 679928: Disabled section level correction for Markdown pages as
+       is was confusing.
+</ul>
+\endhtmlonly
+\subsection log_1_8_1_2 Release 1.8.1.2
+\htmlonly
+<a name="1.8.1.2"></a>
+<b>(release date 12-07-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li>   doxygen now strips the leading indentation shared by the lines in a 
+       @code..@endcode block.
+<li>   id 678218: Changed title of the SVG graphs from 'G' to the root node
+       of the graph.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Added button in the navigation tree to allow enabling/disabling 
+       syncing the navigation tree with the content.
+<li>   Extended the number of HTML entities with Greek letters and other 
+       symbols (thanks to Charles Karney for the patch).
+<li>   id 663645: Added support for C++11 strongly typed enums 
+       (enum class E { ... }).
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 590518: Added missing class member initialization to a
+       class in doxmlparser and made the library compile again.
+<li>   id 667678: Added support for Obj-C property attribute "unsafe_retained".
+<li>   id 674842,676984: Unmatched quote in a comment prevented alias expansion.
+<li>   id 676019: Fixed another case where local include path did not appear
+       correctly in the class documentation.
+<li>   id 676966: Fortran: Some keyword were not colored in the source view.
+<li>   id 676981: Fortran: Argument type was wrong type of in case of out of 
+       place !&gt; comment
+<li>   id 677935: Included patch to fix problem compiling for x86 release on
+       Windows.
+<li>   id 677992: Section without title could result in an invalid Qt Help
+       index.
+<li>   id 678022: Anonymous enum could result in an invalid Qt Help index.
+<li>   id 678102: Superfluous trailing comma in javascript 
+       prevented navigation tree to load in IE7.
+<li>   id 678177: a + at the start of a line inside a &lt;pre&gt; block, 
+       triggered the start of a list. Also -- and --- where not kept untouched 
+       inside a &lt;pre&gt; block.
+<li>   id 678180: ndash (--) appearing in a brief description could lead 
+       to invalid SVG images.
+<li>   id 678288: -- and --- inside a Markdown code block were not handled
+       properly.
+<li>   id 679331,675766: In body documentation with a different indentation then the
+       main documentation was not rendered correctly (MARKDOWN=YES).
+<li>   id 679436: Using an escaped pipe symbol in a Markdown table did not get 
+       unescaped in the output.
+<li>   id 679533: Code fragments did not appear properly in the doxygen manual.
+<li>   id 679615: Added missing delete call in a piece of debugging code.
+<li>   id 679626: Fixed some navigation issues in the manual
+<li>   Not all inherited members appeared in the "Additional inherited members"
+       list.
+<li>   Link to call after "Inherited members" was not correct when
+       CREATE_SUBDIRS was enabled.
+<li>   New VHDL diagram was not generated if the path contained spaces.
+<li>   Fixed a couple of problems handling Objective-C categories.
+</ul>
+\endhtmlonly
+\subsection log_1_8_1_1 Release 1.8.1.1
+\htmlonly
+<a name="1.8.1.1"></a>
+<b>(release date 10-06-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li>   Integrated the root navigation tree in navtree.js for faster loading.
+<li>   When the navigation tree is enabled, clicking jump to a line in 
+       the source code view will now highlight the line.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   VHDL code now has a new Design Overview page (thanks for Martin Kreis
+       for the patch). Requires HAVE_DOT=YES, and DOT_IMAGE_FORMAT=svg.
+<li>   id 677678: Added support for strong and weak attributes in Objective-C
+       properties.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 618462: Fortran: Appearance of comments in the HTML output 
+       are now customizable via CSS again.
+<li>   id 673660: &lt;code&gt; inside a &lt;summary&gt; or &lt;remarks&gt; section is now treated
+       as @code (was already the code for C#).
+<li>   id 673921: When a comment started at indent &gt;= 4 after a /** and 
+       continued at the same indent without leading * after a blank line, 
+       the continued part appeared at as a code block when Markdown was enabled.
+<li>   id 675036: If a file was not indexed, the navigation tree became empty.
+<li>   id 676019: Include path using quotes did not work as documented.
+<li>   id 676877: @warning did not end at blank line when followed by
+       a numbered list.
+<li>   id 676902: An anonymous namespace could introduce an invalid entry in
+       the navigation list.
+<li>   id 676948: Breadcrumb navigation path had wrong links when 
+       CREATE_SUBDIRS was enabled.
+<li>   id 677315: Fixed case where function was incorrectly detected as a 
+       variable.
+<li>   id 677589: Fixed typo in the documentation of the LAYOUT_FILE option.
+<li>   id 677771: Fixed visual misalignment for first argument.
+<li>   The "arrow out" button in interactive SVG did not work when 
+       served from a web server, due to the use of an absolute path.
+<li>   If a declation was too wide for a page, the content in HTML spilled 
+       over the boundary of its box, which looked ugly.
+<li>   Empty lines in a code fragment were collapsed.
+<li>   Navigation tree entries of the hierarchy appeared under class index as
+       well.
+<li>   Grouped globals and enum values were not added to the navigation index.
+<li>   Inlined class were not properly shows in the navigation index.
+<li>   Documented class in undocumented namespace did not show up in 
+       class list and navigation tree.
+<li>   ALLEXTERNALS=YES did not show all external classes in the class list.
+<li>   External reference via URL did not work for new
+       "Additional Inherited Members" section + inherited from class link.
+<li>   Objective-C protocols and C# generics were not index and listed 
+       properly in the navigation tree and indices.
+<li>   Undocumented files could produce a broken link in the navigation tree.
+<li>   Additional Inherited Members could turn up empty of all members of
+       the inherited class were grouped and SUBGROUPING was set to NO.
+</ul>
+<\endhtmlonly
+\subsection log_1_8_1 Release 1.8.1
+\htmlonly
+<a name="1.8.1"></a>
+<b>(release date 19-05-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li>   Changed the way indexes (Class,File,Namespace,Groups) are rendered:
+       <p>
+       There are now shown in a uniform way in the HTML output as a tree.
+       Trees can be expanded and collapsed interactively 
+       (this makes USE_INLINE_TREES obsolete). 
+       <p>
+       The class list now also shows namespaces and nested classes. 
+       The file list now also shows directories (this makes SHOW_DIRECTORIES 
+       obsolete). 
+       <p>
+       Member sections are now each rendered in a separate table.
+       This makes the HTML_ALIGN_MEMBERS option obsolete.
+       <p>
+<b>Note:</b> If you use a custom header for the HTML output (HTML_HEADER) 
+make sure you add the following:
+       <pre>
+&lt;script type="text/javascript" src="$relpath$jquery.js"&gt;&lt;/script&gt;
+&lt;script type="text/javascript" src="$relpath$dynsections.js"&gt;&lt;/script&gt;</pre>
+       Otherwise the interactivity of the trees does not work.
+       <p>
+
+<li>   Included a couple of performance improvements (thanks to Dirk Reiners)
+<li>   Changed the way member attributes (like protected, virtual, and static)
+       are rendered in the HTML output.
+<li>   Changed the look of the source code output.
+<li>   Included language updates for Chinese, Czech, German, Esperanto, 
+       Italian, Slovak, Spanish, Hungarian, and Polish.
+<li>   Syntax highlighing in source code fragments is no longer dependent
+       on LATEX_SOURCE_CODE being set to YES.
+<li>   Added natural scrolling for tablet devices (like the iPad) 
+       when using the treeview.
+<li>   For interactive SVGs the print button has been replaced by a 
+       "arrow out" button that opens the original non-interactive SVG in a 
+       new window for easy printing or saving. 
+<li>   id 661499: Long names are now wrapped in the dot nodes to avoid
+       very wide graphs.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   id 666527: Added support for &lt;inheritdoc/&gt; C# XML command
+       (thanks to John Werner for the patch).
+<li>   id 670965, Added support for resolving environment variables of the
+       form $(PROGRAMFILES(X86)) inside the config file
+<li>   Doxygen now shows Objective-C properties in collaboration diagrams
+       (thanks to Sven Weidauer for the patch).
+<li>   Added ability to search for group or page titles.
+<li>   Inherited class members are now shown as expandable sections in the
+       member overview (default is collapsed). Each section is rendered as
+       a table. 
+<li>   id 674349: Included build support for NetBSD.
+<li>   A -- will now be rendered as an 'en dash', similarly, --- will produce an
+       mdash.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 523156: Fortran: Prefix of routines got stripped.
+<li>   id 666088: Include VHDL patch (thanks to Martin Kreis).
+<li>   id 670235: Fixed include guard detection problem when using
+       #pragma once
+<li>   id 670805: A numbered list (1. 2. 3.) where each list item ended with 
+       an empty line is no longer treated as a set of separate lists (all 
+       starting with 1.).
+<li>   id 670889: Java: last enum value did not appear in the output unless it was
+       followed by a comma.
+<li>   id 671023, 671312: Regression: Autolist items starting on a new paragraph 
+       at indent level larger than 0 were not processed correctly. 
+<li>   id 671076: Sections could be missing from the navigation tree in 
+       some situations.
+<li>   id 671158: @tableofcontents did not work for the main page (@mainpage)
+<li>   id 671159: Sections in a separate markdown page did not appear in the 
+       table of contents.
+<li>   id 671166: Fortran: Fixed problem causing call/caller graphs not to be
+       generated.
+<li>   id 671171: RPM spec file was updated to make it work with RHEL 6.2
+       (thanks to Peter Klotz for the patch)
+<li>   id 671240: Corrected line number of error message reported for
+       pages.
+<li>   id 671291: C# regression: enum values where not shown in the docs.
+<li>   id 671395: When #some_member appeared at the start of a line it was
+       seen as a level one header instead of a link to a member when
+       Markdown processing was enable. Now at least one space is required
+       after the # to make it a header.
+<li>   id 671426: Fixed case where doxygen could crash when a section and
+       subsection had the same label.
+<li>   id 671591: docset creating could fail due to invalid Nodes.xml
+<li>   id 671702: Using \internal in a group or member did not hide it
+       from the navigation tree if there was no documentation.
+<li>   id 671709: Backticks in C# comments did not appear as inline 
+       fragments, like was the case for other languages.
+<li>   id 672119: PHP: defines are now shown as constants rather than enums.
+<li>   id 672662: File with .md or .markdown extension were not included
+       with the default setting of FILE_PATTERNS.
+<li>   id 672366: mailto style URLs did not work correctly in combination with
+       CREATE_SUBDIRS = YES.
+<li>   id 672472: Removed bogus &lt;/b&gt; when using @par.
+<li>   id 672475: Added "warning:" prefix to "missing \endcode" message.
+<li>   id 672479: Doxygen comments after a macro definition were not
+       removed in the source browser view.
+<li>   id 672526: Removed black line in front of custom paragraphs.
+<li>   id 672536: PHP: use keyword was not handled correctly when importing
+       classes from another namespace.
+<li>   id 672620: Switched to using "Macro" in the output instead of "Define".
+<li>   id 672656: Using ![caption](filename.png) did not work correctly for 
+       local images pointed to with IMAGE_PATH.
+<li>   id 673045: A block of ///'s inside a verbatim block inside a .md 
+       file was replaced by /** ..  */
+<li>   id 673066: Doxygen now skips scanning files in directories starting with
+       a dot (e.g. .svn).
+<li>   id 673219: Included patch by Ryan Schmidt to make the Mac versions
+       in qglobal.h match that of Apple header files.
+<li>   id 673870: Added C++11 classes when BUILTIN_STL_SUPPORT is enabled.
+<li>   id 673983: Using a backslash in a section cause 026E30F to appear in the
+       latex TOC.
+<li>   id 674563: Fortran: case sensitiveness for routines and functions 
+       did not work
+<li>   id 674583: Fortran: continuation by ampersand not placed in code output.
+<li>   id 675757: Fixed indenting issue after the end of a markdown code block
+       inside a list.
+<li>   id 676116: Use new index style for page index.
+<li>   id 676294: Fixed LaTeX error when backslash appeared in a hyperlinked
+       code fragment.
+<li>   Tag files had wrong character encoding set in the header.
+<li>   C# in/out did not appear in generics using covariance or contravariance.
+<li>   When marker of an alias appeared at the end of the alias text it was
+       not expanded.
+<li>   Aliases did not work in Markdown files.
+<li>   Fixed some problems with the navigation tree for IE9 and Opera.
+<li>   Included patch by Jake Colman to make the configgen.py work with older
+       Python version such as 2.4.3.
+<li>   Fixed problem parsing \code{.py}...\endcode 
+<li>   UML_LIMIT_NUM_FIELDS did not work correctly in all cases.
+<li>   Setting SORT_GROUP_NAMES to YES, had no effect on child groups within
+       a group.
+</ul>
+\endhtmlonly
+\subsection log_1_8_0 Release 1.8.0
+\htmlonly
+<a name="1.8.0"></a>
+<b>(release date 25-02-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li>   Auto list items can now consist of multiple paragraphs.
+       The indentation of the (first line) of a new paragraph detemines
+       to which list item the paragraph belongs or if it marks the end of the
+       list. 
+<li>   When UML_LOOK is enabled, relations shown on the edge of a graph
+       are not shown as attributes (conform to the UML notation)
+<li>   Updated the manual and improved the look.
+<li>   Made the contents in the navigation tree more consistent for
+       groups, pages with subpages, and grouped subpages.
+<li>   id 669079: Latex: made the margins of latex page layout smaller using 
+       the geometry package.
+<li>   The tool doxytag has been declared obsolete and is removed
+       (it wasn't working properly anyway). Same goes for the installdox 
+       script.
+<li>   Updated the copyright in source code and doxywizard "about" to 2012.
+<li>   id 668008: HTML version of the manual now has the treeview enabled
+       for easier navigation.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Added support for 
+       <a href="http://daringfireball.net/projects/markdown/">Markdown</a>
+       formatting.
+       This is enabled by default, but can be disabled by 
+       setting MARKDOWN_SUPPORT to NO. When enabled the following is 
+       processed differently:
+       <ul>
+       <li> tabs are converted to spaces according to TAB_SIZE.
+       <li> blockquotes are created for lines that start with one or more &gt;'s
+            (amount of &gt;'s detemine the indentation level).
+       <li> emphasis using *emphasize this* or _emphasis this_ or
+            strong emphasis using **emphasis this**. Unlike classic
+            Markdown 'some_great_indentifier' is not touched.
+       <li> code spans can be created using back-ticks, i.e. `here's an example`
+       <li> Using three or more -'s or *'s alone on a line with only spaces
+            will produce a horizontal ruler.
+       <li> A header can be created by putting a ===== (for h1) or ----- (for h2)
+            on the next line or by using 1 to 6 #'s at the start of a line
+            for h1-h6.
+       <li> auto lists item can also start with + or * instead of only -
+       <li> ordered lists can be made using 1. 2. ... labels.
+       <li> verbatim blocks can be produced by indenting 4 additional spaces.
+            Note that doxygen uses a relative indent of 4 spaces, not an
+            absolute indent like Markdown does. 
+       <li> Markdown style hyperlinks and hyperlink references.
+       <li> Simple tables can be created using the <a href="http://michelf.com/projects/php-markdown/extra/#table">Markdown Extra format</a>.
+       <li> <a href="http://freewisdom.org/projects/python-markdown/Fenced_Code_Blocks">Fenced code blocks</a> are also supported, include language selection.
+       <li> files with extension .md or .markdown are converted to related pages.
+       </ul>
+       See the section about Markdown support in the manual for details.
+<li>   It is now possible to add user defined tabs or groups of tabs to
+       the navigation menu using the layout file (see the section of the manual
+       about customizing the output for details).
+<li>   Added new command \tableofcontents (or [TOC] if you prefer Markdown)
+       which can be used in a related page with sections to produce a 
+       table of contents at the top of the HTML page (for other formats the
+       command has no effect).
+<li>   When using SVG images and INTERACTIVE_SVG is enabled, a print icon
+       will be visible along with the navigation controls to facilitate 
+       printing of the part of the graph that is visible on screen.
+<li>   Added obfuscation of email addresses for the HTML output to make
+       email harvesting more difficult.
+<li>   Added build targets for 64 bit Windows (thanks to Vladimir Simonov).
+       The installer script is also updated to install a 64 bit version of
+       doxygen on 64 bit systems and the 32 bit version on 32 bit systems.
+<li>   Added support for using the HTML tag &lt;blockquote&gt; in comments.
+<li>   Included patch by Gauthier Haderer that fixes some issues with the
+       dbus XML parser.
+<li>   Added support for Markdown style fenced code blocks.
+<li>   Added option to @code command to force parsing and syntax highlighting
+       according to a particular language.
+<li>   Section of pages are now added to the navigation index.
+<li>   Added support for cell alignment and table header shading in
+       LaTeX and RTF output. 
+<li>   Added -d filteroutput option to show the output of an input filter
+       (thanks to Albert for the patch).
+<li>   id 668010: Latex: for Windows doxygen new generates a makepdf.bat
+       file in the latex output dir to create the latex documentation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 498703: Fixed encoding issue in CHM index file for group titles.
+<li>   id 510975: FORTRAN: Keywords like .GT. recognized as symbols for 
+       cross ref.
+<li>   id 511906, 581303, 622749: \copydoc did copy the brief description 
+       into the detailed section, causing a difference between the original  
+       and the copy.
+<li>   id 555327: Using @ref for an example file, caused it to appear as
+       file::ext.
+<li>   id 567494: Fortran: Included patch for blockdata sub-programs.
+<li>   id 628417: Fortran: doxygen filter, preparsing fixed form of null
+<li>   id 662286: TCL: Inlcuded patch to fixed UTF-8 support.
+<li>   id 662289: TCL: Included patch to prevent ##### from appearing in the
+       output.
+<li>   id 646319: Using a file name with path for HTML_STYLESHEET caused the
+       path to appear in the HTML output.
+<li>   id 664826: Fixed one more problem with include guard detection.
+<li>   id 665629: Fixed parse problem when a #define appeared inside an enum.
+<li>   id 665855: Fixed problem parsing C++ template specialization of the
+       form A&lt;func(T*)&gt; such as used in boost::signal2 types.
+<li>   id 666047: A &lt;/p&gt; followed by an htmlonly..endhtmlonly section
+       caused invalid XHTML output.
+<li>   id 666085: Fixed include handling in case the include guard was 
+       documented.
+<li>   id 666124: Fixed problem loading the navigation tree in IE8 when
+       serving pages via a web server.
+<li>   id 666337: Included patch to avoid hypenation hints in front of the 
+       first captial in a word.
+<li>   id 666568: When SHOW_FILES was NO, a grouped function did not appear
+       in the javascript based search index.
+<li>   id 666909: \copybrief introduced extra spacing in the HTML output.
+<li>   id 666986: Fixed case where search engine specific code appeared
+       twice in the HTML output.
+<li>   id 666993: Fixed bug in the generated makefile causing index not
+       to be generated when using pdflatex.
+<li>   id 667020: HTML output for example pages was not well-formed.
+<li>   id 667192: Include statements in latex output where placed all on 
+       one line in the LaTeX output.
+<li>   id 667835: PHP: Fixed problem handling heredoc blocks
+<li>   id 667844: For aliases with a single argument it is no longer required 
+       to escape commas that appear inside the argument text.
+<li>   id 668037: Latex: tables can now span multiple pages by using the xtab
+       package.
+<li>   id 668218: Doxygen will ignore the common prefix shared by all
+       directories when computing a names for the directory's output files.
+       This will make the names of the output more stable.
+<li>   id 668519: Added missing newline in man page output.
+<li>   id 669071, 669072: Fixed parse problem for Q_PROPERTY when a template
+       with a namespaced type was used.
+<li>   id 669078: Included patch which changes MATHJAX_RELPATH to use the
+       content delivery network by default.
+<li>   id 669138: Fortran: Fixed problem handling multiple definition 
+       statements on one line.
+<li>   id 669406: Using -d Preprocessor now also works when QUIET is YES.
+<li>   id 669434: Latex: citations where only generated properly if the
+       bib files specified via CITE_BIB_FILES did not have a path.
+<li>   id 669758: Tcl: Same function in multiple Tcl namespaces not added.
+<li>   id 670289: Fixed case where doxygen would not correctly detect
+       &gt;&gt; as a termination of a nested template.
+<li>   id 670571: subpages generate empty pages in latex/rtf output and
+       broken links when SHORT_NAME was set to YES.
+<li>   Included VHDL fixes provided by Martin Kreis.
+<li>   The word "dummy" wrongly appeared before the first parameter type in 
+       the LaTeX output for an Objective-C method.
+<li>   Fixed several small glitches in the tree view javascript code.
+<li>   Included a patch by Vladimir Simonov to make it possible to compile
+       doxygen with Visual Studio 2005.
+<li>   Fixed some typos in the manual (thanks Albert).
+</ul>
+\endhtmlonly
+\section log_1_7 Release 1.7
+\htmlonly
+<a name="1.7.6.1"></a>
+<h1>Doxygen Release 1.7.6.1</h1>
+<h2>(release date 10-12-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   Doxygen now reports its cache usage (for the symbol and the 
+       lookup cache) at the end of a run (if QUIET=NO), and recommends 
+       settings for SYMBOL_CACHE_SIZE and LOOKUP_CACHE_SIZE for your 
+       project if either cache is too small.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Added new option LOOKUP_CACHE_SIZE to control the internal cache
+       doxygen uses to find symbols given their name and a context.
+<li>   Python: added support for @staticmethod
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   Python: scopes are now shown with . instead of ::
+<li>   id 665313: Space before @if was not preserved, causing problems
+       with inline @if .. @endif constructs.
+<li>   id 665583: Fixed XHTML validity problem when using mscgen graphs.
+<li>   id 665641: Fixed XHTML validity problem when GENERATE_TREEVIEW was
+       disabled.
+<li>   id 665720: Included patch to fix hang issue when non-empty 
+       INCLUDE_PATH was used.
+<li>   id 665778: Fixed parse issue when a comma appeared as part of an 
+       enum's value.
+</ul>
+<a name="1.7.6"></a>
+<h1>Doxygen Release 1.7.6</h1>
+<h2>(release date 03-12-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   To improve the performance of loading the navigation tree,
+       the data is now split into multiple javascript files which
+       are loaded dynamically.
+<li>   The selected member is now briefly highlighted in the HTML output
+       (when GENERATE_TREEVIEW is enabled).
+<li>   The navigation tree (GENERATE_TREEVIEW) now shows the same information
+       as the index.
+<li>   The navindex section of layout now also controls what is shown in
+       the navigation tree.
+<li>   Improved HTML output support for IE9.
+<li>   Included redesigned VHDL parser (thanks to Martin Kreis for the patch)
+<li>   When a class/structs has many (&gt;15) members of the same type, only 
+       the first 10 are shown in the UML diagram.  
+<li>   Made the output of the javascript based search engine more compact.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Update of the French translation.
+<li>   id 607305: Added support for PHP heredoc and nowdoc constructs.
+<li>   Added support for cross-referencing in case of operator-&gt; overloading.
+       This includes support for std::auto_ptr,std::smart_ptr,std::unique_ptr 
+       and std::weak_ptr when BUILTIN_STL_SUPPORT is enabled.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   Regression: some information was no longer available for a class, 
+       due to accidental deletion of a code block.
+<li>   Regression: fixed matching problem in the code parser.
+<li>   Included fixes for TCL to support commands with \ and command 
+       definitions preceded by whitespace (thanks to Rene Zaumseil)
+<li>   When using "static int a,b" variable "b" incorrectly appeared in the 
+       output even though EXTRACT_STATIC was set to NO.
+<li>   id 521717: .spec file was only updated after running ./configure
+<li>   id 656642: Fixed potential crash when using doxygen for large projects.
+<li>   id 656878: Fixed problem running bibtex with \cite command on Windows.
+<li>   id 657152: Fixed constant expression evaluation error in the 
+       preprocessor.
+<li>   id 652277: Removed bogus ' from the man page output.
+<li>   id 659244: Quotes in the brief description could appear unescaped in 
+       the tooltip.
+<li>   id 641336: #includes with ../ were not always processed correctly.
+<li>   Fixed potential crash when INLINE_GROUPED_CLASSES and INLINE_SIMPLE_STRUCTS 
+       are set to YES.
+<li>   id 658896: Fixed preprocessor problem handling #defines whose value was
+       a constant string containing ///.
+<li>   id 660332: Using a \ at the end of a comment line could cause 
+       parsing problems for C# as the \ was treated as a line continuation.
+<li>   id 658033: Fixed parser problem when using multiple member groups 
+       inside a macro definition.
+<li>   id 503239: Fixed several issues related to \cite handling.
+<li>   id 658587: Improved the way macro definitions are collected.
+<li>   id 660501: Fixed LaTeX error when using \name with a description.
+<li>   id 661292: The documentation for \mainpage incorrectly mentioned that
+       one has to use \ref main in case GENERATE_TREEVIEW was set to YES, which
+       is no longer the case.
+<li>   id 659096: Nested aliases definitions where not always expanded properly
+       (regression w.r.t version 1.7.4)
+<li>   id 658038: Fixed preprocessor problem where the @ character inside a
+       macro definition could appear as @@.
+<li>   id 658646: Fixed problem running mscgen for LaTeX and RTF output.
+<li>   id 661723: Using ClassName%'s did not work anymore, and also
+       ClassName's wasn't autolinked.
+<li>   id 662044: Fixed potential printing of null pointer when using
+       a version filter that returned blanks.
+<li>   id 625518: Fortran: first problem where subroutine using results 
+       variable appeared as a function.
+<li>   id 654153: If an URL appeared at the end of a sentence, the period
+       was included in the URL.
+<li>   id 656560: Fortran: Added support for the Double Complex type.
+<li>   id 663640: Included workaround for Solaris CC issue in index.cpp
+<li>   id 662190: Included patch to fix some TCL issues and add the TCL_SUBST 
+       configuration option.
+<li>   id 661672: Fortran: Added support for ALIAS expansion in comment blocks.
+<li>   id 663101: Fixed case where a macro was not corrected found in the header
+       file when it could only be found via INCLUDE_PATH.
+<li>   id 664718: using multiple &lt;para&gt;'s inside a &lt;summary&gt; block caused 
+       text to be joined without spacing.
+<li>   id 656556: Java enums are now parsed as classes. 
+<li>   id 664826: Fixed problem in the preprocessor regarding the handling 
+       of include guards.
+<li>   id 664893: Fixed typo in the docs for EXCLUDE_SYMLINKS.
+<li>   id 665466: Using a relative URL with &lt;a href&gt; did not work when
+       CREATE_SUBDIRS was enabled.
+<li>   id 665464: Using an absolute URL with &lt;img&gt; did not work when
+       CREATE_SUBDIRS was enabled.
+</ul>
+<a name="1.7.5.1"></a>
+<h1>Doxygen Release 1.7.5.1</h1>
+<h2>(release date 21-08-2011)</h2>
+<h3>New features</h3>
+<ul>
+<li>Update of the French translation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>id 521717: .spec file was only updated after running ./configure
+<li>id 656642: Fixed potential crash when using doxygen for large projects.
+<li>id 656878: Fixed problem running bibtex with \cite command on Windows.
+<li>Regression: some information was no longer available for a class, 
+    due to accidental deletion of a code block.
+<li>Regression: fixed matching problem in the code parser.
+</ul>
+<a name="1.7.5"></a>
+<h1>Doxygen Release 1.7.5</h1>
+<h2>(release date 14-08-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   id 641904: Function in the call graphs are now shown based on first 
+       appearance rather then alphabetical order.
+<li>   id 616213: When customizing the HTML header $title now only generates
+       the title excluding the project name (which can still be added using
+       $projectname)
+<li>   Improved the look of the class index: all items now have equal spacing.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   New option INTERACTIVE_SVG which when set to YES in combination
+       with DOT_IMAGE_FORMAT=svg will make doxygen
+       generate interactive SVG diagrams that support zooming and 
+       panning via the mouse (only for large graphs). 
+<li>   Added support for the Tcl programming language 
+       (thanks to Rene Zaumseil and Samuel Bentley for the patch).
+<li>   Added @copyright command.
+<li>   added option MATHJAX_EXTENSIONS to provide additional extensions for
+       MathJax (thanks to David Munger for the patch).
+<li>   added option INLINE_SIMPLE_STRUCTS which when enabled shows the fields
+       of simple classes and structs (with only public data fields) as a table
+       and inline in context (file/group/namespace/class) provided this context 
+       is documented.
+<li>   When using the server based search engine (SEARCHENGINE=YES and
+       SERVER_BASED_SEARCH=YES) doxygen now advertises a opensearch provider
+       for your project, that allows integrating the search directly in
+       the search field of the browser (thanks to Phil Lello for the patch).
+<li>   id 503239: Added new option CITE_BIB_FILES and LATEX_BIB_STYLE and a new 
+       command \cite, allowing you to make references to literature (as defined 
+       in one or more .bib files). This also works for output formats other 
+       than LaTeX. The tool bibtex is required for this to work though. Thanks
+       to David Munger for the initial patch upon which this feature is based.
+<li>   PHP namespaces are now shown as A\B in the output.
+<li>   Added new \snippet command that can be used to include marked 
+       sections from a source file. See 
+       http://www.doxygen.org/commands.html#cmdsnippet for more info.
+<li>   Added translation support for Armenian, thank to Armen Tangamyan.
+       and included translation updates for a number of languages.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   Fixed a couple of potential race conditions found by Helgrind while 
+       running dot from multiple threads.
+<li>   Graphs did not appear when enabling both INTERACTIVE_SVG and 
+       HTML_DYNAMIC_SECTIONS.
+<li>   PDFs generated by newer versions of dot (i.e. 2.28) did not appear 
+       in the output, because doxygen failed to extract the bounding box.
+<li>   Improved call graph and cross-reference support for Python.
+<li>   INTERACTIVE_SVG now also works with IE9 if the html file extension is
+       set to xhtml.
+<li>   Fixed several cases where the LaTeX output could produce too long
+       lines.
+<li>   id 318061: Putting two functions in the same group that only
+       different in the number of template arguments did not work.
+<li>   id 437346,564614: Fixed proper encoding of multibyte output in RTF
+       depending on the code page (thanks to Hirao for the patch).
+<li>   id 521717: The .spec file in the source distribution did not get
+       updated to the latest version.
+<li>   id 521861: Fortran: Continuation character was not recognised in 
+       fixed format code.
+<li>   id 522496: Fortran: @param checking was not case insensitive.
+<li>   id 560105: Fixed problem combining @cond with preprocessor directives.
+<li>   id 577359: Using "struct A : C, D {};" showed a private inheritance
+       relation for D.
+<li>   id 584194: Some links to typedef where pointing to the typedef'ed
+       class instead. 
+<li>   id 619560: Anonymous enums caused an invalid entry in the LaTeX TOC.
+<li>   id 622935: Deriving from an unknown template class could cause the
+       class to appear with a -g postfix in C# 
+<li>   id 625731: Fortran: Fixed issue handling private subroutines.
+<li>   id 632946: LaTeX now starts a new page when starting a new module.
+<li>   id 634837: Fortran: Prefix of function was overwritten and the word 
+       'function' not specified.
+<li>   id 637099: Fortran: Included fix for using collaboration diagrams.
+<li>   id 642468: Added PHP support for namespace with curly braces.
+<li>   id 643219: Fortran: Improved handling of semicolons.
+<li>   id 643617: Fortran: Added support for "type is".
+<li>   id 643944: A macro added to a group appeared twice in the group 
+       documentation if was also made related to a class using \relates.
+<li>   id 646321: Fixed problem were the search box was missing when using
+       a custom HTML header.
+<li>   id 646447: Fixed unterminated img tab in the XHTML output.
+<li>   id 646463: Fixed problem handling MSCFILE_DIRS option with multiple
+       paths.
+<li>   id 646533: Included patch to sort overloaded members by appearance in
+       the code.
+<li>   id 646747,646879: Putting an autolist inside a @todo, @bug or similar
+       section did not work anymore.
+<li>   id 646922: Referring to a logo with a relative path, caused 
+       a broken image target when using a custom HTML header.
+<li>   id 647499: Fixed HTML rendering problem on older browsers when 
+       GENERATE_TREEVIEW was enabled.
+<li>   id 647768: Linking to a section on the main page could result in a
+       broken link when GENERATE_TREEVIEW was enabled.
+<li>   id 647889: Fixed invalid warning when using @deparated method with
+       default values for parameters.
+<li>   id 648302: A function made related using @relates could end up in
+       the wrong class if there was already a method with a matching
+       argument list in that other class.
+<li>   id 649103: Return types containing multiple *'s ended up in the
+       output with only one * in some cases.
+<li>   id 650397: Fixed problem with alias substitution if the alias had
+       more then 9 parameters.
+<li>   id 650430: For nested anonymous structs @xx markers could appear in
+       the output.
+<li>   id 650463: Added compilation support for MacOSX 10.7 (aka Lion).
+<li>   id 650958: Fixed issue printing HTML pages when the
+       GENERATE_TREEVIEW option is set to YES.
+<li>   id 651611: Fixed broken link to an undocumented namespace.
+<li>   id 652138: Fixed potential crash while parsing Fortran code.
+<li>   id 652188: Fixed problem parsing comment which included 
+       an unterminated alias within quotes (i.e. "\word{")
+<li>   id 652277: Lines starting with . did not appear in the man page output.
+<li>   id 652389: Fortran: Fixed text is detailed function section.
+<li>   id 652396: When enabling INTERACTIVE_SVG wide graphs are now also
+       fit to the screen width.
+<li>   id 652695: Added missing space between parameter type and name in 
+       the RTF output.
+<li>   id 652741: Use background-color instead of background in doxygen.css.
+<li>   id 653344: Fixed potential segfault while creating man pages.
+<li>   id 653666: Fortran: add a space to "type" in argument list.
+<li>   id 653801: Fixed problem handling include guard when multiple 
+       blocks guarded by the same guard were used in a header file. 
+<li>   id 653963: Fortran: Unified handling of @params at various places.
+<li>   id 654108: make clean failed on a system without qmake.
+<li>   id 654244: Fixed compile issue for HP Itanium.
+<li>   id 654779: Fortran: Interface was seen as a class with constructor / 
+       destructor.
+<li>   id 654869: Using the word "property" as a type in C caused wrong 
+       results.
+<li>   id 654866: Fortran: fixed issue parsing function type that looked like
+       C function pointers.
+<li>   id 655178: Fortran: Fixed parse issue when using variable name 
+                  starting with the word interface.
+<li>   id 655591: Improved error handling for empty html style list.
+<li>   id 655935: Fixed case where %s could end up in a warning messge.
+<li>   id 656005: Methods of Objective-C categories defined in an .m file are
+       now marked as private.
+</ul>
+<a name="1.7.4"></a>
+<h1>Doxygen Release 1.7.4</h1>
+<h2>(release date 28-03-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   doxygen -w html now reads the default Doxyfile even if not specified
+       explicitly
+<li>   doxygen -w html now produces a template header and footer that can
+       be used independent of the configuration options used.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   New option INLINE_GROUPED_CLASSES that when enabled shows grouped
+       classes inside the group documentation, instead of on a separate page.
+<li>   Included updates for the Italian and Russian translation.
+<li>   id 640875: Added option HTML_EXTRA_FILES which makes it easier to copy
+       additional files to the HTML output and also add them to the index files.
+<li>   id 642579: Included patch that adds new LATEX_FOOTER option to 
+       customize the end of refman.tex in the LaTeX output.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 140259: Jumping to a @section did not work in the RTF output.
+<li>   id 521854: Fortran: included patch for supporting multiple argument 
+                  declarations on one line.
+<li>   id 521861: Fixed problem with line continuation in Fortran.
+<li>   id 566921: %A::B now prevents a link for A::B, instead of only for A
+                  and generating a warning that ::B cannot be linked.
+<li>   id 598481: Fortran: Added support for extends keyword.
+<li>   id 618374: Added support for inlining code in the VHDL output.
+<li>   id 625519: Fortran: argument name starting with a reserved word was
+                  not handled properly.
+<li>   id 634415: Fixed problem parsing an array of character literals.
+<li>   id 635537: Links to file members were not made when found in tag files.
+<li>   id 638637: The Doxyfile documentation contained some very long lines.
+<li>   id 638655: Double quote in page or group title broke treeview.
+<li>   id 638733: Improved documentation for DOT_IMAGE_FORMAT option.
+<li>   id 638829: Added documentation to warn for consequences of using
+                  HTML_HEADER.
+<li>   id 638856: Fixed problem autolinking to struct field using #S::a
+<li>   id 639272: using @dot...@endot produced an image referenced with
+                  absolute path.
+<li>   id 639521: \mscfile did not work properly for LaTeX output.
+<li>   id 639716: Fixed problem where #include's could cause phantom __pad__
+                  members to appear in the output (appeared on Windows only).
+<li>   id 640259: Options PROJECT_LOGO and PROJECT_BRIEF were missing
+                  from the manual.
+<li>   id 640463: Fixed problem parsing PHP "use" statement when the argument
+                  did not have a namespace scope.
+<li>   id 640588: Included fix for proper splitting of multiple arguments
+                  given to the QHP_CUST_FILTER_ATTRS option.
+<li>   id 640646: Long error messages could cause memory corruption.
+<li>   id 640742: XML: switched indent option to no in the combine.xslt script.
+<li>   id 640754: Comment with XML style list of type table was not rendered 
+                  properly.
+<li>   id 640822: Added support for overloading of C# indexer operators.
+<li>   id 640828: Internal section marked with @internal was not shown as
+                  such anymore in the XML output.
+<li>   id 640847: PHP: Fixed parse problem referring to class in global  
+                  namespace.
+<li>   id 640924: Included patch by Haffmans to make the custom header and
+                  footer independent of the chosen config options.
+<li>   id 640927: Included fix to prevent a warning in the server side PHP
+                  search script.
+<li>   id 641026: Included patch to fix broken hyperlink to page entry 
+                  in xreflists.
+<li>   id 641188: Header of \page was wrong in Man page output.
+<li>   id 641336: #include's to other directories were not always linked.
+<li>   id 641673: Using "use Foo\Foo;" in PHP could cause doxygen to hang.
+<li>   id 641814: In some cases the HTML output could contain an extra &lt;/p&gt;.
+<li>   id 642030: Tooltips with HTML entities could be wrongly truncated.
+<li>   id 642475: Include graphs could be incomplete.
+<li>   id 643056: Fixed problem with macro expansion.
+<li>   id 643279: Fixed potential crash when generating a warning for
+                  void f(int %x) style parameter, which is valid in C++/CLI.
+<li>   id 643280: Included patch to enabled LargeAddressAware for Windows 
+                  builds.
+<li>   id 643276: Fixed cases where FILE_VERSION_FILTER was called for 
+                  dummy files with name "generated".
+<li>   id 643655: Fixed argument matching issue when one of match candidates
+                  was a typedef of a method pointer.
+<li>   id 645754: mscfile tag was closed with dotfile in the XML output.
+<li>   doxygen -w html now ignores the values for HTML_HEADER and HTML_FOOTER
+       found in the config file.
+<li>   Importing a group via a tag file could overrule a local group with 
+       the same name even when EXTERNAL_GROUPS was disabled.
+</ul>
+<a name="1.7.3"></a>
+<h1>Doxygen Release 1.7.3</h1>
+<h2>(release date 03-01-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   Added a header for each HTML page above the navigation menu, 
+       showing the project name and logo and a short descriptin (all optional).
+       Disabling the index (with DISABLE_INDEX) still shows the new header
+       (you can still customize this using HTML_HEADER). This now works
+       nicely in combination with GENERATE_TREEVIEW = YES and/or
+       SEARCH_ENGINE = YES.
+<li>   Redesigned the treeview feature. Instead of using frames, the
+       navigation tree is now loaded on each page dynamically. This allows
+       bookmarking a page and always keeps the top menu visible. Also the
+       current item is automatically highlighted in the tree.
+       Also updated the icons in the treeview to match the overall look'n'feel.
+       Note: if you now use a custom HTML header, please update it using
+       doxygen with the -w and the edit the default header.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   id 499544: Added SVG support to doxygen's dot output 
+       (setting DOT_IMAGE_FORMAT to svg now works as expected)
+<li>   Added control to the wizard to configure the color of the output
+       visually.
+<li>   Added options to specify project synopsis and select a 
+       project logo to the wizard.
+<li>   Added option PROJECT_LOGO which can be used to specify an image
+       which will be shown in the header of each HTML page along with
+       the project name (PROJECT_NAME option).
+<li>   Added option PROJECT_BRIEF which can be used to specify a brief
+       description which will be shown in the header of each HTML page
+       just below the project name.
+<li>   Added new option FILTER_SOURCE_PATTERNS which can be used 
+       in combination with FILTER_SOURCE_FILES to filter files used for 
+       the source browser based on file extension, which can overwrite 
+       the filter set by FILTER_PATTERNS and/or INPUT_FILTER.
+<li>   Added new option STRICT_PROTO_MATCHING which is disabled by default,
+       and makes the parameter matching to be less strict, resulting in 
+       fewer "No matching class member found" warnings.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 306076: code blocks with using directives did not get hyperlinked.
+<li>   id 313527: enum values with bitfields did not get parsed correctly.
+<li>   id 565715,630582: Included a patch that fixes a couple of Fortran issues
+       (thanks to Albert).
+<li>   id 615507: Fixed problem handling @cond..@endcond in Fortran code.
+<li>   id 619040: Scope was missing in Tokens.xml when using docsets.
+<li>   id 625517,523156: Applied patch tp avoid stripping prefixes for Fortran 
+       subroutines.
+<li>   id 626476: allow label before end statement in Fortran
+<li>   id 630901: &lt;/see&gt; was not handled properly in comment block.
+<li>   id 632311: Fixed potential crash for empty verbatim section.
+<li>   id 632426: closing brace of a function with one parameter has wrong
+       color in HTML.
+<li>   id 632543: Added support for Fortan TYPEs with languge bindings.
+       (thanks to a patch by Daniel Franke)
+<li>   id 632879: An explicit link request such as #blah did not longer produce
+       a warning if no symbol named blah was found.
+<li>   id 633891: warnings in "inbody" documentation were shown with "unknown"
+       file name.
+<li>   id 634116: Titles customized via the layout file did not appear in
+       the title page and navigation tree, only in the top menu.
+<li>   id 634600: Fixed problem resolving typedef.
+<li>   id 634775: Fixed a problem were // inside a code block got removed.
+<li>   id 634857: Added support for escaping :: by using \:: (or @::)
+<li>   id 634962: #include with relative path to parent dir did not get
+       hyperlinked.
+<li>   id 634986: Removed double definition of docParamName in compound.xsd.
+<li>   id 635198: C++/CLI Finalizer methods were not parsed properly.
+<li>   id 636475: Objective-C method names can now be used as the 
+       the first argument of \ref.
+<li>   id 636588: Fixed a couple of problems in the compound.xsd schema used
+       for XML output.
+<li>   id 636598: DISTRIBUTE_GROUP_DOC now works again for enum values.
+<li>   id 636947: Improved matching of typedef'ed array parameter and non 
+       typedef'ed array parameter.
+<li>   id 637610: Added a number of fixed for Fortran interfaces.
+<li>   id 637712: Handle files with the .for extension as Fortran.
+<li>   id 637987: Fixed error in the grouping documentation.
+<li>   Fixed line number sync problem when using Objective-C #import 
+       statements.
+<li>   Fixed problem handling /** @cond */ in the preprocessor.
+<li>   Member groups could get reordered in the output.
+</ul>
+<a name="1.7.2"></a>
+<h1>Doxygen Release 1.7.2</h1>
+<h2>(release date 09-10-2010)</h2>
+
+<h3>Changes</h3>
+<ul>
+<li>   Changed the default font of the LaTeX output to helvetica.
+<li>   Changed the way parameters and return values are represented in the
+       LaTeX and RTF output. They are now listed using tables.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   added support for Apple's block object extension for C/Obj-C/C++.
+<li>   added support for detecting Python constructors and destructors.
+<li>   id 624575: Added \endinternal command that can be used to force
+       the end of a section started with \internal.
+<li>   id 552605: Added parsing support for PHP 5.3+ style namespaces.
+<li>   id 582532: added \mscfile command which can be used to insert a 
+       message sequence chart given a .msc file. 
+       Also added a new config option MSCFILE_DIRS to provide directories
+       were msc files are searched (Thanks to Adrien for the patch).
+<li>   Added support for type specifiers for documenting PHP parameters,
+       format: "@param type $paramname docs"
+<li>   Added support for rendering formulas in the HTML output 
+       using MathJax instead of using prerendered bitmaps. 
+       For this purpose the options USE_MATHJAX and MATHJAX_RELPATH were
+       added.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 306076: Fixed case where using of a namespace did not work inside
+       an example.
+<li>   id 336053,487871: /// were not stripped from formulas and \dot..\enddot
+<li>   id 563698: dropped support for a4wide paper format for LaTeX, since
+       it is on the LaTeX taboo list.
+<li>   id 571014: Behaviour of CLASS_DIAGRAM=NO in combination with
+       HAVE_DOT=YES, was not propely documented.
+<li>   id 576291: Python comments for next class or method could end up in
+       code of a method/class when enabling INLINE_SOURCES.
+<li>   id 611174: Fixed problem handling nestes classes in Python.
+<li>   id 621733: removed unexpected warnings about undocumented return types
+<li>   id 622737: Undefined function macros could cause constant expression
+       errors.
+<li>   id 622780: updated copyright statement in PDF docs.
+<li>   id 622935: C# generics appeared with -g extension in the output in 
+       some situations.
+<li>   id 623023: Fixed parsing problem for "int &amp;foo1(),&amp;foo2();"
+<li>   id 623052: Link to destructor was wrong in the member index.
+<li>   id 623424: Fixed problem where struct description gets added to variable
+       of struct type.
+<li>   id 623673: Anchors were missing in the Qhp index for members.
+<li>   id 623733: Fixed potential crash due to uninitialized line number.
+<li>   id 623765: closed.png was wrongly linked when GENERATE_SUBDIRS and
+       HTML_DYNAMIC_SECTIONS were enabled.
+<li>   id 624014: Function macro was not handled properly when there was
+       a line continuation directly after the name.
+<li>   id 624095: Linking to a class via a tag file did not work if the class
+       was in an undocumented namespace.
+<li>   id 624104: Fixed a couple of typos in lodepng.h
+<li>   id 624323: Graph legend image was missing form the index files.
+<li>   Fixed a number of typos in the config file documentation 
+       (thanks to Jens Schweikhardt)
+<li>   id 624514: Some enums were not cross-referenced.
+<li>   id 624829: Missing \endcond could cause preprocessor issues in 
+       next file(s) to be parsed.
+<li>   id 625070: a function definition in a namespace, documented in the
+       header did not always get cross-referenced.
+<li>   id 625296: Removed superfluous &lt;td&gt;&lt;/td&gt; from parameter list in
+       HTML output.
+<li>   id 625317: Unterminated comment could crash doxygen.
+<li>   id 625531: Inherited documentation was only included for the
+       last derived class in case of multiple inheritance.
+<li>   id 625578: In the HTML output &lt;/div&gt; was missing for built-in
+       class diagrams.
+<li>   id 625555: References in example files with underscores were wrong.
+<li>   id 625982: When using japanese characters mixed with ascii characters
+       doxygen incorrected ended the brief description with a dot.
+<li>   id 625952: setting MULTILINE_CPP_IS_BRIEF to YES, cause /// to appear
+       in the output.
+<li>   id 626033,567774: EXTENSION_MAPPING did not work if a the mapped 
+       language was handled by the same parser as used for the original  
+       extension.
+<li>   id 626175: Fixed bracket bug in LaTeX fancy headers.
+<li>   id 626508: Allow hyphen in key argument of \xrefitem.
+<li>   id 626647: \copydoc did not work for array type arguments (e.g. int[]).
+<li>   Use \dotfile did not produce the correct map file, so URLs in dot
+       files did not work.
+<li>   id 627371: #define's in files only found via INCLUDE_PATH were not
+       correctly handled.
+<li>   id 628065: auto brief description ending with .) cause the ) to
+       end up in the detailed part.
+<li>   id 628242: Fixed encoding issue for the Spanish translation.
+<li>   id 628678: Fixed segmentation fault in case of very long errors.
+<li>   id 629040: Fixed type in search page of the documentation.
+<li>   id 629182: Fixed problem detecting include guard.
+<li>   id 629270: Made file extension to parser mapping case insensitive.
+<li>   id 629485: Latex makefile clean target used rm command also for Windows.
+<li>   id 629942: the EXCLUDE_SYMBOLS option was missing form the online docs.
+<li>   id 631094: \htmlinclude and \verbinclude ended the brief description.
+<li>   id 631380: Inconsistent behaviour when a brief description was given 
+       following by a detailed comment block with JAVADOC_AUTOBRIEF enabled.
+<li>   Fixed a number of typos in the documentation 
+       (thanks to Albert van der Meer)
+<li>   Fixed potential hangup when scanning directories defined as 
+       symlinks to absolute paths.
+<li>   HTML attributes other than src were not copied for the &lt;img&gt; tag.
+</ul>
+<a name="1.7.1"></a>
+<h1>Doxygen Release 1.7.1</h1>
+<h2>(release date 25-06-2010)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   id 621695: Made warning and error messages appear with lower case 
+       "warning:" and "error:" prefix to make it easier to use the messages 
+       from Visual Studio.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   id 621908: Added new config option FORMULA_TRANSPARENT which allows
+       selecting between transparent (YES) or non-transparent (NO) PNGs for
+       formulas in the HTML output.
+<li>   Update for Turkish translation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 533821: Inheritance relation for a C# class deriving from
+       a generic class was not handled correctly.
+<li>   id 554638: Changing DOT_IMAGE_FORMAT did not cause the graphs to be
+       regenerated.
+<li>   id 576533: A field of the form "enum E *p" was ignore.
+<li>   id 597016: Hide scope name was not working properly for todo items
+       inside class members, where the class was inside a namespace.
+<li>   id 617761: In dot graphs now also @ref worked (previously only \ref was
+       supported).
+<li>   id 621653: Fixed error when compiling doxygen for Solaris 8.
+<li>   id 621733: Removed bogus warning about undocument return type for 
+       define when WARN_NO_PARAMDOC was enabled.
+<li>   id 621780: Fixed parsing support for a function that returns a 
+       struct definition.
+<li>   id 621785: Doxygen could hang when using \copydoc in a function with
+       \param.
+<li>   id 621805: Using //!&lt; after a #define no longer worked.
+<li>   id 621854,622219,622593: html help compiler (and also the Qt 
+       help compiler) was called before all dot images were generated.
+<li>   id 621984: Using a auto-list in combination with \subpage cause the
+       items to be inlined.
+<li>   id 622018: Fixed problem parsing a @param command where the
+       text part started with a formula.
+<li>   id 622019: Added some instructions how to document Fortran code.
+<li>   id 622041: Using \var multiple times in a comment block did not
+       work properly.
+<li>   id 622413: Tooltips could get wrongly truncated when multi-byte
+       UTF-8 characters were used.
+<li>   id 622471: Argument matching failed for typedef in another namespace.
+<li>   Fixed crash situation while handling commands inside a @ref section.
+<li>   Treeview icons were missing in the HTML output when setting
+       GENERATE_TREEVIEW to NO and USE_INLINE_TREES to YES.
+</ul>
+
+<a name="1.7.0"></a>
+<h1>Doxygen Release 1.7.0</h1>
+<h2>(release date 15-06-2010)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   Changed the look of the HTML output.
+<li>   Made several internal changes that should have a positive effect on the 
+       overall performance.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   The color of the HTML output can now easily be adjusted using three new 
+       options: HTML_COLORSTYLE_HUE, HTML_COLORSTYLE_SAT, 
+       and HTML_COLORSTYLE_GAMMA, which control respectively the hue, 
+       saturation, and gamma of all elements in the HTML output.
+<li>   Moved dot invocations to the end of a doxygen run. Doxygen will now
+       run multiple instances of dot in parallel (for better CPU utilisation
+       on multi-core systems). The new config option DOT_NUM_THREADS 
+       determines the number of threads used (were 0 is auto-detect).
+<li>   Added option EXT_LINKS_IN_WINDOW which controls whether or not
+       links to symbols imported via tag files will be opened in a new window.
+<li>   Included various language updates (thanks to Petr for coordinating).
+<li>   Included patch by Stefan Oberhumer that allows customizing the
+       way parameter lists are shown in the LaTeX output.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 306076: source browser could miss links for used namespaces.
+<li>   id 361476,620924: \if and \endif did not work properly inside auto lists.
+<li>   id 557164: No warning for missing return type documentation even though
+       WARN_NO_PARAMDOC was set to YES.
+<li>   id 577005: Handling of nesting \defgroup's was not always working
+       properly.
+<li>   id 578739: &oslash; was not translated correctly in the LaTeX output.
+<li>   id 583526: Use relative paths for mscgen diagrams to avoid errors in the
+       LaTeX output.
+<li>   id 592991: The "Use current settings at startup" feature of Doxywizard
+       was broken.
+<li>   id 593679: Links in the search results were broken if they pointed to
+       symbols imported via tag files using an absolute path or URL.
+<li>   id 593760,615682: Fixed man page output problem when using @par.
+<li>   id 594021: A C comment before a #endif caused the preprocessor 
+       statement to be ignored.
+<li>   id 597013: When HIDE_SCOPE_NAMES was enabled also the scope for
+       nested classes was stripped. Now only the namespace scope will be 
+       stripped as before.
+<li>   id 600829: Autolinks to namespace members did not work if
+       an explicit # or :: was used.
+<li>   id 602732: Slashes inside strings in java annotations were not handled
+       properly.
+<li>   id 606335: Fixed the "show html output" button in doxywizard 
+       for Windows when IE was set as the default browser.
+<li>   id 608292: Formatting was lost for section copied with \copydoc.
+<li>   id 608359: Fixed C++ parse issue for "class : public base {} var;" 
+       construct.
+<li>   id 611056: Generated HTML footer file did not have UTF-8 encoding and
+       the relative path marker needed when using CREATE_SUBDIRS = YES.
+<li>   id 611193: Fixed parsing problem with try-functions having multiple
+       catch handlers.
+<li>   id 611642: Specialized private template member function appeared as 
+       public.
+<li>   id 611888: Include dependency graphs were sometimes wrong.
+<li>   id 612170: Some lines in the generated Doxyfile where too long.
+<li>   id 612275: Fixed auto-link problem for certain URLs.
+<li>   id 612292: Improved handling of ellipsis inside brief description when
+       JAVADOC_AUTOBRIEF is enabled.
+<li>   id 612364: Accessibility of macros was not handled properly in all cases.
+<li>   id 612310: Enabling REFERENCED_BY_RELATION without SOURCE_BROWSER could
+       result in broken links.
+<li>   id 612458: Fixed problem handling @copydoc for function operators.
+<li>   id 612609: A raw C# string constant could end up in the next string.
+<li>   id 612969: subpages were not part of the XML output.
+<li>   id 613024: First list item in the paragraph after a @todo
+       item was not parsed properly.
+<li>   id 614204: Generated man page links were having a heading underscore.
+<li>   id 614443: Made include guard detect a bit more strict to avoid false
+       positives.
+<li>   id 614447: The labels of CVS tags were missing a colon.
+<li>   id 614438: Fixed problem parsing Q_PROPERTY with template type and
+       spaces.
+<li>   id 615165: Made the date string in the HTML footer translatable, 
+       along with some other sentences on the directory pages.
+<li>   id 612858: Inline attribute was shown also for non-inline template 
+       members.
+<li>   id 615583: Fixed problem handling @copy for operators with 
+       const qualifier.
+<li>   id 615755: Fixed problem handling '"' inside comments.
+<li>   id 615957: Made the LaTeX output a bit less spatious using \input.
+<li>   id 615695: Fixed preprocessor issue where a macro that was redefined
+       was not resolved.
+<li>   Fixed character encoding issue on the search results page.
+<li>   id 615670: C# namespaces are now extracted also without comment block
+       (the language spec does not allow XML documentation).
+<li>   id 616209: included patch that fixes some typos in the code.
+<li>   id 616344,610604: Pages with an underscore in the label generated a 
+       file name containing two underscores.
+<li>   id 616387: text of the form something.symbol got autolinked when
+       symbol had a global scope.
+<li>   id 616761: Call graph could be wrong when local variable has the same
+       name as a global function.
+<li>   id 616947: Added documentation patch on how to create URL links with 
+       custom text.
+<li>   id 616988: Doxywizard now removes non-existant files from the 
+       recent list and has an option to clear the list completely.
+<li>   id 617051: A macro defined via PREDEFINED did not always overrule a
+       macro definition in the code.
+<li>   id 617278: Enabling call graphs produced invalid XHTML output.
+<li>   id 617871: Non ascii characters in file or directory names 
+       caused problems on Windows.
+<li>   id 618079: An ALIAS with parameters spanning multiple lines
+       caused problems with /// style comments. 
+<li>   id 618632: Included patch to prevent image overflowing the page in 
+       the LaTeX output.
+<li>   id 619728: Fixed problem using EXTENSION_MAPPING for C# (thanks to
+       Vsevolod Kukol for the patch).
+<li>   id 619978: Links to external files could be wrong when CREATE_SUBDIR
+       was enabled.
+<li>   id 620229: /* characters in a print broke parsing within an conditional
+       section.
+<li>   id 620926: \if and \endif did not work properly inside HTML tables.
+<li>   Using @include in combination with LATEX_SOURCE_CODE caused wrong
+       output.
+<li>   Included a patch by Guido Tack which adds two new options
+       for docsets (DOCSET_PUBLISHER_ID and DOCSET_PUBLISHER_NAME) and 
+       fixes an issue with linking to docset members.
+<li>   Included patch by Stefan Oberhumer to support escaped {}'s in alias
+       definition and parameters.
+
+</ul>
+\endhtmlonly
+\section log_1_6 Release 1.6
+\htmlonly
+<a name="1.6.3"></a>
+<h1>Doxygen Release 1.6.3</h1>
+<h2>(release date 21-02-2010)</h2>
+<h3>New features</h3>
+<ul>
+<li>   id 608480: Using \dir without argument will create directory 
+                  documentation for the directory in which the \dir command 
+                  was found.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 590161: perlmod output was wrong when using paragraph commands.
+<li>   id 600525: Included patch for VHDL.
+<li>   id 605698: Replaced size attribute of hr tag by class attribute in the
+                  HTML output.
+<li>   id 606030,606192,607563: 
+                  Using \dot produced "Error opening map file" or 
+                  could even crash doxygen.
+<li>   id 606084: Loading a new config file in doxywizard did not reset all
+                  values of a previously loaded config file.
+<li>   id 606104: Grouped members with todo-like items were shown with 
+                  "GlobalScope" prefix.
+<li>   id 606156: Fixed RTF rendering problem with group index.
+<li>   id 606206,610133: Added missing line break in LaTeX output.
+<li>   id 606330, 608056: The title of pages whose label had an underscore
+                  was not shown
+<li>   id 606717: Include guard not starting with #ifndef SOME_GUARD_H were not
+                  recognised as such.
+<li>   id 606718: Setting SEARCHENGINE to YES and GENERATE_HTML to NO caused
+                  error that search results directory could not be created.
+<li>   id 606772,608493: typedef'ed enums or struct with the same as the 
+                  typedef did no longer show up.
+<li>   id 607088,607946: Related pages (manual and automatic like the todo page) 
+                  caused broken links when SHORT_NAMES was enabled.
+<li>   id 607432,608002: Automatically generated related pages (like the 
+                  todo page) caused broken links when CREATE_SUBDIR was enabled.
+<li>   id 607736: comments after #if could cause next function call not to be
+                  cross-referenced.
+<li>   id 607743: \internal inside a conditional section caused warning.
+<li>   id 608016: Using \internal inside a \section did not end at the
+       next \section as documented.
+<li>   id 608018: \internal command produced message with .: in 
+       the LaTeX output.
+<li>   id 608072: HTML Tables with custom attributes were not rendered 
+                  properly.
+<li>   id 608227: Man pages with underscore got double underscore in the name.
+<li>   id 608590: Buffer overflow when using non-ascii characters as class
+                  name.
+<li>   id 608921: Macro definition had effect even if the definition was not
+                  actually included.
+<li>   id 609504: config.h and config.l where missing from the SVN repository.
+<li>   id 609624: Todo items were merged for overloaded functions.
+<li>   id 609709: C# enum values with @todo items were missing from the todo
+                  list.
+<li>   id 610437: Removed bogus warning when using &lt;br/&gt; tag.
+<li>   Fixed parsing problem for function pointer type starting with
+       "typedef enum".
+<li>   Preprocessor did not take EXCLUDE_PATTERNS into account, which 
+       could cause parse issues when importing a .tlb file.
+</ul>
+
+
+<a name="1.6.2"></a>
+<h1>Doxygen Release 1.6.2</h1>
+<h2>(release date 30-12-2009)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   id 594787: Autolinking to all-lower case words has been disabled,
+                  in accordance with the documentation.
+<li>   id 604543: Doxygen now allows any extension supported by dot via the
+       DOT_IMAGE_FORMAT option.
+<li>   Switched back to using PNGs for built-in diagrams and formulas using
+       the Lode Vandevenne's PNG encoder.
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Added new option SERVER_BASED_SEARCH to re-enable searching via a
+       PHP enabled web browser instead of only using javascript locally.
+       This method better scales to larger projects and allows full text
+       search.
+<li>   Added new options GENERATE_ECLIPSEHELP and ECLIPSE_DOC_ID
+       to generate an index file that can be used to embed doxygen's HTML 
+       output into Eclipse as a help plugin 
+       (thanks to a patch by Ondrej Starek).
+<li>   Wrote new <a href="http://www.doxygen.org/searching.html">documentation</a> 
+       regarding the methods of searching in the HTML output.
+<li>   Included patch by Ed Rosten to render formulas with 
+       proper anti-aliasing on non-white backgrounds using transparency.
+<li>   Add new option FORCE_LOCAL_INCLUDES to make the default #include
+       appearance in class documentation with "" i.s.o sharp brackets.
+<li>   id 558457: Make \addindex put keywords into the .qhp file.
+<li>   id 595214: #cmakedefine is now treated the same was as #define
+                  (for users of the CMake build system).
+<li>   Added compilation support for OSX 10.6 (aka Snow Leopard)
+<li>   Included language update for Brazilian.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   Doxywizard did not warn when it failed to save its config file.
+<li>   id 557035: Empty class definitions were not included in Tokens file
+                  for docsets.
+<li>   id 563233: GENERATE_QHP details was considered even though it is
+                  not defined.
+<li>   id 567346: Comment parser could get stuck in certain cases.
+<li>   id 570369: GENERATE_QHP should generate keywords for classes in
+                  generated *.qhc.
+<li>   id 571964: Fixed two issues in the compound.xsd schema definition.
+<li>   id 592991: Fixed wrong default destination directory.
+<li>   id 593040: Fixed problem with distributing member group documentation
+                  for anonymous member groups.
+<li>   id 593273: GENERATE_TODOLIST=NO and friends not longer worked.
+<li>   id 593928: Added support for UCS-2 encoded input files.
+<li>   id 594391: Fixed problem parsing fully-qualified java annotations.
+<li>   id 594592,596815: Fixed problem handling quotes.
+<li>   id 595191: Not all configuration options appeared in the index of
+                  the documentation and some were not sorted correctly.
+<li>   id 595253: formulas had the .png extension while they were gifs.
+<li>   id 595833: Fixed recursive lockup while resolving template relations.
+<li>   id 595935: Doxygen's preprocessor got confused when /**/ appeared as
+                  part of a macro definition.
+<li>   id 596085: Removed obsolete option USE_WINDOWS_ENCODING from the docs.
+<li>   id 596233: RTF output was missing a new paragraph for brief 
+                  member descriptions.
+<li>   id 596807,596819: Code reformatting done for the LaTeX output could 
+                  break multibyte UTF-8 characters causing invalid output.
+<li>   id 596809: Using multibyte characters in a page label caused invalid
+                  output.
+<li>   id 596816: Documented the interaction between LATEX_CMD_NAME and 
+                  USE_PDFLATEX.
+<li>   id 597015: Todo items for two inner classes with the same name where
+                  collapsed together in the todo list when HIDE_SCOPE_NAMES 
+                  was enabled.
+<li>   id 597016: Scope was not hidden for members in the todo list even
+                  though HIDE_SCOPE_NAMES was set to YES.
+<li>   id 598497: Struct variable with explicit struct keyword got labelled 
+                  with [read] attribute.
+<li>   id 596902: PHP was not parsed properly when it appeared in a
+                  &lt;script language="php"&gt; section.
+<li>   id 597415: Fixed problem matching base class member against the
+                  member in the derived class.
+<li>   id 597518: Makefile for Docsets now honors DESTDIR.
+<li>   id 598298: Made browsing for HHC_LOCATION via the wizard 
+                  yield an absolute path.
+<li>   id 599128: Changed default for CHM_INDEX_ENCODING to CP1250 to avoid
+                  issues in a Solaris environment.
+<li>   id 595931: Removed unnecessary paragraphs from HTML table cells.
+<li>   id 597541: referring to page labels of the form a-1 did not work.
+<li>   id 599224: Code generators could produce extra &lt;/span&gt; tags.
+<li>   id 599974: Included the PHP search engine again (with new config 
+                  option SERVER_BASED_SEARCH to enable it)
+<li>   id 600544: Doxygen produced invalid Latex output for RCS tags.
+<li>   id 600563: Fixed issue with include dependency tracking that could 
+                  cause macro expansion not to work properly.
+<li>   id 600940: Fixed issue with VHDL call graph (thank to Martin Kreis
+                  for the fix).
+<li>   id 601138: Fixed problem parsing C++ function-try-blocks.
+<li>   id 601222: #include inside a class could cause line numbers to be off.
+<li>   id 601223: Fixed parsing problem skipping over /**/ comment.
+<li>   id 601694: Fixed problem handling Javadoc style {@code ... } blocks.
+<li>   id 601771: Special commands did not work in the title of 
+                  the @mainpage.
+<li>   id 602818: Fixed problem parsing files that start with UTF-8 BOM.
+<li>   id 603001: Fixed problem parsing friend function with explicit scope.
+<li>   id 603238: Fixed perlmod generation issue.
+<li>   id 604948: Project number was not centered anymore in the HTML output.
+<li>   id 604503: Using %word in a page title incorrectly did show the %.
+</ul>
+
+<a name="1.6.1"></a>
+<h1>Doxygen Release 1.6.1</h1>
+<h2>(release date 25-08-2009)</h2>
+<h3>Bug fixes</h3>
+<ul>
+<li>   Fixed file handle leak when parsing include files. Also fixed
+       the logic that determines whether or not an include file need to be
+       parsed.
+<li>   Search result pages were not using UTF-8 character encoding.
+<li>   Search results pointing to external references were not linked correctly.
+<li>   id 133418: Multiline second argument of \ref caused unexpected " warning.
+<li>   id 592454: Feeding invalid XML could crash doxygen's DBus XML parser.
+<li>   id 592485: Include patch to fix problem with building rpms.
+<li>   id 592511,592625: Doxywizard problem with GENERATE_TREEVIEW.
+<li>   id 592650: SHOW_USED_FILES now works again.
+<li>   id 592808: xrefitems (like @todo) did not appear in the list when
+       found in comments marked with @enum or @name.
+</ul>
+<h1>Doxygen Release 1.6.0</h1>
+<h2>(release date 20-08-2009)</h2>
+<h3>Changes</h3>
+<ul>
+<li>   id 580924, 541234: Replaced the PHP based search engine by a 
+       Javascript/DHTML based one.
+       As a result the search feature no longer requires a HTTP server
+       with PHP enabled to be usable. Searching is limited to symbols
+       though, but it is now possible to filter on symbol type.
+<li>   id 519886: Make the HTML output XHTML 1.0 compliant.
+<li>   id 579950: Objective-C categories are now merged with their base 
+       class, unless there is no base class.
+<li>   Member groups with the same header within the same scope are now
+       merged. This also works for Objective-C categories.
+<li>   Changed the LaTeX style sheet such that more of the markup is 
+       configurable. Please update your style sheet if you use a custom one.
+<li>   id 584844: Treat \details inside a brief description as a new paragraph
+       command.
+<li>   Split GENERATE_TREEVIEW into two separate options:
+       GENERATE_TREEVIEW and USE_INLINE_TREES.
+<li>   Removed the dependencies on libpng and libz, doxygen now generates
+       gifs again for internal class diagrams (like it did 7 years ago ;-)
+</ul>
+<h3>New features</h3>
+<ul>
+<li>   Added option SORT_MEMBERS_CTORS_1ST, which when enabled places the
+       constructors and destructors first in an otherwise sorted list.
+<li>   id 581518: Applied patch by Tobias Hunger that adds support for
+       documenting DBus XML interface descriptions. 
+<li>   Included QtHelp patch by Karsten Heimrich which adds missing 
+       reference and keyword for methods.
+<li>   Included updates for the Korean and Polish translation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>   id 131989: Fixed preprocessor handling for C# code.  
+<li>   id 133418: -- was not rendered correctly for LaTeX output
+<li>   id 157485: Missing link in todo page.
+<li>   id 318061: Two template functions that only differed in the number
+       of template arguments were seen as the same function.
+<li>   id 443939: HIDE_UNDOC_CLASSES did not work properly.
+<li>   id 509348: Fixed problem with syncing the information of 
+       declaration and definition in the presence of an extra forward 
+       declaration in the source code.
+<li>   id 522193: For C# enum values were merged together if the same enum 
+       name was used in different scopes.
+<li>   id 523167: Included patch to handle PROGRAM statement in Fortran as
+       subroutines/functions.
+<li>   id 554636: Remove spacing around brackets for Obj-C protocols.
+<li>   id 557026: Included patch for fixing wrongly labeled items in docsets.
+<li>   id 560512: Improved parser to better disambiguate
+       nested templates ending with &gt;&gt; from the bitshift right operator.
+<li>   id 570238: Fixed matching problem for method in nested class, where
+       the outer class is a template.
+<li>   id 581746: Segfault/realloc error when a very long path was used.
+<li>   id 582469: documented #define with guard caused wrong documentation.
+<li>   id 582276: Doxywizard could crash on exit in some cases.
+<li>   id 582676: Regression: a struct ivar in ObjC class screws up method 
+                  identification.
+<li>   id 583213: Included patch that avoids trailing spaces in the
+       generated Doxyfile template.
+<li>   id 584192: Included VHDL patch by Martin Klein
+<li>   id 585543: Fixed case where matching declaration and definition did
+       not work correctly.
+<li>   id 585260: The "more..." link for files was broken, since the anchor
+       was not generated.
+<li>   id 586925: Fixed parsing problem when an unpaired apostrophe 
+       appeared in a Python comment.
+<li>   id 588291: Included fix for doxywizard makefile. 
+<li>   id 588587: Added missing virtual destructor to CompAccept base class.
+<li>   id 588968: Fixed segmentation fault for specific case in PHP code.
+<li>   Fixed some issues building for Windows.
+<li>   id 589514: Fixed problem handling strings like a"\b" within a comment.
+<li>   id 589616: Fixed problem matching explicitly scoped parameter in a 
+       template class.
+<li>   id 590712: A namespaced with name "internal" (C++/CLI keyword)
+       could confuse doxygen's C++ parser.
+<li>   id 591749: @optional/@required attributes for Objective-C were missing
+       from the XML output.
+</ul>
+<h1><a href="http://www.doxygen.org/changelog_1.5.html">Doxygen Release 1.5 and earlier</a></h1>
+<p>
+<hr>
+<p>
+Go <a href="index.html">back</a> to the main page.
+
+\endhtmlonly
+*/
diff --git a/doc/commands.doc b/doc/commands.doc
index cb59feb..03c789f 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -2577,8 +2577,10 @@ class Receiver
     HTML-only block.
 
   \sa section \ref cmdmanonly "\\manonly", section
-              \ref cmdlatexonly "\\latexonly", and section
-              \ref cmdrtfonly "\\rtfonly".
+              \ref cmdlatexonly "\\latexonly", section
+              \ref cmdrtfonly "\\rtfonly", section
+              \ref cmdxmlonly "\\xmlonly", and
+              \ref cmddocbookonly "\\docbookonly".
 
 <hr>
 \section cmdimage \\image <format> <file> ["caption"] [<sizeindication>=<size>]
diff --git a/doc/config.doc b/doc/config.doc
index c5aca26..a32f225 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -128,6 +128,7 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_extract_anon_nspaces EXTRACT_ANON_NSPACES
 \refitem cfg_extract_local_classes EXTRACT_LOCAL_CLASSES
 \refitem cfg_extract_local_methods EXTRACT_LOCAL_METHODS
+\refitem cfg_extract_package EXTRACT_PACKAGE
 \refitem cfg_extract_private EXTRACT_PRIVATE
 \refitem cfg_extract_static EXTRACT_STATIC
 \refitem cfg_file_patterns FILE_PATTERNS
@@ -142,7 +143,7 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_generate_autogen_def GENERATE_AUTOGEN_DEF
 \refitem cfg_generate_buglist GENERATE_BUGLIST
 \refitem cfg_generate_chi GENERATE_CHI
-\refitem cfg_generate_deprecatedlist GENERATE_DEPRECIATEDLIST
+\refitem cfg_generate_deprecatedlist GENERATE_DEPRECATEDLIST
 \refitem cfg_generate_docbook GENERATE_DOCBOOK
 \refitem cfg_generate_docset GENERATE_DOCSET
 \refitem cfg_generate_eclipsehelp GENERATE_ECLIPSEHELP
@@ -282,13 +283,14 @@ followed by the descriptions of the tags grouped by category.
 \refitem cfg_sort_member_docs SORT_MEMBER_DOCS
 \refitem cfg_sort_members_constructors_first SORT_MEMBERS_CTORS_1ST
 \refitem cfg_source_browser SOURCE_BROWSER
+\refitem cfg_strict_proto_matching STRICT_PROTO_MATCHING
 \refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
 \refitem cfg_strip_from_inc_path STRIP_FROM_INC_PATH
 \refitem cfg_strip_from_path STRIP_FROM_PATH
 \refitem cfg_subgrouping SUBGROUPING
-\refitem cfg_symbol_cache_size SYMBOL_CACHE_SIZE
 \refitem cfg_tab_size TAB_SIZE
 \refitem cfg_tagfiles TAGFILES
+\refitem cfg_tcl_subst TCL_SUBST
 \refitem cfg_template_relations TEMPLATE_RELATIONS
 \refitem cfg_toc_expand TOC_EXPAND
 \refitem cfg_treeview_width TREEVIEW_WIDTH
@@ -599,6 +601,14 @@ followed by the descriptions of the tags grouped by category.
  will result in a user-defined paragraph with heading "Side Effects:".
  You can put \\n's in the value part of an alias to insert newlines.
 
+\anchor cfg_tcl_subst
+<dt>\c TCL_SUBST <dd>
+ \addindex TCL_SUBST
+ This tag can be used to specify a number of word-keyword mappings (TCL only). 
+ A mapping has the form "name=value". For example adding 
+ "class=itcl::class" will allow you to use the command class in the 
+ itcl::class meaning.
+
 \anchor cfg_optimize_output_for_c
 <dt>\c OPTIMIZE_OUTPUT_FOR_C <dd>
  \addindex OPTIMIZE_OUTPUT_FOR_C
@@ -682,34 +692,19 @@ page (for HTML and Man pages) or section (for LaTeX and RTF).
  be useful for C code in case the coding convention dictates that all compound 
  types are typedef'ed and only the typedef is referenced, never the tag name.
 
-\anchor cfg_symbol_cache_size
-<dt>\c SYMBOL_CACHE_SIZE <dd>
- \addindex SYMBOL_CACHE_SIZE
- The \c SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
- determine which symbols to keep in memory and which to flush to disk.
- When the cache is full, less often used symbols will be written to disk.
- For small to medium size projects (<1000 input files) the default value is
- probably good enough. For larger projects a too small cache size can cause 
- doxygen to be busy swapping symbols to and from disk most of the time
- causing a significant performance penalty.
- If the system has enough physical memory increasing the cache will improve the
- performance by keeping more symbols in memory. Note that the value works on
- a logarithmic scale so increasing the size by one will roughly double the
- memory usage. The cache size is given by this formula: 
- \f$2^{(16+\mbox{SYMBOL\_CACHE\_SIZE})}\f$. The valid range is 0..9, the default is 0, 
- corresponding to a cache size of \f$2^{16} = 65536\f$ symbols.
-
 \anchor cfg_lookup_cache_size
 <dt>\c LOOKUP_CACHE_SIZE <dd>
  \addindex LOOKUP_CACHE_SIZE
- Similar to the \c SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be 
+ The size of the symbol lookup cache can be 
  set using \c LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given 
  their name and scope. Since this can be an expensive process and often the 
- same symbol appear multiple times in the code, doxygen keeps a cache of 
+ same symbol appears multiple times in the code, doxygen keeps a cache of 
  pre-resolved symbols. If the cache is too small doxygen will become slower. 
  If the cache is too large, memory is wasted. The cache size is given by this 
  formula: \f$2^{(16+\mbox{LOOKUP\_CACHE\_SIZE})}\f$. The valid range is 0..9, the default is 0, 
  corresponding to a cache size of \f$2^{16} = 65536\f$ symbols. 
+ At the end of a run doxygen will report the cache usage and suggest the
+ optimal cache size from a speed point of view.
 
 </dl>
 
@@ -734,6 +729,12 @@ page (for HTML and Man pages) or section (for LaTeX and RTF).
  If the \c EXTRACT_PRIVATE tag is set to \c YES all private members of a 
  class will be included in the documentation.
 
+\anchor cfg_extract_package
+<dt>\c EXTRACT_PACKAGE <dd>
+ \addindex EXTRACT_PACKAGE
+ If the \c EXTRACT_PACKAGE tag is set to \c YES all members with package 
+ or internal scope will be included in the documentation. 
+
 \anchor cfg_extract_static
 <dt>\c EXTRACT_STATIC <dd>
  \addindex EXTRACT_STATIC
@@ -878,6 +879,16 @@ function's detailed documentation block.
  @note This option applies only to the class list, not to the 
        alphabetical list.
 
+\anchor cfg_strict_proto_matching
+<dt>\c STRICT_PROTO_MATCHING <dd>
+ \addindex STRICT_PROTO_MATCHING
+ If the \c STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
+ do proper type resolution of all parameters of a function it will reject a 
+ match between the prototype and the implementation of a member function even 
+ if there is only one candidate or it is obvious which candidate to choose 
+ by doing a simple string match. By disabling \c STRICT_PROTO_MATCHING doxygen 
+ will still accept a match between prototype and implementation in such cases.
+
 \anchor cfg_sort_members_constructors_first
 <dt>\c SORT_MEMBERS_CTORS_1ST <dd>
  \addindex SORT_MEMBERS_CTORS_1ST
diff --git a/doc/doxygen.1 b/doc/doxygen.1
index 98f0df0..c227791 100644
--- a/doc/doxygen.1
+++ b/doc/doxygen.1
@@ -23,7 +23,11 @@ doxygen [configName]
 .IP
 If - is used for configName doxygen will read from standard input.
 .TP
-4) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
+4) Use doxygen to generate a template file controlling the layout of the generated documentation:
+.IP
+doxygen -l layoutFileName.xml
+.TP
+5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
 .TP
 RTF:
 doxygen \fB\-w\fR rtf styleSheetFile
@@ -33,7 +37,7 @@ doxygen \fB\-w\fR html headerFile footerFile styleSheetFile [configFile]
 .TP
 LaTeX: doxygen \fB\-w\fR latex headerFile footerFile styleSheetFile [configFile]
 .TP
-5) Use doxygen to generate an rtf extensions file
+6) Use doxygen to generate an rtf extensions file
 .TP
 RTF:
 doxygen \fB\-e\fR rtf extensionsFile
diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index 9435280..51c2e47 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -83,6 +83,7 @@ Written by Dimitri van Heesch\\[2ex]
 \chapter{Getting Started}\label{starting}\hypertarget{starting}{}\input{starting}
 \chapter{Documenting the code}\label{docblocks}\hypertarget{docblocks}{}\input{docblocks}
 \chapter{Markdown}\label{markdown}\hypertarget{markdown}{}\input{markdown}
+\chapter{Lists}\label{lists}\hypertarget{lists}{}\input{lists}
 \chapter{Grouping}\label{grouping}\hypertarget{grouping}{}\input{grouping}
 \chapter{Including Formulas}\label{formulas}\hypertarget{formulas}{}\input{formulas}
 \chapter{Graphs and diagrams}\label{diagrams}\hypertarget{diagrams}{}\input{diagrams}
@@ -90,7 +91,6 @@ Written by Dimitri van Heesch\\[2ex]
 \chapter{Automatic link generation}\label{autolink}\hypertarget{autolink}{}\input{autolink}
 \chapter{Output Formats}\label{output}\hypertarget{output}{}\input{output}
 \chapter{Searching}\label{searching}\hypertarget{searching}{}\input{searching}
-\chapter{External Indexing and Searching}\label{extsearch}\hypertarget{extsearch}{}\input{extsearch}
 \chapter{Customizing the Output}\label{customize}\hypertarget{customize}{}\input{customize}
 \chapter{Custom Commands}\label{custcmd}\hypertarget{custcmd}{}\input{custcmd}
 \chapter{Link to external documentation}\label{external}\hypertarget{external}{}\input{external}
diff --git a/doc/extsearch.doc b/doc/extsearch.doc
index e636b1a..bc937e4 100644
--- a/doc/extsearch.doc
+++ b/doc/extsearch.doc
@@ -303,11 +303,4 @@ The fields for such an item have the following meaning:
 - "fragments": an array with 0 or more fragments of text containing words that have been search for.
           These words should be wrapped in `<span class="hl">` and `</span>` tags to highlight them
           in the output.
-
-
-\htmlonly
-Go to the <a href="customize.html">next</a> section or return to the
- <a href="index.html">index</a>.
-\endhtmlonly
-
 */
diff --git a/doc/language.doc b/doc/language.doc
index 70a0ace..7327e14 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -188,7 +188,7 @@ when the translator was updated.
     <td>Korean</td>
     <td>Kim Taedong<br/>SooYoung Jung<br/>Richard Kim</td>
     <td>fly1004 at gmail dot com<br/>jung5000 at gmail dot com<br/><span style="color: brown">[unreachable]</span></td>
-    <td>1.8.02</td>
+    <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>KoreanEn</td>
@@ -377,7 +377,7 @@ when the translator was updated.
   \hline
   JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
   \hline
-  Korean & Kim Taedong & {\tt\tiny fly1004 at gmail dot com} & 1.8.02 \\
+  Korean & Kim Taedong & {\tt\tiny fly1004 at gmail dot com} & up-to-date \\
   ~ & SooYoung Jung & {\tt\tiny jung5000 at gmail dot com} & ~ \\
   ~ & Richard Kim & {\tt\tiny [unreachable] ryk at dspwiz dot com} & ~ \\
   \hline
diff --git a/doc/searching.doc b/doc/searching.doc
index 5a9c39e..1306a97 100644
--- a/doc/searching.doc
+++ b/doc/searching.doc
@@ -185,9 +185,8 @@ has its own advantages and disadvantages:
    Qt compressed help or CHM output, but it does require that Eclipse is
    installed and running.
 
-
 \htmlonly
-Go to the <a href="extsearch.html">next</a> section or return to the
+Go to the <a href="customize.html">next</a> section or return to the
  <a href="index.html">index</a>.
 \endhtmlonly
 
diff --git a/doc/translator_report.txt b/doc/translator_report.txt
index 0bba380..cbc0ba5 100644
--- a/doc/translator_report.txt
+++ b/doc/translator_report.txt
@@ -10,7 +10,7 @@ Macedonian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian,
 Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish,
 Ukrainian, and Vietnamese.
 
-Of them, 2 translators are up-to-date, 38 translators are based on
+Of them, 3 translators are up-to-date, 37 translators are based on
 some adapter class, and 2 are English based.
 
 ----------------------------------------------------------------------
@@ -20,6 +20,7 @@ and they implement all 250 of the required methods. Anyway, there
 still may be some details listed even for them:
 
   TranslatorEnglish
+  TranslatorKorean -- Change the base class to Translator.
   TranslatorLatvian -- Reimplementation using UTF-8 suggested.
 
 ----------------------------------------------------------------------
@@ -53,9 +54,6 @@ must be implemented to become up-to-date:
 	Note: Change the base class to TranslatorAdapter_1_8_4.
 
   TranslatorPolish                1.8.2 	14 methods to implement (5 %)
-  TranslatorKorean                1.8.02	15 methods to implement (6 %)
-	Note: Change the base class to TranslatorAdapter_1_8_2.
-
   TranslatorItalian               1.8.2 	15 methods to implement (6 %)
   TranslatorCroatian              1.8.2 	15 methods to implement (6 %)
   TranslatorChinese               1.8.2 	15 methods to implement (6 %)
@@ -112,8 +110,6 @@ must be implemented to become up-to-date:
 	Note: Reimplementation using UTF-8 suggested.
 
   TranslatorArabic                1.4.6 	56 methods to implement (22 %)
-	Note: Reimplementation using UTF-8 suggested.
-
 
 ----------------------------------------------------------------------
 The following translator classes derive directly from the
@@ -816,28 +812,10 @@ TranslatorJapaneseEn   (TranslatorEnglish)  245 methods to implement (98 %)
     virtual QCString latexLanguageSupportCommand()
 
 
-TranslatorKorean   (TranslatorAdapter_1_7_5)  15 methods to implement (6 %)
+TranslatorKorean   (TranslatorAdapter_1_7_5)
 ----------------
 
-  Implements 235 of the required methods (94 %).
-
-  Missing methods (should be implemented):
-
-    virtual QCString trServices()
-    virtual QCString trClassMethods()
-    virtual QCString trProvidedByCategory()
-    virtual QCString trSingletonGeneratedFromFiles(bool single)
-    virtual QCString trServiceReference(const char * sName)
-    virtual QCString trDesignOverview()
-    virtual QCString trConstantGroups()
-    virtual QCString trMethodDocumentation()
-    virtual QCString trInterfaces()
-    virtual QCString trServiceGeneratedFromFiles(bool single)
-    virtual QCString trConstantGroupReference(const char * namespaceName)
-    virtual QCString trPanelSynchronisationTooltip(bool enable)
-    virtual QCString trExtendsClass()
-    virtual QCString trSingletonReference(const char * sName)
-    virtual QCString trInstanceMethods()
+  Implements 250 of the required methods (100 %).
 
 
 TranslatorKoreanEn   (TranslatorEnglish)  245 methods to implement (98 %)
diff --git a/jquery/Makefile b/jquery/Makefile
new file mode 100644
index 0000000..83a302b
--- /dev/null
+++ b/jquery/Makefile
@@ -0,0 +1,42 @@
+JQUERY_VERSION = 1.7.1
+JQUERY_UI_VERSION = 1.8.18
+HASHCHANGE_VERSION = 1.3
+SCROLL_VERSION = 1.4.2
+MINIFIER = /usr/local/bin/yuicompressor-2.4.7
+SCRIPTS = jquery-$(JQUERY_VERSION).js \
+          jquery.ui-$(JQUERY_UI_VERSION).core.js \
+          jquery.ui-$(JQUERY_UI_VERSION).widget.js \
+          jquery.ui-$(JQUERY_UI_VERSION).mouse.js \
+          jquery.ui-$(JQUERY_UI_VERSION).resizable.js \
+          jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \
+          jquery.scrollTo-$(SCROLL_VERSION).js
+RESULTS = jquery_p1.js jquery_p2.js jquery_p3.js jquery_ui.js jquery_fx.js
+
+SCRIPTS_MIN = $(SCRIPTS:%.js=%-min.js)
+
+all: $(RESULTS)
+
+install: $(RESULTS)
+	cp $(RESULTS) ../src/
+
+jquery_ui.js: scripts
+	cat jquery.ui-$(JQUERY_UI_VERSION).core-min.js \
+            jquery.ui-$(JQUERY_UI_VERSION).widget-min.js \
+            jquery.ui-$(JQUERY_UI_VERSION).mouse-min.js \
+            jquery.ui-$(JQUERY_UI_VERSION).resizable-min.js \
+            jquery.ba-$(HASHCHANGE_VERSION)-hashchange-min.js > jquery_ui.js
+
+jquery_fx.js: scripts
+	cat jquery.scrollTo-$(SCROLL_VERSION)-min.js > jquery_fx.js
+
+jquery_p1.js jquery_p2.js jquery_p3.js: scripts
+	perl split_jquery.pl jquery-$(JQUERY_VERSION)-min.js $@
+
+scripts: $(SCRIPTS_MIN)
+
+clean:
+	rm -f $(SCRIPTS_MIN) $(RESULTS)
+
+%-min.js: %.js
+	java -jar $(MINIFIER).jar --line-break 13000 $^ > $@
+
diff --git a/jquery/README b/jquery/README
new file mode 100644
index 0000000..314c838
--- /dev/null
+++ b/jquery/README
@@ -0,0 +1,16 @@
+Doxygen's jquery.js script is composed of minified versions of the following
+packages:
+- jquery    1.7.1:  http://jquery.com/download/ 
+- jquery.ui 1.8.18: https://code.google.com/p/jquery-ui/downloads/list
+    modules required:
+    - jquery.ui.core
+    - jquery.ui.widget
+    - jquery.ui.mouse
+    - jquery.ui.resizable
+- jquery.hashchange: 1.3: http://benalman.com/projects/jquery-hashchange-plugin/
+- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
+
+The Makefile will built the jquery_*.js files used by doxygen.
+Some files are split into smaller parts to make sure Visual Studio can compile them 
+as strings.
+
diff --git a/jquery/jquery-1.7.1.js b/jquery/jquery-1.7.1.js
new file mode 100644
index 0000000..8ccd0ea
--- /dev/null
+++ b/jquery/jquery-1.7.1.js
@@ -0,0 +1,9266 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+	navigator = window.navigator,
+	location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// A simple way to check for HTML strings or ID strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+
+	// Used for trimming whitespace
+	trimLeft = /^\s+/,
+	trimRight = /\s+$/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+	// Useragent RegExp
+	rwebkit = /(webkit)[ \/]([\w.]+)/,
+	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+	rmsie = /(msie) ([\w.]+)/,
+	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+	// Matches dashed string for camelizing
+	rdashAlpha = /-([a-z]|[0-9])/ig,
+	rmsPrefix = /^-ms-/,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return ( letter + "" ).toUpperCase();
+	},
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	trim = String.prototype.trim,
+	indexOf = Array.prototype.indexOf,
+
+	// [[Class]] -> type pairs
+	class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), or $(undefined)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// The body element only exists once, optimize finding it
+		if ( selector === "body" && !context && document.body ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = quickExpr.exec( selector );
+			}
+
+			// Verify a match, and that no context was specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+					doc = ( context ? context.ownerDocument || context : document );
+
+					// If a single string is passed in and it's a single tag
+					// just do a createElement and skip the rest
+					ret = rsingleTag.exec( selector );
+
+					if ( ret ) {
+						if ( jQuery.isPlainObject( context ) ) {
+							selector = [ document.createElement( ret[1] ) ];
+							jQuery.fn.attr.call( selector, context, true );
+
+						} else {
+							selector = [ doc.createElement( ret[1] ) ];
+						}
+
+					} else {
+						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+						selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+					}
+
+					return jQuery.merge( this, selector );
+
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.7.1",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return slice.call( this, 0 );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+		// Build a new jQuery matched element set
+		var ret = this.constructor();
+
+		if ( jQuery.isArray( elems ) ) {
+			push.apply( ret, elems );
+
+		} else {
+			jQuery.merge( ret, elems );
+		}
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Attach the listeners
+		jQuery.bindReady();
+
+		// Add the callback
+		readyList.add( fn );
+
+		return this;
+	},
+
+	eq: function( i ) {
+		i = +i;
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ),
+			"slice", slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+		// Either a released hold or an DOMready/load event and not yet ready
+		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 1 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If a normal DOM Ready event fired, decrement, and wait if need be
+			if ( wait !== true && --jQuery.readyWait > 0 ) {
+				return;
+			}
+
+			// If there are functions bound, to execute
+			readyList.fireWith( document, [ jQuery ] );
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.trigger ) {
+				jQuery( document ).trigger( "ready" ).off( "ready" );
+			}
+		}
+	},
+
+	bindReady: function() {
+		if ( readyList ) {
+			return;
+		}
+
+		readyList = jQuery.Callbacks( "once memory" );
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			return setTimeout( jQuery.ready, 1 );
+		}
+
+		// Mozilla, Opera and webkit nightlies currently support this event
+		if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else if ( document.attachEvent ) {
+			// ensure firing before onload,
+			// maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var toplevel = false;
+
+			try {
+				toplevel = window.frameElement == null;
+			} catch(e) {}
+
+			if ( document.documentElement.doScroll && toplevel ) {
+				doScrollCheck();
+			}
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	// A crude way of determining if an object is a window
+	isWindow: function( obj ) {
+		return obj && typeof obj === "object" && "setInterval" in obj;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		return obj == null ?
+			String( obj ) :
+			class2type[ toString.call(obj) ] || "object";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!hasOwn.call(obj, "constructor") &&
+				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		for ( var name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	parseJSON: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+			.replace( rvalidtokens, "]" )
+			.replace( rvalidbraces, "")) ) {
+
+			return ( new Function( "return " + data ) )();
+
+		}
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		var xml, tmp;
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+	},
+
+	// args is for internal usage only
+	each: function( object, callback, args ) {
+		var name, i = 0,
+			length = object.length,
+			isObj = length === undefined || jQuery.isFunction( object );
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.apply( object[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( object[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return object;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: trim ?
+		function( text ) {
+			return text == null ?
+				"" :
+				trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( array, results ) {
+		var ret = results || [];
+
+		if ( array != null ) {
+			// The window, strings (and functions) also have 'length'
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+			var type = jQuery.type( array );
+
+			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array, i ) {
+		var len;
+
+		if ( array ) {
+			if ( indexOf ) {
+				return indexOf.call( array, elem, i );
+			}
+
+			len = array.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in array && array[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var i = first.length,
+			j = 0;
+
+		if ( typeof second.length === "number" ) {
+			for ( var l = second.length; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var ret = [], retVal;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value, key, ret = [],
+			i = 0,
+			length = elems.length,
+			// jquery objects are treated as arrays
+			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( key in elems ) {
+				value = callback( elems[ key ], key, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		if ( typeof context === "string" ) {
+			var tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		var args = slice.call( arguments, 2 ),
+			proxy = function() {
+				return fn.apply( context, args.concat( slice.call( arguments ) ) );
+			};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Mutifunctional method to get and set values to a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, key, value, exec, fn, pass ) {
+		var length = elems.length;
+
+		// Setting many attributes
+		if ( typeof key === "object" ) {
+			for ( var k in key ) {
+				jQuery.access( elems, k, key[k], exec, fn, value );
+			}
+			return elems;
+		}
+
+		// Setting one attribute
+		if ( value !== undefined ) {
+			// Optionally, function values get executed if exec is true
+			exec = !pass && exec && jQuery.isFunction(value);
+
+			for ( var i = 0; i < length; i++ ) {
+				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+			}
+
+			return elems;
+		}
+
+		// Getting an attribute
+		return length ? fn( elems[0], key ) : undefined;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = rwebkit.exec( ua ) ||
+			ropera.exec( ua ) ||
+			rmsie.exec( ua ) ||
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+			[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	sub: function() {
+		function jQuerySub( selector, context ) {
+			return new jQuerySub.fn.init( selector, context );
+		}
+		jQuery.extend( true, jQuerySub, this );
+		jQuerySub.superclass = this;
+		jQuerySub.fn = jQuerySub.prototype = this();
+		jQuerySub.fn.constructor = jQuerySub;
+		jQuerySub.sub = this.sub;
+		jQuerySub.fn.init = function init( selector, context ) {
+			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+				context = jQuerySub( context );
+			}
+
+			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+		};
+		jQuerySub.fn.init.prototype = jQuerySub.fn;
+		var rootjQuerySub = jQuerySub(document);
+		return jQuerySub;
+	},
+
+	browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+	jQuery.browser[ browserMatch.browser ] = true;
+	jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+	jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+	trimLeft = /^[\s\xA0]+/;
+	trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch(e) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+return jQuery;
+
+})();
+
+
+// String to Object flags format cache
+var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+function createFlags( flags ) {
+	var object = flagsCache[ flags ] = {},
+		i, length;
+	flags = flags.split( /\s+/ );
+	for ( i = 0, length = flags.length; i < length; i++ ) {
+		object[ flags[i] ] = true;
+	}
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	flags:	an optional list of space-separated flags that will change how
+ *			the callback list behaves
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible flags:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( flags ) {
+
+	// Convert flags from String-formatted to Object-formatted
+	// (we check in cache first)
+	flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+	var // Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = [],
+		// Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Add one or several callbacks to the list
+		add = function( args ) {
+			var i,
+				length,
+				elem,
+				type,
+				actual;
+			for ( i = 0, length = args.length; i < length; i++ ) {
+				elem = args[ i ];
+				type = jQuery.type( elem );
+				if ( type === "array" ) {
+					// Inspect recursively
+					add( elem );
+				} else if ( type === "function" ) {
+					// Add if not in unique mode and callback is not in
+					if ( !flags.unique || !self.has( elem ) ) {
+						list.push( elem );
+					}
+				}
+			}
+		},
+		// Fire callbacks
+		fire = function( context, args ) {
+			args = args || [];
+			memory = !flags.memory || [ context, args ];
+			firing = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+					memory = true; // Mark as halted
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( !flags.once ) {
+					if ( stack && stack.length ) {
+						memory = stack.shift();
+						self.fireWith( memory[ 0 ], memory[ 1 ] );
+					}
+				} else if ( memory === true ) {
+					self.disable();
+				} else {
+					list = [];
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					var length = list.length;
+					add( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away, unless previous
+					// firing was halted (stopOnFalse)
+					} else if ( memory && memory !== true ) {
+						firingStart = length;
+						fire( memory[ 0 ], memory[ 1 ] );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					var args = arguments,
+						argIndex = 0,
+						argLength = args.length;
+					for ( ; argIndex < argLength ; argIndex++ ) {
+						for ( var i = 0; i < list.length; i++ ) {
+							if ( args[ argIndex ] === list[ i ] ) {
+								// Handle firingIndex and firingLength
+								if ( firing ) {
+									if ( i <= firingLength ) {
+										firingLength--;
+										if ( i <= firingIndex ) {
+											firingIndex--;
+										}
+									}
+								}
+								// Remove the element
+								list.splice( i--, 1 );
+								// If we have some unicity property then
+								// we only need to do this once
+								if ( flags.unique ) {
+									break;
+								}
+							}
+						}
+					}
+				}
+				return this;
+			},
+			// Control if a given callback is in the list
+			has: function( fn ) {
+				if ( list ) {
+					var i = 0,
+						length = list.length;
+					for ( ; i < length; i++ ) {
+						if ( fn === list[ i ] ) {
+							return true;
+						}
+					}
+				}
+				return false;
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory || memory === true ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( stack ) {
+					if ( firing ) {
+						if ( !flags.once ) {
+							stack.push( [ context, args ] );
+						}
+					} else if ( !( flags.once && memory ) ) {
+						fire( context, args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!memory;
+			}
+		};
+
+	return self;
+};
+
+
+
+
+var // Static reference to slice
+	sliceDeferred = [].slice;
+
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var doneList = jQuery.Callbacks( "once memory" ),
+			failList = jQuery.Callbacks( "once memory" ),
+			progressList = jQuery.Callbacks( "memory" ),
+			state = "pending",
+			lists = {
+				resolve: doneList,
+				reject: failList,
+				notify: progressList
+			},
+			promise = {
+				done: doneList.add,
+				fail: failList.add,
+				progress: progressList.add,
+
+				state: function() {
+					return state;
+				},
+
+				// Deprecated
+				isResolved: doneList.fired,
+				isRejected: failList.fired,
+
+				then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+					deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+					return this;
+				},
+				always: function() {
+					deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+					return this;
+				},
+				pipe: function( fnDone, fnFail, fnProgress ) {
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( {
+							done: [ fnDone, "resolve" ],
+							fail: [ fnFail, "reject" ],
+							progress: [ fnProgress, "notify" ]
+						}, function( handler, data ) {
+							var fn = data[ 0 ],
+								action = data[ 1 ],
+								returned;
+							if ( jQuery.isFunction( fn ) ) {
+								deferred[ handler ](function() {
+									returned = fn.apply( this, arguments );
+									if ( returned && jQuery.isFunction( returned.promise ) ) {
+										returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+									} else {
+										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+									}
+								});
+							} else {
+								deferred[ handler ]( newDefer[ action ] );
+							}
+						});
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					if ( obj == null ) {
+						obj = promise;
+					} else {
+						for ( var key in promise ) {
+							obj[ key ] = promise[ key ];
+						}
+					}
+					return obj;
+				}
+			},
+			deferred = promise.promise({}),
+			key;
+
+		for ( key in lists ) {
+			deferred[ key ] = lists[ key ].fire;
+			deferred[ key + "With" ] = lists[ key ].fireWith;
+		}
+
+		// Handle state
+		deferred.done( function() {
+			state = "resolved";
+		}, failList.disable, progressList.lock ).fail( function() {
+			state = "rejected";
+		}, doneList.disable, progressList.lock );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( firstParam ) {
+		var args = sliceDeferred.call( arguments, 0 ),
+			i = 0,
+			length = args.length,
+			pValues = new Array( length ),
+			count = length,
+			pCount = length,
+			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+				firstParam :
+				jQuery.Deferred(),
+			promise = deferred.promise();
+		function resolveFunc( i ) {
+			return function( value ) {
+				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+				if ( !( --count ) ) {
+					deferred.resolveWith( deferred, args );
+				}
+			};
+		}
+		function progressFunc( i ) {
+			return function( value ) {
+				pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+				deferred.notifyWith( promise, pValues );
+			};
+		}
+		if ( length > 1 ) {
+			for ( ; i < length; i++ ) {
+				if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+					args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+				} else {
+					--count;
+				}
+			}
+			if ( !count ) {
+				deferred.resolveWith( deferred, args );
+			}
+		} else if ( deferred !== firstParam ) {
+			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+		}
+		return promise;
+	}
+});
+
+
+
+
+jQuery.support = (function() {
+
+	var support,
+		all,
+		a,
+		select,
+		opt,
+		input,
+		marginDiv,
+		fragment,
+		tds,
+		events,
+		eventName,
+		i,
+		isSupported,
+		div = document.createElement( "div" ),
+		documentElement = document.documentElement;
+
+	// Preliminary tests
+	div.setAttribute("className", "t");
+	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	all = div.getElementsByTagName( "*" );
+	a = div.getElementsByTagName( "a" )[ 0 ];
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return {};
+	}
+
+	// First batch of supports tests
+	select = document.createElement( "select" );
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName( "input" )[ 0 ];
+
+	support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.55/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: ( input.value === "on" ),
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// Tests for enctype support on a form(#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// Will be defined later
+		submitBubbles: true,
+		changeBubbles: true,
+		focusinBubbles: false,
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+		div.attachEvent( "onclick", function() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			support.noCloneEvent = false;
+		});
+		div.cloneNode( true ).fireEvent( "onclick" );
+	}
+
+	// Check if a radio maintains its value
+	// after being appended to the DOM
+	input = document.createElement("input");
+	input.value = "t";
+	input.setAttribute("type", "radio");
+	support.radioValue = input.value === "t";
+
+	input.setAttribute("checked", "checked");
+	div.appendChild( input );
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( div.lastChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	fragment.removeChild( input );
+	fragment.appendChild( div );
+
+	div.innerHTML = "";
+
+	// Check if div with explicit width and no margin-right incorrectly
+	// gets computed margin-right based on width of container. For more
+	// info see bug #3333
+	// Fails in WebKit before Feb 2011 nightlies
+	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+	if ( window.getComputedStyle ) {
+		marginDiv = document.createElement( "div" );
+		marginDiv.style.width = "0";
+		marginDiv.style.marginRight = "0";
+		div.style.width = "2px";
+		div.appendChild( marginDiv );
+		support.reliableMarginRight =
+			( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+	}
+
+	// Technique from Juriy Zaytsev
+	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+	// We only care about the case where non-standard event systems
+	// are used, namely in IE. Short-circuiting here helps us to
+	// avoid an eval call (in setAttribute) which can cause CSP
+	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+	if ( div.attachEvent ) {
+		for( i in {
+			submit: 1,
+			change: 1,
+			focusin: 1
+		}) {
+			eventName = "on" + i;
+			isSupported = ( eventName in div );
+			if ( !isSupported ) {
+				div.setAttribute( eventName, "return;" );
+				isSupported = ( typeof div[ eventName ] === "function" );
+			}
+			support[ i + "Bubbles" ] = isSupported;
+		}
+	}
+
+	fragment.removeChild( div );
+
+	// Null elements to avoid leaks in IE
+	fragment = select = opt = marginDiv = div = input = null;
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, outer, inner, table, td, offsetSupport,
+			conMarginTop, ptlm, vb, style, html,
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		conMarginTop = 1;
+		ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
+		vb = "visibility:hidden;border:0;";
+		style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
+		html = "<div " + style + "><div></div></div>" +
+			"<table " + style + " cellpadding='0' cellspacing='0'>" +
+			"<tr><td></td></tr></table>";
+
+		container = document.createElement("div");
+		container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+		body.insertBefore( container, body.firstChild );
+
+		// Construct the test element
+		div = document.createElement("div");
+		container.appendChild( div );
+
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		// (only IE 8 fails this test)
+		div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName( "td" );
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Check if empty table cells still have offsetWidth/Height
+		// (IE <= 8 fail this test)
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Figure out if the W3C box model works as expected
+		div.innerHTML = "";
+		div.style.width = div.style.paddingLeft = "1px";
+		jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
+
+		if ( typeof div.style.zoom !== "undefined" ) {
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			// (IE < 8 does this)
+			div.style.display = "inline";
+			div.style.zoom = 1;
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+			// Check if elements with layout shrink-wrap their children
+			// (IE 6 does this)
+			div.style.display = "";
+			div.innerHTML = "<div style='width:4px;'></div>";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+		}
+
+		div.style.cssText = ptlm + vb;
+		div.innerHTML = html;
+
+		outer = div.firstChild;
+		inner = outer.firstChild;
+		td = outer.nextSibling.firstChild.firstChild;
+
+		offsetSupport = {
+			doesNotAddBorder: ( inner.offsetTop !== 5 ),
+			doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
+		};
+
+		inner.style.position = "fixed";
+		inner.style.top = "20px";
+
+		// safari subtracts parent border width here which is 5px
+		offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
+		inner.style.position = inner.style.top = "";
+
+		outer.style.overflow = "hidden";
+		outer.style.position = "relative";
+
+		offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
+		offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
+
+		body.removeChild( container );
+		div  = container = null;
+
+		jQuery.extend( support, offsetSupport );
+	});
+
+	return support;
+})();
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+	cache: {},
+
+	// Please use with caution
+	uuid: 0,
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var privateCache, thisCache, ret,
+			internalKey = jQuery.expando,
+			getByName = typeof name === "string",
+
+			// We have to handle DOM nodes and JS objects differently because IE6-7
+			// can't GC object references properly across the DOM-JS boundary
+			isNode = elem.nodeType,
+
+			// Only DOM nodes need the global jQuery cache; JS object data is
+			// attached directly to the object so GC can occur automatically
+			cache = isNode ? jQuery.cache : elem,
+
+			// Only defining an ID for JS objects if its cache already exists allows
+			// the code to shortcut on the same path as a DOM node with no cache
+			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
+			isEvents = name === "events";
+
+		// Avoid doing any more work than we need to when trying to get data on an
+		// object that has no data at all
+		if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+			return;
+		}
+
+		if ( !id ) {
+			// Only DOM nodes need a new unique ID for each element since their data
+			// ends up in the global cache
+			if ( isNode ) {
+				elem[ internalKey ] = id = ++jQuery.uuid;
+			} else {
+				id = internalKey;
+			}
+		}
+
+		if ( !cache[ id ] ) {
+			cache[ id ] = {};
+
+			// Avoids exposing jQuery metadata on plain JS objects when the object
+			// is serialized using JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+		}
+
+		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+		// shallow copied over onto the existing cache
+		if ( typeof name === "object" || typeof name === "function" ) {
+			if ( pvt ) {
+				cache[ id ] = jQuery.extend( cache[ id ], name );
+			} else {
+				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+			}
+		}
+
+		privateCache = thisCache = cache[ id ];
+
+		// jQuery data() is stored in a separate object inside the object's internal data
+		// cache in order to avoid key collisions between internal data and user-defined
+		// data.
+		if ( !pvt ) {
+			if ( !thisCache.data ) {
+				thisCache.data = {};
+			}
+
+			thisCache = thisCache.data;
+		}
+
+		if ( data !== undefined ) {
+			thisCache[ jQuery.camelCase( name ) ] = data;
+		}
+
+		// Users should not attempt to inspect the internal events object using jQuery.data,
+		// it is undocumented and subject to change. But does anyone listen? No.
+		if ( isEvents && !thisCache[ name ] ) {
+			return privateCache.events;
+		}
+
+		// Check for both converted-to-camel and non-converted data property names
+		// If a data property was specified
+		if ( getByName ) {
+
+			// First Try to find as-is property data
+			ret = thisCache[ name ];
+
+			// Test for null|undefined property data
+			if ( ret == null ) {
+
+				// Try to find the camelCased property
+				ret = thisCache[ jQuery.camelCase( name ) ];
+			}
+		} else {
+			ret = thisCache;
+		}
+
+		return ret;
+	},
+
+	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var thisCache, i, l,
+
+			// Reference to internal data cache key
+			internalKey = jQuery.expando,
+
+			isNode = elem.nodeType,
+
+			// See jQuery.data for more information
+			cache = isNode ? jQuery.cache : elem,
+
+			// See jQuery.data for more information
+			id = isNode ? elem[ internalKey ] : internalKey;
+
+		// If there is already no cache entry for this object, there is no
+		// purpose in continuing
+		if ( !cache[ id ] ) {
+			return;
+		}
+
+		if ( name ) {
+
+			thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+			if ( thisCache ) {
+
+				// Support array or space separated string names for data keys
+				if ( !jQuery.isArray( name ) ) {
+
+					// try the string as a key before any manipulation
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+
+						// split the camel cased version by spaces unless a key with the spaces exists
+						name = jQuery.camelCase( name );
+						if ( name in thisCache ) {
+							name = [ name ];
+						} else {
+							name = name.split( " " );
+						}
+					}
+				}
+
+				for ( i = 0, l = name.length; i < l; i++ ) {
+					delete thisCache[ name[i] ];
+				}
+
+				// If there is no data left in the cache, we want to continue
+				// and let the cache object itself get destroyed
+				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+					return;
+				}
+			}
+		}
+
+		// See jQuery.data for more information
+		if ( !pvt ) {
+			delete cache[ id ].data;
+
+			// Don't destroy the parent cache unless the internal data object
+			// had been the only thing left in it
+			if ( !isEmptyDataObject(cache[ id ]) ) {
+				return;
+			}
+		}
+
+		// Browsers that fail expando deletion also refuse to delete expandos on
+		// the window, but it will allow it on all other JS objects; other browsers
+		// don't care
+		// Ensure that `cache` is not a window object #10080
+		if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+			delete cache[ id ];
+		} else {
+			cache[ id ] = null;
+		}
+
+		// We destroyed the cache and need to eliminate the expando on the node to avoid
+		// false lookups in the cache for entries that no longer exist
+		if ( isNode ) {
+			// IE does not allow us to delete expando properties from nodes,
+			// nor does it have a removeAttribute function on Document nodes;
+			// we must handle all of these cases
+			if ( jQuery.support.deleteExpando ) {
+				delete elem[ internalKey ];
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( internalKey );
+			} else {
+				elem[ internalKey ] = null;
+			}
+		}
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return jQuery.data( elem, name, data, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		if ( elem.nodeName ) {
+			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+			if ( match ) {
+				return !(match === true || elem.getAttribute("classid") !== match);
+			}
+		}
+
+		return true;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var parts, attr, name,
+			data = null;
+
+		if ( typeof key === "undefined" ) {
+			if ( this.length ) {
+				data = jQuery.data( this[0] );
+
+				if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
+					attr = this[0].attributes;
+					for ( var i = 0, l = attr.length; i < l; i++ ) {
+						name = attr[i].name;
+
+						if ( name.indexOf( "data-" ) === 0 ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( this[0], name, data[ name ] );
+						}
+					}
+					jQuery._data( this[0], "parsedAttrs", true );
+				}
+			}
+
+			return data;
+
+		} else if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		parts = key.split(".");
+		parts[1] = parts[1] ? "." + parts[1] : "";
+
+		if ( value === undefined ) {
+			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+			// Try to fetch any internally stored data first
+			if ( data === undefined && this.length ) {
+				data = jQuery.data( this[0], key );
+				data = dataAttr( this[0], key, data );
+			}
+
+			return data === undefined && parts[1] ?
+				this.data( parts[0] ) :
+				data;
+
+		} else {
+			return this.each(function() {
+				var self = jQuery( this ),
+					args = [ parts[0], value ];
+
+				self.triggerHandler( "setData" + parts[1] + "!", args );
+				jQuery.data( this, key, value );
+				self.triggerHandler( "changeData" + parts[1] + "!", args );
+			});
+		}
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				jQuery.isNumeric( data ) ? parseFloat( data ) :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	for ( var name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+	var deferDataKey = type + "defer",
+		queueDataKey = type + "queue",
+		markDataKey = type + "mark",
+		defer = jQuery._data( elem, deferDataKey );
+	if ( defer &&
+		( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+		( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+		// Give room for hard-coded callbacks to fire first
+		// and eventually mark/queue something else on the element
+		setTimeout( function() {
+			if ( !jQuery._data( elem, queueDataKey ) &&
+				!jQuery._data( elem, markDataKey ) ) {
+				jQuery.removeData( elem, deferDataKey, true );
+				defer.fire();
+			}
+		}, 0 );
+	}
+}
+
+jQuery.extend({
+
+	_mark: function( elem, type ) {
+		if ( elem ) {
+			type = ( type || "fx" ) + "mark";
+			jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+		}
+	},
+
+	_unmark: function( force, elem, type ) {
+		if ( force !== true ) {
+			type = elem;
+			elem = force;
+			force = false;
+		}
+		if ( elem ) {
+			type = type || "fx";
+			var key = type + "mark",
+				count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+			if ( count ) {
+				jQuery._data( elem, key, count );
+			} else {
+				jQuery.removeData( elem, key, true );
+				handleQueueMarkDefer( elem, type, "mark" );
+			}
+		}
+	},
+
+	queue: function( elem, type, data ) {
+		var q;
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			q = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !q || jQuery.isArray(data) ) {
+					q = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					q.push( data );
+				}
+			}
+			return q || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			fn = queue.shift(),
+			hooks = {};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+		}
+
+		if ( fn ) {
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			jQuery._data( elem, type + ".run", hooks );
+			fn.call( elem, function() {
+				jQuery.dequeue( elem, type );
+			}, hooks );
+		}
+
+		if ( !queue.length ) {
+			jQuery.removeData( elem, type + "queue " + type + ".run", true );
+			handleQueueMarkDefer( elem, type, "queue" );
+		}
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+		}
+
+		if ( data === undefined ) {
+			return jQuery.queue( this[0], type );
+		}
+		return this.each(function() {
+			var queue = jQuery.queue( this, type, data );
+
+			if ( type === "fx" && queue[0] !== "inprogress" ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, object ) {
+		if ( typeof type !== "string" ) {
+			object = type;
+			type = undefined;
+		}
+		type = type || "fx";
+		var defer = jQuery.Deferred(),
+			elements = this,
+			i = elements.length,
+			count = 1,
+			deferDataKey = type + "defer",
+			queueDataKey = type + "queue",
+			markDataKey = type + "mark",
+			tmp;
+		function resolve() {
+			if ( !( --count ) ) {
+				defer.resolveWith( elements, [ elements ] );
+			}
+		}
+		while( i-- ) {
+			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+					jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+				count++;
+				tmp.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise();
+	}
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+	rspace = /\s+/,
+	rreturn = /\r/g,
+	rtype = /^(?:button|input)$/i,
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+	rclickable = /^a(?:rea)?$/i,
+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute,
+	nodeHook, boolHook, fixSpecified;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.attr );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.prop );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classNames, i, l, elem,
+			setClass, c, cl;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call(this, j, this.className) );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			classNames = value.split( rspace );
+
+			for ( i = 0, l = this.length; i < l; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className && classNames.length === 1 ) {
+						elem.className = value;
+
+					} else {
+						setClass = " " + elem.className + " ";
+
+						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+								setClass += classNames[ c ] + " ";
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classNames, i, l, elem, className, c, cl;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call(this, j, this.className) );
+			});
+		}
+
+		if ( (value && typeof value === "string") || value === undefined ) {
+			classNames = ( value || "" ).split( rspace );
+
+			for ( i = 0, l = this.length; i < l; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.nodeType === 1 && elem.className ) {
+					if ( value ) {
+						className = (" " + elem.className + " ").replace( rclass, " " );
+						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+							className = className.replace(" " + classNames[ c ] + " ", " ");
+						}
+						elem.className = jQuery.trim( className );
+
+					} else {
+						elem.className = "";
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.split( rspace );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space seperated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var self = jQuery(this), val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, i, max, option,
+					index = elem.selectedIndex,
+					values = [],
+					options = elem.options,
+					one = elem.type === "select-one";
+
+				// Nothing was selected
+				if ( index < 0 ) {
+					return null;
+				}
+
+				// Loop through all the selected options
+				i = one ? index : 0;
+				max = one ? index + 1 : options.length;
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Don't return options that are disabled or in a disabled optgroup
+					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+				if ( one && !values.length && options.length ) {
+					return jQuery( options[ index ] ).val();
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+
+	attr: function( elem, name, value, pass ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery( elem )[ name ]( value );
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+
+			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, "" + value );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			ret = elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret === null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var propName, attrNames, name, l,
+			i = 0;
+
+		if ( value && elem.nodeType === 1 ) {
+			attrNames = value.toLowerCase().split( rspace );
+			l = attrNames.length;
+
+			for ( ; i < l; i++ ) {
+				name = attrNames[ i ];
+
+				if ( name ) {
+					propName = jQuery.propFix[ name ] || name;
+
+					// See #9699 for explanation of this approach (setting first, then removal)
+					jQuery.attr( elem, name, "" );
+					elem.removeAttribute( getSetAttribute ? name : propName );
+
+					// Set corresponding property to false for boolean attributes
+					if ( rboolean.test( name ) && propName in elem ) {
+						elem[ propName ] = false;
+					}
+				}
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				// We can't allow the type property to be changed (since it causes problems in IE)
+				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+					jQuery.error( "type property can't be changed" );
+				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to it's default in case type is set after value
+					// This is for element creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		},
+		// Use the value property for back compat
+		// Use the nodeHook for button elements in IE6/7 (#1954)
+		value: {
+			get: function( elem, name ) {
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+					return nodeHook.get( elem, name );
+				}
+				return name in elem ?
+					elem.value :
+					null;
+			},
+			set: function( elem, value, name ) {
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+					return nodeHook.set( elem, value, name );
+				}
+				// Does not return so that setAttribute is also used
+				elem.value = value;
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		// Align boolean attributes with corresponding properties
+		// Fall back to attribute presence where some booleans are not supported
+		var attrNode,
+			property = jQuery.prop( elem, name );
+		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		var propName;
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			// value is true since we know at this point it's type boolean and not false
+			// Set boolean attributes to the same name and set the DOM property
+			propName = jQuery.propFix[ name ] || name;
+			if ( propName in elem ) {
+				// Only set the IDL specifically if it already exists on the element
+				elem[ propName ] = true;
+			}
+
+			elem.setAttribute( name, name.toLowerCase() );
+		}
+		return name;
+	}
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	fixSpecified = {
+		name: true,
+		id: true
+	};
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret;
+			ret = elem.getAttributeNode( name );
+			return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
+				ret.nodeValue :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				ret = document.createAttribute( name );
+				elem.setAttributeNode( ret );
+			}
+			return ( ret.nodeValue = value + "" );
+		}
+	};
+
+	// Apply the nodeHook to tabindex
+	jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			if ( value === "" ) {
+				value = "false";
+			}
+			nodeHook.set( elem, value, name );
+		}
+	};
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret === null ? undefined : ret;
+			}
+		});
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Normalize to lowercase since IE uppercases css property names
+			return elem.style.cssText.toLowerCase() || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = "" + value );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+
+
+
+
+var rformElems = /^(?:textarea|input|select)$/i,
+	rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+	rhoverHack = /\bhover(\.\S+)?\b/,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+	quickParse = function( selector ) {
+		var quick = rquickIs.exec( selector );
+		if ( quick ) {
+			//   0  1    2   3
+			// [ _, tag, id, class ]
+			quick[1] = ( quick[1] || "" ).toLowerCase();
+			quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
+		}
+		return quick;
+	},
+	quickIs = function( elem, m ) {
+		var attrs = elem.attributes || {};
+		return (
+			(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+			(!m[2] || (attrs.id || {}).value === m[2]) &&
+			(!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
+		);
+	},
+	hoverHack = function( events ) {
+		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+	};
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var elemData, eventHandle, events,
+			t, tns, type, namespaces, handleObj,
+			handleObjIn, quick, handlers, special;
+
+		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
+		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		events = elemData.events;
+		if ( !events ) {
+			elemData.events = events = {};
+		}
+		eventHandle = elemData.handle;
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = jQuery.trim( hoverHack(types) ).split( " " );
+		for ( t = 0; t < types.length; t++ ) {
+
+			tns = rtypenamespace.exec( types[t] ) || [];
+			type = tns[1];
+			namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: tns[1],
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				quick: quickParse( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			handlers = events[ type ];
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+			t, tns, type, origType, namespaces, origCount,
+			j, events, special, handle, eventType, handleObj;
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+		for ( t = 0; t < types.length; t++ ) {
+			tns = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tns[1];
+			namespaces = tns[2];
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector? special.delegateType : special.bindType ) || type;
+			eventType = events[ type ] || [];
+			origCount = eventType.length;
+			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+			// Remove matching events
+			for ( j = 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					 ( !handler || handler.guid === handleObj.guid ) &&
+					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					eventType.splice( j--, 1 );
+
+					if ( handleObj.selector ) {
+						eventType.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( eventType.length === 0 && origCount !== eventType.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			handle = elemData.handle;
+			if ( handle ) {
+				handle.elem = null;
+			}
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery.removeData( elem, [ "events", "handle" ], true );
+		}
+	},
+
+	// Events that are safe to short-circuit if no handlers are attached.
+	// Native DOM events should not be added, they may have inline handlers.
+	customEvent: {
+		"getData": true,
+		"setData": true,
+		"changeData": true
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		// Don't do events on text and comment nodes
+		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+			return;
+		}
+
+		// Event object or event type
+		var type = event.type || event,
+			namespaces = [],
+			cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "!" ) >= 0 ) {
+			// Exclusive events trigger only for the exact event (no namespaces)
+			type = type.slice(0, -1);
+			exclusive = true;
+		}
+
+		if ( type.indexOf( "." ) >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+
+		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+			// No jQuery handlers for this event type, and it can't have inline handlers
+			return;
+		}
+
+		// Caller can pass in an Event, Object, or just an event type string
+		event = typeof event === "object" ?
+			// jQuery.Event object
+			event[ jQuery.expando ] ? event :
+			// Object literal
+			new jQuery.Event( type, event ) :
+			// Just the event type (string)
+			new jQuery.Event( type );
+
+		event.type = type;
+		event.isTrigger = true;
+		event.exclusive = exclusive;
+		event.namespace = namespaces.join( "." );
+		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+		// Handle a global trigger
+		if ( !elem ) {
+
+			// TODO: Stop taunting the data cache; remove global events and always attach to document
+			cache = jQuery.cache;
+			for ( i in cache ) {
+				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+				}
+			}
+			return;
+		}
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data != null ? jQuery.makeArray( data ) : [];
+		data.unshift( event );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		eventPath = [[ elem, special.bindType || type ]];
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+			old = null;
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push([ cur, bubbleType ]);
+				old = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( old && old === elem.ownerDocument ) {
+				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+			}
+		}
+
+		// Fire handlers on the event path
+		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+			cur = eventPath[i][0];
+			event.type = eventPath[i][1];
+
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+			// Note that this is a bare JS function and not a jQuery handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				// IE<9 dies on focus/blur to hidden element (#1486)
+				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					old = elem[ ontype ];
+
+					if ( old ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( old ) {
+						elem[ ontype ] = old;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event || window.event );
+
+		var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+			delegateCount = handlers.delegateCount,
+			args = [].slice.call( arguments, 0 ),
+			run_all = !event.exclusive && !event.namespace,
+			handlerQueue = [],
+			i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Determine handlers that should run if there are delegated events
+		// Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
+
+			// Pregenerate a single jQuery object for reuse with .is()
+			jqcur = jQuery(this);
+			jqcur.context = this.ownerDocument || this;
+
+			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+				selMatch = {};
+				matches = [];
+				jqcur[0] = cur;
+				for ( i = 0; i < delegateCount; i++ ) {
+					handleObj = handlers[ i ];
+					sel = handleObj.selector;
+
+					if ( selMatch[ sel ] === undefined ) {
+						selMatch[ sel ] = (
+							handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
+						);
+					}
+					if ( selMatch[ sel ] ) {
+						matches.push( handleObj );
+					}
+				}
+				if ( matches.length ) {
+					handlerQueue.push({ elem: cur, matches: matches });
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( handlers.length > delegateCount ) {
+			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+		}
+
+		// Run delegates first; they may want to stop propagation beneath us
+		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+			matched = handlerQueue[ i ];
+			event.currentTarget = matched.elem;
+
+			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+				handleObj = matched.matches[ j ];
+
+				// Triggered event must either 1) be non-exclusive and have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.data = handleObj.data;
+					event.handleObj = handleObj;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						event.result = ret;
+						if ( ret === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop,
+			originalEvent = event,
+			fixHook = jQuery.event.fixHooks[ event.type ] || {},
+			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = jQuery.Event( originalEvent );
+
+		for ( i = copy.length; i; ) {
+			prop = copy[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Target should not be a text node (#504, Safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+		if ( event.metaKey === undefined ) {
+			event.metaKey = event.ctrlKey;
+		}
+
+		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	special: {
+		ready: {
+			// Make sure the ready event is setup
+			setup: jQuery.bindReady
+		},
+
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+
+		focus: {
+			delegateType: "focusin"
+		},
+		blur: {
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( jQuery.isWindow( this ) ) {
+					this.onbeforeunload = eventHandle;
+				}
+			},
+
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		if ( elem.detachEvent ) {
+			elem.detachEvent( "on" + type, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// otherwise set the returnValue property of the original event to false (IE)
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj,
+				selector = handleObj.selector,
+				ret;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !form._submit_attached ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						// If form was submitted by the user, bubble the event up the tree
+						if ( this.parentNode && !event.isTrigger ) {
+							jQuery.event.simulate( "submit", this.parentNode, event, true );
+						}
+					});
+					form._submit_attached = true;
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+							jQuery.event.simulate( "change", this, event, true );
+						}
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					elem._change_attached = true;
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var origFn, type;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on.call( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			var handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( var type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	live: function( types, data, fn ) {
+		jQuery( this.context ).on( types, this.selector, data, fn );
+		return this;
+	},
+	die: function( types, fn ) {
+		jQuery( this.context ).off( types, this.selector || "**", fn );
+		return this;
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			return jQuery.event.trigger( type, data, this[0], true );
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments,
+			guid = fn.guid || jQuery.guid++,
+			i = 0,
+			toggler = function( event ) {
+				// Figure out which function to execute
+				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+				// Make sure that clicks stop
+				event.preventDefault();
+
+				// and execute the function
+				return args[ lastToggle ].apply( this, arguments ) || false;
+			};
+
+		// link all the functions, so any of them can unbind this click handler
+		toggler.guid = guid;
+		while ( i < args.length ) {
+			args[ i++ ].guid = guid;
+		}
+
+		return this.click( toggler );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+jQuery.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 contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		if ( fn == null ) {
+			fn = data;
+			data = null;
+		}
+
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+
+	if ( rkeyEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+	}
+
+	if ( rmouseEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+	}
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	expando = "sizcache" + (Math.random() + '').replace('.', ''),
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true,
+	rBackslash = /\\/g,
+	rReturn = /\r\n/g,
+	rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+	results = results || [];
+	context = context || document;
+
+	var origContext = context;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var m, set, checkSet, extra, ret, cur, pop, i,
+		prune = true,
+		contextXML = Sizzle.isXML( context ),
+		parts = [],
+		soFar = selector;
+	
+	// Reset the position of the chunker regexp (start from head)
+	do {
+		chunker.exec( "" );
+		m = chunker.exec( soFar );
+
+		if ( m ) {
+			soFar = m[3];
+		
+			parts.push( m[1] );
+		
+			if ( m[2] ) {
+				extra = m[3];
+				break;
+			}
+		}
+	} while ( m );
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context, seed );
+
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+				
+				set = posProcess( selector, set, seed );
+			}
+		}
+
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+			ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set )[0] :
+				ret.set[0];
+		}
+
+		if ( context ) {
+			ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+			set = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set ) :
+				ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray( set );
+
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				cur = parts.pop();
+				pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+
+		} else if ( context && context.nodeType === 1 ) {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+
+		} else {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort( sortOrder );
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[ i - 1 ] ) {
+					results.splice( i--, 1 );
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+	return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+	return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+	var set, i, len, match, type, left;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+		type = Expr.order[i];
+		
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			left = match[1];
+			match.splice( 1, 1 );
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace( rBackslash, "" );
+				set = Expr.find[ type ]( match, context, isXML );
+
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( "*" ) :
+			[];
+	}
+
+	return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+	var match, anyFound,
+		type, found, item, filter, left,
+		i, pass,
+		old = expr,
+		result = [],
+		curLoop = set,
+		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+	while ( expr && set.length ) {
+		for ( type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				filter = Expr.filter[ type ];
+				left = match[1];
+
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							pass = not ^ found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+
+								} else {
+									curLoop[i] = false;
+								}
+
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Utility function for retreiving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+var getText = Sizzle.getText = function( elem ) {
+    var i, node,
+		nodeType = elem.nodeType,
+		ret = "";
+
+	if ( nodeType ) {
+		if ( nodeType === 1 || nodeType === 9 ) {
+			// Use textContent || innerText for elements
+			if ( typeof elem.textContent === 'string' ) {
+				return elem.textContent;
+			} else if ( typeof elem.innerText === 'string' ) {
+				// Replace IE's carriage returns
+				return elem.innerText.replace( rReturn, '' );
+			} else {
+				// Traverse it's children
+				for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+					ret += getText( elem );
+				}
+			}
+		} else if ( nodeType === 3 || nodeType === 4 ) {
+			return elem.nodeValue;
+		}
+	} else {
+
+		// If no nodeType, this is expected to be an array
+		for ( i = 0; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			if ( node.nodeType !== 8 ) {
+				ret += getText( node );
+			}
+		}
+	}
+	return ret;
+};
+
+var Expr = Sizzle.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+
+	leftMatch: {},
+
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+
+	attrHandle: {
+		href: function( elem ) {
+			return elem.getAttribute( "href" );
+		},
+		type: function( elem ) {
+			return elem.getAttribute( "type" );
+		}
+	},
+
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !rNonWord.test( part ),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+
+		">": function( checkSet, part ) {
+			var elem,
+				isPartStr = typeof part === "string",
+				i = 0,
+				l = checkSet.length;
+
+			if ( isPartStr && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+
+			} else {
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+
+		"": function(checkSet, part, isXML){
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+		},
+
+		"~": function( checkSet, part, isXML ) {
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+		}
+	},
+
+	find: {
+		ID: function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		},
+
+		NAME: function( match, context ) {
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [],
+					results = context.getElementsByName( match[1] );
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+
+		TAG: function( match, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( match[1] );
+			}
+		}
+	},
+	preFilter: {
+		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+			match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+
+		ID: function( match ) {
+			return match[1].replace( rBackslash, "" );
+		},
+
+		TAG: function( match, curLoop ) {
+			return match[1].replace( rBackslash, "" ).toLowerCase();
+		},
+
+		CHILD: function( match ) {
+			if ( match[1] === "nth" ) {
+				if ( !match[2] ) {
+					Sizzle.error( match[0] );
+				}
+
+				match[2] = match[2].replace(/^\+|\s*/g, '');
+
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+			else if ( match[2] ) {
+				Sizzle.error( match[0] );
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+
+		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+			var name = match[1] = match[1].replace( rBackslash, "" );
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			// Handle if an un-quoted value was used
+			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+
+		PSEUDO: function( match, curLoop, inplace, result, not ) {
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+
+					return false;
+				}
+
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+			
+			return match;
+		},
+
+		POS: function( match ) {
+			match.unshift( true );
+
+			return match;
+		}
+	},
+	
+	filters: {
+		enabled: function( elem ) {
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+
+		disabled: function( elem ) {
+			return elem.disabled === true;
+		},
+
+		checked: function( elem ) {
+			return elem.checked === true;
+		},
+		
+		selected: function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+			
+			return elem.selected === true;
+		},
+
+		parent: function( elem ) {
+			return !!elem.firstChild;
+		},
+
+		empty: function( elem ) {
+			return !elem.firstChild;
+		},
+
+		has: function( elem, i, match ) {
+			return !!Sizzle( match[3], elem ).length;
+		},
+
+		header: function( elem ) {
+			return (/h\d/i).test( elem.nodeName );
+		},
+
+		text: function( elem ) {
+			var attr = elem.getAttribute( "type" ), type = elem.type;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+		},
+
+		radio: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+		},
+
+		checkbox: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+		},
+
+		file: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+		},
+
+		password: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+		},
+
+		submit: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "submit" === elem.type;
+		},
+
+		image: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+		},
+
+		reset: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "reset" === elem.type;
+		},
+
+		button: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && "button" === elem.type || name === "button";
+		},
+
+		input: function( elem ) {
+			return (/input|select|textarea|button/i).test( elem.nodeName );
+		},
+
+		focus: function( elem ) {
+			return elem === elem.ownerDocument.activeElement;
+		}
+	},
+	setFilters: {
+		first: function( elem, i ) {
+			return i === 0;
+		},
+
+		last: function( elem, i, match, array ) {
+			return i === array.length - 1;
+		},
+
+		even: function( elem, i ) {
+			return i % 2 === 0;
+		},
+
+		odd: function( elem, i ) {
+			return i % 2 === 1;
+		},
+
+		lt: function( elem, i, match ) {
+			return i < match[3] - 0;
+		},
+
+		gt: function( elem, i, match ) {
+			return i > match[3] - 0;
+		},
+
+		nth: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		},
+
+		eq: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function( elem, match, i, array ) {
+			var name = match[1],
+				filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var j = 0, l = not.length; j < l; j++ ) {
+					if ( not[j] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+
+			} else {
+				Sizzle.error( name );
+			}
+		},
+
+		CHILD: function( elem, match ) {
+			var first, last,
+				doneName, parent, cache,
+				count, diff,
+				type = match[1],
+				node = elem;
+
+			switch ( type ) {
+				case "only":
+				case "first":
+					while ( (node = node.previousSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					if ( type === "first" ) { 
+						return true; 
+					}
+
+					node = elem;
+
+				case "last":
+					while ( (node = node.nextSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					return true;
+
+				case "nth":
+					first = match[2];
+					last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+					
+					doneName = match[0];
+					parent = elem.parentNode;
+	
+					if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+						count = 0;
+						
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						} 
+
+						parent[ expando ] = doneName;
+					}
+					
+					diff = elem.nodeIndex - last;
+
+					if ( first === 0 ) {
+						return diff === 0;
+
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+
+		ID: function( elem, match ) {
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+
+		TAG: function( elem, match ) {
+			return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+		},
+		
+		CLASS: function( elem, match ) {
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+
+		ATTR: function( elem, match ) {
+			var name = match[1],
+				result = Sizzle.attr ?
+					Sizzle.attr( elem, name ) :
+					Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				!type && Sizzle.attr ?
+				result != null :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+
+		POS: function( elem, match, i, array ) {
+			var name = match[2],
+				filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS,
+	fescape = function(all, num){
+		return "\\" + (num - 0 + 1);
+	};
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+	
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+	makeArray = function( array, results ) {
+		var i = 0,
+			ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+
+			} else {
+				for ( ; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+	};
+
+} else {
+	sortOrder = function( a, b ) {
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+		} else if ( a.sourceIndex && b.sourceIndex ) {
+			return a.sourceIndex - b.sourceIndex;
+		}
+
+		var al, bl,
+			ap = [],
+			bp = [],
+			aup = a.parentNode,
+			bup = b.parentNode,
+			cur = aup;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+	siblingCheck = function( a, b, ret ) {
+		if ( a === b ) {
+			return ret;
+		}
+
+		var cur = a.nextSibling;
+
+		while ( cur ) {
+			if ( cur === b ) {
+				return -1;
+			}
+
+			cur = cur.nextSibling;
+		}
+
+		return 1;
+	};
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date()).getTime(),
+		root = document.documentElement;
+
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+
+				return m ?
+					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+
+		Expr.filter.ID = function( elem, match ) {
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+
+	// release memory in IE
+	root = form = null;
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function( match, context ) {
+			var results = context.getElementsByTagName( match[1] );
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+
+		Expr.attrHandle.href = function( elem ) {
+			return elem.getAttribute( "href", 2 );
+		};
+	}
+
+	// release memory in IE
+	div = null;
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle,
+			div = document.createElement("div"),
+			id = "__sizzle__";
+
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+	
+		Sizzle = function( query, context, extra, seed ) {
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && !Sizzle.isXML(context) ) {
+				// See if we find a selector to speed up
+				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+				
+				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+					// Speed-up: Sizzle("TAG")
+					if ( match[1] ) {
+						return makeArray( context.getElementsByTagName( query ), extra );
+					
+					// Speed-up: Sizzle(".CLASS")
+					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+						return makeArray( context.getElementsByClassName( match[2] ), extra );
+					}
+				}
+				
+				if ( context.nodeType === 9 ) {
+					// Speed-up: Sizzle("body")
+					// The body element only exists once, optimize finding it
+					if ( query === "body" && context.body ) {
+						return makeArray( [ context.body ], extra );
+						
+					// Speed-up: Sizzle("#ID")
+					} else if ( match && match[3] ) {
+						var elem = context.getElementById( match[3] );
+
+						// Check parentNode to catch when Blackberry 4.6 returns
+						// nodes that are no longer in the document #6963
+						if ( elem && elem.parentNode ) {
+							// Handle the case where IE and Opera return items
+							// by name instead of ID
+							if ( elem.id === match[3] ) {
+								return makeArray( [ elem ], extra );
+							}
+							
+						} else {
+							return makeArray( [], extra );
+						}
+					}
+					
+					try {
+						return makeArray( context.querySelectorAll(query), extra );
+					} catch(qsaError) {}
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					var oldContext = context,
+						old = context.getAttribute( "id" ),
+						nid = old || id,
+						hasParent = context.parentNode,
+						relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+					if ( !old ) {
+						context.setAttribute( "id", nid );
+					} else {
+						nid = nid.replace( /'/g, "\\$&" );
+					}
+					if ( relativeHierarchySelector && hasParent ) {
+						context = context.parentNode;
+					}
+
+					try {
+						if ( !relativeHierarchySelector || hasParent ) {
+							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+						}
+
+					} catch(pseudoError) {
+					} finally {
+						if ( !old ) {
+							oldContext.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		// release memory in IE
+		div = null;
+	})();
+}
+
+(function(){
+	var html = document.documentElement,
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+	if ( matches ) {
+		// Check to see if it's possible to do matchesSelector
+		// on a disconnected node (IE 9 fails this)
+		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+			pseudoWorks = false;
+
+		try {
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( document.documentElement, "[test!='']:sizzle" );
+	
+		} catch( pseudoError ) {
+			pseudoWorks = true;
+		}
+
+		Sizzle.matchesSelector = function( node, expr ) {
+			// Make sure that attribute selectors are quoted
+			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+			if ( !Sizzle.isXML( node ) ) {
+				try { 
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+						var ret = matches.call( node, expr );
+
+						// IE 9's matchesSelector returns false on disconnected nodes
+						if ( ret || !disconnectedMatch ||
+								// As well, disconnected nodes are said to be in a document
+								// fragment in IE 9, so check for that
+								node.document && node.document.nodeType !== 11 ) {
+							return ret;
+						}
+					}
+				} catch(e) {}
+			}
+
+			return Sizzle(expr, null, null, [node]).length > 0;
+		};
+	}
+})();
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+	
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function( match, context, isXML ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	// release memory in IE
+	div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem[ expando ] === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem[ expando ] = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+			
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem[ expando ] === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem[ expando ] = doneName;
+						elem.sizset = i;
+					}
+
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+if ( document.documentElement.contains ) {
+	Sizzle.contains = function( a, b ) {
+		return a !== b && (a.contains ? a.contains(b) : true);
+	};
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+	Sizzle.contains = function( a, b ) {
+		return !!(a.compareDocumentPosition(b) & 16);
+	};
+
+} else {
+	Sizzle.contains = function() {
+		return false;
+	};
+}
+
+Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833) 
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context, seed ) {
+	var match,
+		tmpSet = [],
+		later = "",
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet, seed );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+Sizzle.selectors.attrMap = {};
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	slice = Array.prototype.slice,
+	POS = jQuery.expr.match.POS,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var self = this,
+			i, l;
+
+		if ( typeof selector !== "string" ) {
+			return jQuery( selector ).filter(function() {
+				for ( i = 0, l = self.length; i < l; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			});
+		}
+
+		var ret = this.pushStack( "", "find", selector ),
+			length, n, r;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( n = length; n < ret.length; n++ ) {
+					for ( r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var targets = jQuery( target );
+		return this.filter(function() {
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+
+	is: function( selector ) {
+		return !!selector && ( 
+			typeof selector === "string" ?
+				// If this is a positional selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				POS.test( selector ) ? 
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var ret = [], i, l, cur = this[0];
+		
+		// Array (deprecated as of jQuery 1.7)
+		if ( jQuery.isArray( selectors ) ) {
+			var level = 1;
+
+			while ( cur && cur.ownerDocument && cur !== context ) {
+				for ( i = 0; i < selectors.length; i++ ) {
+
+					if ( jQuery( cur ).is( selectors[ i ] ) ) {
+						ret.push({ selector: selectors[ i ], elem: cur, level: level });
+					}
+				}
+
+				cur = cur.parentNode;
+				level++;
+			}
+
+			return ret;
+		}
+
+		// String
+		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+
+				} else {
+					cur = cur.parentNode;
+					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+						break;
+					}
+				}
+			}
+		}
+
+		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+		return this.pushStack( ret, "closest", selectors );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	andSelf: function() {
+		return this.add( this.prevObject );
+	}
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return jQuery.nth( elem, 2, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return jQuery.nth( elem, 2, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( elem.parentNode.firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.makeArray( elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, slice.call( arguments ).join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	nth: function( cur, result, dir, elem ) {
+		result = result || 1;
+		var num = 0;
+
+		for ( ; cur; cur = cur[dir] ) {
+			if ( cur.nodeType === 1 && ++num === result ) {
+				break;
+			}
+		}
+
+		return cur;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+
+
+
+
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+	safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style)/i,
+	rnocache = /<(?:script|object|embed|option|style)/i,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /\/(java|ecma)script/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+	wrapMap = {
+		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, "", "" ]
+	},
+	safeFragment = createSafeFragment( document );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( text ) {
+		if ( jQuery.isFunction(text) ) {
+			return this.each(function(i) {
+				var self = jQuery( this );
+
+				self.text( text.call(this, i, self.text()) );
+			});
+		}
+
+		if ( typeof text !== "object" && text !== undefined ) {
+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+		}
+
+		return jQuery.text( this );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		} else if ( arguments.length ) {
+			var set = jQuery.clean( arguments );
+			set.push.apply( set, this.toArray() );
+			return this.pushStack( set, "before", arguments );
+		}
+	},
+
+	after: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		} else if ( arguments.length ) {
+			var set = this.pushStack( this, "after", arguments );
+			set.push.apply( set, jQuery.clean(arguments) );
+			return set;
+		}
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		if ( value === undefined ) {
+			return this[0] && this[0].nodeType === 1 ?
+				this[0].innerHTML.replace(rinlinejQuery, "") :
+				null;
+
+		// See if we can take a shortcut and just use innerHTML
+		} else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+			value = value.replace(rxhtmlTag, "<$1></$2>");
+
+			try {
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					// Remove element nodes and prevent memory leaks
+					if ( this[i].nodeType === 1 ) {
+						jQuery.cleanData( this[i].getElementsByTagName("*") );
+						this[i].innerHTML = value;
+					}
+				}
+
+			// If using innerHTML throws an exception, use the fallback method
+			} catch(e) {
+				this.empty().append( value );
+			}
+
+		} else if ( jQuery.isFunction( value ) ) {
+			this.each(function(i){
+				var self = jQuery( this );
+
+				self.html( value.call(this, i, self.html()) );
+			});
+
+		} else {
+			this.empty().append( value );
+		}
+
+		return this;
+	},
+
+	replaceWith: function( value ) {
+		if ( this[0] && this[0].parentNode ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery( value ).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling,
+					parent = this.parentNode;
+
+				jQuery( this ).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		} else {
+			return this.length ?
+				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+				this;
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, fragment, parent,
+			value = args[0],
+			scripts = [];
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback, true );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call(this, i, table ? self.html() : undefined);
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			parent = value && value.parentNode;
+
+			// If we're in a fragment, just use that instead of building a new one
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+				results = { fragment: parent };
+
+			} else {
+				results = jQuery.buildFragment( args, this, scripts );
+			}
+
+			fragment = results.fragment;
+
+			if ( fragment.childNodes.length === 1 ) {
+				first = fragment = fragment.firstChild;
+			} else {
+				first = fragment.firstChild;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						// Make sure that we do not leak memory by inadvertently discarding
+						// the original fragment (which might have attached data) instead of
+						// using it; in addition, use the original fragment object for the last
+						// item instead of first because it can end up being emptied incorrectly
+						// in certain situations (Bug #8070).
+						// Fragments from the fragment cache must always be cloned and never used
+						// in place.
+						results.cacheable || ( l > 1 && i < lastIndex ) ?
+							jQuery.clone( fragment, true, true ) :
+							fragment
+					);
+				}
+			}
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, evalScript );
+			}
+		}
+
+		return this;
+	}
+});
+
+function root( elem, cur ) {
+	return jQuery.nodeName(elem, "table") ?
+		(elem.getElementsByTagName("tbody")[0] ||
+		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+		elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function cloneFixAttributes( src, dest ) {
+	var nodeName;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// clearAttributes removes the attributes, which we don't want,
+	// but also removes the attachEvent events, which we *do* want
+	if ( dest.clearAttributes ) {
+		dest.clearAttributes();
+	}
+
+	// mergeAttributes, in contrast, only merges back on the
+	// original attributes, not the events
+	if ( dest.mergeAttributes ) {
+		dest.mergeAttributes( src );
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 fail to clone children inside object elements that use
+	// the proprietary classid attribute value (rather than the type
+	// attribute) to identify the type of content to display
+	if ( nodeName === "object" ) {
+		dest.outerHTML = src.outerHTML;
+
+	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+		if ( src.checked ) {
+			dest.defaultChecked = dest.checked = src.checked;
+		}
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+
+	// Event data gets referenced instead of copied if the expando
+	// gets copied too
+	dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults, doc,
+	first = args[ 0 ];
+
+	// nodes may contain either an explicit document object,
+	// a jQuery collection or context object.
+	// If nodes[0] contains a valid object to assign to doc
+	if ( nodes && nodes[0] ) {
+		doc = nodes[0].ownerDocument || nodes[0];
+	}
+
+	// Ensure that an attr object doesn't incorrectly stand in as a document object
+	// Chrome and Firefox seem to allow this to occur and will throw exception
+	// Fixes #8950
+	if ( !doc.createDocumentFragment ) {
+		doc = document;
+	}
+
+	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+	if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
+		first.charAt(0) === "<" && !rnocache.test( first ) &&
+		(jQuery.support.checkClone || !rchecked.test( first )) &&
+		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+		cacheable = true;
+
+		cacheresults = jQuery.fragments[ first ];
+		if ( cacheresults && cacheresults !== 1 ) {
+			fragment = cacheresults;
+		}
+	}
+
+	if ( !fragment ) {
+		fragment = doc.createDocumentFragment();
+		jQuery.clean( args, doc, fragment, scripts );
+	}
+
+	if ( cacheable ) {
+		jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var ret = [],
+			insert = jQuery( selector ),
+			parent = this.length === 1 && this[0].parentNode;
+
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+
+		} else {
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
+				var elems = ( i > 0 ? this.clone(true) : this ).get();
+				jQuery( insert[i] )[ original ]( elems );
+				ret = ret.concat( elems );
+			}
+
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+function getAll( elem ) {
+	if ( typeof elem.getElementsByTagName !== "undefined" ) {
+		return elem.getElementsByTagName( "*" );
+
+	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
+		return elem.querySelectorAll( "*" );
+
+	} else {
+		return [];
+	}
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( elem.type === "checkbox" || elem.type === "radio" ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+	var nodeName = ( elem.nodeName || "" ).toLowerCase();
+	if ( nodeName === "input" ) {
+		fixDefaultChecked( elem );
+	// Skip scripts, get other children
+	} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
+		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+	}
+}
+
+// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
+function shimCloneNode( elem ) {
+	var div = document.createElement( "div" );
+	safeFragment.appendChild( div );
+
+	div.innerHTML = elem.outerHTML;
+	return div.firstChild;
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var srcElements,
+			destElements,
+			i,
+			// IE<=8 does not properly clone detached, unknown element nodes
+			clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
+				elem.cloneNode( true ) :
+				shimCloneNode( elem );
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+			// IE copies events bound via attachEvent when using cloneNode.
+			// Calling detachEvent on the clone will also remove the events
+			// from the original. In order to get around this, we use some
+			// proprietary methods to clear the events. Thanks to MooTools
+			// guys for this hotness.
+
+			cloneFixAttributes( elem, clone );
+
+			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+			srcElements = getAll( elem );
+			destElements = getAll( clone );
+
+			// Weird iteration because IE will replace the length property
+			// with an element if you are cloning the body and one of the
+			// elements on the page has a name or id of "length"
+			for ( i = 0; srcElements[i]; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					cloneFixAttributes( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			cloneCopyEvent( elem, clone );
+
+			if ( deepDataAndEvents ) {
+				srcElements = getAll( elem );
+				destElements = getAll( clone );
+
+				for ( i = 0; srcElements[i]; ++i ) {
+					cloneCopyEvent( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		srcElements = destElements = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	clean: function( elems, context, fragment, scripts ) {
+		var checkScriptType;
+
+		context = context || document;
+
+		// !context.createElement fails in IE with an error but returns typeof 'object'
+		if ( typeof context.createElement === "undefined" ) {
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+		}
+
+		var ret = [], j;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" ) {
+				if ( !rhtml.test( elem ) ) {
+					elem = context.createTextNode( elem );
+				} else {
+					// Fix "XHTML"-style tags in all browsers
+					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+					// Trim whitespace, otherwise indexOf won't work as expected
+					var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
+						wrap = wrapMap[ tag ] || wrapMap._default,
+						depth = wrap[0],
+						div = context.createElement("div");
+
+					// Append wrapper element to unknown element safe doc fragment
+					if ( context === document ) {
+						// Use the fragment we've already created for this document
+						safeFragment.appendChild( div );
+					} else {
+						// Use a fragment created with the owner document
+						createSafeFragment( context ).appendChild( div );
+					}
+
+					// Go to html and back, then peel off extra wrappers
+					div.innerHTML = wrap[1] + elem + wrap[2];
+
+					// Move to the right depth
+					while ( depth-- ) {
+						div = div.lastChild;
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						var hasBody = rtbody.test(elem),
+							tbody = tag === "table" && !hasBody ?
+								div.firstChild && div.firstChild.childNodes :
+
+								// String was a bare <thead> or <tfoot>
+								wrap[1] === "<table>" && !hasBody ?
+									div.childNodes :
+									[];
+
+						for ( j = tbody.length - 1; j >= 0 ; --j ) {
+							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+								tbody[ j ].parentNode.removeChild( tbody[ j ] );
+							}
+						}
+					}
+
+					// IE completely kills leading whitespace when innerHTML is used
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+					}
+
+					elem = div.childNodes;
+				}
+			}
+
+			// Resets defaultChecked for any radios and checkboxes
+			// about to be appended to the DOM in IE 6/7 (#8060)
+			var len;
+			if ( !jQuery.support.appendChecked ) {
+				if ( elem[0] && typeof (len = elem.length) === "number" ) {
+					for ( j = 0; j < len; j++ ) {
+						findInputs( elem[j] );
+					}
+				} else {
+					findInputs( elem );
+				}
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			checkScriptType = function( elem ) {
+				return !elem.type || rscriptType.test( elem.type );
+			};
+			for ( i = 0; ret[i]; i++ ) {
+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+				} else {
+					if ( ret[i].nodeType === 1 ) {
+						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+					}
+					fragment.appendChild( ret[i] );
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	cleanData: function( elems ) {
+		var data, id,
+			cache = jQuery.cache,
+			special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+				continue;
+			}
+
+			id = elem[ jQuery.expando ];
+
+			if ( id ) {
+				data = cache[ id ];
+
+				if ( data && data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						// This is a shortcut to avoid jQuery.event.remove's overhead
+						} else {
+							jQuery.removeEvent( elem, type, data.handle );
+						}
+					}
+
+					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
+					if ( data.handle ) {
+						data.handle.elem = null;
+					}
+				}
+
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+
+				delete cache[ id ];
+			}
+		}
+	}
+});
+
+function evalScript( i, elem ) {
+	if ( elem.src ) {
+		jQuery.ajax({
+			url: elem.src,
+			async: false,
+			dataType: "script"
+		});
+	} else {
+		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+	}
+
+	if ( elem.parentNode ) {
+		elem.parentNode.removeChild( elem );
+	}
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity=([^)]*)/,
+	// fixed for IE9, see #8346
+	rupper = /([A-Z]|^ms)/g,
+	rnumpx = /^-?\d+(?:px)?$/i,
+	rnum = /^-?\d/,
+	rrelNum = /^([\-+])=([\-+.\de]+)/,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssWidth = [ "Left", "Right" ],
+	cssHeight = [ "Top", "Bottom" ],
+	curCSS,
+
+	getComputedStyle,
+	currentStyle;
+
+jQuery.fn.css = function( name, value ) {
+	// Setting 'undefined' is a no-op
+	if ( arguments.length === 2 && value === undefined ) {
+		return this;
+	}
+
+	return jQuery.access( this, name, value, true, function( elem, name, value ) {
+		return value !== undefined ?
+			jQuery.style( elem, name, value ) :
+			jQuery.css( elem, name );
+	});
+};
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity", "opacity" );
+					return ret === "" ? "1" : ret;
+
+				} else {
+					return elem.style.opacity;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, origName = jQuery.camelCase( name ),
+			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+		name = jQuery.cssProps[ origName ] || origName;
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra ) {
+		var ret, hooks;
+
+		// Make sure that we're working with the right name
+		name = jQuery.camelCase( name );
+		hooks = jQuery.cssHooks[ name ];
+		name = jQuery.cssProps[ name ] || name;
+
+		// cssFloat needs a special treatment
+		if ( name === "cssFloat" ) {
+			name = "float";
+		}
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+			return ret;
+
+		// Otherwise, if a way to get the computed value exists, use that
+		} else if ( curCSS ) {
+			return curCSS( elem, name );
+		}
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( var name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		callback.call( elem );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+	}
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			var val;
+
+			if ( computed ) {
+				if ( elem.offsetWidth !== 0 ) {
+					return getWH( elem, name, extra );
+				} else {
+					jQuery.swap( elem, cssShow, function() {
+						val = getWH( elem, name, extra );
+					});
+				}
+
+				return val;
+			}
+		},
+
+		set: function( elem, value ) {
+			if ( rnumpx.test( value ) ) {
+				// ignore negative width and height values #1599
+				value = parseFloat( value );
+
+				if ( value >= 0 ) {
+					return value + "px";
+				}
+
+			} else {
+				return value;
+			}
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( parseFloat( RegExp.$1 ) / 100 ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there there is no filter style applied in a css rule, we are done
+				if ( currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+jQuery(function() {
+	// This hook cannot be added until DOM ready because the support test
+	// for it is not run until after DOM ready
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// Work around by temporarily setting element display to inline-block
+				var ret;
+				jQuery.swap( elem, { "display": "inline-block" }, function() {
+					if ( computed ) {
+						ret = curCSS( elem, "margin-right", "marginRight" );
+					} else {
+						ret = elem.style.marginRight;
+					}
+				});
+				return ret;
+			}
+		};
+	}
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+	getComputedStyle = function( elem, name ) {
+		var ret, defaultView, computedStyle;
+
+		name = name.replace( rupper, "-$1" ).toLowerCase();
+
+		if ( (defaultView = elem.ownerDocument.defaultView) &&
+				(computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+			ret = computedStyle.getPropertyValue( name );
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+		}
+
+		return ret;
+	};
+}
+
+if ( document.documentElement.currentStyle ) {
+	currentStyle = function( elem, name ) {
+		var left, rsLeft, uncomputed,
+			ret = elem.currentStyle && elem.currentStyle[ name ],
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret === null && style && (uncomputed = style[ name ]) ) {
+			ret = uncomputed;
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ( ret || 0 );
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+
+	// Start with offset property
+	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		which = name === "width" ? cssWidth : cssHeight,
+		i = 0,
+		len = which.length;
+
+	if ( val > 0 ) {
+		if ( extra !== "border" ) {
+			for ( ; i < len; i++ ) {
+				if ( !extra ) {
+					val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
+				}
+				if ( extra === "margin" ) {
+					val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
+				} else {
+					val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
+				}
+			}
+		}
+
+		return val + "px";
+	}
+
+	// Fall back to computed then uncomputed css if necessary
+	val = curCSS( elem, name, name );
+	if ( val < 0 || val == null ) {
+		val = elem.style[ name ] || 0;
+	}
+	// Normalize "", auto, and prepare for extra
+	val = parseFloat( val ) || 0;
+
+	// Add padding, border, margin
+	if ( extra ) {
+		for ( ; i < len; i++ ) {
+			val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
+			if ( extra !== "padding" ) {
+				val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
+			}
+			if ( extra === "margin" ) {
+				val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
+			}
+		}
+	}
+
+	return val + "px";
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth,
+			height = elem.offsetHeight;
+
+		return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rhash = /#.*$/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rquery = /\?/,
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+	rselectTextarea = /^(?:select|textarea)/i,
+	rspacesAjax = /\s+/,
+	rts = /([?&])_=[^&]*/,
+	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Document location
+	ajaxLocation,
+
+	// Document location segments
+	ajaxLocParts,
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		if ( jQuery.isFunction( func ) ) {
+			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+				i = 0,
+				length = dataTypes.length,
+				dataType,
+				list,
+				placeBefore;
+
+			// For each dataType in the dataTypeExpression
+			for ( ; i < length; i++ ) {
+				dataType = dataTypes[ i ];
+				// We control if we're asked to add before
+				// any existing element
+				placeBefore = /^\+/.test( dataType );
+				if ( placeBefore ) {
+					dataType = dataType.substr( 1 ) || "*";
+				}
+				list = structure[ dataType ] = structure[ dataType ] || [];
+				// then we add to the structure accordingly
+				list[ placeBefore ? "unshift" : "push" ]( func );
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+		dataType /* internal */, inspected /* internal */ ) {
+
+	dataType = dataType || options.dataTypes[ 0 ];
+	inspected = inspected || {};
+
+	inspected[ dataType ] = true;
+
+	var list = structure[ dataType ],
+		i = 0,
+		length = list ? list.length : 0,
+		executeOnly = ( structure === prefilters ),
+		selection;
+
+	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+		selection = list[ i ]( options, originalOptions, jqXHR );
+		// If we got redirected to another dataType
+		// we try there if executing only and not done already
+		if ( typeof selection === "string" ) {
+			if ( !executeOnly || inspected[ selection ] ) {
+				selection = undefined;
+			} else {
+				options.dataTypes.unshift( selection );
+				selection = inspectPrefiltersOrTransports(
+						structure, options, originalOptions, jqXHR, selection, inspected );
+			}
+		}
+	}
+	// If we're only executing or nothing was selected
+	// we try the catchall dataType if not done already
+	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+		selection = inspectPrefiltersOrTransports(
+				structure, options, originalOptions, jqXHR, "*", inspected );
+	}
+	// unnecessary when only executing (prefilters)
+	// but it'll be ignored by the caller in that case
+	return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+}
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" && _load ) {
+			return _load.apply( this, arguments );
+
+		// Don't do a request if no elements are being requested
+		} else if ( !this.length ) {
+			return this;
+		}
+
+		var off = url.indexOf( " " );
+		if ( off >= 0 ) {
+			var selector = url.slice( off, url.length );
+			url = url.slice( 0, off );
+		}
+
+		// Default to a GET request
+		var type = "GET";
+
+		// If the second parameter was provided
+		if ( params ) {
+			// If it's a function
+			if ( jQuery.isFunction( params ) ) {
+				// We assume that it's the callback
+				callback = params;
+				params = undefined;
+
+			// Otherwise, build a param string
+			} else if ( typeof params === "object" ) {
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+				type = "POST";
+			}
+		}
+
+		var self = this;
+
+		// Request the remote document
+		jQuery.ajax({
+			url: url,
+			type: type,
+			dataType: "html",
+			data: params,
+			// Complete callback (responseText is used internally)
+			complete: function( jqXHR, status, responseText ) {
+				// Store the response as specified by the jqXHR object
+				responseText = jqXHR.responseText;
+				// If successful, inject the HTML into all the matched elements
+				if ( jqXHR.isResolved() ) {
+					// #4825: Get the actual response in case
+					// a dataFilter is present in ajaxSettings
+					jqXHR.done(function( r ) {
+						responseText = r;
+					});
+					// See if a selector was specified
+					self.html( selector ?
+						// Create a dummy div to hold the results
+						jQuery("<div>")
+							// inject the contents of the document in, removing the scripts
+							// to avoid any 'Permission Denied' errors in IE
+							.append(responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [ responseText, status, jqXHR ] );
+				}
+			}
+		});
+
+		return this;
+	},
+
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+
+	serializeArray: function() {
+		return this.map(function(){
+			return this.elements ? jQuery.makeArray( this.elements ) : this;
+		})
+		.filter(function(){
+			return this.name && !this.disabled &&
+				( this.checked || rselectTextarea.test( this.nodeName ) ||
+					rinput.test( this.type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val, i ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+	jQuery.fn[ o ] = function( f ){
+		return this.on( o, f );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			type: method,
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	};
+});
+
+jQuery.extend({
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		if ( settings ) {
+			// Building a settings object
+			ajaxExtend( target, jQuery.ajaxSettings );
+		} else {
+			// Extending ajaxSettings
+			settings = target;
+			target = jQuery.ajaxSettings;
+		}
+		ajaxExtend( target, settings );
+		return target;
+	},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			text: "text/plain",
+			json: "application/json, text/javascript",
+			"*": allTypes
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// List of data converters
+		// 1) key format is "source_type destination_type" (a single space in-between)
+		// 2) the catchall symbol "*" can be used for source_type
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			context: true,
+			url: true
+		}
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events
+			// It's the callbackContext if one was provided in the options
+			// and if it's a DOM node or a jQuery collection
+			globalEventContext = callbackContext !== s &&
+				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+						jQuery( callbackContext ) : jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// ifModified key
+			ifModifiedKey,
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// transport
+			transport,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// The jqXHR state
+			state = 0,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Fake xhr
+			jqXHR = {
+
+				readyState: 0,
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( !state ) {
+						var lname = name.toLowerCase();
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match === undefined ? null : match;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					statusText = statusText || "abort";
+					if ( transport ) {
+						transport.abort( statusText );
+					}
+					done( 0, statusText );
+					return this;
+				}
+			};
+
+		// Callback for when everything is done
+		// It is defined here because jslint complains if it is declared
+		// at the end of the function (which would be more logical and readable)
+		function done( status, nativeStatusText, responses, headers ) {
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			var isSuccess,
+				success,
+				error,
+				statusText = nativeStatusText,
+				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+				lastModified,
+				etag;
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+
+					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+						jQuery.lastModified[ ifModifiedKey ] = lastModified;
+					}
+					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+						jQuery.etag[ ifModifiedKey ] = etag;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+
+					statusText = "notmodified";
+					isSuccess = true;
+
+				// If we have data
+				} else {
+
+					try {
+						success = ajaxConvert( s, response );
+						statusText = "success";
+						isSuccess = true;
+					} catch(e) {
+						// We have a parsererror
+						statusText = "parsererror";
+						error = e;
+					}
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( !statusText || status ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = "" + ( nativeStatusText || statusText );
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+						[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+		jqXHR.complete = completeDeferred.add;
+
+		// Status-dependent callbacks
+		jqXHR.statusCode = function( map ) {
+			if ( map ) {
+				var tmp;
+				if ( state < 2 ) {
+					for ( tmp in map ) {
+						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+					}
+				} else {
+					tmp = map[ jqXHR.status ];
+					jqXHR.then( tmp, tmp );
+				}
+			}
+			return this;
+		};
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+		// Determine if a cross-domain request is in order
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefiler, stop there
+		if ( state === 2 ) {
+			return false;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Get ifModifiedKey before adding the anti-cache parameter
+			ifModifiedKey = s.url;
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+
+				var ts = jQuery.now(),
+					// try replacing _= if it is there
+					ret = s.url.replace( rts, "$1_=" + ts );
+
+				// if nothing was replaced, add timestamp to the end
+				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			ifModifiedKey = ifModifiedKey || s.url;
+			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+			}
+			if ( jQuery.etag[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+			}
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+				// Abort if not done already
+				jqXHR.abort();
+				return false;
+
+		}
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout( function(){
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch (e) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [],
+			add = function( key, value ) {
+				// If value is a function, invoke it and return its value
+				value = jQuery.isFunction( value ) ? value() : value;
+				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+			};
+
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
+		if ( traditional === undefined ) {
+			traditional = jQuery.ajaxSettings.traditional;
+		}
+
+		// If an array was passed in, assume that it is an array of form elements.
+		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+			// Serialize the form elements
+			jQuery.each( a, function() {
+				add( this.name, this.value );
+			});
+
+		} else {
+			// If traditional, encode the "old" way (the way 1.3.2 or older
+			// did it), otherwise encode params recursively.
+			for ( var prefix in a ) {
+				buildParams( prefix, a[ prefix ], traditional, add );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join( "&" ).replace( r20, "+" );
+	}
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// If array item is non-scalar (array or object), encode its
+				// numeric index to resolve deserialization ambiguity issues.
+				// Note that rack (as of 1.0.0) can't currently deserialize
+				// nested arrays properly, and attempting to do so may cause
+				// a server error. Possible fixes are to modify rack's
+				// deserialization algorithm or to provide an option or flag
+				// to force array serialization to be shallow.
+				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && obj != null && typeof obj === "object" ) {
+		// Serialize object item.
+		for ( var name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields,
+		ct,
+		type,
+		finalDataType,
+		firstDataType;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	var dataTypes = s.dataTypes,
+		converters = {},
+		i,
+		key,
+		length = dataTypes.length,
+		tmp,
+		// Current and previous dataTypes
+		current = dataTypes[ 0 ],
+		prev,
+		// Conversion expression
+		conversion,
+		// Conversion function
+		conv,
+		// Conversion functions (transitive conversion)
+		conv1,
+		conv2;
+
+	// For each dataType in the chain
+	for ( i = 1; i < length; i++ ) {
+
+		// Create converters map
+		// with lowercased keys
+		if ( i === 1 ) {
+			for ( key in s.converters ) {
+				if ( typeof key === "string" ) {
+					converters[ key.toLowerCase() ] = s.converters[ key ];
+				}
+			}
+		}
+
+		// Get the dataTypes
+		prev = current;
+		current = dataTypes[ i ];
+
+		// If current is auto dataType, update it to prev
+		if ( current === "*" ) {
+			current = prev;
+		// If no auto and dataTypes are actually different
+		} else if ( prev !== "*" && prev !== current ) {
+
+			// Get the converter
+			conversion = prev + " " + current;
+			conv = converters[ conversion ] || converters[ "* " + current ];
+
+			// If there is no direct converter, search transitively
+			if ( !conv ) {
+				conv2 = undefined;
+				for ( conv1 in converters ) {
+					tmp = conv1.split( " " );
+					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+						conv2 = converters[ tmp[1] + " " + current ];
+						if ( conv2 ) {
+							conv1 = converters[ conv1 ];
+							if ( conv1 === true ) {
+								conv = conv2;
+							} else if ( conv2 === true ) {
+								conv = conv1;
+							}
+							break;
+						}
+					}
+				}
+			}
+			// If we found no converter, dispatch an error
+			if ( !( conv || conv2 ) ) {
+				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+			}
+			// If found converter is not an equivalence
+			if ( conv !== true ) {
+				// Convert with 1 or 2 converters accordingly
+				response = conv ? conv( response ) : conv2( conv1(response) );
+			}
+		}
+	}
+	return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+	jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		return jQuery.expando + "_" + ( jsc++ );
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+		( typeof s.data === "string" );
+
+	if ( s.dataTypes[ 0 ] === "jsonp" ||
+		s.jsonp !== false && ( jsre.test( s.url ) ||
+				inspectData && jsre.test( s.data ) ) ) {
+
+		var responseContainer,
+			jsonpCallback = s.jsonpCallback =
+				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+			previous = window[ jsonpCallback ],
+			url = s.url,
+			data = s.data,
+			replace = "$1" + jsonpCallback + "$2";
+
+		if ( s.jsonp !== false ) {
+			url = url.replace( jsre, replace );
+			if ( s.url === url ) {
+				if ( inspectData ) {
+					data = data.replace( jsre, replace );
+				}
+				if ( s.data === data ) {
+					// Add callback manually
+					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+				}
+			}
+		}
+
+		s.url = url;
+		s.data = data;
+
+		// Install callback
+		window[ jsonpCallback ] = function( response ) {
+			responseContainer = [ response ];
+		};
+
+		// Clean-up function
+		jqXHR.always(function() {
+			// Set callback back to previous value
+			window[ jsonpCallback ] = previous;
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( previous ) ) {
+				window[ jsonpCallback ]( responseContainer[ 0 ] );
+			}
+		});
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( jsonpCallback + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /javascript|ecmascript/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement( "script" );
+
+				script.async = "async";
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+
+						// Dereference the script
+						script = undefined;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+				// This arises when a base node is used (#2709 and #4378).
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( 0, 1 );
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+		// Abort all pending requests
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( 0, 1 );
+		}
+	} : false,
+	xhrId = 0,
+	xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+	jQuery.extend( jQuery.support, {
+		ajax: !!xhr,
+		cors: !!xhr && ( "withCredentials" in xhr )
+	});
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var xhr = s.xhr(),
+						handle,
+						i;
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( _ ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occured
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+									responses = {};
+									xml = xhr.responseXML;
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+									responses.text = xhr.responseText;
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					// if we're in sync mode or it's in cache
+					// and has been retrieved directly (IE6 & IE7)
+					// we need to manually fire the callback
+					if ( !s.async || xhr.readyState === 4 ) {
+						callback();
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback(0,1);
+					}
+				}
+			};
+		}
+	});
+}
+
+
+
+
+var elemdisplay = {},
+	iframe, iframeDoc,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	],
+	fxNow;
+
+jQuery.fn.extend({
+	show: function( speed, easing, callback ) {
+		var elem, display;
+
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("show", 3), speed, easing, callback );
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					// Reset the inline display of this element to learn if it is
+					// being hidden by cascaded rules or not
+					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+						display = elem.style.display = "";
+					}
+
+					// Set elements which have been overridden with display: none
+					// in a stylesheet to whatever the default browser style is
+					// for such an element
+					if ( display === "" && jQuery.css(elem, "display") === "none" ) {
+						jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+					}
+				}
+			}
+
+			// Set the display of most of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					if ( display === "" || display === "none" ) {
+						elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
+					}
+				}
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, easing, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, easing, callback);
+
+		} else {
+			var elem, display,
+				i = 0,
+				j = this.length;
+
+			for ( ; i < j; i++ ) {
+				elem = this[i];
+				if ( elem.style ) {
+					display = jQuery.css( elem, "display" );
+
+					if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
+						jQuery._data( elem, "olddisplay", display );
+					}
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				if ( this[i].style ) {
+					this[i].style.display = "none";
+				}
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2, callback ) {
+		var bool = typeof fn === "boolean";
+
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+			this._toggle.apply( this, arguments );
+
+		} else if ( fn == null || bool ) {
+			this.each(function() {
+				var state = bool ? fn : jQuery(this).is(":hidden");
+				jQuery(this)[ state ? "show" : "hide" ]();
+			});
+
+		} else {
+			this.animate(genFx("toggle", 3), fn, fn2, callback);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, easing, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, easing, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed( speed, easing, callback );
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete, [ false ] );
+		}
+
+		// Do not change referenced properties as per-property easing will be lost
+		prop = jQuery.extend( {}, prop );
+
+		function doAnimation() {
+			// XXX 'this' does not always have a nodeName when running the
+			// test suite
+
+			if ( optall.queue === false ) {
+				jQuery._mark( this );
+			}
+
+			var opt = jQuery.extend( {}, optall ),
+				isElement = this.nodeType === 1,
+				hidden = isElement && jQuery(this).is(":hidden"),
+				name, val, p, e,
+				parts, start, end, unit,
+				method;
+
+			// will store per property easing and be used to determine when an animation is complete
+			opt.animatedProperties = {};
+
+			for ( p in prop ) {
+
+				// property name normalization
+				name = jQuery.camelCase( p );
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+				}
+
+				val = prop[ name ];
+
+				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+				if ( jQuery.isArray( val ) ) {
+					opt.animatedProperties[ name ] = val[ 1 ];
+					val = prop[ name ] = val[ 0 ];
+				} else {
+					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+				}
+
+				if ( val === "hide" && hidden || val === "show" && !hidden ) {
+					return opt.complete.call( this );
+				}
+
+				if ( isElement && ( name === "height" || name === "width" ) ) {
+					// Make sure that nothing sneaks out
+					// Record all 3 overflow attributes because IE does not
+					// change the overflow attribute when overflowX and
+					// overflowY are set to the same value
+					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+					// Set display property to inline-block for height/width
+					// animations on inline elements that are having width/height animated
+					if ( jQuery.css( this, "display" ) === "inline" &&
+							jQuery.css( this, "float" ) === "none" ) {
+
+						// inline-level elements accept inline-block;
+						// block-level elements need to be inline with layout
+						if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
+							this.style.display = "inline-block";
+
+						} else {
+							this.style.zoom = 1;
+						}
+					}
+				}
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			for ( p in prop ) {
+				e = new jQuery.fx( this, opt, p );
+				val = prop[ p ];
+
+				if ( rfxtypes.test( val ) ) {
+
+					// Tracks whether to show or hide based on private
+					// data attached to the element
+					method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
+					if ( method ) {
+						jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
+						e[ method ]();
+					} else {
+						e[ val ]();
+					}
+
+				} else {
+					parts = rfxnum.exec( val );
+					start = e.cur();
+
+					if ( parts ) {
+						end = parseFloat( parts[2] );
+						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							jQuery.style( this, p, (end || 1) + unit);
+							start = ( (end || 1) / e.cur() ) * start;
+							jQuery.style( this, p, start + unit);
+						}
+
+						// If a +=/-= token was provided, we're doing a relative animation
+						if ( parts[1] ) {
+							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+						}
+
+						e.custom( start, end, unit );
+
+					} else {
+						e.custom( start, val, "" );
+					}
+				}
+			}
+
+			// For JS strict compliance
+			return true;
+		}
+
+		return optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+
+	stop: function( type, clearQueue, gotoEnd ) {
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var index,
+				hadTimers = false,
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			// clear marker counters if we know they won't be
+			if ( !gotoEnd ) {
+				jQuery._unmark( true, this );
+			}
+
+			function stopQueue( elem, data, index ) {
+				var hooks = data[ index ];
+				jQuery.removeData( elem, index, true );
+				hooks.stop( gotoEnd );
+			}
+
+			if ( type == null ) {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
+						stopQueue( this, data, index );
+					}
+				}
+			} else if ( data[ index = type + ".run" ] && data[ index ].stop ){
+				stopQueue( this, data, index );
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					if ( gotoEnd ) {
+
+						// force the next step to be the last
+						timers[ index ]( true );
+					} else {
+						timers[ index ].saveState();
+					}
+					hadTimers = true;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( !( gotoEnd && hadTimers ) ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	}
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout( clearFxNow, 0 );
+	return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+	fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx( "show", 1 ),
+	slideUp: genFx( "hide", 1 ),
+	slideToggle: genFx( "toggle", 1 ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+			complete: fn || !fn && easing ||
+				jQuery.isFunction( speed ) && speed,
+			duration: speed,
+			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+		};
+
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+		// normalize opt.queue - true/undefined/null -> "fx"
+		if ( opt.queue == null || opt.queue === true ) {
+			opt.queue = "fx";
+		}
+
+		// Queueing
+		opt.old = opt.complete;
+
+		opt.complete = function( noUnmark ) {
+			if ( jQuery.isFunction( opt.old ) ) {
+				opt.old.call( this );
+			}
+
+			if ( opt.queue ) {
+				jQuery.dequeue( this, opt.queue );
+			} else if ( noUnmark !== false ) {
+				jQuery._unmark( this );
+			}
+		};
+
+		return opt;
+	},
+
+	easing: {
+		linear: function( p, n, firstNum, diff ) {
+			return firstNum + diff * p;
+		},
+		swing: function( p, n, firstNum, diff ) {
+			return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
+		}
+	},
+
+	timers: [],
+
+	fx: function( elem, options, prop ) {
+		this.options = options;
+		this.elem = elem;
+		this.prop = prop;
+
+		options.orig = options.orig || {};
+	}
+
+});
+
+jQuery.fx.prototype = {
+	// Simple function for setting a style value
+	update: function() {
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
+	},
+
+	// Get the current size
+	cur: function() {
+		if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var parsed,
+			r = jQuery.css( this.elem, this.prop );
+		// Empty strings, null, undefined and "auto" are converted to 0,
+		// complex values such as "rotate(1rad)" are returned as is,
+		// simple values such as "10px" are parsed to Float.
+		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		var self = this,
+			fx = jQuery.fx;
+
+		this.startTime = fxNow || createFxNow();
+		this.end = to;
+		this.now = this.start = from;
+		this.pos = this.state = 0;
+		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+
+		function t( gotoEnd ) {
+			return self.step( gotoEnd );
+		}
+
+		t.queue = this.options.queue;
+		t.elem = this.elem;
+		t.saveState = function() {
+			if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
+				jQuery._data( self.elem, "fxshow" + self.prop, self.start );
+			}
+		};
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			timerId = setInterval( fx.tick, fx.interval );
+		}
+	},
+
+	// Simple 'show' function
+	show: function() {
+		var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
+		this.options.show = true;
+
+		// Begin the animation
+		// Make sure that we start at a small width/height to avoid any flash of content
+		if ( dataShow !== undefined ) {
+			// This show is picking up where a previous hide or show left off
+			this.custom( this.cur(), dataShow );
+		} else {
+			this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+		}
+
+		// Start by showing the element
+		jQuery( this.elem ).show();
+	},
+
+	// Simple 'hide' function
+	hide: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
+		this.options.hide = true;
+
+		// Begin the animation
+		this.custom( this.cur(), 0 );
+	},
+
+	// Each step of an animation
+	step: function( gotoEnd ) {
+		var p, n, complete,
+			t = fxNow || createFxNow(),
+			done = true,
+			elem = this.elem,
+			options = this.options;
+
+		if ( gotoEnd || t >= options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			options.animatedProperties[ this.prop ] = true;
+
+			for ( p in options.animatedProperties ) {
+				if ( options.animatedProperties[ p ] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				// Reset the overflow
+				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+					jQuery.each( [ "", "X", "Y" ], function( index, value ) {
+						elem.style[ "overflow" + value ] = options.overflow[ index ];
+					});
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( options.hide ) {
+					jQuery( elem ).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( options.hide || options.show ) {
+					for ( p in options.animatedProperties ) {
+						jQuery.style( elem, p, options.orig[ p ] );
+						jQuery.removeData( elem, "fxshow" + p, true );
+						// Toggle data is no longer needed
+						jQuery.removeData( elem, "toggle" + p, true );
+					}
+				}
+
+				// Execute the complete function
+				// in the event that the complete function throws an exception
+				// we must ensure it won't be called twice. #5684
+
+				complete = options.complete;
+				if ( complete ) {
+
+					options.complete = false;
+					complete.call( elem );
+				}
+			}
+
+			return false;
+
+		} else {
+			// classical easing cannot be used with an Infinity duration
+			if ( options.duration == Infinity ) {
+				this.now = t;
+			} else {
+				n = t - this.startTime;
+				this.state = n / options.duration;
+
+				// Perform the easing function, defaults to swing
+				this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
+				this.now = this.start + ( (this.end - this.start) * this.pos );
+			}
+			// Perform the next step of the animation
+			this.update();
+		}
+
+		return true;
+	}
+};
+
+jQuery.extend( jQuery.fx, {
+	tick: function() {
+		var timer,
+			timers = jQuery.timers,
+			i = 0;
+
+		for ( ; i < timers.length; i++ ) {
+			timer = timers[ i ];
+			// Checks the timer has not already been removed
+			if ( !timer() && timers[ i ] === timer ) {
+				timers.splice( i--, 1 );
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+
+	interval: 13,
+
+	stop: function() {
+		clearInterval( timerId );
+		timerId = null;
+	},
+
+	speeds: {
+		slow: 600,
+		fast: 200,
+		// Default speed
+		_default: 400
+	},
+
+	step: {
+		opacity: function( fx ) {
+			jQuery.style( fx.elem, "opacity", fx.now );
+		},
+
+		_default: function( fx ) {
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+			} else {
+				fx.elem[ fx.prop ] = fx.now;
+			}
+		}
+	}
+});
+
+// Adds width/height step functions
+// Do not set anything below 0
+jQuery.each([ "width", "height" ], function( i, prop ) {
+	jQuery.fx.step[ prop ] = function( fx ) {
+		jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
+	};
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+	if ( !elemdisplay[ nodeName ] ) {
+
+		var body = document.body,
+			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+			display = elem.css( "display" );
+		elem.remove();
+
+		// If the simple way fails,
+		// get element's real default display by attaching it to a temp iframe
+		if ( display === "none" || display === "" ) {
+			// No iframe to use yet, so create it
+			if ( !iframe ) {
+				iframe = document.createElement( "iframe" );
+				iframe.frameBorder = iframe.width = iframe.height = 0;
+			}
+
+			body.appendChild( iframe );
+
+			// Create a cacheable copy of the iframe document on first call.
+			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+			// document to it; WebKit & Firefox won't allow reusing the iframe document.
+			if ( !iframeDoc || !iframe.createElement ) {
+				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
+				iframeDoc.close();
+			}
+
+			elem = iframeDoc.createElement( nodeName );
+
+			iframeDoc.body.appendChild( elem );
+
+			display = jQuery.css( elem, "display" );
+			body.removeChild( iframe );
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+	rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0], box;
+
+		if ( options ) {
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		try {
+			box = elem.getBoundingClientRect();
+		} catch(e) {}
+
+		var doc = elem.ownerDocument,
+			docElem = doc.documentElement;
+
+		// Make sure we're not dealing with a disconnected DOM node
+		if ( !box || !jQuery.contains( docElem, elem ) ) {
+			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+		}
+
+		var body = doc.body,
+			win = getWindow(doc),
+			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+			top  = box.top  + scrollTop  - clientTop,
+			left = box.left + scrollLeft - clientLeft;
+
+		return { top: top, left: left };
+	};
+
+} else {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) {
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		var computedStyle,
+			offsetParent = elem.offsetParent,
+			prevOffsetParent = elem,
+			doc = elem.ownerDocument,
+			docElem = doc.documentElement,
+			body = doc.body,
+			defaultView = doc.defaultView,
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+			top = elem.offsetTop,
+			left = elem.offsetLeft;
+
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+			if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+				break;
+			}
+
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+			top  -= elem.scrollTop;
+			left -= elem.scrollLeft;
+
+			if ( elem === offsetParent ) {
+				top  += elem.offsetTop;
+				left += elem.offsetLeft;
+
+				if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+				}
+
+				prevOffsetParent = offsetParent;
+				offsetParent = elem.offsetParent;
+			}
+
+			if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+			}
+
+			prevComputedStyle = computedStyle;
+		}
+
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+			top  += body.offsetTop;
+			left += body.offsetLeft;
+		}
+
+		if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+		}
+
+		return { top: top, left: left };
+	};
+}
+
+jQuery.offset = {
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop,
+			left = body.offsetLeft;
+
+		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[0] ) {
+			return null;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+	var method = "scroll" + name;
+
+	jQuery.fn[ method ] = function( val ) {
+		var elem, win;
+
+		if ( val === undefined ) {
+			elem = this[ 0 ];
+
+			if ( !elem ) {
+				return null;
+			}
+
+			win = getWindow( elem );
+
+			// Return the scroll offset
+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+					win.document.body[ method ] :
+				elem[ method ];
+		}
+
+		// Set the scroll offset
+		return this.each(function() {
+			win = getWindow( this );
+
+			if ( win ) {
+				win.scrollTo(
+					!i ? val : jQuery( win ).scrollLeft(),
+					 i ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				this[ method ] = val;
+			}
+		});
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+
+
+
+
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+	var type = name.toLowerCase();
+
+	// innerHeight and innerWidth
+	jQuery.fn[ "inner" + name ] = function() {
+		var elem = this[0];
+		return elem ?
+			elem.style ?
+			parseFloat( jQuery.css( elem, type, "padding" ) ) :
+			this[ type ]() :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn[ "outer" + name ] = function( margin ) {
+		var elem = this[0];
+		return elem ?
+			elem.style ?
+			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+			this[ type ]() :
+			null;
+	};
+
+	jQuery.fn[ type ] = function( size ) {
+		// Get window width or height
+		var elem = this[0];
+		if ( !elem ) {
+			return size == null ? null : this;
+		}
+
+		if ( jQuery.isFunction( size ) ) {
+			return this.each(function( i ) {
+				var self = jQuery( this );
+				self[ type ]( size.call( this, i, self[ type ]() ) );
+			});
+		}
+
+		if ( jQuery.isWindow( elem ) ) {
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+			var docElemProp = elem.document.documentElement[ "client" + name ],
+				body = elem.document.body;
+			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+				body && body[ "client" + name ] || docElemProp;
+
+		// Get document width or height
+		} else if ( elem.nodeType === 9 ) {
+			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+			return Math.max(
+				elem.documentElement["client" + name],
+				elem.body["scroll" + name], elem.documentElement["scroll" + name],
+				elem.body["offset" + name], elem.documentElement["offset" + name]
+			);
+
+		// Get or set width or height on the element
+		} else if ( size === undefined ) {
+			var orig = jQuery.css( elem, type ),
+				ret = parseFloat( orig );
+
+			return jQuery.isNumeric( ret ) ? ret : orig;
+
+		// Set the width or height on the element (default to pixels if value is unitless)
+		} else {
+			return this.css( type, typeof size === "string" ? size : size + "px" );
+		}
+	};
+
+});
+
+
+
+
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+
+
+})( window );
diff --git a/jquery/jquery.ba-1.3-hashchange.js b/jquery/jquery.ba-1.3-hashchange.js
new file mode 100644
index 0000000..47105f4
--- /dev/null
+++ b/jquery/jquery.ba-1.3-hashchange.js
@@ -0,0 +1,390 @@
+/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+
+// Script: jQuery hashchange event
+//
+// *Version: 1.3, Last updated: 7/21/2010*
+// 
+// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
+// GitHub       - http://github.com/cowboy/jquery-hashchange/
+// Source       - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
+// (Minified)   - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
+// 
+// About: License
+// 
+// Copyright (c) 2010 "Cowboy" Ben Alman,
+// Dual licensed under the MIT and GPL licenses.
+// http://benalman.com/about/license/
+// 
+// About: Examples
+// 
+// These working examples, complete with fully commented code, illustrate a few
+// ways in which this plugin can be used.
+// 
+// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
+// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
+// 
+// About: Support and Testing
+// 
+// Information about what version or versions of jQuery this plugin has been
+// tested with, what browsers it has been tested in, and where the unit tests
+// reside (so you can test it yourself).
+// 
+// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
+//                   Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
+// Unit Tests      - http://benalman.com/code/projects/jquery-hashchange/unit/
+// 
+// About: Known issues
+// 
+// While this jQuery hashchange event implementation is quite stable and
+// robust, there are a few unfortunate browser bugs surrounding expected
+// hashchange event-based behaviors, independent of any JavaScript
+// window.onhashchange abstraction. See the following examples for more
+// information:
+// 
+// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
+// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
+// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
+// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
+// 
+// Also note that should a browser natively support the window.onhashchange 
+// event, but not report that it does, the fallback polling loop will be used.
+// 
+// About: Release History
+// 
+// 1.3   - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
+//         "removable" for mobile-only development. Added IE6/7 document.title
+//         support. Attempted to make Iframe as hidden as possible by using
+//         techniques from http://www.paciellogroup.com/blog/?p=604. Added 
+//         support for the "shortcut" format $(window).hashchange( fn ) and
+//         $(window).hashchange() like jQuery provides for built-in events.
+//         Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
+//         lowered its default value to 50. Added <jQuery.fn.hashchange.domain>
+//         and <jQuery.fn.hashchange.src> properties plus document-domain.html
+//         file to address access denied issues when setting document.domain in
+//         IE6/7.
+// 1.2   - (2/11/2010) Fixed a bug where coming back to a page using this plugin
+//         from a page on another domain would cause an error in Safari 4. Also,
+//         IE6/7 Iframe is now inserted after the body (this actually works),
+//         which prevents the page from scrolling when the event is first bound.
+//         Event can also now be bound before DOM ready, but it won't be usable
+//         before then in IE6/7.
+// 1.1   - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
+//         where browser version is incorrectly reported as 8.0, despite
+//         inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
+// 1.0   - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
+//         window.onhashchange functionality into a separate plugin for users
+//         who want just the basic event & back button support, without all the
+//         extra awesomeness that BBQ provides. This plugin will be included as
+//         part of jQuery BBQ, but also be available separately.
+
+(function($,window,undefined){
+  '$:nomunge'; // Used by YUI compressor.
+  
+  // Reused string.
+  var str_hashchange = 'hashchange',
+    
+    // Method / object references.
+    doc = document,
+    fake_onhashchange,
+    special = $.event.special,
+    
+    // Does the browser support window.onhashchange? Note that IE8 running in
+    // IE7 compatibility mode reports true for 'onhashchange' in window, even
+    // though the event isn't supported, so also test document.documentMode.
+    doc_mode = doc.documentMode,
+    supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
+  
+  // Get location.hash (or what you'd expect location.hash to be) sans any
+  // leading #. Thanks for making this necessary, Firefox!
+  function get_fragment( url ) {
+    url = url || location.href;
+    return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
+  };
+  
+  // Method: jQuery.fn.hashchange
+  // 
+  // Bind a handler to the window.onhashchange event or trigger all bound
+  // window.onhashchange event handlers. This behavior is consistent with
+  // jQuery's built-in event handlers.
+  // 
+  // Usage:
+  // 
+  // > jQuery(window).hashchange( [ handler ] );
+  // 
+  // Arguments:
+  // 
+  //  handler - (Function) Optional handler to be bound to the hashchange
+  //    event. This is a "shortcut" for the more verbose form:
+  //    jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
+  //    all bound window.onhashchange event handlers will be triggered. This
+  //    is a shortcut for the more verbose
+  //    jQuery(window).trigger( 'hashchange' ). These forms are described in
+  //    the <hashchange event> section.
+  // 
+  // Returns:
+  // 
+  //  (jQuery) The initial jQuery collection of elements.
+  
+  // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
+  // $(elem).hashchange() for triggering, like jQuery does for built-in events.
+  $.fn[ str_hashchange ] = function( fn ) {
+    return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
+  };
+  
+  // Property: jQuery.fn.hashchange.delay
+  // 
+  // The numeric interval (in milliseconds) at which the <hashchange event>
+  // polling loop executes. Defaults to 50.
+  
+  // Property: jQuery.fn.hashchange.domain
+  // 
+  // If you're setting document.domain in your JavaScript, and you want hash
+  // history to work in IE6/7, not only must this property be set, but you must
+  // also set document.domain BEFORE jQuery is loaded into the page. This
+  // property is only applicable if you are supporting IE6/7 (or IE8 operating
+  // in "IE7 compatibility" mode).
+  // 
+  // In addition, the <jQuery.fn.hashchange.src> property must be set to the
+  // path of the included "document-domain.html" file, which can be renamed or
+  // modified if necessary (note that the document.domain specified must be the
+  // same in both your main JavaScript as well as in this file).
+  // 
+  // Usage:
+  // 
+  // jQuery.fn.hashchange.domain = document.domain;
+  
+  // Property: jQuery.fn.hashchange.src
+  // 
+  // If, for some reason, you need to specify an Iframe src file (for example,
+  // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
+  // do so using this property. Note that when using this property, history
+  // won't be recorded in IE6/7 until the Iframe src file loads. This property
+  // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
+  // compatibility" mode).
+  // 
+  // Usage:
+  // 
+  // jQuery.fn.hashchange.src = 'path/to/file.html';
+  
+  $.fn[ str_hashchange ].delay = 50;
+  /*
+  $.fn[ str_hashchange ].domain = null;
+  $.fn[ str_hashchange ].src = null;
+  */
+  
+  // Event: hashchange event
+  // 
+  // Fired when location.hash changes. In browsers that support it, the native
+  // HTML5 window.onhashchange event is used, otherwise a polling loop is
+  // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
+  // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
+  // compatibility" mode), a hidden Iframe is created to allow the back button
+  // and hash-based history to work.
+  // 
+  // Usage as described in <jQuery.fn.hashchange>:
+  // 
+  // > // Bind an event handler.
+  // > jQuery(window).hashchange( function(e) {
+  // >   var hash = location.hash;
+  // >   ...
+  // > });
+  // > 
+  // > // Manually trigger the event handler.
+  // > jQuery(window).hashchange();
+  // 
+  // A more verbose usage that allows for event namespacing:
+  // 
+  // > // Bind an event handler.
+  // > jQuery(window).bind( 'hashchange', function(e) {
+  // >   var hash = location.hash;
+  // >   ...
+  // > });
+  // > 
+  // > // Manually trigger the event handler.
+  // > jQuery(window).trigger( 'hashchange' );
+  // 
+  // Additional Notes:
+  // 
+  // * The polling loop and Iframe are not created until at least one handler
+  //   is actually bound to the 'hashchange' event.
+  // * If you need the bound handler(s) to execute immediately, in cases where
+  //   a location.hash exists on page load, via bookmark or page refresh for
+  //   example, use jQuery(window).hashchange() or the more verbose 
+  //   jQuery(window).trigger( 'hashchange' ).
+  // * The event can be bound before DOM ready, but since it won't be usable
+  //   before then in IE6/7 (due to the necessary Iframe), recommended usage is
+  //   to bind it inside a DOM ready handler.
+  
+  // Override existing $.event.special.hashchange methods (allowing this plugin
+  // to be defined after jQuery BBQ in BBQ's source code).
+  special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
+    
+    // Called only when the first 'hashchange' event is bound to window.
+    setup: function() {
+      // If window.onhashchange is supported natively, there's nothing to do..
+      if ( supports_onhashchange ) { return false; }
+      
+      // Otherwise, we need to create our own. And we don't want to call this
+      // until the user binds to the event, just in case they never do, since it
+      // will create a polling loop and possibly even a hidden Iframe.
+      $( fake_onhashchange.start );
+    },
+    
+    // Called only when the last 'hashchange' event is unbound from window.
+    teardown: function() {
+      // If window.onhashchange is supported natively, there's nothing to do..
+      if ( supports_onhashchange ) { return false; }
+      
+      // Otherwise, we need to stop ours (if possible).
+      $( fake_onhashchange.stop );
+    }
+    
+  });
+  
+  // fake_onhashchange does all the work of triggering the window.onhashchange
+  // event for browsers that don't natively support it, including creating a
+  // polling loop to watch for hash changes and in IE 6/7 creating a hidden
+  // Iframe to enable back and forward.
+  fake_onhashchange = (function(){
+    var self = {},
+      timeout_id,
+      
+      // Remember the initial hash so it doesn't get triggered immediately.
+      last_hash = get_fragment(),
+      
+      fn_retval = function(val){ return val; },
+      history_set = fn_retval,
+      history_get = fn_retval;
+    
+    // Start the polling loop.
+    self.start = function() {
+      timeout_id || poll();
+    };
+    
+    // Stop the polling loop.
+    self.stop = function() {
+      timeout_id && clearTimeout( timeout_id );
+      timeout_id = undefined;
+    };
+    
+    // This polling loop checks every $.fn.hashchange.delay milliseconds to see
+    // if location.hash has changed, and triggers the 'hashchange' event on
+    // window when necessary.
+    function poll() {
+      var hash = get_fragment(),
+        history_hash = history_get( last_hash );
+      
+      if ( hash !== last_hash ) {
+        history_set( last_hash = hash, history_hash );
+        
+        $(window).trigger( str_hashchange );
+        
+      } else if ( history_hash !== last_hash ) {
+        location.href = location.href.replace( /#.*/, '' ) + history_hash;
+      }
+      
+      timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
+    };
+    
+    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+    // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
+    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+    $.browser.msie && !supports_onhashchange && (function(){
+      // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
+      // when running in "IE7 compatibility" mode.
+      
+      var iframe,
+        iframe_src;
+      
+      // When the event is bound and polling starts in IE 6/7, create a hidden
+      // Iframe for history handling.
+      self.start = function(){
+        if ( !iframe ) {
+          iframe_src = $.fn[ str_hashchange ].src;
+          iframe_src = iframe_src && iframe_src + get_fragment();
+          
+          // Create hidden Iframe. Attempt to make Iframe as hidden as possible
+          // by using techniques from http://www.paciellogroup.com/blog/?p=604.
+          iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
+            
+            // When Iframe has completely loaded, initialize the history and
+            // start polling.
+            .one( 'load', function(){
+              iframe_src || history_set( get_fragment() );
+              poll();
+            })
+            
+            // Load Iframe src if specified, otherwise nothing.
+            .attr( 'src', iframe_src || 'javascript:0' )
+            
+            // Append Iframe after the end of the body to prevent unnecessary
+            // initial page scrolling (yes, this works).
+            .insertAfter( 'body' )[0].contentWindow;
+          
+          // Whenever `document.title` changes, update the Iframe's title to
+          // prettify the back/next history menu entries. Since IE sometimes
+          // errors with "Unspecified error" the very first time this is set
+          // (yes, very useful) wrap this with a try/catch block.
+          doc.onpropertychange = function(){
+            try {
+              if ( event.propertyName === 'title' ) {
+                iframe.document.title = doc.title;
+              }
+            } catch(e) {}
+          };
+          
+        }
+      };
+      
+      // Override the "stop" method since an IE6/7 Iframe was created. Even
+      // if there are no longer any bound event handlers, the polling loop
+      // is still necessary for back/next to work at all!
+      self.stop = fn_retval;
+      
+      // Get history by looking at the hidden Iframe's location.hash.
+      history_get = function() {
+        return get_fragment( iframe.location.href );
+      };
+      
+      // Set a new history item by opening and then closing the Iframe
+      // document, *then* setting its location.hash. If document.domain has
+      // been set, update that as well.
+      history_set = function( hash, history_hash ) {
+        var iframe_doc = iframe.document,
+          domain = $.fn[ str_hashchange ].domain;
+        
+        if ( hash !== history_hash ) {
+          // Update Iframe with any initial `document.title` that might be set.
+          iframe_doc.title = doc.title;
+          
+          // Opening the Iframe's document after it has been closed is what
+          // actually adds a history entry.
+          iframe_doc.open();
+          
+          // Set document.domain for the Iframe document as well, if necessary.
+          domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' );
+          
+          iframe_doc.close();
+          
+          // Update the Iframe's hash, for great justice.
+          iframe.location.hash = hash;
+        }
+      };
+      
+    })();
+    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
+    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    
+    return self;
+  })();
+  
+})(jQuery,this);
diff --git a/jquery/jquery.scrollTo-1.4.2.js b/jquery/jquery.scrollTo-1.4.2.js
new file mode 100644
index 0000000..eec31e1
--- /dev/null
+++ b/jquery/jquery.scrollTo-1.4.2.js
@@ -0,0 +1,215 @@
+/**
+ * jQuery.ScrollTo
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 5/25/2009
+ *
+ * @projectDescription Easy element scrolling using jQuery.
+ * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
+ * Works with jQuery +1.2.6. Tested on FF 2/3, IE 6/7/8, Opera 9.5/6, Safari 3, Chrome 1 on WinXP.
+ *
+ * @author Ariel Flesler
+ * @version 1.4.2
+ *
+ * @id jQuery.scrollTo
+ * @id jQuery.fn.scrollTo
+ * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
+ *	  The different options for target are:
+ *		- A number position (will be applied to all axes).
+ *		- A string position ('44', '100px', '+=90', etc ) will be applied to all axes
+ *		- A jQuery/DOM element ( logically, child of the element to scroll )
+ *		- A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
+ *		- A hash { top:x, left:y }, x and y can be any kind of number/string like above.
+*		- A percentage of the container's dimension/s, for example: 50% to go to the middle.
+ *		- The string 'max' for go-to-end. 
+ * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
+ * @param {Object,Function} settings Optional set of settings or the onAfter callback.
+ *	 @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
+ *	 @option {Number} duration The OVERALL length of the animation.
+ *	 @option {String} easing The easing method for the animation.
+ *	 @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
+ *	 @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
+ *	 @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
+ *	 @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
+ *	 @option {Function} onAfter Function to be called after the scrolling ends. 
+ *	 @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
+ * @return {jQuery} Returns the same jQuery object, for chaining.
+ *
+ * @desc Scroll to a fixed position
+ * @example $('div').scrollTo( 340 );
+ *
+ * @desc Scroll relatively to the actual position
+ * @example $('div').scrollTo( '+=340px', { axis:'y' } );
+ *
+ * @dec Scroll using a selector (relative to the scrolled element)
+ * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
+ *
+ * @ Scroll to a DOM element (same for jQuery object)
+ * @example var second_child = document.getElementById('container').firstChild.nextSibling;
+ *			$('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
+ *				alert('scrolled!!');																   
+ *			}});
+ *
+ * @desc Scroll on both axes, to different values
+ * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
+ */
+;(function( $ ){
+	
+	var $scrollTo = $.scrollTo = function( target, duration, settings ){
+		$(window).scrollTo( target, duration, settings );
+	};
+
+	$scrollTo.defaults = {
+		axis:'xy',
+		duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1
+	};
+
+	// Returns the element that needs to be animated to scroll the window.
+	// Kept for backwards compatibility (specially for localScroll & serialScroll)
+	$scrollTo.window = function( scope ){
+		return $(window)._scrollable();
+	};
+
+	// Hack, hack, hack :)
+	// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
+	$.fn._scrollable = function(){
+		return this.map(function(){
+			var elem = this,
+				isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
+
+				if( !isWin )
+					return elem;
+
+			var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
+			
+			return $.browser.safari || doc.compatMode == 'BackCompat' ?
+				doc.body : 
+				doc.documentElement;
+		});
+	};
+
+	$.fn.scrollTo = function( target, duration, settings ){
+		if( typeof duration == 'object' ){
+			settings = duration;
+			duration = 0;
+		}
+		if( typeof settings == 'function' )
+			settings = { onAfter:settings };
+			
+		if( target == 'max' )
+			target = 9e9;
+			
+		settings = $.extend( {}, $scrollTo.defaults, settings );
+		// Speed is still recognized for backwards compatibility
+		duration = duration || settings.speed || settings.duration;
+		// Make sure the settings are given right
+		settings.queue = settings.queue && settings.axis.length > 1;
+		
+		if( settings.queue )
+			// Let's keep the overall duration
+			duration /= 2;
+		settings.offset = both( settings.offset );
+		settings.over = both( settings.over );
+
+		return this._scrollable().each(function(){
+			var elem = this,
+				$elem = $(elem),
+				targ = target, toff, attr = {},
+				win = $elem.is('html,body');
+
+			switch( typeof targ ){
+				// A number will pass the regex
+				case 'number':
+				case 'string':
+					if( /^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ) ){
+						targ = both( targ );
+						// We are done
+						break;
+					}
+					// Relative selector, no break!
+					targ = $(targ,this);
+				case 'object':
+					// DOMElement / jQuery
+					if( targ.is || targ.style )
+						// Get the real position of the target 
+						toff = (targ = $(targ)).offset();
+			}
+			$.each( settings.axis.split(''), function( i, axis ){
+				var Pos	= axis == 'x' ? 'Left' : 'Top',
+					pos = Pos.toLowerCase(),
+					key = 'scroll' + Pos,
+					old = elem[key],
+					max = $scrollTo.max(elem, axis);
+
+				if( toff ){// jQuery / DOMElement
+					attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
+
+					// If it's a dom element, reduce the margin
+					if( settings.margin ){
+						attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
+						attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
+					}
+					
+					attr[key] += settings.offset[pos] || 0;
+					
+					if( settings.over[pos] )
+						// Scroll to a fraction of its width/height
+						attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
+				}else{ 
+					var val = targ[pos];
+					// Handle percentage values
+					attr[key] = val.slice && val.slice(-1) == '%' ? 
+						parseFloat(val) / 100 * max
+						: val;
+				}
+
+				// Number or 'number'
+				if( /^\d+$/.test(attr[key]) )
+					// Check the limits
+					attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
+
+				// Queueing axes
+				if( !i && settings.queue ){
+					// Don't waste time animating, if there's no need.
+					if( old != attr[key] )
+						// Intermediate animation
+						animate( settings.onAfterFirst );
+					// Don't animate this axis again in the next iteration.
+					delete attr[key];
+				}
+			});
+
+			animate( settings.onAfter );			
+
+			function animate( callback ){
+				$elem.animate( attr, duration, settings.easing, callback && function(){
+					callback.call(this, target, settings);
+				});
+			};
+
+		}).end();
+	};
+	
+	// Max scrolling position, works on quirks mode
+	// It only fails (not too badly) on IE, quirks mode.
+	$scrollTo.max = function( elem, axis ){
+		var Dim = axis == 'x' ? 'Width' : 'Height',
+			scroll = 'scroll'+Dim;
+		
+		if( !$(elem).is('html,body') )
+			return elem[scroll] - $(elem)[Dim.toLowerCase()]();
+		
+		var size = 'client' + Dim,
+			html = elem.ownerDocument.documentElement,
+			body = elem.ownerDocument.body;
+
+		return Math.max( html[scroll], body[scroll] ) 
+			 - Math.min( html[size]  , body[size]   );
+			
+	};
+
+	function both( val ){
+		return typeof val == 'object' ? val : { top:val, left:val };
+	};
+
+})( jQuery );
\ No newline at end of file
diff --git a/jquery/jquery.ui-1.8.18.core.js b/jquery/jquery.ui-1.8.18.core.js
new file mode 100644
index 0000000..98b4f9b
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.core.js
@@ -0,0 +1,319 @@
+/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function( $, undefined ) {
+
+// prevent duplicate loading
+// this is only a problem because we proxy existing functions
+// and we don't want to double proxy them
+$.ui = $.ui || {};
+if ( $.ui.version ) {
+	return;
+}
+
+$.extend( $.ui, {
+	version: "1.8.18",
+
+	keyCode: {
+		ALT: 18,
+		BACKSPACE: 8,
+		CAPS_LOCK: 20,
+		COMMA: 188,
+		COMMAND: 91,
+		COMMAND_LEFT: 91, // COMMAND
+		COMMAND_RIGHT: 93,
+		CONTROL: 17,
+		DELETE: 46,
+		DOWN: 40,
+		END: 35,
+		ENTER: 13,
+		ESCAPE: 27,
+		HOME: 36,
+		INSERT: 45,
+		LEFT: 37,
+		MENU: 93, // COMMAND_RIGHT
+		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 // COMMAND
+	}
+});
+
+// plugins
+$.fn.extend({
+	propAttr: $.fn.prop || $.fn.attr,
+
+	_focus: $.fn.focus,
+	focus: function( delay, fn ) {
+		return typeof delay === "number" ?
+			this.each(function() {
+				var elem = this;
+				setTimeout(function() {
+					$( elem ).focus();
+					if ( fn ) {
+						fn.call( elem );
+					}
+				}, delay );
+			}) :
+			this._focus.apply( this, arguments );
+	},
+
+	scrollParent: function() {
+		var scrollParent;
+		if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+			scrollParent = this.parents().filter(function() {
+				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+			}).eq(0);
+		} else {
+			scrollParent = this.parents().filter(function() {
+				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+			}).eq(0);
+		}
+
+		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
+	},
+
+	zIndex: function( zIndex ) {
+		if ( zIndex !== undefined ) {
+			return this.css( "zIndex", zIndex );
+		}
+
+		if ( this.length ) {
+			var elem = $( this[ 0 ] ), position, value;
+			while ( elem.length && elem[ 0 ] !== document ) {
+				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+				// This makes behavior of this function consistent across browsers
+				// WebKit always returns auto if the element is positioned
+				position = elem.css( "position" );
+				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+					// IE returns 0 when zIndex is not specified
+					// other browsers return a string
+					// we ignore the case of nested elements with an explicit value of 0
+					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+					value = parseInt( elem.css( "zIndex" ), 10 );
+					if ( !isNaN( value ) && value !== 0 ) {
+						return value;
+					}
+				}
+				elem = elem.parent();
+			}
+		}
+
+		return 0;
+	},
+
+	disableSelection: function() {
+		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+			".ui-disableSelection", function( event ) {
+				event.preventDefault();
+			});
+	},
+
+	enableSelection: function() {
+		return this.unbind( ".ui-disableSelection" );
+	}
+});
+
+$.each( [ "Width", "Height" ], function( i, name ) {
+	var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+		type = name.toLowerCase(),
+		orig = {
+			innerWidth: $.fn.innerWidth,
+			innerHeight: $.fn.innerHeight,
+			outerWidth: $.fn.outerWidth,
+			outerHeight: $.fn.outerHeight
+		};
+
+	function reduce( elem, size, border, margin ) {
+		$.each( side, function() {
+			size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
+			if ( border ) {
+				size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
+			}
+			if ( margin ) {
+				size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+			}
+		});
+		return size;
+	}
+
+	$.fn[ "inner" + name ] = function( size ) {
+		if ( size === undefined ) {
+			return orig[ "inner" + name ].call( this );
+		}
+
+		return this.each(function() {
+			$( this ).css( type, reduce( this, size ) + "px" );
+		});
+	};
+
+	$.fn[ "outer" + name] = function( size, margin ) {
+		if ( typeof size !== "number" ) {
+			return orig[ "outer" + name ].call( this, size );
+		}
+
+		return this.each(function() {
+			$( this).css( type, reduce( this, size, true, margin ) + "px" );
+		});
+	};
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+	var nodeName = element.nodeName.toLowerCase();
+	if ( "area" === nodeName ) {
+		var map = element.parentNode,
+			mapName = map.name,
+			img;
+		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+			return false;
+		}
+		img = $( "img[usemap=#" + mapName + "]" )[0];
+		return !!img && visible( img );
+	}
+	return ( /input|select|textarea|button|object/.test( nodeName )
+		? !element.disabled
+		: "a" == nodeName
+			? element.href || isTabIndexNotNaN
+			: isTabIndexNotNaN)
+		// the element and all of its ancestors must be visible
+		&& visible( element );
+}
+
+function visible( element ) {
+	return !$( element ).parents().andSelf().filter(function() {
+		return $.curCSS( this, "visibility" ) === "hidden" ||
+			$.expr.filters.hidden( this );
+	}).length;
+}
+
+$.extend( $.expr[ ":" ], {
+	data: function( elem, i, match ) {
+		return !!$.data( elem, match[ 3 ] );
+	},
+
+	focusable: function( element ) {
+		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+	},
+
+	tabbable: function( element ) {
+		var tabIndex = $.attr( element, "tabindex" ),
+			isTabIndexNaN = isNaN( tabIndex );
+		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+	}
+});
+
+// support
+$(function() {
+	var body = document.body,
+		div = body.appendChild( div = document.createElement( "div" ) );
+
+	// access offsetHeight before setting the style to prevent a layout bug
+	// in IE 9 which causes the elemnt to continue to take up space even
+	// after it is removed from the DOM (#8026)
+	div.offsetHeight;
+
+	$.extend( div.style, {
+		minHeight: "100px",
+		height: "auto",
+		padding: 0,
+		borderWidth: 0
+	});
+
+	$.support.minHeight = div.offsetHeight === 100;
+	$.support.selectstart = "onselectstart" in div;
+
+	// set display to none to avoid a layout bug in IE
+	// http://dev.jquery.com/ticket/4014
+	body.removeChild( div ).style.display = "none";
+});
+
+
+
+
+
+// deprecated
+$.extend( $.ui, {
+	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
+	plugin: {
+		add: function( module, option, set ) {
+			var proto = $.ui[ module ].prototype;
+			for ( var i in set ) {
+				proto.plugins[ i ] = proto.plugins[ i ] || [];
+				proto.plugins[ i ].push( [ option, set[ i ] ] );
+			}
+		},
+		call: function( instance, name, args ) {
+			var set = instance.plugins[ name ];
+			if ( !set || !instance.element[ 0 ].parentNode ) {
+				return;
+			}
+	
+			for ( var i = 0; i < set.length; i++ ) {
+				if ( instance.options[ set[ i ][ 0 ] ] ) {
+					set[ i ][ 1 ].apply( instance.element, args );
+				}
+			}
+		}
+	},
+	
+	// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
+	contains: function( a, b ) {
+		return document.compareDocumentPosition ?
+			a.compareDocumentPosition( b ) & 16 :
+			a !== b && a.contains( b );
+	},
+	
+	// only used by resizable
+	hasScroll: function( el, a ) {
+	
+		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+		if ( $( el ).css( "overflow" ) === "hidden") {
+			return false;
+		}
+	
+		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+			has = false;
+	
+		if ( el[ scroll ] > 0 ) {
+			return true;
+		}
+	
+		// TODO: determine which cases actually cause this to happen
+		// if the element doesn't have the scroll set, see if it's possible to
+		// set the scroll
+		el[ scroll ] = 1;
+		has = ( el[ scroll ] > 0 );
+		el[ scroll ] = 0;
+		return has;
+	},
+	
+	// these are odd functions, fix the API or move into individual plugins
+	isOverAxis: function( x, reference, size ) {
+		//Determines when x coordinate is over "b" element axis
+		return ( x > reference ) && ( x < ( reference + size ) );
+	},
+	isOver: function( y, x, top, left, height, width ) {
+		//Determines when x, y coordinates is over "b" element
+		return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
+	}
+});
+
+})( jQuery );
diff --git a/jquery/jquery.ui-1.8.18.mouse.js b/jquery/jquery.ui-1.8.18.mouse.js
new file mode 100644
index 0000000..669d563
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.mouse.js
@@ -0,0 +1,162 @@
+/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+var mouseHandled = false;
+$( document ).mouseup( function( e ) {
+	mouseHandled = false;
+});
+
+$.widget("ui.mouse", {
+	options: {
+		cancel: ':input,option',
+		distance: 1,
+		delay: 0
+	},
+	_mouseInit: function() {
+		var self = this;
+
+		this.element
+			.bind('mousedown.'+this.widgetName, function(event) {
+				return self._mouseDown(event);
+			})
+			.bind('click.'+this.widgetName, function(event) {
+				if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
+				    $.removeData(event.target, self.widgetName + '.preventClickEvent');
+					event.stopImmediatePropagation();
+					return false;
+				}
+			});
+
+		this.started = false;
+	},
+
+	// TODO: make sure destroying one instance of mouse doesn't mess with
+	// other instances of mouse
+	_mouseDestroy: function() {
+		this.element.unbind('.'+this.widgetName);
+	},
+
+	_mouseDown: function(event) {
+		// don't let more than one widget handle mouseStart
+		if( mouseHandled ) { return };
+
+		// we may have missed mouseup (out of window)
+		(this._mouseStarted && this._mouseUp(event));
+
+		this._mouseDownEvent = event;
+
+		var self = this,
+			btnIsLeft = (event.which == 1),
+			// event.target.nodeName works around a bug in IE 8 with
+			// disabled inputs (#7620)
+			elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+			return true;
+		}
+
+		this.mouseDelayMet = !this.options.delay;
+		if (!this.mouseDelayMet) {
+			this._mouseDelayTimer = setTimeout(function() {
+				self.mouseDelayMet = true;
+			}, this.options.delay);
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted = (this._mouseStart(event) !== false);
+			if (!this._mouseStarted) {
+				event.preventDefault();
+				return true;
+			}
+		}
+
+		// Click event may never have fired (Gecko & Opera)
+		if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
+			$.removeData(event.target, this.widgetName + '.preventClickEvent');
+		}
+
+		// these delegates are required to keep context
+		this._mouseMoveDelegate = function(event) {
+			return self._mouseMove(event);
+		};
+		this._mouseUpDelegate = function(event) {
+			return self._mouseUp(event);
+		};
+		$(document)
+			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+		event.preventDefault();
+		
+		mouseHandled = true;
+		return true;
+	},
+
+	_mouseMove: function(event) {
+		// IE mouseup check - mouseup happened when mouse was out of window
+		if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
+			return this._mouseUp(event);
+		}
+
+		if (this._mouseStarted) {
+			this._mouseDrag(event);
+			return event.preventDefault();
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted =
+				(this._mouseStart(this._mouseDownEvent, event) !== false);
+			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+		}
+
+		return !this._mouseStarted;
+	},
+
+	_mouseUp: function(event) {
+		$(document)
+			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+		if (this._mouseStarted) {
+			this._mouseStarted = false;
+
+			if (event.target == this._mouseDownEvent.target) {
+			    $.data(event.target, this.widgetName + '.preventClickEvent', true);
+			}
+
+			this._mouseStop(event);
+		}
+
+		return false;
+	},
+
+	_mouseDistanceMet: function(event) {
+		return (Math.max(
+				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+			) >= this.options.distance
+		);
+	},
+
+	_mouseDelayMet: function(event) {
+		return this.mouseDelayMet;
+	},
+
+	// These are placeholder methods, to be overriden by extending plugin
+	_mouseStart: function(event) {},
+	_mouseDrag: function(event) {},
+	_mouseStop: function(event) {},
+	_mouseCapture: function(event) { return true; }
+});
+
+})(jQuery);
diff --git a/jquery/jquery.ui-1.8.18.resizable.js b/jquery/jquery.ui-1.8.18.resizable.js
new file mode 100644
index 0000000..b441435
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.resizable.js
@@ -0,0 +1,808 @@
+/*
+ * jQuery UI Resizable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.resizable", $.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: 1000
+	},
+	_create: function() {
+
+		var self = this, o = this.options;
+		this.element.addClass("ui-resizable");
+
+		$.extend(this, {
+			_aspectRatio: !!(o.aspectRatio),
+			aspectRatio: o.aspectRatio,
+			originalElement: this.element,
+			_proportionallyResizeElements: [],
+			_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
+		});
+
+		//Wrap the element if it cannot hold child nodes
+		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+
+			//Create a wrapper element and set the wrapper to the new current internal element
+			this.element.wrap(
+				$('<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')
+				})
+			);
+
+			//Overwrite the original this.element
+			this.element = this.element.parent().data(
+				"resizable", this.element.data('resizable')
+			);
+
+			this.elementIsWrapper = true;
+
+			//Move margins to the wrapper
+			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});
+
+			//Prevent Safari textarea resize
+			this.originalResizeStyle = this.originalElement.css('resize');
+			this.originalElement.css('resize', 'none');
+
+			//Push the actual element to our proportionallyResize internal array
+			this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
+
+			// avoid IE jump (hard set the margin)
+			this.originalElement.css({ margin: this.originalElement.css('margin') });
+
+			// fix handlers offset
+			this._proportionallyResize();
+
+		}
+
+		this.handles = o.handles || (!$('.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 n = this.handles.split(","); this.handles = {};
+
+			for(var i = 0; i < n.length; i++) {
+
+				var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
+				var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
+
+				// increase zIndex of sw, se, ne, nw axis
+				//TODO : this modifies original option
+				if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+
+				//TODO : What's going on here?
+				if ('se' == handle) {
+					axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
+				};
+
+				//Insert into internal handles object and append to element
+				this.handles[handle] = '.ui-resizable-'+handle;
+				this.element.append(axis);
+			}
+
+		}
+
+		this._renderAxis = function(target) {
+
+			target = target || this.element;
+
+			for(var i in this.handles) {
+
+				if(this.handles[i].constructor == String)
+					this.handles[i] = $(this.handles[i], this.element).show();
+
+				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+
+					var axis = $(this.handles[i], this.element), padWrapper = 0;
+
+					//Checking the correct pad and border
+					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+					//The padding type i have to apply...
+					var padPos = [ 'padding',
+						/ne|nw|n/.test(i) ? 'Top' :
+						/se|sw|s/.test(i) ? 'Bottom' :
+						/^e$/.test(i) ? 'Right' : 'Left' ].join("");
+
+					target.css(padPos, padWrapper);
+
+					this._proportionallyResize();
+
+				}
+
+				//TODO: What's that good for? There's not anything to be executed left
+				if(!$(this.handles[i]).length)
+					continue;
+
+			}
+		};
+
+		//TODO: make renderAxis a prototype function
+		this._renderAxis(this.element);
+
+		this._handles = $('.ui-resizable-handle', this.element)
+			.disableSelection();
+
+		//Matching axis name
+		this._handles.mouseover(function() {
+			if (!self.resizing) {
+				if (this.className)
+					var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+				//Axis, default = se
+				self.axis = axis && axis[1] ? axis[1] : 'se';
+			}
+		});
+
+		//If we want to auto hide the elements
+		if (o.autoHide) {
+			this._handles.hide();
+			$(this.element)
+				.addClass("ui-resizable-autohide")
+				.hover(function() {
+					if (o.disabled) return;
+					$(this).removeClass("ui-resizable-autohide");
+					self._handles.show();
+				},
+				function(){
+					if (o.disabled) return;
+					if (!self.resizing) {
+						$(this).addClass("ui-resizable-autohide");
+						self._handles.hide();
+					}
+				});
+		}
+
+		//Initialize the mouse interaction
+		this._mouseInit();
+
+	},
+
+	destroy: function() {
+
+		this._mouseDestroy();
+
+		var _destroy = function(exp) {
+			$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+				.removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+		};
+
+		//TODO: Unwrap at same DOM position
+		if (this.elementIsWrapper) {
+			_destroy(this.element);
+			var wrapper = this.element;
+			wrapper.after(
+				this.originalElement.css({
+					position: wrapper.css('position'),
+					width: wrapper.outerWidth(),
+					height: wrapper.outerHeight(),
+					top: wrapper.css('top'),
+					left: wrapper.css('left')
+				})
+			).remove();
+		}
+
+		this.originalElement.css('resize', this.originalResizeStyle);
+		_destroy(this.originalElement);
+
+		return this;
+	},
+
+	_mouseCapture: function(event) {
+		var handle = false;
+		for (var i in this.handles) {
+			if ($(this.handles[i])[0] == event.target) {
+				handle = true;
+			}
+		}
+
+		return !this.options.disabled && handle;
+	},
+
+	_mouseStart: function(event) {
+
+		var o = this.options, iniPos = this.element.position(), el = this.element;
+
+		this.resizing = true;
+		this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
+
+		// bugfix for http://dev.jquery.com/ticket/1749
+		if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
+			el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
+		}
+
+		this._renderProxy();
+
+		var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
+
+		if (o.containment) {
+			curleft += $(o.containment).scrollLeft() || 0;
+			curtop += $(o.containment).scrollTop() || 0;
+		}
+
+		//Store needed variables
+		this.offset = this.helper.offset();
+		this.position = { left: curleft, top: curtop };
+		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+		this.originalPosition = { left: curleft, top: curtop };
+		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+		//Aspect Ratio
+		this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+
+	    var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+	    $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
+
+		el.addClass("ui-resizable-resizing");
+		this._propagate("start", event);
+		return true;
+	},
+
+	_mouseDrag: function(event) {
+
+		//Increase performance, avoid regex
+		var el = this.helper, o = this.options, props = {},
+			self = this, smp = this.originalMousePosition, a = this.axis;
+
+		var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
+		var trigger = this._change[a];
+		if (!trigger) return false;
+
+		// Calculate the attrs that will be change
+		var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
+
+		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+		this._updateVirtualBoundaries(event.shiftKey);
+		if (this._aspectRatio || event.shiftKey)
+			data = this._updateRatio(data, event);
+
+		data = this._respectSize(data, event);
+
+		// plugins callbacks need to be called first
+		this._propagate("resize", event);
+
+		el.css({
+			top: this.position.top + "px", left: this.position.left + "px",
+			width: this.size.width + "px", height: this.size.height + "px"
+		});
+
+		if (!this._helper && this._proportionallyResizeElements.length)
+			this._proportionallyResize();
+
+		this._updateCache(data);
+
+		// calling the user callback at the end
+		this._trigger('resize', event, this.ui());
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		this.resizing = false;
+		var o = this.options, self = this;
+
+		if(this._helper) {
+			var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+				soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+				soffsetw = ista ? 0 : self.sizeDiff.width;
+
+			var s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },
+				left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+				top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+			if (!o.animate)
+				this.element.css($.extend(s, { top: top, left: left }));
+
+			self.helper.height(self.size.height);
+			self.helper.width(self.size.width);
+
+			if (this._helper && !o.animate) this._proportionallyResize();
+		}
+
+		$('body').css('cursor', 'auto');
+
+		this.element.removeClass("ui-resizable-resizing");
+
+		this._propagate("stop", event);
+
+		if (this._helper) this.helper.remove();
+		return false;
+
+	},
+
+    _updateVirtualBoundaries: function(forceAspectRatio) {
+        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
+
+        b = {
+            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+        };
+
+        if(this._aspectRatio || forceAspectRatio) {
+            // We want to create an enclosing box whose aspect ration is the requested one
+            // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+            pMinWidth = b.minHeight * this.aspectRatio;
+            pMinHeight = b.minWidth / this.aspectRatio;
+            pMaxWidth = b.maxHeight * this.aspectRatio;
+            pMaxHeight = b.maxWidth / this.aspectRatio;
+
+            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+        }
+        this._vBoundaries = b;
+    },
+
+	_updateCache: function(data) {
+		var o = this.options;
+		this.offset = this.helper.offset();
+		if (isNumber(data.left)) this.position.left = data.left;
+		if (isNumber(data.top)) this.position.top = data.top;
+		if (isNumber(data.height)) this.size.height = data.height;
+		if (isNumber(data.width)) this.size.width = data.width;
+	},
+
+	_updateRatio: function(data, event) {
+
+		var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
+
+		if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
+		else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
+
+		if (a == 'sw') {
+			data.left = cpos.left + (csize.width - data.width);
+			data.top = null;
+		}
+		if (a == 'nw') {
+			data.top = cpos.top + (csize.height - data.height);
+			data.left = cpos.left + (csize.width - data.width);
+		}
+
+		return data;
+	},
+
+	_respectSize: function(data, event) {
+
+		var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
+				ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+					isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
+
+		if (isminw) data.width = o.minWidth;
+		if (isminh) data.height = o.minHeight;
+		if (ismaxw) data.width = o.maxWidth;
+		if (ismaxh) data.height = o.maxHeight;
+
+		var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
+		var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+
+		if (isminw && cw) data.left = dw - o.minWidth;
+		if (ismaxw && cw) data.left = dw - o.maxWidth;
+		if (isminh && ch)	data.top = dh - o.minHeight;
+		if (ismaxh && ch)	data.top = dh - o.maxHeight;
+
+		// fixing jump error on top/left - bug #2330
+		var isNotwh = !data.width && !data.height;
+		if (isNotwh && !data.left && data.top) data.top = null;
+		else if (isNotwh && !data.top && data.left) data.left = null;
+
+		return data;
+	},
+
+	_proportionallyResize: function() {
+
+		var o = this.options;
+		if (!this._proportionallyResizeElements.length) return;
+		var element = this.helper || this.element;
+
+		for (var i=0; i < this._proportionallyResizeElements.length; i++) {
+
+			var prel = this._proportionallyResizeElements[i];
+
+			if (!this.borderDif) {
+				var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
+					p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
+
+				this.borderDif = $.map(b, function(v, i) {
+					var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
+					return border + padding;
+				});
+			}
+
+			if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
+				continue;
+
+			prel.css({
+				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+			});
+
+		};
+
+	},
+
+	_renderProxy: function() {
+
+		var el = this.element, o = this.options;
+		this.elementOffset = el.offset();
+
+		if(this._helper) {
+
+			this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
+
+			// fix ie6 offset TODO: This seems broken
+			var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
+			pxyoffset = ( ie6 ? 2 : -1 );
+
+			this.helper.addClass(this._helper).css({
+				width: this.element.outerWidth() + pxyoffset,
+				height: this.element.outerHeight() + pxyoffset,
+				position: 'absolute',
+				left: this.elementOffset.left - ie6offset +'px',
+				top: this.elementOffset.top - ie6offset +'px',
+				zIndex: ++o.zIndex //TODO: Don't modify option
+			});
+
+			this.helper
+				.appendTo("body")
+				.disableSelection();
+
+		} else {
+			this.helper = this.element;
+		}
+
+	},
+
+	_change: {
+		e: function(event, dx, dy) {
+			return { width: this.originalSize.width + dx };
+		},
+		w: function(event, dx, dy) {
+			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+			return { left: sp.left + dx, width: cs.width - dx };
+		},
+		n: function(event, dx, dy) {
+			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+			return { top: sp.top + dy, height: cs.height - dy };
+		},
+		s: function(event, dx, dy) {
+			return { height: this.originalSize.height + dy };
+		},
+		se: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+		},
+		sw: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+		},
+		ne: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+		},
+		nw: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+		}
+	},
+
+	_propagate: function(n, event) {
+		$.ui.plugin.call(this, n, [event, this.ui()]);
+		(n != "resize" && this._trigger(n, event, 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
+		};
+	}
+
+});
+
+$.extend($.ui.resizable, {
+	version: "1.8.18"
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+	start: function (event, ui) {
+		var self = $(this).data("resizable"), o = self.options;
+
+		var _store = function (exp) {
+			$(exp).each(function() {
+				var el = $(this);
+				el.data("resizable-alsoresize", {
+					width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+					left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10)
+				});
+			});
+		};
+
+		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
+			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+		}else{
+			_store(o.alsoResize);
+		}
+	},
+
+	resize: function (event, ui) {
+		var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
+
+		var delta = {
+			height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
+			top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
+		},
+
+		_alsoResize = function (exp, c) {
+			$(exp).each(function() {
+				var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, 
+					css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
+
+				$.each(css, function (i, prop) {
+					var sum = (start[prop]||0) + (delta[prop]||0);
+					if (sum && sum >= 0)
+						style[prop] = sum || null;
+				});
+
+				el.css(style);
+			});
+		};
+
+		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+		}else{
+			_alsoResize(o.alsoResize);
+		}
+	},
+
+	stop: function (event, ui) {
+		$(this).removeData("resizable-alsoresize");
+	}
+});
+
+$.ui.plugin.add("resizable", "animate", {
+
+	stop: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options;
+
+		var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+					soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+						soffsetw = ista ? 0 : self.sizeDiff.width;
+
+		var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+					left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+						top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+		self.element.animate(
+			$.extend(style, top && left ? { top: top, left: left } : {}), {
+				duration: o.animateDuration,
+				easing: o.animateEasing,
+				step: function() {
+
+					var data = {
+						width: parseInt(self.element.css('width'), 10),
+						height: parseInt(self.element.css('height'), 10),
+						top: parseInt(self.element.css('top'), 10),
+						left: parseInt(self.element.css('left'), 10)
+					};
+
+					if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
+
+					// propagating resize, and updating values for each animation step
+					self._updateCache(data);
+					self._propagate("resize", event);
+
+				}
+			}
+		);
+	}
+
+});
+
+$.ui.plugin.add("resizable", "containment", {
+
+	start: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options, el = self.element;
+		var oc = o.containment,	ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+		if (!ce) return;
+
+		self.containerElement = $(ce);
+
+		if (/document/.test(oc) || oc == document) {
+			self.containerOffset = { left: 0, top: 0 };
+			self.containerPosition = { left: 0, top: 0 };
+
+			self.parentData = {
+				element: $(document), left: 0, top: 0,
+				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+			};
+		}
+
+		// i'm a node, so compute top, left, right, bottom
+		else {
+			var element = $(ce), p = [];
+			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+
+			self.containerOffset = element.offset();
+			self.containerPosition = element.position();
+			self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+
+			var co = self.containerOffset, ch = self.containerSize.height,	cw = self.containerSize.width,
+						width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+
+			self.parentData = {
+				element: ce, left: co.left, top: co.top, width: width, height: height
+			};
+		}
+	},
+
+	resize: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options,
+				ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
+				pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
+
+		if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
+
+		if (cp.left < (self._helper ? co.left : 0)) {
+			self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
+			if (pRatio) self.size.height = self.size.width / o.aspectRatio;
+			self.position.left = o.helper ? co.left : 0;
+		}
+
+		if (cp.top < (self._helper ? co.top : 0)) {
+			self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
+			if (pRatio) self.size.width = self.size.height * o.aspectRatio;
+			self.position.top = self._helper ? co.top : 0;
+		}
+
+		self.offset.left = self.parentData.left+self.position.left;
+		self.offset.top = self.parentData.top+self.position.top;
+
+		var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
+					hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
+
+		var isParent = self.containerElement.get(0) == self.element.parent().get(0),
+		    isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
+
+		if(isParent && isOffsetRelative) woset -= self.parentData.left;
+
+		if (woset + self.size.width >= self.parentData.width) {
+			self.size.width = self.parentData.width - woset;
+			if (pRatio) self.size.height = self.size.width / self.aspectRatio;
+		}
+
+		if (hoset + self.size.height >= self.parentData.height) {
+			self.size.height = self.parentData.height - hoset;
+			if (pRatio) self.size.width = self.size.height * self.aspectRatio;
+		}
+	},
+
+	stop: function(event, ui){
+		var self = $(this).data("resizable"), o = self.options, cp = self.position,
+				co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
+
+		var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
+
+		if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
+			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+		if (self._helper && !o.animate && (/static/).test(ce.css('position')))
+			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+	}
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+	start: function(event, ui) {
+
+		var self = $(this).data("resizable"), o = self.options, cs = self.size;
+
+		self.ghost = self.originalElement.clone();
+		self.ghost
+			.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+			.addClass('ui-resizable-ghost')
+			.addClass(typeof o.ghost == 'string' ? o.ghost : '');
+
+		self.ghost.appendTo(self.helper);
+
+	},
+
+	resize: function(event, ui){
+		var self = $(this).data("resizable"), o = self.options;
+		if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
+	},
+
+	stop: function(event, ui){
+		var self = $(this).data("resizable"), o = self.options;
+		if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
+	}
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+	resize: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
+		o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
+		var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
+
+		if (/^(se|s|e)$/.test(a)) {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+		}
+		else if (/^(ne)$/.test(a)) {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+			self.position.top = op.top - oy;
+		}
+		else if (/^(sw)$/.test(a)) {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+			self.position.left = op.left - ox;
+		}
+		else {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+			self.position.top = op.top - oy;
+			self.position.left = op.left - ox;
+		}
+	}
+
+});
+
+var num = function(v) {
+	return parseInt(v, 10) || 0;
+};
+
+var isNumber = function(value) {
+	return !isNaN(parseInt(value, 10));
+};
+
+})(jQuery);
diff --git a/jquery/jquery.ui-1.8.18.widget.js b/jquery/jquery.ui-1.8.18.widget.js
new file mode 100644
index 0000000..0c6f53f
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.widget.js
@@ -0,0 +1,272 @@
+/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function( $, undefined ) {
+
+// jQuery 1.4+
+if ( $.cleanData ) {
+	var _cleanData = $.cleanData;
+	$.cleanData = function( elems ) {
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			try {
+				$( elem ).triggerHandler( "remove" );
+			// http://bugs.jquery.com/ticket/8235
+			} catch( e ) {}
+		}
+		_cleanData( elems );
+	};
+} else {
+	var _remove = $.fn.remove;
+	$.fn.remove = function( selector, keepData ) {
+		return this.each(function() {
+			if ( !keepData ) {
+				if ( !selector || $.filter( selector, [ this ] ).length ) {
+					$( "*", this ).add( [ this ] ).each(function() {
+						try {
+							$( this ).triggerHandler( "remove" );
+						// http://bugs.jquery.com/ticket/8235
+						} catch( e ) {}
+					});
+				}
+			}
+			return _remove.call( $(this), selector, keepData );
+		});
+	};
+}
+
+$.widget = function( name, base, prototype ) {
+	var namespace = name.split( "." )[ 0 ],
+		fullName;
+	name = name.split( "." )[ 1 ];
+	fullName = namespace + "-" + name;
+
+	if ( !prototype ) {
+		prototype = base;
+		base = $.Widget;
+	}
+
+	// create selector for plugin
+	$.expr[ ":" ][ fullName ] = function( elem ) {
+		return !!$.data( elem, name );
+	};
+
+	$[ namespace ] = $[ namespace ] || {};
+	$[ namespace ][ name ] = function( options, element ) {
+		// allow instantiation without initializing for simple inheritance
+		if ( arguments.length ) {
+			this._createWidget( options, element );
+		}
+	};
+
+	var basePrototype = new base();
+	// we need to make the options hash a property directly on the new instance
+	// otherwise we'll modify the options hash on the prototype that we're
+	// inheriting from
+//	$.each( basePrototype, function( key, val ) {
+//		if ( $.isPlainObject(val) ) {
+//			basePrototype[ key ] = $.extend( {}, val );
+//		}
+//	});
+	basePrototype.options = $.extend( true, {}, basePrototype.options );
+	$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+		namespace: namespace,
+		widgetName: name,
+		widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+		widgetBaseClass: fullName
+	}, prototype );
+
+	$.widget.bridge( name, $[ namespace ][ name ] );
+};
+
+$.widget.bridge = function( name, object ) {
+	$.fn[ name ] = function( options ) {
+		var isMethodCall = typeof options === "string",
+			args = Array.prototype.slice.call( arguments, 1 ),
+			returnValue = this;
+
+		// allow multiple hashes to be passed on init
+		options = !isMethodCall && args.length ?
+			$.extend.apply( null, [ true, options ].concat(args) ) :
+			options;
+
+		// prevent calls to internal methods
+		if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+			return returnValue;
+		}
+
+		if ( isMethodCall ) {
+			this.each(function() {
+				var instance = $.data( this, name ),
+					methodValue = instance && $.isFunction( instance[options] ) ?
+						instance[ options ].apply( instance, args ) :
+						instance;
+				// TODO: add this back in 1.9 and use $.error() (see #5972)
+//				if ( !instance ) {
+//					throw "cannot call methods on " + name + " prior to initialization; " +
+//						"attempted to call method '" + options + "'";
+//				}
+//				if ( !$.isFunction( instance[options] ) ) {
+//					throw "no such method '" + options + "' for " + name + " widget instance";
+//				}
+//				var methodValue = instance[ options ].apply( instance, args );
+				if ( methodValue !== instance && methodValue !== undefined ) {
+					returnValue = methodValue;
+					return false;
+				}
+			});
+		} else {
+			this.each(function() {
+				var instance = $.data( this, name );
+				if ( instance ) {
+					instance.option( options || {} )._init();
+				} else {
+					$.data( this, name, new object( options, this ) );
+				}
+			});
+		}
+
+		return returnValue;
+	};
+};
+
+$.Widget = function( options, element ) {
+	// allow instantiation without initializing for simple inheritance
+	if ( arguments.length ) {
+		this._createWidget( options, element );
+	}
+};
+
+$.Widget.prototype = {
+	widgetName: "widget",
+	widgetEventPrefix: "",
+	options: {
+		disabled: false
+	},
+	_createWidget: function( options, element ) {
+		// $.widget.bridge stores the plugin instance, but we do it anyway
+		// so that it's stored even before the _create function runs
+		$.data( element, this.widgetName, this );
+		this.element = $( element );
+		this.options = $.extend( true, {},
+			this.options,
+			this._getCreateOptions(),
+			options );
+
+		var self = this;
+		this.element.bind( "remove." + this.widgetName, function() {
+			self.destroy();
+		});
+
+		this._create();
+		this._trigger( "create" );
+		this._init();
+	},
+	_getCreateOptions: function() {
+		return $.metadata && $.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( key, value ) {
+		var options = key;
+
+		if ( arguments.length === 0 ) {
+			// don't return a reference to the internal hash
+			return $.extend( {}, this.options );
+		}
+
+		if  (typeof key === "string" ) {
+			if ( value === undefined ) {
+				return this.options[ key ];
+			}
+			options = {};
+			options[ key ] = value;
+		}
+
+		this._setOptions( options );
+
+		return this;
+	},
+	_setOptions: function( options ) {
+		var self = this;
+		$.each( options, function( key, value ) {
+			self._setOption( key, value );
+		});
+
+		return this;
+	},
+	_setOption: function( key, value ) {
+		this.options[ key ] = value;
+
+		if ( key === "disabled" ) {
+			this.widget()
+				[ value ? "addClass" : "removeClass"](
+					this.widgetBaseClass + "-disabled" + " " +
+					"ui-state-disabled" )
+				.attr( "aria-disabled", value );
+		}
+
+		return this;
+	},
+
+	enable: function() {
+		return this._setOption( "disabled", false );
+	},
+	disable: function() {
+		return this._setOption( "disabled", true );
+	},
+
+	_trigger: function( type, event, data ) {
+		var prop, orig,
+			callback = this.options[ type ];
+
+		data = data || {};
+		event = $.Event( event );
+		event.type = ( type === this.widgetEventPrefix ?
+			type :
+			this.widgetEventPrefix + type ).toLowerCase();
+		// the original event may come from any element
+		// so we need to reset the target on the new event
+		event.target = this.element[ 0 ];
+
+		// copy original event properties over to the new event
+		orig = event.originalEvent;
+		if ( orig ) {
+			for ( prop in orig ) {
+				if ( !( prop in event ) ) {
+					event[ prop ] = orig[ prop ];
+				}
+			}
+		}
+
+		this.element.trigger( event, data );
+
+		return !( $.isFunction(callback) &&
+			callback.call( this.element[0], event, data ) === false ||
+			event.isDefaultPrevented() );
+	}
+};
+
+})( jQuery );
diff --git a/jquery/split_jquery.pl b/jquery/split_jquery.pl
new file mode 100644
index 0000000..3edc763
--- /dev/null
+++ b/jquery/split_jquery.pl
@@ -0,0 +1,25 @@
+# script to split file into parts of roughly 32kb
+#!/bin/perl
+my $file = shift;
+my $target = shift;
+my $count = 1;
+my $len = 0;
+$target=~/p(\d+).js/;
+my $part = $1;
+open(F,"<$file") || die ("cannot open file for reading: $!");
+open(G,">$target") || die("cannot open file for writing: $!");
+while (<F>)
+{
+  if ($part==$count)
+  {
+    print G "$_";
+  }
+  $len+=length($_);
+  if ($len>32768) 
+  {
+    $len=0;
+    $count++;
+  }
+}
+close(F);
+close(G);
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index e194967..aa8de17 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -44,7 +44,6 @@ SUBGROUPING            = YES
 INLINE_GROUPED_CLASSES = NO
 INLINE_SIMPLE_STRUCTS  = NO
 TYPEDEF_HIDES_STRUCT   = NO
-SYMBOL_CACHE_SIZE      = 0
 LOOKUP_CACHE_SIZE      = 0
 #---------------------------------------------------------------------------
 # Build related configuration options
@@ -120,7 +119,7 @@ USE_MDFILE_AS_MAINPAGE =
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
 SOURCE_BROWSER         = YES
-INLINE_SOURCES         = YES
+INLINE_SOURCES         = NO
 STRIP_CODE_COMMENTS    = YES
 REFERENCED_BY_RELATION = YES
 REFERENCES_RELATION    = YES
@@ -187,9 +186,9 @@ MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
 MATHJAX_EXTENSIONS     =
 MATHJAX_CODEFILE       =
 SEARCHENGINE           = YES
-SERVER_BASED_SEARCH    = NO
-EXTERNAL_SEARCH        = NO
-SEARCHENGINE_URL       =
+SERVER_BASED_SEARCH    = YES
+EXTERNAL_SEARCH        = YES
+SEARCHENGINE_URL       = http://macbookpro/~dimitri/doxysearch.cgi
 SEARCHDATA_FILE        = searchdata.xml
 EXTERNAL_SEARCH_ID     =
 EXTRA_SEARCH_MAPPINGS  =
diff --git a/src/cite.cpp b/src/cite.cpp
index d4860c8..576c4bf 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -138,7 +138,7 @@ void CiteDict::generatePage() const
   f.setName(citeListFile);
   if (!f.open(IO_WriteOnly)) 
   {
-    err("error: could not open file %s for writing\n",citeListFile.data());
+    err("could not open file %s for writing\n",citeListFile.data());
   }
   FTextStream t(&f);
   t << "<!-- BEGIN CITATIONS -->" << endl;
@@ -161,7 +161,7 @@ void CiteDict::generatePage() const
   QCString bib2xhtml = bib2xhtml_pl;
   if (!f.open(IO_WriteOnly)) 
   {
-    err("error: could not open file %s for writing\n",bib2xhtmlFile.data());
+    err("could not open file %s for writing\n",bib2xhtmlFile.data());
   }
   f.writeBlock(bib2xhtml, bib2xhtml.length());
   f.close();
@@ -172,7 +172,7 @@ void CiteDict::generatePage() const
   f.setName(doxygenBstFile);
   if (!f.open(IO_WriteOnly)) 
   {
-    err("error: could not open file %s for writing\n",doxygenBstFile.data());
+    err("could not open file %s for writing\n",doxygenBstFile.data());
   }
   f.writeBlock(bstData, bstData.length());
   f.close();
@@ -206,7 +206,7 @@ void CiteDict::generatePage() const
       }
       else if (!fi.exists())
       {
-        err("Error: bib file %s not found!\n",bibFile.data());
+        err("bib file %s not found!\n",bibFile.data());
       }
       bibdata = citeDataList.next();
     }
@@ -226,7 +226,7 @@ void CiteDict::generatePage() const
   f.setName(citeListFile);
   if (!f.open(IO_ReadOnly)) 
   {
-    err("error: could not open file %s/citelist.doc for reading\n",outputDir.data());
+    err("could not open file %s/citelist.doc for reading\n",outputDir.data());
   }
   bool insideBib=FALSE;
   
@@ -293,7 +293,7 @@ void CiteDict::generatePage() const
       }
       else
       {
-        err("Error: bib file %s not found!\n",bibFile.data());
+        err("bib file %s not found!\n",bibFile.data());
       }
       bibdata = citeDataList.next();
     }
diff --git a/src/clangparser.cpp b/src/clangparser.cpp
index 08ad05d..d35f5da 100644
--- a/src/clangparser.cpp
+++ b/src/clangparser.cpp
@@ -8,7 +8,7 @@
 #include <stdlib.h>
 #include "message.h"
 #include "sortdict.h"
-#include "outputlist.h"
+#include "outputgen.h"
 #include "filedef.h"
 #include "memberdef.h"
 #include "doxygen.h"
@@ -17,6 +17,13 @@
 #include "growbuf.h"
 #include "membername.h"
 #include "filename.h"
+
+static Definition *g_currentDefinition=0;
+static MemberDef  *g_currentMemberDef=0;
+static uint        g_currentLine=0;
+static bool        g_searchForBody=FALSE;
+static bool        g_insideBody=FALSE;
+static uint        g_bracketCount=0;
 #endif
 
 ClangParser *ClangParser::instance()
@@ -33,6 +40,9 @@ ClangParser *ClangParser::s_instance = 0;
 class ClangParser::Private
 {
   public:
+    Private() : tu(0), tokens(0), numTokens(0), cursors(0), 
+                ufs(0), sources(0), numFiles(0), fileMapping(257) 
+    { fileMapping.setAutoDelete(TRUE); }
     int getCurrentTokenLine();
     CXIndex index;
     CXTranslationUnit tu;
@@ -42,8 +52,10 @@ class ClangParser::Private
     CXCursor *cursors;
     uint curLine;
     uint curToken;
-    CXUnsavedFile uf;
-    QCString source;
+    CXUnsavedFile *ufs;
+    QCString *sources;
+    uint numFiles;
+    QDict<uint> fileMapping;
 };
 
 static QCString detab(const QCString &s)
@@ -122,20 +134,46 @@ static QStrList getClangOptions()
   return options;
 }
 
-#if 0
+/** Callback function called for each include in a translation unit */
 static void inclusionVisitor(CXFile includedFile,
-                             CXSourceLocation* inclusionStack,
-                             unsigned includeLen,
+                             CXSourceLocation* /*inclusionStack*/,
+                             unsigned /*includeLen*/,
                              CXClientData clientData)
 {
-  const char *fileName = (const char *)clientData;
+  QDict<void> *fileDict = (QDict<void> *)clientData;
   CXString incFileName = clang_getFileName(includedFile);
-  printf("--- file %s includes %s\n",fileName,clang_getCString(incFileName));
+  //printf("--- file %s includes %s\n",fileName,clang_getCString(incFileName));
+  fileDict->insert(clang_getCString(incFileName),(void*)0x8);
   clang_disposeString(incFileName);
 }
-#endif
 
-void ClangParser::start(const char *fileName)
+/** filter the \a files and only keep those that are found as include files
+ *  within the current translation unit.
+ *  @param[in,out] files The list of files to filter.
+ */ 
+void ClangParser::determineInputFilesInSameTu(QStrList &files)
+{
+  // put the files in this translation unit in a dictionary
+  QDict<void> incFound(257);
+  clang_getInclusions(p->tu,
+      inclusionVisitor,
+      (CXClientData)&incFound
+      );
+  // create a new filtered file list
+  QStrList resultIncludes;
+  QStrListIterator it2(files);
+  for (it2.toFirst();it2.current();++it2)
+  {
+    if (incFound.find(it2.current()))
+    {
+      resultIncludes.append(it2.current());
+    }
+  }
+  // replace the original list
+  files=resultIncludes;
+}
+
+void ClangParser::start(const char *fileName,QStrList &filesInTranslationUnit)
 {
   static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
   static QStrList &includePath = Config_getList("INCLUDE_PATH");
@@ -146,7 +184,7 @@ void ClangParser::start(const char *fileName)
   p->index    = clang_createIndex(0, 0);
   p->curLine  = 1;
   p->curToken = 0;
-  char *argv[4+Doxygen::inputPaths.count()+includePath.count()+clangOptions.count()];
+  char **argv = (char**)malloc(sizeof(char*)*(4+Doxygen::inputPaths.count()+includePath.count()+clangOptions.count()));
   QDictIterator<void> di(Doxygen::inputPaths);
   int argc=0;
   // add include paths for input files
@@ -171,44 +209,70 @@ void ClangParser::start(const char *fileName)
   argv[argc++]=strdup("-ferror-limit=0");
   argv[argc++]=strdup("-x"); // force C++
   argv[argc++]=strdup("c++"); 
-  // the file name
+
+  // provide the input and and its dependencies as unsaved files so we can
+  // pass the filtered versions
   argv[argc++]=strdup(fileName);
   static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
-  p->source = detab(fileToString(fileName,filterSourceFiles,TRUE));
   //printf("source %s ----------\n%s\n-------------\n\n",
   //    fileName,p->source.data());
-  p->uf.Filename = strdup(fileName);
-  p->uf.Contents = p->source.data();
-  p->uf.Length   = p->source.length();
+  uint numUnsavedFiles = filesInTranslationUnit.count()+1;
+  p->numFiles = numUnsavedFiles;
+  p->sources = new QCString[numUnsavedFiles];
+  p->ufs     = new CXUnsavedFile[numUnsavedFiles];
+  p->sources[0]      = detab(fileToString(fileName,filterSourceFiles,TRUE));
+  p->ufs[0].Filename = strdup(fileName);
+  p->ufs[0].Contents = p->sources[0].data();
+  p->ufs[0].Length   = p->sources[0].length();
+  QStrListIterator it(filesInTranslationUnit);
+  uint i=1;
+  for (it.toFirst();it.current() && i<numUnsavedFiles;++it,i++)
+  {
+    p->fileMapping.insert(it.current(),new uint(i));
+    p->sources[i]      = detab(fileToString(it.current(),filterSourceFiles,TRUE));
+    p->ufs[i].Filename = strdup(it.current());
+    p->ufs[i].Contents = p->sources[i].data();
+    p->ufs[i].Length   = p->sources[i].length();
+  }
+
+  // let libclang do the actual parsing
   p->tu = clang_parseTranslationUnit(p->index, 0,
-                                     argv, argc, &p->uf, 1, 
+                                     argv, argc, p->ufs, numUnsavedFiles, 
                                      CXTranslationUnit_DetailedPreprocessingRecord);
+  // free arguments
   for (int i=0;i<argc;++i)
   {
     free(argv[i]);
   }
+  free(argv);
 
   if (p->tu)
   {
-    //clang_getInclusions(p->tu,
-    //                    inclusionVisitor,
-    //                    (CXClientData)fileName
-    //                   );
+    // filter out any includes not found by the clang parser
+    determineInputFilesInSameTu(filesInTranslationUnit);
+
+    // show any warnings that the compiler produced
     for (uint i=0, n=clang_getNumDiagnostics(p->tu); i!=n; ++i) 
     {
       CXDiagnostic diag = clang_getDiagnostic(p->tu, i); 
       CXString string = clang_formatDiagnostic(diag,
           clang_defaultDiagnosticDisplayOptions()); 
-      err("%s\n",clang_getCString(string));
+      err("%s [clang]\n",clang_getCString(string));
       clang_disposeString(string);
+      clang_disposeDiagnostic(diag);
     }
+
+    // create a source range for the given file
     QFileInfo fi(fileName);
     CXFile f = clang_getFile(p->tu, fileName);
     CXSourceLocation fileBegin = clang_getLocationForOffset(p->tu, f, 0);
-    CXSourceLocation fileEnd   = clang_getLocationForOffset(p->tu, f, p->uf.Length);
+    CXSourceLocation fileEnd   = clang_getLocationForOffset(p->tu, f, p->ufs[0].Length);
     CXSourceRange    fileRange = clang_getRange(fileBegin, fileEnd);
 
+    // produce a token stream for the file
     clang_tokenize(p->tu,fileRange,&p->tokens,&p->numTokens);
+
+    // produce cursors for each token in the stream
     p->cursors=new CXCursor[p->numTokens];
     clang_annotateTokens(p->tu,p->tokens,p->numTokens,p->cursors);
   }
@@ -217,7 +281,42 @@ void ClangParser::start(const char *fileName)
     p->tokens    = 0;
     p->numTokens = 0;
     p->cursors   = 0;
-    err("Failed to parse translation unit %s\n",fileName);
+    err("clang: Failed to parse translation unit %s\n",fileName);
+  }
+}
+
+void ClangParser::switchToFile(const char *fileName)
+{
+  if (p->tu)
+  {
+    delete[] p->cursors;
+    clang_disposeTokens(p->tu,p->tokens,p->numTokens);
+    p->tokens    = 0;
+    p->numTokens = 0;
+    p->cursors   = 0;
+
+    QFileInfo fi(fileName);
+    CXFile f = clang_getFile(p->tu, fileName);
+    uint *pIndex=p->fileMapping.find(fileName);
+    if (pIndex && *pIndex<p->numFiles)
+    {
+      uint i=*pIndex;
+      //printf("switchToFile %s: len=%ld\n",fileName,p->ufs[i].Length);
+      CXSourceLocation fileBegin = clang_getLocationForOffset(p->tu, f, 0);
+      CXSourceLocation fileEnd   = clang_getLocationForOffset(p->tu, f, p->ufs[i].Length);
+      CXSourceRange    fileRange = clang_getRange(fileBegin, fileEnd);
+
+      clang_tokenize(p->tu,fileRange,&p->tokens,&p->numTokens);
+      p->cursors=new CXCursor[p->numTokens];
+      clang_annotateTokens(p->tu,p->tokens,p->numTokens,p->cursors);
+
+      p->curLine  = 1;
+      p->curToken = 0;
+    }
+    else
+    {
+      err("clang: Failed to find input file %s in mapping\n",fileName);
+    }
   }
 }
 
@@ -225,19 +324,28 @@ void ClangParser::finish()
 {
   static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
   if (!clangAssistedParsing) return;
-  //printf("ClangParser::finish()\n");
-  delete[] p->cursors;
-  clang_disposeTokens(p->tu,p->tokens,p->numTokens);
-  clang_disposeTranslationUnit(p->tu);
-  clang_disposeIndex(p->index);
-  free((void *)p->uf.Filename);
-  p->source.resize(0);
-  p->uf.Contents = 0;
-  p->uf.Filename = 0;
-  p->uf.Contents = 0;
-  p->tokens    = 0;
-  p->numTokens = 0;
-  p->cursors   = 0;
+  if (p->tu)
+  {
+    //printf("ClangParser::finish()\n");
+    delete[] p->cursors;
+    clang_disposeTokens(p->tu,p->tokens,p->numTokens);
+    clang_disposeTranslationUnit(p->tu);
+    clang_disposeIndex(p->index);
+    p->fileMapping.clear();
+    p->tokens    = 0;
+    p->numTokens = 0;
+    p->cursors   = 0;
+  }
+  for (uint i=0;i<p->numFiles;i++)
+  {
+    free((void *)p->ufs[i].Filename);
+  }
+  delete[] p->ufs;
+  delete[] p->sources;
+  p->ufs       = 0;
+  p->sources   = 0;
+  p->numFiles  = 0;
+  p->tu        = 0;
 }
 
 int ClangParser::Private::getCurrentTokenLine()
@@ -251,9 +359,6 @@ int ClangParser::Private::getCurrentTokenLine()
   return l;
 }
 
-/** Looks for \a symbol which should be found at \a line and returns
- *  a Clang unique identifier for the symbol. 
- */
 QCString ClangParser::lookup(uint line,const char *symbol)
 {
   //printf("ClangParser::lookup(%d,%s)\n",line,symbol);
@@ -405,14 +510,23 @@ static QCString keywordToType(const char *keyword)
   return "keyword";
 }
 
-static void writeLineNumber(OutputList &ol,FileDef *fd,uint line)
+static void writeLineNumber(CodeOutputInterface &ol,FileDef *fd,uint line)
 {
   Definition *d = fd ? fd->getSourceDefinition(line) : 0;
   if (d && d->isLinkable())
   {
+    g_currentDefinition=d;
+    g_currentLine=line;
     MemberDef *md = fd->getSourceMember(line);
     if (md && md->isLinkable())  // link to member
     {
+      if (g_currentMemberDef!=md) // new member, start search for body
+      {
+        g_searchForBody=TRUE;
+        g_insideBody=FALSE;
+        g_bracketCount=0;
+      }
+      g_currentMemberDef=md;
       ol.writeLineNumber(md->getReference(),
                          md->getOutputFileBase(),
                          md->anchor(),
@@ -420,6 +534,7 @@ static void writeLineNumber(OutputList &ol,FileDef *fd,uint line)
     }
     else // link to compound
     {
+      g_currentMemberDef=0;
       ol.writeLineNumber(d->getReference(),
                          d->getOutputFileBase(),
                          d->anchor(),
@@ -430,9 +545,19 @@ static void writeLineNumber(OutputList &ol,FileDef *fd,uint line)
   {
     ol.writeLineNumber(0,0,0,line);
   }
+
+  // set search page target
+  if (Doxygen::searchIndex)
+  {
+    QCString lineAnchor;
+    lineAnchor.sprintf("l%05d",line);
+    ol.setCurrentDoc(fd,lineAnchor,TRUE);
+  }
+
+  //printf("writeLineNumber(%d) g_searchForBody=%d\n",line,g_searchForBody);
 }
 
-static void codifyLines(OutputList &ol,FileDef *fd,const char *text,
+static void codifyLines(CodeOutputInterface &ol,FileDef *fd,const char *text,
                         uint &line,uint &column,const char *fontClass=0)
 {
   if (fontClass) ol.startFontClass(fontClass);
@@ -468,7 +593,7 @@ static void codifyLines(OutputList &ol,FileDef *fd,const char *text,
   if (fontClass) ol.endFontClass();
 }
 
-static void writeMultiLineCodeLink(OutputList &ol,
+static void writeMultiLineCodeLink(CodeOutputInterface &ol,
                   FileDef *fd,uint &line,uint &column,
                   const char *ref,const char *file,
                   const char *anchor,const char *text,
@@ -500,23 +625,26 @@ static void writeMultiLineCodeLink(OutputList &ol,
   }
 }
 
-void ClangParser::linkInclude(OutputList &ol,FileDef *fd,
+void ClangParser::linkInclude(CodeOutputInterface &ol,FileDef *fd,
     uint &line,uint &column,const char *text)
 {
   QCString incName = text;
   incName = incName.mid(1,incName.length()-2); // strip ".." or  <..>
   FileDef *ifd=0;
-  FileName *fn = Doxygen::inputNameDict->find(incName);
-  if (fn)
+  if (!incName.isEmpty())
   {
-    bool found=false;
-    FileNameIterator fni(*fn);
-    // for each include name
-    for (fni.toFirst();!found && (ifd=fni.current());++fni)
+    FileName *fn = Doxygen::inputNameDict->find(incName);
+    if (fn)
     {
-      // see if this source file actually includes the file
-      found = fd->isIncluded(ifd->absFilePath());
-      //printf("      include file %s found=%d\n",ifd->absFilePath().data(),found);
+      bool found=false;
+      FileNameIterator fni(*fn);
+      // for each include name
+      for (fni.toFirst();!found && (ifd=fni.current());++fni)
+      {
+        // see if this source file actually includes the file
+        found = fd->isIncluded(ifd->absFilePath());
+        //printf("      include file %s found=%d\n",ifd->absFilePath().data(),found);
+      }
     }
   }
   if (ifd)
@@ -529,7 +657,7 @@ void ClangParser::linkInclude(OutputList &ol,FileDef *fd,
   }
 }
 
-void ClangParser::linkMacro(OutputList &ol,FileDef *fd,
+void ClangParser::linkMacro(CodeOutputInterface &ol,FileDef *fd,
     uint &line,uint &column,const char *text)
 {
   MemberName *mn=Doxygen::functionNameSDict->find(text);
@@ -556,7 +684,8 @@ void ClangParser::linkMacro(OutputList &ol,FileDef *fd,
   codifyLines(ol,fd,text,line,column);
 }
 
-void ClangParser::linkIdentifier(OutputList &ol,FileDef *fd,
+
+void ClangParser::linkIdentifier(CodeOutputInterface &ol,FileDef *fd,
     uint &line,uint &column,const char *text,int tokenIndex)
 {
   CXCursor c = p->cursors[tokenIndex];
@@ -587,6 +716,12 @@ void ClangParser::linkIdentifier(OutputList &ol,FileDef *fd,
   //}
   if (d && d->isLinkable())
   {
+    if (g_insideBody &&
+        g_currentMemberDef && d->definitionType()==Definition::TypeMember && 
+        (g_currentMemberDef!=d || g_currentLine<line)) // avoid self-reference
+    {
+      addDocCrossReference(g_currentMemberDef,(MemberDef*)d);
+    }
     writeMultiLineCodeLink(ol,
         fd,line,column,
         d->getReference(),
@@ -603,8 +738,46 @@ void ClangParser::linkIdentifier(OutputList &ol,FileDef *fd,
   clang_disposeString(usr);
 }
 
-void ClangParser::writeSources(OutputList &ol,FileDef *fd)
+static void detectFunctionBody(const char *s)
+{
+  //printf("punct=%s g_searchForBody=%d g_insideBody=%d g_bracketCount=%d\n",
+  //  s,g_searchForBody,g_insideBody,g_bracketCount);
+
+  if (g_searchForBody && (qstrcmp(s,":")==0 || qstrcmp(s,"{")==0)) // start of 'body' (: is for constructor)
+  {
+    g_searchForBody=FALSE;
+    g_insideBody=TRUE;
+  }
+  else if (g_searchForBody && qstrcmp(s,";")==0) // declaration only
+  {
+    g_searchForBody=FALSE;
+    g_insideBody=FALSE;
+  }
+  if (g_insideBody && qstrcmp(s,"{")==0) // increase scoping level
+  {
+    g_bracketCount++;
+  }
+  if (g_insideBody && qstrcmp(s,"}")==0) // decrease scoping level
+  {
+    g_bracketCount--;
+    if (g_bracketCount<=0) // got outside of function body
+    {
+      g_insideBody=FALSE;
+      g_bracketCount=0;
+    }
+  }
+}
+
+void ClangParser::writeSources(CodeOutputInterface &ol,FileDef *fd)
 {
+  // (re)set global parser state
+  g_currentDefinition=0;
+  g_currentMemberDef=0;
+  g_currentLine=0;
+  g_searchForBody=FALSE;
+  g_insideBody=FALSE;
+  g_bracketCount=0;
+
   unsigned int line=1,column=1;
   QCString lineNumber,lineAnchor;
   ol.startCodeLine(TRUE);
@@ -659,9 +832,12 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd)
       case CXToken_Comment: 
         codifyLines(ol,fd,s,line,column,"comment");
         break;
-        //case CXToken_Punctuation: return "CXToken_Punctation";
-        //case CXToken_Identifier: return "CXToken_Indentifier";
-      default: 
+      default:  // CXToken_Punctuation or CXToken_Identifier
+        if (tokenKind==CXToken_Punctuation)
+        {
+          detectFunctionBody(s);
+          //printf("punct %s: %d\n",s,cursorKind);
+        }
         switch (cursorKind)
         {
           case CXCursor_PreprocessingDirective:
@@ -677,9 +853,20 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd)
             linkMacro(ol,fd,line,column,s);
             break;
           default:
-            if (tokenKind==CXToken_Identifier)
+            if (tokenKind==CXToken_Identifier ||
+                (tokenKind==CXToken_Punctuation && // for operators
+                 (cursorKind==CXCursor_DeclRefExpr ||
+                  cursorKind==CXCursor_MemberRefExpr ||
+                  cursorKind==CXCursor_CallExpr ||
+                  cursorKind==CXCursor_ObjCMessageExpr)
+                 )
+               )
             {
               linkIdentifier(ol,fd,line,column,s,i);
+              if (Doxygen::searchIndex)
+              {
+                ol.addWord(s,FALSE);
+              }
             }
             else
             {
@@ -706,7 +893,11 @@ ClangParser::~ClangParser()
 //--------------------------------------------------------------------------
 #else // use stubbed functionality in case libclang support is disabled.
 
-void ClangParser::start(const char *)
+void ClangParser::start(const char *,QStrList &)
+{
+}
+
+void ClangParser::switchToFile(const char *)
 {
 }
 
@@ -719,7 +910,7 @@ QCString ClangParser::lookup(uint,const char *)
   return "";
 }
 
-void ClangParser::writeSources(OutputList &,FileDef *)
+void ClangParser::writeSources(CodeOutputInterface &,FileDef *)
 {
 }
 
diff --git a/src/clangparser.h b/src/clangparser.h
index fc56b3a..214ea50 100644
--- a/src/clangparser.h
+++ b/src/clangparser.h
@@ -2,29 +2,61 @@
 #define CLANGPARSER_H
 
 #include <qcstring.h>
+#include <qstrlist.h>
 
-class OutputList;
+class CodeOutputInterface;
 class FileDef;
 
+/** @brief Wrapper for to let libclang assisted parsing. */
 class ClangParser
 {
   public:
+    /** Returns the one and only instance of the class */
     static ClangParser *instance();
-    void start(const char *fileName);
+    
+    /** Start parsing a file.
+     *  @param[in] fileName The name of the file to parse.
+     *  @param[in,out] filesInTanslationUnit Other files that are
+     *                 part of the input and included by the file.
+     *                 The function will return a subset of the files,
+     *                 only including the onces that were actually found 
+     *                 during parsing.
+     */
+    void start(const char *fileName,QStrList &filesInTranslationUnit);
+
+    /** Switches to another file within the translation unit started
+     *  with start().
+     *  @param[in] The name of the file to switch to.
+     */
+    void switchToFile(const char *fileName);
+
+    /** Finishes parsing a translation unit. Free any resources that
+     *  were needed for parsing.
+     */
     void finish();
+
+    /** Looks for \a symbol which should be found at \a line and
+     *  returns a clang unique reference to the symbol.
+     */
     QCString lookup(uint line,const char *symbol);
-    void writeSources(OutputList &ol,FileDef *fd);
+
+    /** writes the syntax highlighted source code for a file
+     *  @param[out] ol The output generator list to write to.
+     *  @param[in]  fd The file to write sources for.
+     */
+    void writeSources(CodeOutputInterface &ol,FileDef *fd);
 
   private:
-    void linkIdentifier(OutputList &ol,FileDef *fd,
+    void linkIdentifier(CodeOutputInterface &ol,FileDef *fd,
                         uint &line,uint &column,
                         const char *text,int tokenIndex);
-    void linkMacro(OutputList &ol,FileDef *fd,
+    void linkMacro(CodeOutputInterface &ol,FileDef *fd,
                    uint &line,uint &column,
                    const char *text);
-    void linkInclude(OutputList &ol,FileDef *fd,
+    void linkInclude(CodeOutputInterface &ol,FileDef *fd,
                    uint &line,uint &column,
                    const char *text);
+    void determineInputFilesInSameTu(QStrList &filesInTranslationUnit);
     class Private;
     Private *p;
     ClangParser();
diff --git a/src/classdef.cpp b/src/classdef.cpp
index dd32918..1429fdd 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -921,8 +921,8 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
   if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
   {
     ol.startParagraph();
-    ol.parseDoc(briefFile(),briefLine(),this,0,
-                briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
+    ol.generateDoc(briefFile(),briefLine(),this,0,
+                   briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
     ol.pushGeneratorState();
     ol.disable(OutputGenerator::RTF);
     ol.writeString(" \n");
@@ -956,7 +956,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
   // repeat brief description
   if (!briefDescription().isEmpty() && repeatBrief)
   {
-    ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+    ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
   }
   if (!briefDescription().isEmpty() && repeatBrief &&
       !documentation().isEmpty())
@@ -969,7 +969,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
   // write documentation
   if (!documentation().isEmpty())
   {
-    ol.parseDoc(docFile(),docLine(),this,0,documentation(),TRUE,FALSE);
+    ol.generateDoc(docFile(),docLine(),this,0,documentation(),TRUE,FALSE);
   }
   // write type constraints
   writeTypeConstraints(ol,this,m_impl->typeConstraints);
@@ -1249,7 +1249,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
       }
       else
       {
-        err("error: invalid marker %d in inherits list!\n",entryIndex);
+        err("invalid marker %d in inherits list!\n",entryIndex);
       }
       index=newIndex+matchLen;
     } 
@@ -1558,6 +1558,11 @@ void ClassDef::writeTagFileMarker()
     {
       Doxygen::tagFile << "    <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
     }
+    QCString idStr = id();
+    if (!idStr.isEmpty())
+    {
+      Doxygen::tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+    }
     if (m_impl->tempArgs)
     {
       ArgumentListIterator ali(*m_impl->tempArgs);
@@ -1812,14 +1817,19 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
     // add the brief description if available
     if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
     {
-      ol.startMemberDescription(anchor());
-      ol.parseDoc(briefFile(),briefLine(),this,0,
-          briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
-      if (isLinkableInProject())
+      DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+                                briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+      if (rootNode && !rootNode->isEmpty())
       {
-        writeMoreLink(ol,anchor());
+        ol.startMemberDescription(anchor());
+        ol.writeDoc(rootNode,this,0);
+        if (isLinkableInProject())
+        {
+          writeMoreLink(ol,anchor());
+        }
+        ol.endMemberDescription();
       }
-      ol.endMemberDescription();
+      delete rootNode;
     }
     ol.endMemberDeclaration(anchor(),0);
   }
@@ -2744,11 +2754,11 @@ void ClassDef::mergeMembers()
                   if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE)) 
                     // member is in the same or a base class
                   {
-                    LockingPtr<ArgumentList> srcAl = srcMd->argumentList();
-                    LockingPtr<ArgumentList> dstAl = dstMd->argumentList();
+                    ArgumentList *srcAl = srcMd->argumentList();
+                    ArgumentList *dstAl = dstMd->argumentList();
                     found=matchArguments2(
-                        srcMd->getOuterScope(),srcMd->getFileDef(),srcAl.pointer(),
-                        dstMd->getOuterScope(),dstMd->getFileDef(),dstAl.pointer(),
+                        srcMd->getOuterScope(),srcMd->getFileDef(),srcAl,
+                        dstMd->getOuterScope(),dstMd->getFileDef(),dstAl,
                         TRUE
                         );
                     //printf("  Yes, matching (%s<->%s): %d\n",
@@ -3772,8 +3782,8 @@ void ClassDef::addListReferences()
   if (!isLinkableInProject()) return;
   //printf("ClassDef(%s)::addListReferences()\n",name().data());
   {
-    LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
-    addRefItem(xrefItems.pointer(),
+    QList<ListItemInfo> *xrefItems = xrefListItems();
+    addRefItem(xrefItems,
              qualifiedName(),
              lang==SrcLangExt_Fortran ? theTranslator->trType(TRUE,TRUE)
                                       : theTranslator->trClass(TRUE,TRUE),
diff --git a/src/code.l b/src/code.l
index 2026f0c..01636fa 100644
--- a/src/code.l
+++ b/src/code.l
@@ -417,7 +417,7 @@ static void popScope()
   }
   else
   {
-    //err("Error: Too many end of scopes found!\n");
+    //err("Too many end of scopes found!\n");
   }
   //printf("popScope() result: `%s'\n",g_classScope.data());
 }
@@ -656,7 +656,7 @@ static void addUsingDirective(const char *name)
 static void setParameterList(MemberDef *md)
 {
   g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
-  LockingPtr<ArgumentList> al = md->argumentList();
+  ArgumentList *al = md->argumentList();
   if (al==0) return; 
   Argument *a = al->first();
   while (a)
@@ -831,58 +831,6 @@ static void updateCallContextForSmartPointer()
   }
 }
 
-static QCString fileLocation() 
-{
-  QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
-  result+=":"+QCString().setNum(g_yyLineNr);
-  result+=":"+QCString().setNum(g_yyColNr);
-  return result;
-}
-
-static void addDocCrossReference(MemberDef *src,MemberDef *dst)
-{
-  static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
-  static bool referencesRelation   = Config_getBool("REFERENCES_RELATION");
-  static bool callerGraph          = Config_getBool("CALLER_GRAPH");
-  static bool callGraph            = Config_getBool("CALL_GRAPH");
-
-  //printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
-  if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
-  if ((referencedByRelation || callerGraph || dst->hasCallerGraph()) && 
-      (src->isFunction() || src->isSlot()) 
-     )
-  {
-    dst->addSourceReferencedBy(src,fileLocation());
-    MemberDef *mdDef = dst->memberDefinition();
-    if (mdDef)
-    {
-      mdDef->addSourceReferencedBy(src,fileLocation());
-    }
-    MemberDef *mdDecl = dst->memberDeclaration();
-    if (mdDecl)
-    {
-      mdDecl->addSourceReferencedBy(src,fileLocation());
-    }
-  }
-  if ((referencesRelation || callGraph || src->hasCallGraph()) && 
-      (src->isFunction() || src->isSlot())
-     )
-  {
-    src->addSourceReferences(dst,fileLocation());
-    MemberDef *mdDef = src->memberDefinition();
-    if (mdDef)
-    {
-      mdDef->addSourceReferences(dst,fileLocation());
-    }
-    MemberDef *mdDecl = src->memberDeclaration();
-    if (mdDecl)
-    {
-      mdDecl->addSourceReferences(dst,fileLocation());
-    }
-  }
-
-}
-
 static bool getLinkInScope(const QCString &c,  // scope
                            const QCString &m,  // member
 			   const char *memberText, // exact text
@@ -1805,7 +1753,7 @@ TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
 SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID})
 SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
 KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
-KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC})
+KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|"alignas"|"alignof"|{KEYWORD_OBJC})
 FLOWKW  ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally")
 TYPEKW  ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string"|"nullptr")
 CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
@@ -1834,6 +1782,8 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 %x      MemberCall2
 %x      SkipInits
 %x      ClassName
+%x      AlignAs
+%x      AlignAsEnd
 %x      PackageName
 %x      ClassVar
 %x	CppCliTypeModifierFollowup
@@ -2146,9 +2096,42 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 <ClassName>{ID}("::"{ID})*	        {
                                           g_curClassName=yytext;
 					  addType();
-					  generateClassOrGlobalLink(*g_code,yytext);
-					  BEGIN( ClassVar );
+                                          if (g_curClassName=="alignas")
+                                          {
+  					    startFontClass("keyword");
+					    g_code->codify(yytext);
+                                            endFontClass();
+                                            BEGIN( AlignAs );
+                                          }
+                                          else
+                                          {
+					    generateClassOrGlobalLink(*g_code,yytext);
+					    BEGIN( ClassVar );
+                                          }
 					}
+<AlignAs>"("                            { 
+                                          g_bracketCount=1;
+					  g_code->codify(yytext);
+                                          BEGIN( AlignAsEnd );
+                                        }
+<AlignAs>\n                             { g_yyLineNr++; 
+                                          codifyLines(yytext);
+                                        }
+<AlignAs>.                              { g_code->codify(yytext); }
+<AlignAsEnd>"("                         { g_code->codify(yytext);
+                                          g_bracketCount++; 
+                                        }
+<AlignAsEnd>")"                         { 
+                                          g_code->codify(yytext);
+                                          if (--g_bracketCount<=0)
+                                          {
+                                            BEGIN(ClassName);
+                                          }
+                                        }
+<AlignAsEnd>\n                          { g_yyLineNr++; 
+                                          codifyLines(yytext); 
+                                        }
+<AlignAsEnd>.                           { g_code->codify(yytext); }
 <ClassName>{ID}("\\"{ID})*		{ // PHP namespace
                                           g_curClassName=substitute(yytext,"\\","::");
   					  g_scopeStack.push(CLASSBLOCK);
diff --git a/src/commentscan.l b/src/commentscan.l
index 4ac850e..1644a6d 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -220,6 +220,7 @@ static DocCmdMap docCmdMap[] =
   { "copydoc",         &handleCopyDoc,          TRUE  },
   { "copybrief",       0,                       FALSE },
   { "copydetails",     0,                       TRUE  },
+  { "copyright",       0,                       TRUE  },
   { "date",            0,                       TRUE  },
   { "dotfile",         0,                       TRUE  },
   { "htmlinclude",     0,                       FALSE },
@@ -294,7 +295,7 @@ class DocCmdMapper
       {
 	if (m_map.find(p->cmdName)!=0)
 	{
-	  printf("Error: DocCmdMapper: command %s already added\n",p->cmdName);
+	  err("DocCmdMapper: command %s already added\n",p->cmdName);
 	  exit(1);
 	}
 	Cmd *cmd = new Cmd;
@@ -869,7 +870,7 @@ ATTR      ({B}+[^>\n]*)?
 DOCNL     "\n"|"\\_linebr"
 LC        "\\"{B}*"\n"
 NW	  [^a-z_A-Z0-9]
-FILESCHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+]
+FILESCHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+@&#]
 FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+]
 FILE      ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"")
 ID        "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
@@ -1022,7 +1023,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 <Comment>{B}*{CMD}"endinternal"{B}*	{
                                           if (!inInternalDocs)
   					    warn(yyFileName,yyLineNr,
-                                               "warning: found \\endinternal without matching \\internal"
+                                               "found \\endinternal without matching \\internal"
                                               );
                                           inInternalDocs = FALSE;
   					}
@@ -1284,7 +1285,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <EnumDocArg1>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-                                               "warning: missing argument after \\enum."
+                                               "missing argument after \\enum."
                                               );
 					  addOutput('\n');
   					  if (*yytext=='\n') yyLineNr++;
@@ -1305,7 +1306,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <NameSpaceDocArg1>{DOCNL}		{ // missing argument
   					  warn(yyFileName,yyLineNr,
-                                               "warning: missing argument after "
+                                               "missing argument after "
 					       "\\namespace."
                                               );
 					  addOutput('\n');
@@ -1327,7 +1328,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <PackageDocArg1>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-                                               "warning: missing argument after "
+                                               "missing argument after "
 					       "\\package."
                                               );
 					  addOutput('\n');
@@ -1358,7 +1359,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <ClassDocArg1,CategoryDocArg1>{DOCNL}	{
   					  warn(yyFileName,yyLineNr,
-                                               "warning: missing argument after "
+                                               "missing argument after "
 					       "\\%s.",YY_START==ClassDocArg1?"class":"category"
                                               );
 					  addOutput('\n');
@@ -1419,7 +1420,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <GroupDocArg1>{DOCNL}			{ // missing argument!
   					  warn(yyFileName,yyLineNr,
-                                               "warning: missing group name after %s",
+                                               "missing group name after %s",
 					       current->groupDocCmd()
                                               );
 					  addOutput('\n');
@@ -1440,7 +1441,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					     ) // defgroup requires second argument
 					  {
   					    warn(yyFileName,yyLineNr,
-                                                 "warning: missing title after "
+                                                 "missing title after "
 					         "\\defgroup %s", current->name.data()
                                                 );
 					  }
@@ -1460,7 +1461,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <PageDocArg1>{DOCNL}			{
   					  warn(yyFileName,yyLineNr,
-                                               "warning: missing argument after "
+                                               "missing argument after "
 					       "\\page."
                                               );
   					  if (*yytext=='\n') yyLineNr++;
@@ -1506,7 +1507,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <XRefItemParam1>{DOCNL}			{ // missing arguments
   					  warn(yyFileName,yyLineNr,
-					       "warning: Missing first argument of \\xrefitem"
+					       "Missing first argument of \\xrefitem"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -1526,7 +1527,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <XRefItemParam2>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: Missing second argument of \\xrefitem"
+					      "Missing second argument of \\xrefitem"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -1547,7 +1548,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <XRefItemParam3>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: Missing third argument of \\xrefitem"
+					      "Missing third argument of \\xrefitem"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -1574,7 +1575,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <RelatesParam1>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: Missing argument of \\relates or \\memberof command"
+					      "Missing argument of \\relates or \\memberof command"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -1609,7 +1610,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <SectionLabel>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: \\section command has no label"
+					      "\\section command has no label"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -1617,7 +1618,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <SectionLabel>.				{ // invalid character for section label
   					  warn(yyFileName,yyLineNr,
-					      "warning: Invalid or missing section label"
+					      "Invalid or missing section label"
 					      );
 					  BEGIN(Comment);
   					}
@@ -1663,7 +1664,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <SubpageLabel>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: \\subpage command has no label"
+					      "\\subpage command has no label"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -1693,7 +1694,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <AnchorLabel>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: \\anchor command has no label"
+					      "\\anchor command has no label"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -1701,7 +1702,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <AnchorLabel>.				{ // invalid character for anchor label
   					  warn(yyFileName,yyLineNr,
-					      "warning: Invalid or missing anchor label"
+					      "Invalid or missing anchor label"
 					      );
 					  BEGIN(Comment);
   					}
@@ -1733,7 +1734,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					  if (g_commentCount<0 && blockName!="verbatim")
 					  {
 					    warn(yyFileName,yyLineNr,
-					         "warning: found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data());
+					         "found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data());
 					  }
   					}
 <FormatBlock>.				{
@@ -1741,7 +1742,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <FormatBlock><<EOF>>			{
                                           warn(yyFileName,yyLineNr,
-	                                    "warning: reached end of comment while inside a @%s block; check for missing @end%s tag!",
+	                                    "reached end of comment while inside a @%s block; check for missing @end%s tag!",
 	                                    blockName.data(),blockName.data()
 	                                  );				
 					  yyterminate();
@@ -1771,7 +1772,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
                                         }
 <GuardExpr>\n                           {
 					  warn(yyFileName,yyLineNr,
-						"warning: invalid expression '%s' for guard",g_guardExpr.data());
+						"invalid expression '%s' for guard",g_guardExpr.data());
                                           unput(*yytext);
                                           BEGIN(GuardParam);
                                         }
@@ -1822,7 +1823,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					  if (guards.isEmpty())
 					  {
 					    warn(yyFileName,yyLineNr,
-						"warning: found @endif without matching start command");
+						"found @endif without matching start command");
 					  }
 					  else
 					  {
@@ -1834,7 +1835,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					  if (guards.isEmpty())
 					  {
 					    warn(yyFileName,yyLineNr,
-						"warning: found @else without matching start command");
+						"found @else without matching start command");
 					  }
 					  else
 					  {
@@ -1851,7 +1852,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					  if (guards.isEmpty())
 					  {
 					    warn(yyFileName,yyLineNr,
-						"warning: found @elseif without matching start command");
+						"found @elseif without matching start command");
 					  }
 					  else
 					  {
@@ -1958,7 +1959,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					  if (!inGroupParamFound)
 					  {
   					    warn(yyFileName,yyLineNr,
-					        "warning: Missing group name for \\ingroup command"
+					        "Missing group name for \\ingroup command"
 					        );
 					  }
   					  if (*yytext=='\n') yyLineNr++;
@@ -2039,7 +2040,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <InheritParam>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: \\inherit command has no argument"
+					      "\\inherit command has no argument"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -2047,7 +2048,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <InheritParam>.				{ // invalid character for anchor label
   					  warn(yyFileName,yyLineNr,
-					      "warning: Invalid or missing name for \\inherit command"
+					      "Invalid or missing name for \\inherit command"
 					      );
 					  BEGIN(Comment);
   					}
@@ -2062,7 +2063,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <ExtendsParam>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: \\extends or \\implements command has no argument"
+					      "\\extends or \\implements command has no argument"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -2098,7 +2099,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <CiteLabel>{DOCNL}			{ // missing argument
   					  warn(yyFileName,yyLineNr,
-					      "warning: \\cite command has no label"
+					      "\\cite command has no label"
 					      );
   					  if (*yytext=='\n') yyLineNr++;
 					  addOutput('\n');
@@ -2106,7 +2107,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <CiteLabel>.				{ // invalid character for cite label
   					  warn(yyFileName,yyLineNr,
-					      "warning: Invalid or missing cite label"
+					      "Invalid or missing cite label"
 					      );
 					  BEGIN(Comment);
   					}
@@ -2425,7 +2426,7 @@ static bool handleSubpage(const QCString &s)
      )
   {
     warn(yyFileName,yyLineNr,
-	"warning: found \\subpage command in a comment block that is not marked as a page!");
+	"found \\subpage command in a comment block that is not marked as a page!");
   }
   if (g_spaceBeforeCmd) 
   {
@@ -2491,7 +2492,7 @@ static bool handleElseIf(const QCString &)
   if (guards.isEmpty())
   {
     warn(yyFileName,yyLineNr,
-	"warning: found \\else without matching start command");
+	"found \\else without matching start command");
   }
   else
   {
@@ -2506,7 +2507,7 @@ static bool handleElse(const QCString &)
   if (guards.isEmpty())
   {
     warn(yyFileName,yyLineNr,
-	"warning: found \\else without matching start command");
+	"found \\else without matching start command");
   }
   else
   {
@@ -2520,7 +2521,7 @@ static bool handleEndIf(const QCString &)
   if (guards.isEmpty())
   {
     warn(yyFileName,yyLineNr,
-	"warning: found \\endif without matching start command");
+	"found \\endif without matching start command");
   }
   else
   {
@@ -2683,7 +2684,7 @@ static void checkFormula()
 {
   if (YY_START==ReadFormulaShort || YY_START==ReadFormulaLong)
   {
-    warn(yyFileName,yyLineNr,"warning: End of comment block while inside formula.");
+    warn(yyFileName,yyLineNr,"End of comment block while inside formula.");
   }
 }
 
@@ -2819,14 +2820,14 @@ void groupLeaveFile(const char *fileName,int line)
 {
   //if (g_memberGroupId!=DOX_NOGROUP)
   //{
-  //  warn(fileName,line,"warning: end of file while inside a member group\n");
+  //  warn(fileName,line,"end of file while inside a member group\n");
   //}
   g_memberGroupId=DOX_NOGROUP;
   g_memberGroupRelates.resize(0);
   g_memberGroupDocs.resize(0);
   if (!g_autoGroupStack.isEmpty())
   {
-    warn(fileName,line,"warning: end of file while inside a group\n");
+    warn(fileName,line,"end of file while inside a group\n");
   }
 }
 
@@ -2834,7 +2835,7 @@ void groupEnterCompound(const char *fileName,int line,const char *name)
 {
   if (g_memberGroupId!=DOX_NOGROUP)
   {
-    warn(fileName,line,"warning: try to put compound %s inside a member group\n",name);
+    warn(fileName,line,"try to put compound %s inside a member group\n",name);
   }
   g_memberGroupId=DOX_NOGROUP;
   g_memberGroupRelates.resize(0);
@@ -2857,7 +2858,7 @@ void groupLeaveCompound(const char *,int,const char * /*name*/)
   //printf("groupLeaveCompound(%s)\n",name);
   //if (g_memberGroupId!=DOX_NOGROUP)
   //{
-  //  warn(fileName,line,"warning: end of compound %s while inside a member group\n",name);
+  //  warn(fileName,line,"end of compound %s while inside a member group\n",name);
   //}
   g_memberGroupId=DOX_NOGROUP;
   g_memberGroupRelates.resize(0);
diff --git a/src/condparser.cpp b/src/condparser.cpp
index 1964eda..c99a232 100644
--- a/src/condparser.cpp
+++ b/src/condparser.cpp
@@ -75,7 +75,7 @@ bool CondParser::parse(const char *fileName,int lineNr,const char *expr)
   }
   if (m_err)
   {
-    warn(fileName,lineNr,"Warning: problem evaluating expression '%s': %s",
+    warn(fileName,lineNr,"problem evaluating expression '%s': %s",
         expr,m_err.data());
   }
   //printf("expr='%s' answer=%d\n",expr,answer);
diff --git a/src/config.h b/src/config.h
index 47bef4c..7d37516 100644
--- a/src/config.h
+++ b/src/config.h
@@ -42,7 +42,8 @@ class ConfigOption
       O_String,    //<! A single item
       O_Int,       //<! An integer value
       O_Bool,      //<! A boolean value
-      O_Obsolete   //<! An obsolete option
+      O_Obsolete,  //<! An obsolete option
+      O_Disabled   //<! Disabled compile time option
     };
     enum 
     { 
@@ -355,7 +356,19 @@ class ConfigBool : public ConfigOption
 class ConfigObsolete : public ConfigOption
 {
   public:
-    ConfigObsolete(const char *name,OptionType t) : ConfigOption(t)  
+    ConfigObsolete(const char *name) : ConfigOption(O_Obsolete)  
+    { m_name = name; }
+    void writeTemplate(FTextStream &,bool,bool) {}
+    void substEnvVars() {}
+    void writeXML(FTextStream&);
+};
+
+/** Section marker for compile time optional options
+ */
+class ConfigDisabled : public ConfigOption
+{
+  public:
+    ConfigDisabled(const char *name) : ConfigOption(O_Disabled)  
     { m_name = name; }
     void writeTemplate(FTextStream &,bool,bool) {}
     void substEnvVars() {}
@@ -537,11 +550,19 @@ class Config
     /*! Adds an option that has become obsolete. */
     ConfigOption *addObsolete(const char *name)
     {
-      ConfigObsolete *option = new ConfigObsolete(name,ConfigOption::O_Obsolete);
+      ConfigObsolete *option = new ConfigObsolete(name);
       m_dict->insert(name,option);
       m_obsolete->append(option);
       return option;
     }
+    /*! Adds an option that has been disabled at compile time. */
+    ConfigOption *addDisabled(const char *name)
+    {
+      ConfigDisabled *option = new ConfigDisabled(name);
+      m_dict->insert(name,option);
+      m_disabled->append(option);
+      return option;
+    }
     /*! @} */
 
     /*! Writes a template configuration to stream \a t. If \a shortIndex
@@ -614,6 +635,7 @@ class Config
     { 
       m_options  = new QList<ConfigOption>;
       m_obsolete = new QList<ConfigOption>;
+      m_disabled = new QList<ConfigOption>;
       m_dict     = new QDict<ConfigOption>(257);
       m_options->setAutoDelete(TRUE);
       m_obsolete->setAutoDelete(TRUE);
@@ -624,12 +646,14 @@ class Config
     {
       delete m_options;
       delete m_obsolete;
+      delete m_disabled;
       delete m_dict;
     }
 
   private:
     QList<ConfigOption> *m_options;
     QList<ConfigOption> *m_obsolete;
+    QList<ConfigOption> *m_disabled;
     QDict<ConfigOption> *m_dict;
     static Config *m_instance;
     QCString m_userComment;
diff --git a/src/config.l b/src/config.l
index 0c2bcbf..8a4188e 100644
--- a/src/config.l
+++ b/src/config.l
@@ -180,7 +180,7 @@ void ConfigInt::convertStrToVal()
     int val = m_valueString.toInt(&ok);
     if (!ok || val<m_minVal || val>m_maxVal)
     {
-      config_warn("warning: argument `%s' for option %s is not a valid number in the range [%d..%d]!\n"
+      config_warn("Warning: argument `%s' for option %s is not a valid number in the range [%d..%d]!\n"
                 "Using the default: %d!\n",m_valueString.data(),m_name.data(),m_minVal,m_maxVal,m_value);
     }
     m_value=val;
@@ -202,7 +202,7 @@ void ConfigBool::convertStrToVal()
     }
     else
     {
-      config_warn("warning: argument `%s' for option %s is not a valid boolean value\n"
+      config_warn("Warning: argument `%s' for option %s is not a valid boolean value\n"
                 "Using the default: %s!\n",m_valueString.data(),m_name.data(),m_value?"YES":"NO");
     }
   }
@@ -382,6 +382,12 @@ void ConfigObsolete::writeXML(FTextStream &t)
        "id='" << convertToXML(name()) << "'/>" << endl;
 }
 
+void ConfigDisabled::writeXML(FTextStream &t)
+{
+  t << "    <option type='disabled' "
+       "id='" << convertToXML(name()) << "'/>" << endl;
+}
+
 
 /* -----------------------------------------------------------------
  *
@@ -464,7 +470,7 @@ static QCString configStringRecode(
   void *cd = portable_iconv_open(outputEncoding,inputEncoding);
   if (cd==(void *)(-1)) 
   {
-    fprintf(stderr,"error: unsupported character conversion: '%s'->'%s'\n",
+    fprintf(stderr,"Error: unsupported character conversion: '%s'->'%s'\n",
         inputEncoding.data(),outputEncoding.data());
     exit(1);
   }
@@ -481,7 +487,7 @@ static QCString configStringRecode(
   }
   else
   {
-    fprintf(stderr,"error: failed to translate characters from %s to %s: %s\n",
+    fprintf(stderr,"Error: failed to translate characters from %s to %s: %s\n",
         inputEncoding.data(),outputEncoding.data(),strerror(errno));
     exit(1);
   }
@@ -502,7 +508,7 @@ static FILE *tryPath(const char *path,const char *fileName)
   if (fi.exists() && fi.isFile())
   {
     FILE *f=portable_fopen(absName,"r");
-    if (!f) config_err("error: could not open file %s for reading\n",absName.data());
+    if (!f) config_err("Error: could not open file %s for reading\n",absName.data());
     return f;
   }
   return 0;
@@ -513,8 +519,14 @@ static void substEnvVarsInString(QCString &s);
 
 static FILE *findFile(const char *fileName)
 {
-  if(portable_isAbsolutePath(fileName))
+  if (fileName==0)
+  {
+    return 0;
+  }
+  if (portable_isAbsolutePath(fileName))
+  {
     return tryPath(NULL, fileName);
+  }
   substEnvVarsInStrList(includePathList);
   char *s=includePathList.first();
   while (s) // try each of the include paths
@@ -530,7 +542,7 @@ static FILE *findFile(const char *fileName)
 static void readIncludeFile(const char *incName)
 {
   if (includeDepth==MAX_INCLUDE_DEPTH) {
-    config_err("error: maximum include depth (%d) reached, %s is not included. Aborting...\n",
+    config_err("Error: maximum include depth (%d) reached, %s is not included. Aborting...\n",
 	MAX_INCLUDE_DEPTH,incName);
     exit(1);
   } 
@@ -539,7 +551,7 @@ static void readIncludeFile(const char *incName)
   substEnvVarsInString(inc);
   inc = inc.stripWhiteSpace();
   uint incLen = inc.length();
-  if (inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes
+  if (incLen>0 && inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes
   {
     inc=inc.mid(1,incLen-2);
   }
@@ -570,7 +582,7 @@ static void readIncludeFile(const char *incName)
   } 
   else
   {
-    config_err("error: @INCLUDE = %s: not found!\n",inc.data());
+    config_err("Error: @INCLUDE = %s: not found!\n",inc.data());
     exit(1);
   }
 }
@@ -601,7 +613,7 @@ static void readIncludeFile(const char *incName)
 					   ConfigOption *option = config->get(cmd);
 					   if (option==0) // oops not known
 					   {
-					     config_err("warning: ignoring unsupported tag `%s' at line %d, file %s\n",
+					     config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
 						 yytext,yyLineNr,yyFileName.data()); 
 					     BEGIN(SkipInvalid);
 					   }
@@ -642,11 +654,17 @@ static void readIncludeFile(const char *incName)
 					         BEGIN(GetString);
 						 break;
 					       case ConfigOption::O_Obsolete:
-					         config_err("warning: Tag `%s' at line %d of file %s has become obsolete.\n"
+					         config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
 						            "To avoid this warning please remove this line from your configuration "
 							    "file or upgrade it using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data()); 
 					         BEGIN(SkipInvalid);
 						 break;
+					       case ConfigOption::O_Disabled:
+					         config_err("Warning: Tag `%s' at line %d of file %s belongs to an option that was not enabled at compile time.\n"
+						            "To avoid this warning please remove this line from your configuration "
+							    "file, upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data()); 
+					         BEGIN(SkipInvalid);
+						 break;
 					     }
 					   }
 					}
@@ -655,7 +673,7 @@ static void readIncludeFile(const char *incName)
 					  ConfigOption *option = config->get(cmd);
 					  if (option==0) // oops not known
 					  {
-					    config_err("warning: ignoring unsupported tag `%s' at line %d, file %s\n",
+					    config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
 						yytext,yyLineNr,yyFileName.data()); 
 					    BEGIN(SkipInvalid);
 					  }
@@ -677,16 +695,22 @@ static void readIncludeFile(const char *incName)
 					      case ConfigOption::O_String:
 					      case ConfigOption::O_Int:
 					      case ConfigOption::O_Bool:
-					        config_err("warning: operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
+					        config_err("Warning: operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
 						    yytext,yyLineNr,yyFileName.data()); 
 					        BEGIN(SkipInvalid);
 						break;
 					       case ConfigOption::O_Obsolete:
-					         config_err("warning: Tag `%s' at line %d of file %s has become obsolete.\n"
+					         config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
 						            "To avoid this warning please update your configuration "
 							    "file using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data()); 
 					         BEGIN(SkipInvalid);
 						 break;
+					       case ConfigOption::O_Disabled:
+					         config_err("Warning: Tag `%s' at line %d of file %s belongs to an option that was not enabled at compile time.\n"
+						            "To avoid this warning please remove this line from your configuration "
+							    "file, upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data()); 
+					         BEGIN(SkipInvalid);
+						 break;
 					     }
 					   }
 					}
@@ -719,7 +743,7 @@ static void readIncludeFile(const char *incName)
 					  }
   					}
 
-<Start>[a-z_A-Z0-9]+			{ config_err("warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yyLineNr,yyFileName.data()); }
+<Start>[a-z_A-Z0-9]+			{ config_err("Warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yyLineNr,yyFileName.data()); }
 <GetString,GetBool,SkipInvalid>\n	{ yyLineNr++; BEGIN(Start); }
 <GetStrList>\n				{ 
   					  yyLineNr++; 
@@ -760,7 +784,7 @@ static void readIncludeFile(const char *incName)
 					  }
 					  if (*yytext=='\n')
 					  {
-					    config_err("warning: Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data());
+					    config_err("Warning: Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data());
 					    yyLineNr++;
 					  }
 					  BEGIN(lastState);
@@ -779,7 +803,7 @@ static void readIncludeFile(const char *incName)
 					  else 
 					  {
 					    *b=FALSE; 
-					    config_warn("warning: Invalid value `%s' for "
+					    config_warn("Warning: Invalid value `%s' for "
 						 "boolean tag in line %d, file %s; use YES or NO\n",
 						 bs.data(),yyLineNr,yyFileName.data());
 					  }
@@ -1060,15 +1084,15 @@ void Config::check()
   {
     if (warnFormat.find("$file")==-1)
     {
-      config_err("warning: warning format does not contain a $file tag!\n");
+      config_err("Warning: warning format does not contain a $file tag!\n");
     }
     if (warnFormat.find("$line")==-1)
     {
-      config_err("warning: warning format does not contain a $line tag!\n");
+      config_err("Warning: warning format does not contain a $line tag!\n");
     }
     if (warnFormat.find("$text")==-1)
     {
-      config_err("warning: warning format foes not contain a $text tag!\n");
+      config_err("Warning: warning format foes not contain a $text tag!\n");
     }
   }
 
@@ -1089,7 +1113,7 @@ void Config::check()
   if (paperType!="a4" && paperType!="a4wide" && paperType!="letter" && 
       paperType!="legal" && paperType!="executive")
   {
-    config_err("error: Unknown page type specified");
+    config_err("Error: Unknown page type specified");
   }
   
   QCString &outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
@@ -1129,7 +1153,7 @@ void Config::check()
     QFileInfo fi(headerFile);
     if (!fi.exists())
     {
-      config_err("error: tag HTML_HEADER: header file `%s' "
+      config_err("Error: tag HTML_HEADER: header file `%s' "
 	  "does not exist\n",headerFile.data());
       exit(1);
     }
@@ -1141,7 +1165,7 @@ void Config::check()
     QFileInfo fi(footerFile);
     if (!fi.exists())
     {
-      config_err("error: tag HTML_FOOTER: footer file `%s' "
+      config_err("Error: tag HTML_FOOTER: footer file `%s' "
 	  "does not exist\n",footerFile.data());
       exit(1);
     }
@@ -1155,7 +1179,7 @@ void Config::check()
       QFileInfo fi(MathJaxCodefile);
       if (!fi.exists())
       {
-        config_err("error: tag MATHJAX_CODEFILE file `%s' "
+        config_err("Error: tag MATHJAX_CODEFILE file `%s' "
 	    "does not exist\n",MathJaxCodefile.data());
         exit(1);
       }
@@ -1168,7 +1192,7 @@ void Config::check()
     QFileInfo fi(latexHeaderFile);
     if (!fi.exists())
     {
-      config_err("error: tag LATEX_HEADER: header file `%s' "
+      config_err("Error: tag LATEX_HEADER: header file `%s' "
 	  "does not exist\n",latexHeaderFile.data());
       exit(1);
     }
@@ -1179,7 +1203,7 @@ void Config::check()
   while (s)
   {
     QFileInfo fi(s);
-    if (!fi.exists()) config_err("warning: tag INCLUDE_PATH: include path `%s' "
+    if (!fi.exists()) config_err("Warning: tag INCLUDE_PATH: include path `%s' "
 	                  "does not exist\n",s);
     s=includePath.next();
   }
@@ -1195,7 +1219,7 @@ void Config::check()
     alias=alias.stripWhiteSpace();
     if (alias.find(re1)!=0 && alias.find(re2)!=0)
     {
-      config_err("Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n",
+      config_err("Error: Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n",
 	  alias.data());
     }
     s=aliasList.next();
@@ -1204,19 +1228,19 @@ void Config::check()
   // check if GENERATE_TREEVIEW and GENERATE_HTMLHELP are both enabled
   if (Config_getBool("GENERATE_TREEVIEW") && Config_getBool("GENERATE_HTMLHELP"))
   {
-    config_err("When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n");
+    config_err("Error: When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n");
     Config_getBool("GENERATE_TREEVIEW")=FALSE;
   }
   if (Config_getBool("SEARCHENGINE") && Config_getBool("GENERATE_HTMLHELP"))
   {
-    config_err("When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n");
+    config_err("Error: When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n");
     Config_getBool("SEARCHENGINE")=FALSE;
   }
 
   // check if SEPARATE_MEMBER_PAGES and INLINE_GROUPED_CLASSES are both enabled
   if (Config_getBool("SEPARATE_MEMBER_PAGES") && Config_getBool("INLINE_GROUPED_CLASSES"))
   {
-    config_err("When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n");
+    config_err("Error: When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n");
     Config_getBool("SEPARATE_MEMBER_PAGES")=FALSE;
   }
     
@@ -1232,6 +1256,13 @@ void Config::check()
   //  config_err("Invalid value for DOT_IMAGE_FORMAT: `%s'. Using the default.\n",dotImageFormat.data());
   //  dotImageFormat = "png";
   //}
+
+  QCString &dotFontName=Config_getString("DOT_FONTNAME");
+  if (dotFontName=="FreeSans" || dotFontName=="FreeSans.ttf")
+  {
+    config_err("Warning: doxygen no longer ships with the FreeSans font.\n"
+               "You may want to clear DOT_FONTPATH or risk wrong fonts being used for dot generated graphs.\n");
+  }
   
   
   // check dot path
@@ -1248,7 +1279,7 @@ void Config::check()
       QFileInfo dp(dotPath+"/dot"+portable_commandExtension());
       if (!dp.exists() || !dp.isFile())
       {
-	config_err("warning: the dot tool could not be found at %s\n",dotPath.data());
+	config_err("Warning: the dot tool could not be found at %s\n",dotPath.data());
 	dotPath="";
       }
       else
@@ -1273,7 +1304,7 @@ void Config::check()
     QFileInfo dp(mscgenPath+"/mscgen"+portable_commandExtension());
     if (!dp.exists() || !dp.isFile())
     {
-      config_err("warning: the mscgen tool could not be found at %s\n",mscgenPath.data());
+      config_err("Warning: the mscgen tool could not be found at %s\n",mscgenPath.data());
       mscgenPath="";
     }
     else
@@ -1306,7 +1337,7 @@ void Config::check()
       QFileInfo fi(s);
       if (!fi.exists())
       {
-	config_err("warning: tag INPUT: input source `%s' does not exist\n",s);
+	config_err("Warning: tag INPUT: input source `%s' does not exist\n",s);
       }
       s=inputSources.next();
     }
@@ -1321,7 +1352,7 @@ void Config::check()
     filePatternList.append("*.cxx");
     filePatternList.append("*.cpp");
     filePatternList.append("*.c++");
-    filePatternList.append("*.d");
+    //filePatternList.append("*.d");
     filePatternList.append("*.java");
     filePatternList.append("*.ii");
     filePatternList.append("*.ixx");
@@ -1397,14 +1428,14 @@ void Config::check()
       Config_getString("GENERATE_TAGFILE").isEmpty()
      )
   {
-    config_err("warning: No output formats selected! Set at least one of the main GENERATE_* options to YES.\n");
+    config_err("Warning: No output formats selected! Set at least one of the main GENERATE_* options to YES.\n");
   }
 
   // check HTMLHELP creation requirements
   if (!Config_getBool("GENERATE_HTML") && 
       Config_getBool("GENERATE_HTMLHELP"))
   {
-    config_err("warning: GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n");
+    config_err("Warning: GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n");
   }
 
   // check QHP creation requirements
@@ -1412,13 +1443,13 @@ void Config::check()
   {
     if (Config_getString("QHP_NAMESPACE").isEmpty())
     {
-      config_err("error: GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n");
+      config_err("Error: GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n");
       Config_getString("QHP_NAMESPACE")="org.doxygen.doc";
     }
 
     if (Config_getString("QHP_VIRTUAL_FOLDER").isEmpty())
     {
-      config_err("error: GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n");
+      config_err("Error: GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n");
       Config_getString("QHP_VIRTUAL_FOLDER")="doc";
     }
   }
@@ -1469,7 +1500,7 @@ void Config::check()
   if (!mathJaxFormat.isEmpty() && mathJaxFormat!="HTML-CSS" &&
        mathJaxFormat!="NativeMML" && mathJaxFormat!="SVG")
   {
-    config_err("error: Unsupported value for MATHJAX_FORMAT: Should be one of HTML-CSS, NativeMML, or SVG\n");
+    config_err("Error: Unsupported value for MATHJAX_FORMAT: Should be one of HTML-CSS, NativeMML, or SVG\n");
     Config_getEnum("MATHJAX_FORMAT")="HTML-CSS";
   }
 
@@ -1515,7 +1546,7 @@ void Config::check()
     if (!b6) s6="  EXTRACT_PACKAGE        = YES (was NO)\n"; else s6="";
 
 
-    config_err("warning: enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n"
+    config_err("Warning: enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n"
 	       "%s%s%s%s%s%s",s1,s2,s3,s4,s5,s6
 	      );
 
@@ -1548,7 +1579,7 @@ void Config::init()
       ConfigOption * opt = Config::instance()->get(depName);
       if (opt==0)
       {
-        config_err("Config option '%s' has invalid depends relation on unknown option '%s'\n",
+        config_err("Warning: Config option '%s' has invalid depends relation on unknown option '%s'\n",
             option->name().data(),depName.data());
         exit(1);
       }
@@ -1596,7 +1627,7 @@ static QCString configFileToString(const char *name)
     QFileInfo fi(name);
     if (!fi.exists() || !fi.isFile())
     {
-      config_err("error: file `%s' not found\n",name);
+      config_err("Error: file `%s' not found\n",name);
       return "";
     }
     f.setName(name);
@@ -1617,7 +1648,7 @@ static QCString configFileToString(const char *name)
   }
   if (!fileOpened)  
   {
-    config_err("error: cannot open file `%s' for reading\n",name);
+    config_err("Error: cannot open file `%s' for reading\n",name);
   }
   return "";
 }
diff --git a/src/config.xml b/src/config.xml
index db51172..5bbc6e6 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -328,30 +328,15 @@ namespace, or class. And the struct will be named TypeS. This can typically
 be useful for C code in case the coding convention dictates that all compound 
 types are typedef&apos;ed and only the typedef is referenced, never the tag name. 
 ' defval='0'/>
-    <option type='int' id='SYMBOL_CACHE_SIZE' docs='
-The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
-determine which symbols to keep in memory and which to flush to disk. 
-When the cache is full, less often used symbols will be written to disk. 
-For small to medium size projects (&lt;1000 input files) the default value is 
-probably good enough. For larger projects a too small cache size can cause 
-doxygen to be busy swapping symbols to and from disk most of the time 
-causing a significant performance penalty. 
-If the system has enough physical memory increasing the cache will improve the 
-performance by keeping more symbols in memory. Note that the value works on 
-a logarithmic scale so increasing the size by one will roughly double the 
-memory usage. The cache size is given by this formula: 
-2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
-corresponding to a cache size of 2^16 = 65536 symbols. 
-' minval='0' maxval='9' defval='0'/>
     <option type='int' id='LOOKUP_CACHE_SIZE' docs='
-Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be 
-set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given 
-their name and scope. Since this can be an expensive process and often the 
-same symbol appear multiple times in the code, doxygen keeps a cache of 
-pre-resolved symbols. If the cache is too small doxygen will become slower. 
-If the cache is too large, memory is wasted. The cache size is given by this 
-formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, 
-corresponding to a cache size of 2^16 = 65536 symbols. 
+The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This 
+cache is used to resolve symbols given their name and scope. Since this can 
+be an expensive process and often the same symbol appear multiple times in 
+the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too 
+small doxygen will become slower. If the cache is too large, memory is wasted. 
+The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid 
+range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 
+symbols. 
 ' minval='0' maxval='9' defval='0'/>
   </group>
   <group name='Build' docs='Build related configuration options'>
@@ -1391,7 +1376,7 @@ and cross-referencing information) to the XML output. Note that
 enabling this will significantly increase the size of the XML output. 
 ' defval='1' depends='GENERATE_XML'/>
   </group>
-  <group name='DOCBOOK' docs='configuration options related to the DOCBOOK output'>
+  <group name='Docbook' docs='configuration options related to the DOCBOOK output'>
     <option type='bool' id='GENERATE_DOCBOOK' docs='
 If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files 
 that can be used to generate PDF.
@@ -1760,5 +1745,6 @@ the various graphs.
     <option type='obsolete' id='USE_INLINE_TREES'/>
     <option type='obsolete' id='SHOW_DIRECTORIES'/>
     <option type='obsolete' id='HTML_ALIGN_MEMBERS'/>
+    <option type='obsolete' id='SYMBOL_CACHE_SIZE'/>
   </group>
 </doxygenconfig>
diff --git a/src/configgen.py b/src/configgen.py
index 47c8eb6..495f290 100755
--- a/src/configgen.py
+++ b/src/configgen.py
@@ -98,6 +98,8 @@ def parseOption(node):
 	elif type=='obsolete':
 		print "  cfg->addObsolete(\"%s\");" % (name)
 	if len(setting)>0:
+	    	print "#else"
+		print "  cfg->addDisabled(\"%s\");" % (name)
 	    	print "#endif"
 		
 
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 327c883..1cb144d 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -463,33 +463,15 @@ void addConfigOptions(Config *cfg)
                 );
   //----
   ci = cfg->addInt(
-                 "SYMBOL_CACHE_SIZE",
-                 "The SYMBOL_CACHE_SIZE determines the size of the internal cache use to\n"
-                 "determine which symbols to keep in memory and which to flush to disk.\n"
-                 "When the cache is full, less often used symbols will be written to disk.\n"
-                 "For small to medium size projects (<1000 input files) the default value is\n"
-                 "probably good enough. For larger projects a too small cache size can cause\n"
-                 "doxygen to be busy swapping symbols to and from disk most of the time\n"
-                 "causing a significant performance penalty.\n"
-                 "If the system has enough physical memory increasing the cache will improve the\n"
-                 "performance by keeping more symbols in memory. Note that the value works on\n"
-                 "a logarithmic scale so increasing the size by one will roughly double the\n"
-                 "memory usage. The cache size is given by this formula:\n"
-                 "2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,\n"
-                 "corresponding to a cache size of 2^16 = 65536 symbols.",
-                 0,9,0
-                );
-  //----
-  ci = cfg->addInt(
                  "LOOKUP_CACHE_SIZE",
-                 "Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be\n"
-                 "set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given\n"
-                 "their name and scope. Since this can be an expensive process and often the\n"
-                 "same symbol appear multiple times in the code, doxygen keeps a cache of\n"
-                 "pre-resolved symbols. If the cache is too small doxygen will become slower.\n"
-                 "If the cache is too large, memory is wasted. The cache size is given by this\n"
-                 "formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,\n"
-                 "corresponding to a cache size of 2^16 = 65536 symbols.",
+                 "The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n"
+                 "cache is used to resolve symbols given their name and scope. Since this can\n"
+                 "be an expensive process and often the same symbol appear multiple times in\n"
+                 "the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too\n"
+                 "small doxygen will become slower. If the cache is too large, memory is wasted.\n"
+                 "The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid\n"
+                 "range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536\n"
+                 "symbols.",
                  0,9,0
                 );
   //---------------------------------------------------------------------------
@@ -1161,6 +1143,8 @@ void addConfigOptions(Config *cfg)
                  "parser lacks the necessairy type information.",
                  FALSE
                 );
+#else
+  cfg->addDisabled("CLANG_ASSISTED_PARSING");
 #endif
 #if USE_LIBCLANG
   //----
@@ -1172,6 +1156,8 @@ void addConfigOptions(Config *cfg)
                  "specified at INPUT and INCLUDE_PATH."
                 );
   cs->addDependency("CLANG_ASSISTED_PARSING");
+#else
+  cfg->addDisabled("CLANG_OPTIONS");
 #endif
   //---------------------------------------------------------------------------
   cfg->addInfo("Index","configuration options related to the alphabetical class index");
@@ -2085,7 +2071,7 @@ void addConfigOptions(Config *cfg)
                 );
   cb->addDependency("GENERATE_XML");
   //---------------------------------------------------------------------------
-  cfg->addInfo("DOCBOOK","configuration options related to the DOCBOOK output");
+  cfg->addInfo("Docbook","configuration options related to the DOCBOOK output");
   //---------------------------------------------------------------------------
 
   //----
@@ -2658,4 +2644,6 @@ void addConfigOptions(Config *cfg)
   cfg->addObsolete("SHOW_DIRECTORIES");
   //----
   cfg->addObsolete("HTML_ALIGN_MEMBERS");
+  //----
+  cfg->addObsolete("SYMBOL_CACHE_SIZE");
 }
diff --git a/src/constexp.y b/src/constexp.y
index aed8be9..f47e7c0 100644
--- a/src/constexp.y
+++ b/src/constexp.y
@@ -34,7 +34,7 @@
 int cppExpYYerror(const char *s)
 {
   warn(g_constExpFileName,g_constExpLineNr,
-       "warning: preprocessing issue while doing constant expression evaluation: %s",s);
+       "preprocessing issue while doing constant expression evaluation: %s",s);
   return 0;
 }
 
diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp
index 246bbe9..bfb5cd0 100644
--- a/src/dbusxmlscanner.cpp
+++ b/src/dbusxmlscanner.cpp
@@ -830,7 +830,9 @@ DBusXMLScanner::~DBusXMLScanner()
 
 void DBusXMLScanner::parseInput(const char * fileName,
                                 const char * /* fileBuf */,
-                                Entry * root)
+                                Entry *root,
+                                bool /*sameTranslationUnit*/,
+                                QStrList & /*filesInSameTranslationUnit*/)
 {
     QFile inputFile(fileName);
 
diff --git a/src/dbusxmlscanner.h b/src/dbusxmlscanner.h
index e3eff03..a0ead5a 100644
--- a/src/dbusxmlscanner.h
+++ b/src/dbusxmlscanner.h
@@ -29,9 +29,13 @@ class DBusXMLScanner : public ParserInterface
 public:
     DBusXMLScanner();
     virtual ~DBusXMLScanner();
+    void startTranslationUnit(const char *) {}
+    void finishTranslationUnit() {}
     void parseInput(const char *fileName,
                     const char *fileBuf,
-                    Entry *root);
+                    Entry *root,
+                    bool sameTranslationUnit,
+                    QStrList &filesInSameTranslationUnit);
 
     bool needsPreprocessing(const QCString &extension);
 
diff --git a/src/defgen.cpp b/src/defgen.cpp
index 62a22e2..4e0e5b8 100644
--- a/src/defgen.cpp
+++ b/src/defgen.cpp
@@ -142,7 +142,7 @@ void generateDEFForMember(MemberDef *md,
   if (isFunc) //function
   {
     ArgumentList *declAl = new ArgumentList;
-    LockingPtr<ArgumentList> defAl = md->argumentList();
+    ArgumentList *defAl = md->argumentList();
     stringToArgumentList(md->argsString(),declAl);
     QCString fcnPrefix = "  " + memPrefix + "param-";
 
@@ -218,7 +218,7 @@ void generateDEFForMember(MemberDef *md,
   // TODO: exceptions, const volatile
   if (md->memberType()==MemberType_Enumeration) // enum
   {
-    LockingPtr<MemberList> enumList = md->enumFieldList();
+    MemberList *enumList = md->enumFieldList();
     if (enumList!=0)
     {
       MemberListIterator emli(*enumList);
@@ -246,8 +246,8 @@ void generateDEFForMember(MemberDef *md,
 
   //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
 
-  LockingPtr<MemberSDict> mdict = md->getReferencesMembers();
-  if (!mdict.isNull())
+  MemberSDict *mdict = md->getReferencesMembers();
+  if (mdict)
   {
     MemberSDict::Iterator mdi(*mdict);
     MemberDef *rmd;
@@ -280,7 +280,7 @@ void generateDEFForMember(MemberDef *md,
     } /* for (mdi.toFirst...) */
   }
   mdict = md->getReferencedByMembers();
-  if (!mdict.isNull())
+  if (mdict)
   {
     MemberSDict::Iterator mdi(*mdict);
     MemberDef *rmd;
@@ -570,13 +570,13 @@ void generateDEF()
       dir.setPath(QDir::currentDirPath());
       if (!dir.mkdir(outputDirectory))
       {
-        err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+        err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
             "exist and cannot be created\n",outputDirectory.data());
         exit(1);
       }
-      else if (!Config_getBool("QUIET"))
+      else
       {
-        err("notice: Output directory `%s' does not exist. "
+        msg("Notice: Output directory `%s' does not exist. "
             "I have created it for you.\n", outputDirectory.data());
       }
       dir.cd(outputDirectory);
diff --git a/src/definition.cpp b/src/definition.cpp
index 83d4566..fe1afb7 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -84,6 +84,8 @@ class DefinitionImpl
     QCString defFileExt;
 
     SrcLangExt lang;
+
+    QCString id; // clang unique id
 };
 
 DefinitionImpl::DefinitionImpl() 
@@ -296,7 +298,7 @@ Definition::Definition(const char *df,int dl,int dc,
   }
 }
 
-Definition::Definition(const Definition &d) : DefinitionIntf(), LockableObj()
+Definition::Definition(const Definition &d) : DefinitionIntf()
 {
   m_name = d.m_name;
   m_defLine = d.m_defLine;
@@ -397,6 +399,7 @@ void Definition::setName(const char *name)
 void Definition::setId(const char *id)
 {
   if (id==0) return;
+  m_impl->id = id;
   if (Doxygen::clangUsrMap) 
   {
     //printf("Definition::setId '%s'->'%s'\n",id,m_name.data());
@@ -404,10 +407,14 @@ void Definition::setId(const char *id)
   }
 }
 
+QCString Definition::id() const
+{
+  return m_impl->id;
+}
+
 void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
 {
   if (!anchorList) return;
-  makeResident();
   //printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
   SectionInfo *si=anchorList->first();
   while (si)
@@ -436,7 +443,6 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
 
 bool Definition::hasSections() const
 {
-  makeResident();
   //printf("Definition::hasSections(%s) #sections=%d\n",name().data(),
   //    m_impl->sectionDict ? m_impl->sectionDict->count() : 0);
   if (m_impl->sectionDict==0) return FALSE;
@@ -457,7 +463,6 @@ bool Definition::hasSections() const
 
 void Definition::addSectionsToIndex()
 {
-  makeResident();
   if (m_impl->sectionDict==0) return;
   //printf("Definition::addSectionsToIndex()\n");
   SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
@@ -507,7 +512,6 @@ void Definition::addSectionsToIndex()
 
 void Definition::writeDocAnchorsToTagFile()
 {
-  makeResident();
   if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict)
   {
     //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count());
@@ -601,7 +605,6 @@ void Definition::_setDocumentation(const char *d,const char *docFile,int docLine
 void Definition::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
 {
   if (d==0) return;
-  makeResident();
   _setDocumentation(d,docFile,docLine,stripWhiteSpace,FALSE);
 }
 
@@ -670,7 +673,6 @@ void Definition::_setBriefDescription(const char *b,const char *briefFile,int br
 void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine) 
 { 
   if (b==0) return;
-  makeResident();
   _setBriefDescription(b,briefFile,briefLine);
 }
 
@@ -695,7 +697,6 @@ void Definition::_setInbodyDocumentation(const char *doc,const char *inbodyFile,
 void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
 {
   if (d==0) return;
-  makeResident();
   _setInbodyDocumentation(d,inbodyFile,inbodyLine);
 }
 
@@ -871,7 +872,6 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
 {
   static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
   static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
-  makeResident();
   ol.pushGeneratorState();
   //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
   if (sourceBrowser && 
@@ -995,7 +995,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
     }
     else
     {
-      err("error: translation error: invalid markers in trDefinedInSourceFile()\n");
+      err("translation error: invalid markers in trDefinedInSourceFile()\n");
     }
   }
   ol.popGeneratorState();
@@ -1004,7 +1004,6 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
 void Definition::setBodySegment(int bls,int ble) 
 {
   //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
-  makeResident();
   if (m_impl->body==0) m_impl->body = new BodyInfo;
   m_impl->body->startLine=bls; 
   m_impl->body->endLine=ble; 
@@ -1012,7 +1011,6 @@ void Definition::setBodySegment(int bls,int ble)
 
 void Definition::setBodyDef(FileDef *fd)         
 {
-  makeResident();
   if (m_impl->body==0) m_impl->body = new BodyInfo;
   m_impl->body->fileDef=fd; 
 }
@@ -1021,7 +1019,6 @@ void Definition::setBodyDef(FileDef *fd)
 void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
 {
   static bool inlineSources = Config_getBool("INLINE_SOURCES");
-  makeResident();
   ol.pushGeneratorState();
   //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(),
   //        m_startBodyLine,m_endBodyLine,m_bodyDef);
@@ -1068,9 +1065,6 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
 void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
     const QCString &text,MemberSDict *members,bool /*funcOnly*/)
 {
-  LockingPtr<Definition> lock(this,this); // since this can be a memberDef 
-                                          // accessing other memberDefs prevent
-                                          // it from being flushed to disk
   static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); 
   static bool sourceBrowser   = Config_getBool("SOURCE_BROWSER");
   static bool refLinkSource   = Config_getBool("REFERENCES_LINK_SOURCE");
@@ -1189,7 +1183,6 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
 
 void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
 {
-  makeResident();
   if (Config_getBool("REFERENCED_BY_RELATION"))
   {
     _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE);
@@ -1198,7 +1191,6 @@ void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
 
 void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
 {
-  makeResident();
   if (Config_getBool("REFERENCES_RELATION"))
   {
     _writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE);
@@ -1209,7 +1201,6 @@ bool Definition::hasDocumentation() const
 { 
   static bool extractAll    = Config_getBool("EXTRACT_ALL"); 
   //static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
-  makeResident();
   bool hasDocs = 
          (m_impl->details    && !m_impl->details->doc.isEmpty())    || // has detailed docs
          (m_impl->brief      && !m_impl->brief->doc.isEmpty())      || // has brief description
@@ -1223,7 +1214,6 @@ bool Definition::hasDocumentation() const
 
 bool Definition::hasUserDocumentation() const
 {
-  makeResident();
   bool hasDocs = 
          (m_impl->details    && !m_impl->details->doc.isEmpty()) ||
          (m_impl->brief      && !m_impl->brief->doc.isEmpty())   ||
@@ -1232,25 +1222,17 @@ bool Definition::hasUserDocumentation() const
 }
 
 
-
-void Definition::addSourceReferencedBy(MemberDef *md, const char *floc/*=NULL*/)
+void Definition::addSourceReferencedBy(MemberDef *md)
 {
-  QCString name ;
-  QCString scope = md->getScopeString();
-
-  if (floc)
-    name = floc;
-  else
-  {
-     name = md->name();
-     if (!scope.isEmpty())
-     {
-       name.prepend(scope+"::");
-     }
-  }
   if (md)
   {
-    makeResident();
+    QCString name  = md->name();
+    QCString scope = md->getScopeString();
+
+    if (!scope.isEmpty())
+    {
+      name.prepend(scope+"::");
+    }
 
     if (m_impl->sourceRefByDict==0)
     {
@@ -1263,32 +1245,21 @@ void Definition::addSourceReferencedBy(MemberDef *md, const char *floc/*=NULL*/)
   }
 }
 
-void Definition::addSourceReferences(MemberDef *md, const char *floc)
+void Definition::addSourceReferences(MemberDef *md)
 {
   QCString name  = md->name();
   QCString scope = md->getScopeString();
 
-  if (floc)
-    name = floc;
-#if 0
-  else
-  {
-     name = md->name();
-     if (!scope.isEmpty())
-     {
-       name.prepend(scope+"::");
-     }
-  }
-#endif
   if (md)
   {
-    makeResident();
-#if 0
+    QCString name  = md->name();
+    QCString scope = md->getScopeString();
+
     if (!scope.isEmpty())
     {
       name.prepend(scope+"::");
     }
-#endif
+
     if (m_impl->sourceRefsDict==0)
     {
       m_impl->sourceRefsDict = new MemberSDict;
@@ -1307,14 +1278,13 @@ Definition *Definition::findInnerCompound(const char *)
 
 void Definition::addInnerCompound(Definition *)
 {
-  err("error: Definition::addInnerCompound() called\n");
+  err("Definition::addInnerCompound() called\n");
 }
 
 QCString Definition::qualifiedName() const
 {
   //static int count=0;
   //count++;
-  makeResident();
   if (!m_impl->qualifiedName.isEmpty()) 
   {
     //count--;
@@ -1353,7 +1323,6 @@ QCString Definition::qualifiedName() const
 
 void Definition::setOuterScope(Definition *d) 
 {
-  makeResident();
   //printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
   if (m_impl->outerScope!=d)
   { 
@@ -1365,13 +1334,11 @@ void Definition::setOuterScope(Definition *d)
 
 QCString Definition::localName() const
 {
-  makeResident();
   return m_impl->localName;
 }
 
 void Definition::makePartOfGroup(GroupDef *gd)
 {
-  makeResident();
   if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList;
   m_impl->partOfGroups->append(gd);
 }
@@ -1381,7 +1348,6 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
   //printf("%s::setRefItems()\n",name().data());
   if (sli)
   {
-    makeResident();
     // deep copy the list
     if (m_impl->xrefListItems==0) 
     {
@@ -1400,10 +1366,9 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
 void Definition::mergeRefItems(Definition *d)
 {
   //printf("%s::mergeRefItems()\n",name().data());
-  LockingPtr< QList<ListItemInfo> > xrefList = d->xrefListItems();
+  QList<ListItemInfo> *xrefList = d->xrefListItems();
   if (xrefList!=0)
   {
-    makeResident();
     // deep copy the list
     if (m_impl->xrefListItems==0) 
     {
@@ -1424,7 +1389,6 @@ void Definition::mergeRefItems(Definition *d)
 
 int Definition::_getXRefListId(const char *listName) const
 {
-  makeResident();
   if (m_impl->xrefListItems)
   {
     QListIterator<ListItemInfo> slii(*m_impl->xrefListItems);
@@ -1440,16 +1404,14 @@ int Definition::_getXRefListId(const char *listName) const
   return -1;
 }
 
-LockingPtr< QList<ListItemInfo> > Definition::xrefListItems() const
+QList<ListItemInfo> *Definition::xrefListItems() const
 {
-  makeResident();
-  return LockingPtr< QList<ListItemInfo> >(this,m_impl->xrefListItems);
+  return m_impl->xrefListItems;
 }
 
 
 QCString Definition::convertNameToFile(const char *name,bool allowDots) const
 {
-  makeResident();
   if (!m_impl->ref.isEmpty())
   {
     return name;
@@ -1462,7 +1424,6 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const
 
 QCString Definition::pathFragment() const
 {
-  makeResident();
   QCString result;
   if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope)
   {
@@ -1499,7 +1460,6 @@ QCString Definition::pathFragment() const
  */
 QCString Definition::navigationPathAsString() const
 {
-  makeResident();
   QCString result;
   Definition *outerScope = getOuterScope();
   QCString locName = localName();
@@ -1569,7 +1529,6 @@ void Definition::writeNavigationPath(OutputList &ol) const
 // TODO: move to htmlgen
 void Definition::writeToc(OutputList &ol)
 {
-  makeResident();
   SectionDict *sectionDict = m_impl->sectionDict;
   if (sectionDict==0) return;
   ol.pushGeneratorState();
@@ -1643,19 +1602,16 @@ QCString Definition::symbolName() const
 
 QCString Definition::documentation() const 
 { 
-  makeResident();
   return m_impl->details ? m_impl->details->doc : QCString(""); 
 }
 
 int Definition::docLine() const 
 { 
-  makeResident();
   return m_impl->details ? m_impl->details->line : 1; 
 }
 
 QCString Definition::docFile() const 
 { 
-  makeResident();
   return m_impl->details ? m_impl->details->file : QCString("<"+m_name+">"); 
 }
 
@@ -1712,7 +1668,6 @@ QCString abbreviate(const char *s,const char *name)
 
 QCString Definition::briefDescription(bool abbr) const 
 { 
-  makeResident();
   return m_impl->brief ? 
          (abbr ? abbreviate(m_impl->brief->doc,displayName()) : m_impl->brief->doc) :
          QCString(""); 
@@ -1720,10 +1675,6 @@ QCString Definition::briefDescription(bool abbr) const
 
 QCString Definition::briefDescriptionAsTooltip() const
 {
-  makeResident();
-  LockingPtr<Definition> lock(this,this); // since this can be a memberDef 
-                                          // accessing other memberDefs prevent
-                                          // it from being flushed to disk
   if (m_impl->brief)
   {
     if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty())
@@ -1749,13 +1700,11 @@ QCString Definition::briefDescriptionAsTooltip() const
 
 int Definition::briefLine() const 
 { 
-  makeResident();
   return m_impl->brief ? m_impl->brief->line : 1; 
 }
 
 QCString Definition::briefFile() const 
 { 
-  makeResident();
   return m_impl->brief ? m_impl->brief->file : QCString("<"+m_name+">"); 
 }
 
@@ -1763,19 +1712,16 @@ QCString Definition::briefFile() const
 
 QCString Definition::inbodyDocumentation() const
 {
-  makeResident();
   return m_impl->inbodyDocs ? m_impl->inbodyDocs->doc : QCString(""); 
 }
 
 int Definition::inbodyLine() const 
 { 
-  makeResident();
   return m_impl->inbodyDocs ? m_impl->inbodyDocs->line : 1; 
 }
 
 QCString Definition::inbodyFile() const 
 { 
-  makeResident();
   return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_name+">"); 
 }
 
@@ -1784,19 +1730,16 @@ QCString Definition::inbodyFile() const
 
 QCString Definition::getDefFileName() const 
 { 
-  makeResident();
   return m_impl->defFileName; 
 }
 
 QCString Definition::getDefFileExtension() const 
 { 
-  makeResident();
   return m_impl->defFileExt; 
 }
 
 bool Definition::isHidden() const
 {
-  makeResident();
   return m_impl->hidden;
 }
 
@@ -1817,91 +1760,76 @@ bool Definition::isArtificial() const
 
 QCString Definition::getReference() const 
 { 
-  makeResident();
   return m_impl->ref; 
 }
 
 bool Definition::isReference() const 
 { 
-  makeResident();
   return !m_impl->ref.isEmpty(); 
 }
 
 int Definition::getStartBodyLine() const         
 { 
-  makeResident();
   return m_impl->body ? m_impl->body->startLine : -1; 
 }
 
 int Definition::getEndBodyLine() const           
 { 
-  makeResident();
   return m_impl->body ? m_impl->body->endLine : -1; 
 }
 
 FileDef *Definition::getBodyDef()                
 { 
-  makeResident();
   return m_impl->body ? m_impl->body->fileDef : 0; 
 }
 
-LockingPtr<GroupList> Definition::partOfGroups() const 
+GroupList *Definition::partOfGroups() const 
 { 
-  makeResident();
-  return LockingPtr<GroupList>(this,m_impl->partOfGroups); 
+  return m_impl->partOfGroups; 
 }
 
 Definition *Definition::getOuterScope() const 
 { 
-  makeResident();
   return m_impl->outerScope; 
 }
 
-LockingPtr<MemberSDict> Definition::getReferencesMembers() const 
+MemberSDict *Definition::getReferencesMembers() const 
 { 
-  makeResident();
-  return LockingPtr<MemberSDict>(this,m_impl->sourceRefsDict); 
+  return m_impl->sourceRefsDict; 
 }
 
-LockingPtr<MemberSDict> Definition::getReferencedByMembers() const 
+MemberSDict *Definition::getReferencedByMembers() const 
 { 
-  makeResident();
-  return LockingPtr<MemberSDict>(this,m_impl->sourceRefByDict); 
+  return m_impl->sourceRefByDict; 
 }
 
 void Definition::setReference(const char *r) 
 { 
-  makeResident();
   m_impl->ref=r; 
 }
 
 SrcLangExt Definition::getLanguage() const
 {
-  makeResident();
   return m_impl->lang;
 }
 
 void Definition::setHidden(bool b) 
 { 
-  makeResident();
   m_impl->hidden = m_impl->hidden || b; 
 }
 
 void Definition::setArtificial(bool b)
 {
-  makeResident();
   m_impl->isArtificial = b;
 }
 
 void Definition::setLocalName(const QCString name) 
 { 
-  makeResident();
   m_impl->localName=name; 
 }
 
 void Definition::setLanguage(SrcLangExt lang) 
 { 
-  makeResident();
   m_impl->lang=lang; 
 }
 
@@ -1911,70 +1839,4 @@ void Definition::_setSymbolName(const QCString &name)
   m_symbolName=name; 
 }
 
-//---------------
-
-void Definition::makeResident() const
-{
-}
-
-void Definition::flushToDisk() const
-{
-  //printf("%p: Definition::flushToDisk()\n",this);
-  Definition *that = (Definition *)this;
-  //printf("Definition::flushToDisk(): pos=%d\n",(int)m_storagePos); 
-  marshalUInt(Doxygen::symbolStorage,START_MARKER);
-  marshalSectionDict  (Doxygen::symbolStorage,m_impl->sectionDict);
-  marshalMemberSDict  (Doxygen::symbolStorage,m_impl->sourceRefByDict);
-  marshalMemberSDict  (Doxygen::symbolStorage,m_impl->sourceRefsDict);
-  marshalItemInfoList (Doxygen::symbolStorage,m_impl->xrefListItems);
-  marshalGroupList    (Doxygen::symbolStorage,m_impl->partOfGroups);
-  marshalDocInfo      (Doxygen::symbolStorage,m_impl->details);
-  marshalDocInfo      (Doxygen::symbolStorage,m_impl->inbodyDocs);
-  marshalBriefInfo    (Doxygen::symbolStorage,m_impl->brief);
-  marshalBodyInfo     (Doxygen::symbolStorage,m_impl->body);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->docSignatures);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->localName);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->qualifiedName);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->ref);
-  marshalBool         (Doxygen::symbolStorage,m_impl->hidden);
-  marshalBool         (Doxygen::symbolStorage,m_impl->isArtificial);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->outerScope);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->defFileName);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->defFileExt);
-  marshalInt          (Doxygen::symbolStorage,(int)m_impl->lang);
-  marshalUInt(Doxygen::symbolStorage,END_MARKER);
-  delete that->m_impl;
-  that->m_impl = 0;
-}
-
-void Definition::loadFromDisk() const
-{
-  //printf("%p: Definition::loadFromDisk()\n",this);
-  Definition *that = (Definition *)this;
-  assert(m_impl==0);
-  that->m_impl = new DefinitionImpl;
-  uint marker = unmarshalUInt(Doxygen::symbolStorage);
-  assert(marker==START_MARKER);
-  m_impl->sectionDict     = unmarshalSectionDict  (Doxygen::symbolStorage);
-  m_impl->sourceRefByDict = unmarshalMemberSDict  (Doxygen::symbolStorage);
-  m_impl->sourceRefsDict  = unmarshalMemberSDict  (Doxygen::symbolStorage);
-  m_impl->xrefListItems   = unmarshalItemInfoList (Doxygen::symbolStorage);
-  m_impl->partOfGroups    = unmarshalGroupList    (Doxygen::symbolStorage);
-  m_impl->details         = unmarshalDocInfo      (Doxygen::symbolStorage);
-  m_impl->inbodyDocs      = unmarshalDocInfo      (Doxygen::symbolStorage);
-  m_impl->brief           = unmarshalBriefInfo    (Doxygen::symbolStorage);
-  m_impl->body            = unmarshalBodyInfo     (Doxygen::symbolStorage);
-  m_impl->docSignatures   = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->localName       = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->qualifiedName   = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->ref             = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->hidden          = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->isArtificial    = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->outerScope      = (Definition *)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->defFileName     = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->defFileExt      = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->lang            = (SrcLangExt)unmarshalInt(Doxygen::symbolStorage);
-  marker = unmarshalUInt(Doxygen::symbolStorage);
-  assert(marker==END_MARKER);
-}
 
diff --git a/src/definition.h b/src/definition.h
index 32c733a..74a801f 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -22,7 +22,6 @@
 #include <qdict.h>
 
 #include "types.h"
-#include "lockingptr.h"
 
 class FileDef;
 class OutputList;
@@ -89,7 +88,7 @@ class DefinitionIntf
  *  This can be a class or a member function, or a file, or a namespace, etc.
  *  Use definitionType() to find which type of definition this is.
  */
-class Definition : public DefinitionIntf, public LockableObj
+class Definition : public DefinitionIntf
 {
   public:
     
@@ -246,18 +245,20 @@ class Definition : public DefinitionIntf, public LockableObj
     /** Returns the programming language this definition was written in. */
     SrcLangExt getLanguage() const;
 
-    LockingPtr<GroupList> partOfGroups() const;
+    GroupList *partOfGroups() const;
 
-    LockingPtr< QList<ListItemInfo> > xrefListItems() const;
+    QList<ListItemInfo> *xrefListItems() const;
 
     virtual Definition *findInnerCompound(const char *name);
     virtual Definition *getOuterScope() const;
 
-    LockingPtr<MemberSDict> getReferencesMembers() const;
-    LockingPtr<MemberSDict> getReferencedByMembers() const;
+    MemberSDict *getReferencesMembers() const;
+    MemberSDict *getReferencedByMembers() const;
 
     bool hasSections() const;
 
+    QCString id() const;
+
     //-----------------------------------------------------------------------------------
     // ----  setters -----
     //-----------------------------------------------------------------------------------
@@ -293,8 +294,8 @@ class Definition : public DefinitionIntf, public LockableObj
     // source references
     void setBodySegment(int bls,int ble);
     void setBodyDef(FileDef *fd);
-    void addSourceReferencedBy(MemberDef *d, const char *floc=NULL);
-    void addSourceReferences(MemberDef *d, const char *floc);
+    void addSourceReferencedBy(MemberDef *d);
+    void addSourceReferences(MemberDef *d);
 
     void setRefItems(const QList<ListItemInfo> *sli);
     void mergeRefItems(Definition *d);
@@ -334,12 +335,6 @@ class Definition : public DefinitionIntf, public LockableObj
 
   protected:
 
-    virtual void flushToDisk() const;
-    virtual void loadFromDisk() const;
-    virtual void makeResident() const;
-    void lock() const {}
-    void unlock() const {}
-
     Definition(const Definition &d);
 
   private: 
diff --git a/src/diagram.cpp b/src/diagram.cpp
index 10b49b9..80d0646 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -1363,7 +1363,7 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path,
     portable_sysTimerStart();
     if (portable_system("epstopdf",epstopdfArgs)!=0)
     {
-       err("error: Problems running epstopdf. Check your TeX installation!\n");
+       err("Problems running epstopdf. Check your TeX installation!\n");
        portable_sysTimerStop();
        return;
     }
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index a63de25..fe6e47d 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -11,6 +11,7 @@
 #include "layout.h"
 #include "ftextstream.h"
 #include "config.h"
+#include "docparser.h"
 
 //----------------------------------------------------------------------
 // method implementation
@@ -137,7 +138,7 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
     // repeat brief description
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
     {
-      ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+      ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
     }
     // separator between brief and details
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && 
@@ -156,7 +157,7 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
     // write documentation
     if (!documentation().isEmpty())
     {
-      ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+      ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
     }
   }
 }
@@ -165,29 +166,31 @@ void DirDef::writeBriefDescription(OutputList &ol)
 {
   if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
   {
-    ol.startParagraph();
-    ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
-    ol.pushGeneratorState();
-    ol.disable(OutputGenerator::RTF);
-    ol.writeString(" \n");
-    ol.enable(OutputGenerator::RTF);
-
-    if (Config_getBool("REPEAT_BRIEF") ||
-        !documentation().isEmpty()
-       )
+    DocRoot *rootNode = validatingParseDoc(
+         briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
+    if (rootNode && !rootNode->isEmpty())
     {
-      ol.disableAllBut(OutputGenerator::Html);
-      ol.startTextLink(0,"details");
-      ol.parseText(theTranslator->trMore());
-      ol.endTextLink();
-    }
-    ol.popGeneratorState();
+      ol.startParagraph();
+      ol.writeDoc(rootNode,this,0);
+      ol.pushGeneratorState();
+      ol.disable(OutputGenerator::RTF);
+      ol.writeString(" \n");
+      ol.enable(OutputGenerator::RTF);
 
-    //ol.pushGeneratorState();
-    //ol.disable(OutputGenerator::RTF);
-    //ol.newParagraph();
-    //ol.popGeneratorState();
-    ol.endParagraph();
+      if (Config_getBool("REPEAT_BRIEF") ||
+          !documentation().isEmpty()
+         )
+      {
+        ol.disableAllBut(OutputGenerator::Html);
+        ol.startTextLink(0,"details");
+        ol.parseText(theTranslator->trMore());
+        ol.endTextLink();
+      }
+      ol.popGeneratorState();
+
+      ol.endParagraph();
+    }
+    delete rootNode;
   }
   ol.writeSynopsis();
 }
@@ -237,7 +240,7 @@ void DirDef::writeSubDirList(OutputList &ol)
       if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
         ol.startMemberDescription(dd->getOutputFileBase());
-        ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
+        ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
             FALSE, // indexWords
             FALSE, // isExample
             0,     // exampleName
@@ -300,7 +303,7 @@ void DirDef::writeFileList(OutputList &ol)
       if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
         ol.startMemberDescription(fd->getOutputFileBase());
-        ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
+        ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
             FALSE, // indexWords
             FALSE, // isExample
             0,     // exampleName
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index 8cd1063..5726b3e 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -354,7 +354,7 @@ static void writeDocbookDocBlock(FTextStream &t,
   QCString stext = text.stripWhiteSpace();
   if (stext.isEmpty()) return;
   // convert the documentation string into an abstract syntax tree
-  DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text+"\n",FALSE,FALSE);
+  DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text,FALSE,FALSE);
   // create a code generator
   DocbookCodeGenerator *docbookCodeGen = new DocbookCodeGenerator(t);
   // create a parse tree visitor for Docbook
@@ -468,7 +468,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
     bool closePara=TRUE;
     if (md->memberType()==MemberType_Enumeration) 
     {
-      LockingPtr<MemberList> enumFields = md->enumFieldList();
+      MemberList *enumFields = md->enumFieldList();
       t << "                            <para>" << memType << " <link linkend=\"";
       if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup)
       {
@@ -588,9 +588,9 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
       }
       t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
       t << " (" << endl;
-      LockingPtr<ArgumentList> declAl = md->declArgumentList();
-      LockingPtr<ArgumentList> defAl = md->argumentList();
-      if (declAl!=0 && declAl->count()>0)
+      ArgumentList *declAl = md->declArgumentList();
+      ArgumentList *defAl = md->argumentList();
+      if (declAl && declAl->count()>0)
       {
         ArgumentListIterator declAli(*declAl);
         ArgumentListIterator defAli(*defAl);
@@ -629,7 +629,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
   {
     if (md->memberType()==MemberType_Enumeration) 
     {
-      LockingPtr<MemberList> enumFields = md->enumFieldList();
+      MemberList *enumFields = md->enumFieldList();
       t << "            <section xml:id=\"";
       if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup)
       {
@@ -1676,13 +1676,13 @@ void generateDocbook()
       dir.setPath(QDir::currentDirPath());
       if (!dir.mkdir(outputDirectory))
       {
-        err("error: tag DOCBOOK_OUTPUT: Output directory `%s' does not "
+        err("tag DOCBOOK_OUTPUT: Output directory `%s' does not "
             "exist and cannot be created\n",outputDirectory.data());
         exit(1);
       }
-      else if (!Config_getBool("QUIET"))
+      else
       {
-        err("notice: Output directory `%s' does not exist. "
+        msg("Notice: Output directory `%s' does not exist. "
             "I have created it for you.\n", outputDirectory.data());
       }
       dir.cd(outputDirectory);
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index 8dedbff..aa750db 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -174,7 +174,7 @@ void DocbookDocVisitor::visit(DocSymbol *s)
     case DocSymbol::LeftFloor:     m_t << "&#8970;"; break;
     case DocSymbol::RightFloor:    m_t << "&#8971;"; break;
     default:
-                                   err("error: unknown symbol found\n");
+                                   err("unknown symbol found\n");
   }
 }
 
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 418a83b..aa9153a 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -283,14 +283,14 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
         else
         {
           warn_doc_error(g_fileName,doctokenizerYYlineno,
-              "warning: could not write output image %s",qPrint(outputFile));
+              "could not write output image %s",qPrint(outputFile));
         }
       }
     }
     else
     {
       warn_doc_error(g_fileName,doctokenizerYYlineno,
-	  "warning: could not open image %s",qPrint(fileName));
+	  "could not open image %s",qPrint(fileName));
     }
 
     if (type==DocImage::Latex && Config_getBool("USE_PDFLATEX") && 
@@ -306,7 +306,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
       portable_sysTimerStart();
       if (portable_system("epstopdf",epstopdfArgs)!=0)
       {
-	err("error: Problems running epstopdf. Check your TeX installation!\n");
+	err("Problems running epstopdf. Check your TeX installation!\n");
       }
       portable_sysTimerStop();
       return baseName;
@@ -315,7 +315,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
   else if (ambig)
   {
     QCString text;
-    text.sprintf("warning: image file name %s is ambiguous.\n",qPrint(fileName));
+    text.sprintf("image file name %s is ambiguous.\n",qPrint(fileName));
     text+="Possible candidates:\n";
     text+=showFileDefMatches(Doxygen::imageNameDict,fileName);
     warn_doc_error(g_fileName,doctokenizerYYlineno,text);
@@ -326,7 +326,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
     if (result.left(5)!="http:" && result.left(6)!="https:")
     {
       warn_doc_error(g_fileName,doctokenizerYYlineno,
-           "warning: image file %s is not found in IMAGE_PATH: "  
+           "image file %s is not found in IMAGE_PATH: "  
 	   "assuming external image.",qPrint(fileName)
           );
     }
@@ -344,7 +344,7 @@ static void checkArgumentName(const QCString &name,bool isParam)
 {                
   if (!Config_getBool("WARN_IF_DOC_ERROR")) return;
   if (g_memberDef==0) return; // not a member
-  LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ? 
+  ArgumentList *al=g_memberDef->isDocsForDefinition() ? 
 		   g_memberDef->argumentList() :
                    g_memberDef->declArgumentList();
   SrcLangExt lang = g_memberDef->getLanguage();
@@ -393,9 +393,9 @@ static void checkArgumentName(const QCString &name,bool isParam)
         docLine = g_memberDef->getDefLine();
         
       }
-      QCString alStr = argListToString(al.pointer());
+      QCString alStr = argListToString(al);
       warn_doc_error(docFile,docLine,
-	  "warning: argument '%s' of command @param "
+	  "argument '%s' of command @param "
 	  "is not found in the argument list of %s%s%s%s",
 	  qPrint(aName), qPrint(scope), qPrint(g_memberDef->name()),
 	  qPrint(alStr), qPrint(inheritedFrom));
@@ -413,7 +413,7 @@ static void checkUndocumentedParams()
 {
   if (g_memberDef && g_hasParamCommand && Config_getBool("WARN_IF_DOC_ERROR"))
   {
-    LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ? 
+    ArgumentList *al=g_memberDef->isDocsForDefinition() ? 
       g_memberDef->argumentList() :
       g_memberDef->declArgumentList();
     SrcLangExt lang = g_memberDef->getLanguage();
@@ -442,9 +442,9 @@ static void checkUndocumentedParams()
       {
         bool first=TRUE;
         QCString errMsg=
-            "warning: The following parameters of "+
+            "The following parameters of "+
             QCString(g_memberDef->qualifiedName()) + 
-            QCString(argListToString(al.pointer())) +
+            QCString(argListToString(al)) +
             " are not documented:\n";
         for (ali.toFirst();(a=ali.current());++ali)
         {
@@ -494,8 +494,8 @@ static void detectNoDocumentedParams()
 {
   if (g_memberDef && Config_getBool("WARN_NO_PARAMDOC"))
   {
-    LockingPtr<ArgumentList> al     = g_memberDef->argumentList();
-    LockingPtr<ArgumentList> declAl = g_memberDef->declArgumentList();
+    ArgumentList *al     = g_memberDef->argumentList();
+    ArgumentList *declAl = g_memberDef->declArgumentList();
     QCString returnType   = g_memberDef->typeString();
     bool isPython = g_memberDef->getLanguage()==SrcLangExt_Python;
 
@@ -808,7 +808,7 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
 	qPrint(cmdName));
     return tok;
   }
@@ -831,11 +831,11 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
       switch (tok)
       {
         case TK_COMMAND: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command \\%s as the argument of a \\%s command",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command \\%s as the argument of a \\%s command",
 	       qPrint(g_token->name),qPrint(cmdName));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found while handling command %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found while handling command %s",
                qPrint(g_token->name),qPrint(cmdName));
           break;
         case TK_HTMLTAG:
@@ -846,7 +846,7 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
           return tok;
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s while handling command %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s while handling command %s",
 	       tokToString(tok),qPrint(cmdName));
           break;
       }
@@ -884,17 +884,17 @@ static void handleStyleLeave(DocNode *parent,QList<DocNode> &children,
   {
     if (g_styleStack.isEmpty())
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> tag without matching <%s>",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"found </%s> tag without matching <%s>",
           qPrint(tagName),qPrint(tagName));
     }
     else if (g_styleStack.top()->style()!=s)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> tag while expecting </%s>",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"found </%s> tag while expecting </%s>",
           qPrint(tagName),qPrint(g_styleStack.top()->styleString()));
     }
     else
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> at different nesting level (%d) than expected (%d)",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"found </%s> at different nesting level (%d) than expected (%d)",
           qPrint(tagName),g_nodeStack.count(),g_styleStack.top()->position());
     }
   }
@@ -952,7 +952,7 @@ static int handleAHref(DocNode *parent,QList<DocNode> &children,const HtmlAttrib
       }
       else
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <a> tag with name option but without value!");
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"found <a> tag with name option but without value!");
       }
     }
     else if (opt->name=="href") // <a href=url>..</a> tag
@@ -1002,7 +1002,7 @@ static void handleUnclosedStyleCommands()
     g_initialStyleStack.pop();
     handleUnclosedStyleCommands();
     warn_doc_error(g_fileName,doctokenizerYYlineno,
-             "warning: end of comment block while expecting "
+             "end of comment block while expecting "
              "command </%s>",qPrint(sc->styleString()));
   }
 }
@@ -1124,7 +1124,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
   {
     if (g_token->name.left(1)=="#" || g_token->name.left(2)=="::")
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: explicit link request to '%s' could not be resolved",qPrint(name));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"explicit link request to '%s' could not be resolved",qPrint(name));
       children.append(new DocWord(parent,g_token->name));
     }
     else
@@ -1157,7 +1157,7 @@ static DocInternalRef *handleInternalRef(DocNode *parent)
   QCString tokenName = g_token->name;
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(tokenName));
     return 0;
   }
@@ -1165,7 +1165,7 @@ static DocInternalRef *handleInternalRef(DocNode *parent)
   tok=doctokenizerYYlex(); // get the reference id
   if (tok!=TK_WORD && tok!=TK_LNKWORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(tokenName));
     return 0;
   }
@@ -1177,7 +1177,7 @@ static DocAnchor *handleAnchor(DocNode *parent)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(g_token->name));
     return 0;
   }
@@ -1185,13 +1185,13 @@ static DocAnchor *handleAnchor(DocNode *parent)
   tok=doctokenizerYYlex();
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
         "argument of command %s",qPrint(g_token->name));
     return 0;
   }
   else if (tok!=TK_WORD && tok!=TK_LNKWORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(g_token->name));
     return 0;
   }
@@ -1306,7 +1306,7 @@ reparsetoken:
             doctokenizerYYsetStateHtmlOnly();
             tok = doctokenizerYYlex();
             children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName));
-            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: htmlonly section ended without end marker");
+            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker");
             doctokenizerYYsetStatePara();
           }
           break;
@@ -1315,7 +1315,7 @@ reparsetoken:
             doctokenizerYYsetStateManOnly();
             tok = doctokenizerYYlex();
             children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::ManOnly,g_isExample,g_exampleName));
-            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: manonly section ended without end marker");
+            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"manonly section ended without end marker");
             doctokenizerYYsetStatePara();
           }
           break;
@@ -1324,7 +1324,7 @@ reparsetoken:
             doctokenizerYYsetStateRtfOnly();
             tok = doctokenizerYYlex();
             children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::RtfOnly,g_isExample,g_exampleName));
-            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: rtfonly section ended without end marker");
+            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"rtfonly section ended without end marker");
             doctokenizerYYsetStatePara();
           }
           break;
@@ -1333,7 +1333,7 @@ reparsetoken:
             doctokenizerYYsetStateLatexOnly();
             tok = doctokenizerYYlex();
             children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName));
-            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: latexonly section ended without end marker",doctokenizerYYlineno);
+            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"latexonly section ended without end marker",doctokenizerYYlineno);
             doctokenizerYYsetStatePara();
           }
           break;
@@ -1342,7 +1342,7 @@ reparsetoken:
             doctokenizerYYsetStateXmlOnly();
             tok = doctokenizerYYlex();
             children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
-            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker",doctokenizerYYlineno);
+            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"xmlonly section ended without end marker",doctokenizerYYlineno);
             doctokenizerYYsetStatePara();
           }
           break;
@@ -1351,7 +1351,7 @@ reparsetoken:
             doctokenizerYYsetStateDbOnly();
             tok = doctokenizerYYlex();
             children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::DocbookOnly,g_isExample,g_exampleName));
-            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker",doctokenizerYYlineno);
+            if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"xmlonly section ended without end marker",doctokenizerYYlineno);
             doctokenizerYYsetStatePara();
           }
           break;
@@ -1390,10 +1390,10 @@ reparsetoken:
         switch (Mappers::htmlTagMapper->map(tokenName))
         {
           case HTML_DIV:
-            warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <div> tag in heading\n");
+            warn_doc_error(g_fileName,doctokenizerYYlineno,"found <div> tag in heading\n");
             break;
           case HTML_PRE:
-            warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <pre> tag in heading\n");
+            warn_doc_error(g_fileName,doctokenizerYYlineno,"found <pre> tag in heading\n");
             break;
           case HTML_BOLD:
             if (!g_token->endTag)
@@ -1534,20 +1534,20 @@ static int handleDocCopy(DocNode *parent,QList<DocNode> &children)
   int cmdId = Mappers::cmdMapper->map(g_token->name);
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(g_token->name));
     return 0;
   }
   tok=doctokenizerYYlex();
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
         "argument of command %s\n", qPrint(g_token->name));
     return 0;
   }
   else if (tok!=TK_WORD && tok!=TK_LNKWORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(g_token->name));
     return 0;
   }
@@ -1559,6 +1559,34 @@ static int handleDocCopy(DocNode *parent,QList<DocNode> &children)
   return TK_NEWPARA;
 }
 
+//---------------------------------------------------------------------------
+
+static void handleImg(DocNode *parent,QList<DocNode> &children,const HtmlAttribList &tagHtmlAttribs)
+{
+  HtmlAttribListIterator li(tagHtmlAttribs);
+  HtmlAttrib *opt;
+  bool found=FALSE;
+  int index=0;
+  for (li.toFirst();(opt=li.current());++li,++index)
+  {
+    //printf("option name=%s value=%s\n",opt->name.data(),opt->value.data());
+    if (opt->name=="src" && !opt->value.isEmpty())
+    {
+      // copy attributes
+      HtmlAttribList attrList = tagHtmlAttribs;
+      // and remove the src attribute
+      bool result = attrList.remove(index);
+      ASSERT(result);
+      DocImage *img = new DocImage(parent,attrList,opt->value,DocImage::Html,opt->value);
+      children.append(img);
+      found = TRUE;
+    }
+  }
+  if (!found)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"IMG tag does not have a SRC attribute!\n");
+  }
+}
 
 //---------------------------------------------------------------------------
 
@@ -1769,14 +1797,14 @@ static void readTextFileByName(const QCString &file,QCString &text)
   }
   else if (ambig)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included file name %s is ambiguous"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"included file name %s is ambiguous"
            "Possible candidates:\n%s",qPrint(file),
            qPrint(showFileDefMatches(Doxygen::exampleNameDict,file))
           );
   }
   else
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included file %s is not found. "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"included file %s is not found. "
            "Check your EXAMPLE_PATH",qPrint(file));
   }
 }
@@ -1786,7 +1814,7 @@ static void readTextFileByName(const QCString &file,QCString &text)
 DocWord::DocWord(DocNode *parent,const QCString &word) : 
       m_word(word) 
 {
-   m_parent = parent; 
+  m_parent = parent; 
   //printf("new word %s url=%s\n",word.data(),g_searchUrl.data());
   if (Doxygen::searchIndex && !g_searchUrl.isEmpty())
   {
@@ -1819,7 +1847,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
   m_parent = parent; 
   if (id.isEmpty())
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Empty anchor label");
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Empty anchor label");
   }
   if (newAnchor) // found <a name="label">
   {
@@ -1835,7 +1863,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
     }
     else 
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid cite anchor id `%s'",qPrint(id));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid cite anchor id `%s'",qPrint(id));
       m_anchor = "invalid";
       m_file = "invalid";
     }
@@ -1856,7 +1884,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
     }
     else
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid anchor id `%s'",qPrint(id));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid anchor id `%s'",qPrint(id));
       m_anchor = "invalid";
       m_file = "invalid";
     }
@@ -1906,7 +1934,7 @@ void DocInclude::parse()
       int count;
       if (!m_blockId.isEmpty() && (count=m_text.contains(m_blockId.data()))!=2)
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: block marked with %s for \\snippet should appear twice in file %s, found it %d times\n",
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"block marked with %s for \\snippet should appear twice in file %s, found it %d times\n",
             m_blockId.data(),m_file.data(),count);
       }
       break;
@@ -2116,13 +2144,13 @@ void DocCopy::parse(QList<DocNode> &children)
     }
     else // oops, recursion
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: recursive call chain of \\copydoc commands detected at %d\n",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"recursive call chain of \\copydoc commands detected at %d\n",
           doctokenizerYYlineno);
     }
   }
   else
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: target %s of \\copydoc command not found",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"target %s of \\copydoc command not found",
         qPrint(m_link));
   }
 }
@@ -2239,15 +2267,15 @@ void DocSecRefItem::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\refitem",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\refitem",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 	       tokToString(tok));
           break;
       }
@@ -2271,13 +2299,13 @@ void DocSecRefItem::parse()
     }
     else
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: reference to unknown section %s",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"reference to unknown section %s",
           qPrint(m_target));
     }
   } 
   else
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: reference to empty target");
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"reference to empty target");
   }
   
   DBG(("DocSecRefItem::parse() end\n"));
@@ -2307,13 +2335,13 @@ void DocSecRefList::parse()
             int tok=doctokenizerYYlex();
             if (tok!=TK_WHITESPACE)
             {
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after \\refitem command");
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after \\refitem command");
               break;
             }
             tok=doctokenizerYYlex();
             if (tok!=TK_WORD && tok!=TK_LNKWORD)
             {
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of \\refitem",
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of \\refitem",
                   tokToString(tok));
               break;
             }
@@ -2326,7 +2354,7 @@ void DocSecRefList::parse()
         case CMD_ENDSECREFLIST:
           goto endsecreflist;
         default:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\secreflist",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\secreflist",
               qPrint(g_token->name));
           goto endsecreflist;
       }
@@ -2337,7 +2365,7 @@ void DocSecRefList::parse()
     }
     else
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s inside section reference list",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s inside section reference list",
           tokToString(tok));
       goto endsecreflist;
     }
@@ -2381,15 +2409,15 @@ void DocInternalRef::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\ref",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\ref",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok));
           break;
       }
@@ -2476,7 +2504,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
     }
   }
   m_text = target;
-  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\ref command",
+  warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\ref command",
            qPrint(target)); 
 }
 
@@ -2522,17 +2550,17 @@ void DocRef::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\ref",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\ref",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         case TK_HTMLTAG:
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok));
           break;
       }
@@ -2578,7 +2606,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
     return;
   }
   m_text = linkToText(SrcLangExt_Unknown,target,FALSE);
-  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\cite command",
+  warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\cite command",
            qPrint(target)); 
 }
 
@@ -2616,7 +2644,7 @@ DocLink::DocLink(DocNode *parent,const QCString &target)
   }
 
   // bogus link target
-  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve link to `%s' for \\link command",
+  warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve link to `%s' for \\link command",
          qPrint(target)); 
 }
 
@@ -2640,23 +2668,23 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
             case CMD_ENDLINK:
               if (isJavaLink)
               {
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: {@link.. ended with @endlink command");
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"{@link.. ended with @endlink command");
               }
               goto endlink;
             default:
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\link",
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\link",
                   qPrint(g_token->name));
               break;
           }
           break;
         case TK_SYMBOL: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
               qPrint(g_token->name));
           break;
         case TK_HTMLTAG:
           if (g_token->name!="see" || !isXmlLink)
           {
-            warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected xml/html command %s found",
+            warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected xml/html command %s found",
                 qPrint(g_token->name));
           }
           goto endlink;
@@ -2684,7 +2712,7 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
           m_children.append(new DocWord(this,g_token->name));
           break;
         default:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
              tokToString(tok));
         break;
       }
@@ -2692,7 +2720,7 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
   }
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
            " link command\n"); 
   }
 endlink:
@@ -2732,15 +2760,15 @@ void DocDotFile::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\dotfile",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\dotfile",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok));
           break;
       }
@@ -2759,7 +2787,7 @@ void DocDotFile::parse()
     }
     else 
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
             qPrint(g_token->name));
     }
     tok=doctokenizerYYlex();
@@ -2780,14 +2808,14 @@ void DocDotFile::parse()
   }
   else if (ambig)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included dot file name %s is ambiguous.\n"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"included dot file name %s is ambiguous.\n"
            "Possible candidates:\n%s",qPrint(m_name),
            qPrint(showFileDefMatches(Doxygen::exampleNameDict,m_name))
           );
   }
   else
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included dot file %s is not found "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"included dot file %s is not found "
            "in any of the paths specified via DOTFILE_DIRS!",qPrint(m_name));
   }
 
@@ -2816,15 +2844,15 @@ void DocMscFile::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\mscfile",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\mscfile",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok));
           break;
       }
@@ -2843,7 +2871,7 @@ void DocMscFile::parse()
     }
     else 
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
             qPrint(g_token->name));
     }
     tok=doctokenizerYYlex();
@@ -2864,14 +2892,14 @@ void DocMscFile::parse()
   }
   else if (ambig)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included msc file name %s is ambiguous.\n"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"included msc file name %s is ambiguous.\n"
            "Possible candidates:\n%s",qPrint(m_name),
            qPrint(showFileDefMatches(Doxygen::exampleNameDict,m_name))
           );
   }
   else
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included msc file %s is not found "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"included msc file %s is not found "
            "in any of the paths specified via MSCFILE_DIRS!",qPrint(m_name));
   }
 
@@ -2901,15 +2929,15 @@ void DocVhdlFlow::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\mscfile",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\mscfile",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok));
           break;
       }
@@ -2962,15 +2990,15 @@ void DocImage::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\image",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\image",
               qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
               qPrint(g_token->name));
           break;
         default:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
               tokToString(tok));
           break;
       }
@@ -2990,7 +3018,7 @@ void DocImage::parse()
     }
     else 
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
           qPrint(g_token->name));
     }
     tok=doctokenizerYYlex();
@@ -3020,7 +3048,7 @@ int DocHtmlHeader::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <h%d> tag",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <h%d> tag",
 	       qPrint(g_token->name),m_level);
           break;
         case TK_HTMLTAG:
@@ -3030,7 +3058,7 @@ int DocHtmlHeader::parse()
             {
               if (m_level!=1)
               {
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h1>",
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h1>",
                     m_level); 
               }
               goto endheader;
@@ -3039,7 +3067,7 @@ int DocHtmlHeader::parse()
             {
               if (m_level!=2)
               {
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h2>",
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h2>",
                     m_level); 
               }
               goto endheader;
@@ -3048,7 +3076,7 @@ int DocHtmlHeader::parse()
             {
               if (m_level!=3)
               {
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h3>",
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h3>",
                     m_level); 
               }
               goto endheader;
@@ -3057,7 +3085,7 @@ int DocHtmlHeader::parse()
             {
               if (m_level!=4)
               {
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h4>",
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h4>",
                     m_level); 
               }
               goto endheader;
@@ -3066,7 +3094,7 @@ int DocHtmlHeader::parse()
             {
               if (m_level!=5)
               {
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h5>",
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h5>",
                     m_level); 
               }
               goto endheader;
@@ -3075,7 +3103,7 @@ int DocHtmlHeader::parse()
             {
               if (m_level!=6)
               {
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h6>",
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h6>",
                     m_level); 
               }
               goto endheader;
@@ -3094,18 +3122,18 @@ int DocHtmlHeader::parse()
             }
             else
             {
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <h%d> context",
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <h%d> context",
                   g_token->endTag?"/":"",qPrint(g_token->name),m_level);
             }
             
           }
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok));
           break;
       }
@@ -3113,7 +3141,7 @@ int DocHtmlHeader::parse()
   }
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
            " <h%d> tag\n",m_level); 
   }
 endheader:
@@ -3140,14 +3168,15 @@ int DocHRef::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <a>..</a> block",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <a>..</a> block",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         case TK_HTMLTAG:
+
           {
             int tagId=Mappers::htmlTagMapper->map(g_token->name);
             if (tagId==HTML_A && g_token->endTag) // found </a> tag
@@ -3156,13 +3185,13 @@ int DocHRef::parse()
             }
             else
             {
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <a href=...> context",
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <a href=...> context",
                   g_token->endTag?"/":"",qPrint(g_token->name),doctokenizerYYlineno);
             }
           }
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok),doctokenizerYYlineno);
           break;
       }
@@ -3170,7 +3199,7 @@ int DocHRef::parse()
   }
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
            " <a href=...> tag",doctokenizerYYlineno); 
   }
 endhref:
@@ -3208,7 +3237,7 @@ int DocInternal::parse(int level)
     }
     if (retval==TK_LISTITEM)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found",doctokenizerYYlineno);
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid list item found",doctokenizerYYlineno);
     }
     else if (retval==RetVal_CopyDoc)
     {
@@ -3237,7 +3266,7 @@ int DocInternal::parse(int level)
 
   if (retval==RetVal_Internal)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: \\internal command found inside internal section");
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"\\internal command found inside internal section");
   }
 
   DBG(("DocInternal::parse() end\n"));
@@ -3256,7 +3285,7 @@ int DocIndexEntry::parse()
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after \\addindex command");
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after \\addindex command");
     goto endindexentry;
   }
   doctokenizerYYsetStateTitle();
@@ -3295,7 +3324,7 @@ int DocIndexEntry::parse()
             case DocSymbol::Ndash:   m_entry+="--";  break;
             case DocSymbol::Mdash:   m_entry+="---";  break;
             default:
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected symbol found as argument of \\addindex");
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected symbol found as argument of \\addindex");
               break;
           }
         }
@@ -3314,13 +3343,13 @@ int DocIndexEntry::parse()
         case CMD_PERCENT: m_entry+='%';  break;
         case CMD_QUOTE:   m_entry+='"';  break;
         default:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected command %s found as argument of \\addindex",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command %s found as argument of \\addindex",
                     qPrint(g_token->name));
           break;
       }
       break;
       default:
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
             tokToString(tok));
         break;
     }
@@ -3350,11 +3379,11 @@ int DocHtmlCaption::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <caption> tag",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <caption> tag",
               qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
               qPrint(g_token->name));
           break;
         case TK_HTMLTAG:
@@ -3367,13 +3396,13 @@ int DocHtmlCaption::parse()
             }
             else
             {
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <caption> context",
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <caption> context",
                   g_token->endTag?"/":"",qPrint(g_token->name));
             }
           }
           break;
         default:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
               tokToString(tok));
           break;
       }
@@ -3381,7 +3410,7 @@ int DocHtmlCaption::parse()
   }
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
            " <caption> tag",doctokenizerYYlineno); 
   }
 endcaption:
@@ -3548,7 +3577,7 @@ int DocHtmlRow::parse()
     }
     else // found some other tag
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but "
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <td> or <th> tag but "
           "found <%s> instead!",qPrint(g_token->name));
       doctokenizerYYpushBackHtmlTag(g_token->name);
       goto endrow;
@@ -3556,13 +3585,13 @@ int DocHtmlRow::parse()
   }
   else if (tok==0) // premature end of comment
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
         " for a html description title");
     goto endrow;
   }
   else // token other than html token
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but found %s token instead!",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <td> or <th> tag but found %s token instead!",
         tokToString(tok));
     goto endrow;
   }
@@ -3612,7 +3641,7 @@ int DocHtmlRow::parseXml(bool isHeading)
     }
     else // found some other tag
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <term> or <description> tag but "
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <term> or <description> tag but "
           "found <%s> instead!",qPrint(g_token->name));
       doctokenizerYYpushBackHtmlTag(g_token->name);
       goto endrow;
@@ -3620,13 +3649,13 @@ int DocHtmlRow::parseXml(bool isHeading)
   }
   else if (tok==0) // premature end of comment
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
         " for a html description title");
     goto endrow;
   }
   else // token other than html token
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but found %s token instead!",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <td> or <th> tag but found %s token instead!",
         tokToString(tok));
     goto endrow;
   }
@@ -3675,7 +3704,7 @@ getrow:
     {
       if (m_caption)
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: table already has a caption, found another one");
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"table already has a caption, found another one");
       }
       else
       {
@@ -3690,18 +3719,18 @@ getrow:
     }
     else // found wrong token
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <tr> or <caption> tag but "
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <tr> or <caption> tag but "
           "found <%s%s> instead!", g_token->endTag ? "/" : "", qPrint(g_token->name));
     }
   }
   else if (tok==0) // premature end of comment
   {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
           " for a <tr> or <caption> tag");
   }
   else // token other than html token
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <tr> tag but found %s token instead!",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <tr> tag but found %s token instead!",
         tokToString(tok));
   }
        
@@ -3876,7 +3905,7 @@ int DocHtmlDescTitle::parse()
                   int tok=doctokenizerYYlex();
                   if (tok!=TK_WHITESPACE)
                   {
-                    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+                    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
                         qPrint(g_token->name));
                   }
                   else
@@ -3885,7 +3914,7 @@ int DocHtmlDescTitle::parse()
                     tok=doctokenizerYYlex(); // get the reference id
                     if (tok!=TK_WORD)
                     {
-                      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+                      warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
                           tokToString(tok),qPrint(cmdName));
                     }
                     else
@@ -3906,7 +3935,7 @@ int DocHtmlDescTitle::parse()
                   int tok=doctokenizerYYlex();
                   if (tok!=TK_WHITESPACE)
                   {
-                    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+                    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
                         qPrint(cmdName));
                   }
                   else
@@ -3915,7 +3944,7 @@ int DocHtmlDescTitle::parse()
                     tok=doctokenizerYYlex();
                     if (tok!=TK_WORD)
                     {
-                      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+                      warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
                           tokToString(tok),qPrint(cmdName));
                     }
                     else
@@ -3934,13 +3963,13 @@ int DocHtmlDescTitle::parse()
 
                 break;
               default:
-                warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <dt> tag",
+                warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <dt> tag",
                                qPrint(g_token->name));
             }
           }
           break;
         case TK_SYMBOL: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
               qPrint(g_token->name));
           break;
         case TK_HTMLTAG:
@@ -3975,13 +4004,13 @@ int DocHtmlDescTitle::parse()
             }
             else
             {
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <dt> context",
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <dt> context",
                   g_token->endTag?"/":"",qPrint(g_token->name));
             }
           }
           break;
         default:
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
               tokToString(tok));
           break;
       }
@@ -3989,7 +4018,7 @@ int DocHtmlDescTitle::parse()
   }
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
         " <dt> tag"); 
   }
 endtitle:
@@ -4049,7 +4078,7 @@ int DocHtmlDescList::parse()
     }
     else // found some other tag
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <dt> tag but "
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <dt> tag but "
           "found <%s> instead!",qPrint(g_token->name));
       doctokenizerYYpushBackHtmlTag(g_token->name);
       goto enddesclist;
@@ -4057,13 +4086,13 @@ int DocHtmlDescList::parse()
   }
   else if (tok==0) // premature end of comment
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
         " for a html description title");
     goto enddesclist;
   }
   else // token other than html token
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <dt> tag but found %s token instead!",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <dt> tag but found %s token instead!",
         tokToString(tok));
     goto enddesclist;
   }
@@ -4088,7 +4117,7 @@ int DocHtmlDescList::parse()
 
   if (retval==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <dl> block");
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while inside <dl> block");
   }
 
 enddesclist:
@@ -4188,7 +4217,7 @@ int DocHtmlList::parse()
     {
       // add dummy item to obtain valid HTML
       m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: empty list!");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"empty list!");
       retval = RetVal_EndList;
       goto endlist;
     }
@@ -4196,7 +4225,7 @@ int DocHtmlList::parse()
     {
       // add dummy item to obtain valid HTML
       m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <li> tag but "
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <li> tag but "
           "found <%s%s> instead!",g_token->endTag?"/":"",qPrint(g_token->name));
       doctokenizerYYpushBackHtmlTag(g_token->name);
       goto endlist;
@@ -4206,7 +4235,7 @@ int DocHtmlList::parse()
   {
     // add dummy item to obtain valid HTML
     m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
         " for a html list item");
     goto endlist;
   }
@@ -4214,7 +4243,7 @@ int DocHtmlList::parse()
   {
     // add dummy item to obtain valid HTML
     m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <li> tag but found %s token instead!",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <li> tag but found %s token instead!",
         tokToString(tok));
     goto endlist;
   }
@@ -4228,7 +4257,7 @@ int DocHtmlList::parse()
   
   if (retval==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <%cl> block",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while inside <%cl> block",
         m_type==Unordered ? 'u' : 'o');
   }
 
@@ -4261,7 +4290,7 @@ int DocHtmlList::parseXml()
     }
     else // found some other tag
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <item> tag but "
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <item> tag but "
           "found <%s> instead!",qPrint(g_token->name));
       doctokenizerYYpushBackHtmlTag(g_token->name);
       goto endlist;
@@ -4269,13 +4298,13 @@ int DocHtmlList::parseXml()
   }
   else if (tok==0) // premature end of comment
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
         " for a html list item");
     goto endlist;
   }
   else // token other than html token
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <item> tag but found %s token instead!",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <item> tag but found %s token instead!",
         tokToString(tok));
     goto endlist;
   }
@@ -4291,7 +4320,7 @@ int DocHtmlList::parseXml()
   
   if (retval==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <list type=\"%s\"> block",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while inside <list type=\"%s\"> block",
         m_type==Unordered ? "bullet" : "number");
   }
 
@@ -4464,15 +4493,15 @@ void DocTitle::parse()
       switch (tok)
       {
         case TK_COMMAND: 
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a title section",
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a title section",
 	       qPrint(g_token->name));
           break;
         case TK_SYMBOL: 
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                qPrint(g_token->name));
           break;
         default:
-	  warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+	  warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
 		tokToString(tok));
           break;
       }
@@ -4667,7 +4696,7 @@ int DocParamList::parse(const QCString &cmdName)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
   }
   doctokenizerYYsetStateParam();
@@ -4703,7 +4732,7 @@ int DocParamList::parse(const QCString &cmdName)
   doctokenizerYYsetStatePara();
   if (tok==0) /* premature end of comment block */
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
         "argument of command %s",qPrint(cmdName));
     retval=0;
     goto endparamlist;
@@ -4777,7 +4806,7 @@ int DocParamList::parseXml(const QCString &paramName)
 
   if (retval==0) /* premature end of comment block */
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unterminated param or exception tag");
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unterminated param or exception tag");
   }
   else
   {
@@ -4892,7 +4921,7 @@ void DocPara::handleCite()
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint("cite"));
     return;
   }
@@ -4900,13 +4929,13 @@ void DocPara::handleCite()
   tok=doctokenizerYYlex();
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
         "argument of command %s\n", qPrint("cite"));
     return;
   }
   else if (tok!=TK_WORD && tok!=TK_LNKWORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint("cite"));
     return;
   }
@@ -4946,7 +4975,7 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
@@ -4955,13 +4984,13 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
   doctokenizerYYsetStatePara();
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
         "argument of command %s", qPrint(cmdName));
     return;
   }
   else if (tok!=TK_WORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
@@ -4996,21 +5025,21 @@ void DocPara::handleImage(const QCString &cmdName)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
   tok=doctokenizerYYlex();
   if (tok!=TK_WORD && tok!=TK_LNKWORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
   tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
@@ -5021,7 +5050,7 @@ void DocPara::handleImage(const QCString &cmdName)
   else if (imgType=="rtf")   t=DocImage::Rtf;
   else
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: image type %s specified as the first argument of "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"image type %s specified as the first argument of "
         "%s is not valid",
         qPrint(imgType),qPrint(cmdName));
     return;
@@ -5031,7 +5060,7 @@ void DocPara::handleImage(const QCString &cmdName)
   doctokenizerYYsetStatePara();
   if (tok!=TK_WORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
@@ -5046,7 +5075,7 @@ void DocPara::handleDotFile(const QCString &cmdName)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
@@ -5055,7 +5084,7 @@ void DocPara::handleDotFile(const QCString &cmdName)
   doctokenizerYYsetStatePara();
   if (tok!=TK_WORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
@@ -5070,7 +5099,7 @@ void DocPara::handleMscFile(const QCString &cmdName)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
@@ -5079,7 +5108,7 @@ void DocPara::handleMscFile(const QCString &cmdName)
   doctokenizerYYsetStatePara();
   if (tok!=TK_WORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
@@ -5101,7 +5130,7 @@ void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
@@ -5109,7 +5138,7 @@ void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
   tok=doctokenizerYYlex();
   if (tok!=TK_WORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"%s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
@@ -5129,7 +5158,7 @@ void DocPara::handleRef(const QCString &cmdName)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
@@ -5138,7 +5167,7 @@ void DocPara::handleRef(const QCString &cmdName)
   DocRef *ref=0;
   if (tok!=TK_WORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     goto endref;
   }
@@ -5156,7 +5185,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
@@ -5165,13 +5194,13 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
   doctokenizerYYsetStatePara();
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
         "argument of command %s",qPrint(cmdName));
     return;
   }
   else if (tok!=TK_WORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
@@ -5184,7 +5213,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
     doctokenizerYYsetStatePara();
     if (tok!=TK_WORD)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected block identifier, but found token %s instead while parsing the %s command",
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"expected block identifier, but found token %s instead while parsing the %s command",
           tokToString(tok),qPrint(cmdName));
       return;
     }
@@ -5201,20 +5230,20 @@ void DocPara::handleSection(const QCString &cmdName)
   int tok=doctokenizerYYlex();
   if (tok!=TK_WHITESPACE)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
         qPrint(cmdName));
     return;
   }
   tok=doctokenizerYYlex();
   if (tok==0)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
         "argument of command %s\n", qPrint(cmdName));
     return;
   }
   else if (tok!=TK_WORD && tok!=TK_LNKWORD)
   {
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
         tokToString(tok),qPrint(cmdName));
     return;
   }
@@ -5257,7 +5286,7 @@ int DocPara::handleStartCode()
     i++;
   }
   m_children.append(new DocVerbatim(this,g_context,stripIndentation(g_token->verb.mid(li)),DocVerbatim::Code,g_isExample,g_exampleName,lang));
-  if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: code section ended without end marker");
+  if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"code section ended without end marker");
   doctokenizerYYsetStatePara();
   return retval;
 }
@@ -5299,7 +5328,7 @@ int DocPara::handleCommand(const QCString &cmdName)
   switch (cmdId)
   {
     case CMD_UNKNOWN:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Found unknown command `\\%s'",qPrint(cmdName));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Found unknown command `\\%s'",qPrint(cmdName));
       break;
     case CMD_EMPHASIS:
       m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,TRUE));
@@ -5445,7 +5474,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateHtmlOnly();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: htmlonly section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5454,7 +5483,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateManOnly();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::ManOnly,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: manonly section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"manonly section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5463,7 +5492,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateRtfOnly();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::RtfOnly,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: rtfonly section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"rtfonly section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5472,7 +5501,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateLatexOnly();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: latexonly section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"latexonly section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5481,7 +5510,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateXmlOnly();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"xmlonly section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5490,7 +5519,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateVerbatim();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Verbatim,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: verbatim section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"verbatim section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5499,7 +5528,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateDot();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Dot,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: dot section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"dot section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5508,7 +5537,7 @@ int DocPara::handleCommand(const QCString &cmdName)
         doctokenizerYYsetStateMsc();
         retval = doctokenizerYYlex();
         m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName));
-        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: msc section ended without end marker");
+        if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"msc section ended without end marker");
         doctokenizerYYsetStatePara();
       }
       break;
@@ -5522,10 +5551,8 @@ int DocPara::handleCommand(const QCString &cmdName)
     case CMD_ENDLINK:
     case CMD_ENDVERBATIM:
     case CMD_ENDDOT:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
-      break; 
     case CMD_ENDMSC:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
       break; 
     case CMD_PARAM:
       retval = handleParamSection(cmdName,DocParamSect::Param,FALSE,g_token->paramDir);
@@ -5637,10 +5664,10 @@ int DocPara::handleCommand(const QCString &cmdName)
       }
       break;
     case CMD_SECREFITEM:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
       break;
     case CMD_ENDSECREFLIST:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
       break;
     case CMD_FORMULA:
       {
@@ -5652,7 +5679,7 @@ int DocPara::handleCommand(const QCString &cmdName)
     //  retval = handleLanguageSwitch();
     //  break;
     case CMD_INTERNALREF:
-      //warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+      //warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
       {
         DocInternalRef *ref = handleInternalRef(this);
         if (ref)
@@ -5706,7 +5733,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
   if (g_token->emptyTag && !(tagId&XML_CmdMask) && 
       tagId!=HTML_UNKNOWN && tagId!=HTML_IMG && tagId!=HTML_BR)
   {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: HTML tags may not use the 'empty tag' XHTML syntax.");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"HTML tags may not use the 'empty tag' XHTML syntax.");
   }
   switch (tagId)
   {
@@ -5727,7 +5754,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
     case HTML_LI:
       if (!insideUL(this) && !insideOL(this))
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: lonely <li> tag found");
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"lonely <li> tag found");
       }
       else
       {
@@ -5790,7 +5817,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       retval = RetVal_DescTitle;
       break;
     case HTML_DD:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag <dd> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag <dd> found");
       break;
     case HTML_TABLE:
       {
@@ -5809,7 +5836,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       retval = RetVal_TableHCell;
       break;
     case HTML_CAPTION:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag <caption> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag <caption> found");
       break;
     case HTML_BR:
       {
@@ -5846,29 +5873,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       break;
     case HTML_IMG:
       {
-        HtmlAttribListIterator li(tagHtmlAttribs);
-        HtmlAttrib *opt;
-        bool found=FALSE;
-        int index=0;
-        for (li.toFirst();(opt=li.current());++li,++index)
-        {
-          //printf("option name=%s value=%s\n",opt->name.data(),opt->value.data());
-          if (opt->name=="src" && !opt->value.isEmpty())
-          {
-            // copy attributes
-            HtmlAttribList attrList = tagHtmlAttribs;
-            // and remove the src attribute
-            bool result = attrList.remove(index);
-            ASSERT(result);
-            DocImage *img = new DocImage(this,attrList,opt->value,DocImage::Html,opt->value);
-            m_children.append(img);
-            found = TRUE;
-          }
-        }
-        if (!found)
-        {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: IMG tag does not have a SRC attribute!\n");
-        }
+        handleImg(this,m_children,tagHtmlAttribs);
       }
       break;
     case HTML_BLOCKQUOTE:
@@ -5910,7 +5915,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
           {
             if (Config_getBool("WARN_NO_PARAMDOC"))
             {
-              warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: empty 'name' attribute for <param> tag.");
+              warn_doc_error(g_fileName,doctokenizerYYlineno,"empty 'name' attribute for <param> tag.");
             }
           }
           else
@@ -5922,7 +5927,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
         }
         else
         {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <param> tag.");
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'name' attribute from <param> tag.");
         }
       }
       break;
@@ -5940,7 +5945,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
         }
         else
         {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <param%sref> tag.",tagId==XML_PARAMREF?"":"type");
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'name' attribute from <param%sref> tag.",tagId==XML_PARAMREF?"":"type");
         }
       }
       break;
@@ -5953,7 +5958,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
         }
         else
         {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <exception> tag.");
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'name' attribute from <exception> tag.");
         }
       }
       break;
@@ -5969,7 +5974,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       }
       else
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: lonely <item> tag found");
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"lonely <item> tag found");
       }
       break;
     case XML_RETURNS:
@@ -6018,7 +6023,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
         }
         else
         {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'cref' attribute from <see> tag.");
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'cref' attribute from <see> tag.");
         }
       }
       break;
@@ -6050,7 +6055,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
         }
         else
         {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'cref' attribute from <seealso> tag.");
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'cref' attribute from <seealso> tag.");
         }
       }
       break;
@@ -6083,7 +6088,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       // These tags are defined in .Net but are currently unsupported
       break;
     case HTML_UNKNOWN:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported xml/html tag <%s> found", qPrint(tagName));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported xml/html tag <%s> found", qPrint(tagName));
       m_children.append(new DocWord(this, "<"+tagName+tagHtmlAttribs.toString()+">"));
       break;
   case XML_INHERITDOC:
@@ -6108,7 +6113,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
     case HTML_UL: 
       if (!insideUL(this))
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </ul> tag without matching <ul>");
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"found </ul> tag without matching <ul>");
       }
       else
       {
@@ -6118,7 +6123,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
     case HTML_OL: 
       if (!insideOL(this))
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </ol> tag without matching <ol>");
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"found </ol> tag without matching <ol>");
       }
       else
       {
@@ -6128,7 +6133,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
     case HTML_LI:
       if (!insideLI(this))
       {
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </li> tag without matching <li>");
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"found </li> tag without matching <li>");
       }
       else
       {
@@ -6141,7 +6146,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
     //case HTML_PRE:
     //  if (!insidePRE(this))
     //  {
-    //    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </pre> tag without matching <pre>");
+    //    warn_doc_error(g_fileName,doctokenizerYYlineno,"found </pre> tag without matching <pre>");
     //  }
     //  else
     //  {
@@ -6205,28 +6210,37 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
       // ignore </th> tag
       break;
     case HTML_CAPTION:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </caption> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </caption> found");
       break;
     case HTML_BR:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal </br> tag found\n");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal </br> tag found\n");
       break;
     case HTML_H1:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h1> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h1> found");
       break;
     case HTML_H2:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h2> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h2> found");
       break;
     case HTML_H3:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h3> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h3> found");
+      break;
+    case HTML_H4:
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h4> found");
+      break;
+    case HTML_H5:
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h5> found");
+      break;
+    case HTML_H6:
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h6> found");
       break;
     case HTML_IMG:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </img> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </img> found");
       break;
     case HTML_HR:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </hr> found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </hr> found");
       break;
     case HTML_A:
-      //warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </a> found");
+      //warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </a> found");
       // ignore </a> tag (can be part of <a name=...></a>
       break;
 
@@ -6261,7 +6275,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
       // These tags are defined in .Net but are currently unsupported
       break;
     case HTML_UNKNOWN:
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported xml/html tag </%s> found", qPrint(tagName));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported xml/html tag </%s> found", qPrint(tagName));
       m_children.append(new DocWord(this,"</"+tagName+">"));
       break;
     default:
@@ -6419,13 +6433,13 @@ reparsetoken:
           }
           else
           {
-            warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: End of list marker found "
+            warn_doc_error(g_fileName,doctokenizerYYlineno,"End of list marker found "
                 "has invalid indent level");
           }
         }
         else
         {
-          warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: End of list marker found without any preceding "
+          warn_doc_error(g_fileName,doctokenizerYYlineno,"End of list marker found without any preceding "
               "list items");
         }
         break;
@@ -6537,7 +6551,7 @@ reparsetoken:
           }
           else
           {
-            warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+            warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                 qPrint(g_token->name));
           }
           break;
@@ -6573,7 +6587,7 @@ reparsetoken:
         break;
       default:
         warn_doc_error(g_fileName,doctokenizerYYlineno,
-            "warning: Found unexpected token (id=%x)\n",tok);
+            "Found unexpected token (id=%x)\n",tok);
         break;
     }
   }
@@ -6634,7 +6648,7 @@ int DocSection::parse()
     }
     if (retval==TK_LISTITEM)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid list item found");
     }
     else if (retval==RetVal_CopyDoc)
     {
@@ -6696,7 +6710,7 @@ int DocSection::parse()
     if (retval==RetVal_Subsection) level=2; 
     else if (retval==RetVal_Subsubsection) level=3;
     else level=4;
-    warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected %s "
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected %s "
             "command found inside %s!",
             sectionLevelToName[level],sectionLevelToName[m_level]);
     retval=0; // stop parsing
@@ -6755,7 +6769,7 @@ void DocText::parse()
           }
           else
           {
-            warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+            warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
                 qPrint(g_token->name));
           }
         }
@@ -6794,13 +6808,13 @@ void DocText::parse()
             m_children.append(new DocSymbol(this,DocSymbol::Quot));
             break;
           default:
-            warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected command `%s' found",
+            warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command `%s' found",
                       qPrint(g_token->name));
             break;
         }
         break;
       default:
-        warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+        warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
             tokToString(tok));
         break;
     }
@@ -6842,19 +6856,19 @@ void DocRoot::parse()
     }
     if (retval==TK_LISTITEM)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid list item found");
     }
     else if (retval==RetVal_Subsection)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found subsection command outside of section context!");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"found subsection command outside of section context!");
     }
     else if (retval==RetVal_Subsubsection)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found subsubsection command outside of subsection context!");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"found subsubsection command outside of subsection context!");
     }
     else if (retval==RetVal_Paragraph)
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found paragraph command outside of subsubsection context!");
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"found paragraph command outside of subsubsection context!");
     }
     else if (retval==RetVal_CopyDoc)
     {
@@ -6877,7 +6891,7 @@ void DocRoot::parse()
     }
     else
     {
-      warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid section id `%s'; ignoring section",qPrint(g_token->sectionId));
+      warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid section id `%s'; ignoring section",qPrint(g_token->sectionId));
       retval = 0;
     }
   }
@@ -6899,7 +6913,7 @@ void DocRoot::parse()
 
 //--------------------------------------------------------------------------
 
-DocNode *validatingParseDoc(const char *fileName,int startLine,
+DocRoot *validatingParseDoc(const char *fileName,int startLine,
                             Definition *ctx,MemberDef *md,
                             const char *input,bool indexWords,
                             bool isExample, const char *exampleName,
@@ -7062,8 +7076,13 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
   
   //printf("Starting comment block at %s:%d\n",g_fileName.data(),startLine);
   doctokenizerYYlineno=startLine;
-  doctokenizerYYinit(input,g_fileName);
-
+  QCString inpStr=input;
+  uint inpLen = inpStr.length();
+  if (inpLen>0 && inpStr.at(inpLen-1)!='\n')
+  {
+    inpStr+='\n';
+  }
+  doctokenizerYYinit(inpStr,g_fileName);
 
   // build abstract syntax tree
   DocRoot *root = new DocRoot(md!=0,singleLine);
@@ -7095,7 +7114,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
   return root;
 }
 
-DocNode *validatingParseText(const char *input)
+DocText *validatingParseText(const char *input)
 {
   // store parser state so we can re-enter this function if needed
   docParserPushContext();
diff --git a/src/docparser.h b/src/docparser.h
index 227974a..b80e5e1 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -56,7 +56,7 @@ class SectionDict;
  *  @returns         Root node of the abstract syntax tree. Ownership of the
  *                   pointer is handed over to the caller.
  */
-DocNode *validatingParseDoc(const char *fileName,int startLine,
+DocRoot *validatingParseDoc(const char *fileName,int startLine,
                             Definition *context, MemberDef *md,
                             const char *input,bool indexWords,
                             bool isExample,const char *exampleName=0,
@@ -65,7 +65,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
 /*! Main entry point for parsing simple text fragments. These 
  *  fragments are limited to words, whitespace and symbols.
  */
-DocNode *validatingParseText(const char *input);
+DocText *validatingParseText(const char *input);
 
 /*! Searches for section and anchor commands in the input */
 void docFindSections(const char *input,
@@ -1265,6 +1265,7 @@ class DocText : public CompAccept<DocText>, public DocNode
     Kind kind() const       { return Kind_Text; }
     void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); }
     void parse();
+    bool isEmpty() const    { return m_children.isEmpty(); }
 };
 
 /** Root node of documentation tree */
@@ -1277,6 +1278,7 @@ class DocRoot : public CompAccept<DocRoot>, public DocNode
     void parse();
     bool indent() const { return m_indent; }
     bool singleLine() const { return m_singleLine; }
+    bool isEmpty() const { return m_children.isEmpty(); }
 
   private:
     bool m_indent;
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index a84b073..c884976 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -337,7 +337,7 @@ ATTRNAME  [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
 ATTRIB    {ATTRNAME}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
 URLCHAR   [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=]
 URLMASK   ({URLCHAR}+([({]{URLCHAR}*[)}])?)+
-FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+]
+FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+@&#]
 FILEECHAR [a-z_A-Z0-9\-\+]
 HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)*
 FILEMASK  ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
@@ -1136,7 +1136,7 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}
                          BEGIN(St_Sections);
 		       }
 <St_SecTitle,St_SecLabel1,St_SecLabel2>. {
-                         warn(g_fileName,yylineno,"warning: Unexpected character `%s' while looking for section label or title",yytext); 
+                         warn(g_fileName,yylineno,"Unexpected character `%s' while looking for section label or title",yytext); 
                        }
 
 <St_Snippet>[^\n]+     |
@@ -1148,15 +1148,15 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}
    
      /* Generic rules that work for all states */ 
 <*>\n                  { 
-                         warn(g_fileName,yylineno,"warning: Unexpected new line character"); 
+                         warn(g_fileName,yylineno,"Unexpected new line character"); 
 		       }
 <*>[\\@<>&$#%~"=]      { /* unescaped special character */
-                         //warn(g_fileName,yylineno,"warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext); 
+                         //warn(g_fileName,yylineno,"Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext); 
 			 g_token->name = yytext;
 			 return TK_COMMAND;
                        }
 <*>.                   { 
-                         warn(g_fileName,yylineno,"warning: Unexpected character `%s'",yytext); 
+                         warn(g_fileName,yylineno,"Unexpected character `%s'",yytext); 
 		       }
 %%
 
diff --git a/src/dot.cpp b/src/dot.cpp
index 95c52fe..ffe1028 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -69,9 +69,11 @@ static const char svgZoomHeader[] =
 "]]></style>\n"
 "<script type=\"text/javascript\"><![CDATA[\n"
 "var edges = document.getElementsByTagName('g');\n"
-"for (var i=0;i<edges.length;i++) {\n"
-"  if (edges[i].id.substr(0,4)=='edge') {\n"
-"    edges[i].setAttribute('class','edge');\n"
+"if (edges && edges.length) {\n"
+"  for (var i=0;i<edges.length;i++) {\n"
+"    if (edges[i].id.substr(0,4)=='edge') {\n"
+"      edges[i].setAttribute('class','edge');\n"
+"    }\n"
 "  }\n"
 "}\n"
 "]]></script>\n"
@@ -377,7 +379,7 @@ static bool convertMapFile(FTextStream &t,const char *mapName,
   QFile f(mapName);
   if (!f.open(IO_ReadOnly)) 
   {
-    err("error: problems opening map file %s for inclusion in the docs!\n"
+    err("problems opening map file %s for inclusion in the docs!\n"
         "If you installed Graphviz/dot after a previous failing run, \n"
         "try deleting the output directory and rerun doxygen.\n",mapName);
     return FALSE;
@@ -671,7 +673,7 @@ static void checkDotResult(const QCString &imgName)
       {
         if (!(data[1]=='P' && data[2]=='N' && data[3]=='G'))
         {
-          err("error: Image `%s' produced by dot is not a valid PNG!\n"
+          err("Image `%s' produced by dot is not a valid PNG!\n"
               "You should either select a different format "
               "(DOT_IMAGE_FORMAT in the config file) or install a more "
               "recent version of graphviz (1.7+)\n",imgName.data()
@@ -680,13 +682,13 @@ static void checkDotResult(const QCString &imgName)
       }
       else
       {
-        err("error: Could not read image `%s' generated by dot!\n",imgName.data());
+        err("Could not read image `%s' generated by dot!\n",imgName.data());
       }
       fclose(f);
     }
     else
     {
-      err("error: Could not open image `%s' generated by dot!\n",imgName.data());
+      err("Could not open image `%s' generated by dot!\n",imgName.data());
     }
   }
 }
@@ -852,7 +854,7 @@ bool DotRunner::run()
   }
   if (!postCmd.isEmpty() && portable_system(postCmd,postArgs)!=0)
   {
-    err("error: Problems running '%s' as a post-processing step for dot output\n",m_postCmd.data());
+    err("Problems running '%s' as a post-processing step for dot output\n",m_postCmd.data());
     return FALSE;
   }
   if (checkResult) checkDotResult(imageName);
@@ -969,13 +971,13 @@ bool DotFilePatcher::run()
   QFile fo(m_patchFile);
   if (!fi.open(IO_ReadOnly)) 
   {
-    err("error: problem opening file %s for patching!\n",tmpName.data());
+    err("problem opening file %s for patching!\n",tmpName.data());
     QDir::current().rename(tmpName,m_patchFile);
     return FALSE;
   }
   if (!fo.open(IO_WriteOnly))
   {
-    err("error: problem opening file %s for patching!\n",m_patchFile.data());
+    err("problem opening file %s for patching!\n",m_patchFile.data());
     QDir::current().rename(tmpName,m_patchFile);
     return FALSE;
   }
@@ -1120,12 +1122,12 @@ bool DotFilePatcher::run()
     QFile fo(orgName);
     if (!fi.open(IO_ReadOnly)) 
     {
-      err("error: problem opening file %s for reading!\n",tmpName.data());
+      err("problem opening file %s for reading!\n",tmpName.data());
       return FALSE;
     }
     if (!fo.open(IO_WriteOnly))
     {
-      err("error: problem opening file %s for writing!\n",orgName.data());
+      err("problem opening file %s for writing!\n",orgName.data());
       return FALSE;
     }
     FTextStream t(&fo);
@@ -2270,7 +2272,7 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path); exit(1);
+    err("Output dir %s does not exist!\n",path); exit(1);
   }
 
   // put each connected subgraph of the hierarchy in a row of the HTML output
@@ -2699,7 +2701,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode,
     {
       DotNode *n = childQueue.take(0);
       int distance = n->distance();
-      if (!n->isVisible() && distance<maxDistance) // not yet processed
+      if (!n->isVisible() && distance<=maxDistance) // not yet processed
       {
         if (distance>0)
         {
@@ -2728,7 +2730,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode,
     if (includeParents && parentQueue.count()>0)
     {
       DotNode *n = parentQueue.take(0);
-      if ((!n->isVisible() || firstNode) && n->distance()<maxDistance) // not yet processed
+      if ((!n->isVisible() || firstNode) && n->distance()<=maxDistance) // not yet processed
       {
         firstNode=FALSE;
         int distance = n->distance();
@@ -3084,7 +3086,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path); exit(1);
+    err("Output dir %s does not exist!\n",path); exit(1);
   }
   static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
 
@@ -3325,7 +3327,7 @@ void DotInclDepGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes
   {
     static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH");
     DotNode *n = queue.take(0);
-    if (!n->isVisible() && n->distance()<maxDistance) // not yet processed
+    if (!n->isVisible() && n->distance()<=maxDistance) // not yet processed
     {
       n->markAsVisible();
       maxNodes--;
@@ -3371,7 +3373,6 @@ void DotInclDepGraph::determineTruncatedNodes(QList<DotNode> &queue)
 
 DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse)
 {
-  m_maxDistance = 0;
   m_inverse = inverse;
   ASSERT(fd!=0);
   m_diskName  = fd->getFileBase().copy();
@@ -3428,7 +3429,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path); exit(1);
+    err("Output dir %s does not exist!\n",path); exit(1);
   }
   static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
 
@@ -3572,14 +3573,14 @@ int DotCallGraph::m_curNodeNumber = 0;
 
 void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance)
 {
-  LockingPtr<MemberSDict> refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers();
-  if (!refs.isNull())
+  MemberSDict *refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers();
+  if (refs)
   {
     MemberSDict::Iterator mri(*refs);
     MemberDef *rmd;
     for (;(rmd=mri.current());++mri)
     {
-      if (rmd->isFunction() || rmd->isSlot() || rmd->isSignal())
+      if (rmd->showInCallGraph())
       {
         QCString uniqueId;
         uniqueId=rmd->getReference()+"$"+
@@ -3629,7 +3630,7 @@ void DotCallGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes)
   {
     static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH");
     DotNode *n = queue.take(0);
-    if (!n->isVisible() && n->distance()<maxDistance) // not yet processed
+    if (!n->isVisible() && n->distance()<=maxDistance) // not yet processed
     {
       n->markAsVisible();
       maxNodes--;
@@ -3676,7 +3677,6 @@ void DotCallGraph::determineTruncatedNodes(QList<DotNode> &queue)
 
 DotCallGraph::DotCallGraph(MemberDef *md,bool inverse)
 {
-  m_maxDistance = 0;
   m_inverse = inverse;
   m_diskName = md->getOutputFileBase()+"_"+md->anchor();
   m_scope    = md->getOuterScope();
@@ -3732,7 +3732,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path); exit(1);
+    err("Output dir %s does not exist!\n",path); exit(1);
   }
   static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
 
@@ -3870,7 +3870,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path); exit(1);
+    err("Output dir %s does not exist!\n",path); exit(1);
   }
   static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
 
@@ -3995,7 +3995,7 @@ void generateGraphLegend(const char *path)
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path); exit(1);
+    err("Output dir %s does not exist!\n",path); exit(1);
   }
 
   QGString theGraph;
@@ -4070,7 +4070,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
   QDir d(outDir);
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",outDir); exit(1);
+    err("Output dir %s does not exist!\n",outDir); exit(1);
   }
 
   QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
@@ -4124,7 +4124,7 @@ void writeDotImageMapFromFile(FTextStream &t,
   QDir d(outDir);
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",outDir.data()); exit(1);
+    err("Output dir %s does not exist!\n",outDir.data()); exit(1);
   }
 
   QCString mapName = baseName+".map";
@@ -4192,8 +4192,8 @@ void DotGroupCollaboration::buildGraph(GroupDef* gd)
   // hierarchy.
 
   // Write parents
-  LockingPtr<GroupList> groups = gd->partOfGroups();
-  if ( groups!=0 )
+  GroupList *groups = gd->partOfGroups();
+  if ( groups )
   {
     GroupListIterator gli(*groups);
     GroupDef *d;
@@ -4386,7 +4386,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path); exit(1);
+    err("Output dir %s does not exist!\n",path); exit(1);
   }
   static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
 
diff --git a/src/dot.h b/src/dot.h
index d746024..a02b32d 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -213,7 +213,6 @@ class DotInclDepGraph
     QDict<DotNode> *m_usedNodes;
     static int      m_curNodeNumber;
     QCString        m_diskName;
-    int             m_maxDistance;
     bool            m_inverse;
 };
 
@@ -237,7 +236,6 @@ class DotCallGraph
     DotNode        *m_startNode;
     static int      m_curNodeNumber;
     QDict<DotNode> *m_usedNodes;
-    int             m_maxDistance;
     int             m_recDepth;
     bool            m_inverse;
     QCString        m_diskName;
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 4dd39e3..d97c0f6 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -155,7 +155,6 @@ SDict<DirRelation> Doxygen::dirRelations(257);
 ParserManager   *Doxygen::parserManager = 0;
 QCString Doxygen::htmlFileExtension;
 bool             Doxygen::suppressDocWarnings = FALSE;
-ObjCache        *Doxygen::symbolCache = 0;
 Store           *Doxygen::symbolStorage;
 QCString         Doxygen::objDBFileName;
 QCString         Doxygen::entryDBFileName;
@@ -208,7 +207,7 @@ void clearAll()
 class Statistics 
 {
   public:
-    Statistics() {}
+    Statistics() { stats.setAutoDelete(TRUE); }
     void begin(const char *name)
     {
       msg(name);
@@ -778,7 +777,7 @@ static void buildFileList(EntryNav *rootNav)
       {
         warn(
             root->fileName,root->startLine,
-            "warning: file %s already documented. "
+            "file %s already documented. "
             "Skipping documentation.",
             root->name.data()
             );
@@ -812,7 +811,7 @@ static void buildFileList(EntryNav *rootNav)
     {
       const char *fn = root->fileName.data();
       QCString text(4096);
-      text.sprintf("warning: the name `%s' supplied as "
+      text.sprintf("the name `%s' supplied as "
           "the second argument in the \\file statement ",
           qPrint(root->name));
       if (ambig) // name is ambiguous
@@ -867,7 +866,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
        )
     { // explicit request
       QCString text;
-      text.sprintf("warning: the name `%s' supplied as "
+      text.sprintf("the name `%s' supplied as "
                   "the argument of the \\class, \\struct, \\union, or \\include command ",
                   qPrint(includeFile)
                  );
@@ -1442,7 +1441,7 @@ static void resolveClassNestingRelations()
         d->addInnerCompound(cd);
         cd->setOuterScope(d);
         warn(cd->getDefFileName(),cd->getDefLine(),
-            "warning: Internal inconsistency: scope for class %s not "
+            "Internal inconsistency: scope for class %s not "
             "found!",name.data()
             );
       }
@@ -1515,7 +1514,7 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
     cd->setFileDef(fd);
     fd->insertClass(cd);
   }
-  LockingPtr<GroupList> groups = rootCd->partOfGroups();
+  GroupList *groups = rootCd->partOfGroups();
   if ( groups!=0 )
   {
     GroupListIterator gli(*groups);
@@ -2112,14 +2111,14 @@ static void findUsingDeclImports(EntryNav *rootNav)
                   //printf("found member %s\n",mni->memberName());
                   MemberDef *newMd = 0;
                   {
-                    LockingPtr<ArgumentList> templAl = md->templateArguments();
-                    LockingPtr<ArgumentList> al = md->templateArguments();
+                    ArgumentList *templAl = md->templateArguments();
+                    ArgumentList *al = md->templateArguments();
                     newMd = new MemberDef(
                       root->fileName,root->startLine,root->startColumn,
                       md->typeString(),memName,md->argsString(),
                       md->excpString(),root->protection,root->virt,
                       md->isStatic(),Member,md->memberType(),
-                      templAl.pointer(),al.pointer()
+                      templAl,al
                       );
                   }
                   newMd->setMemberClass(cd);
@@ -3094,8 +3093,9 @@ static void addInterfaceOrServiceToServiceOrSingleton(
   // add member to the class cd
   cd->insertMember(md);
   // also add the member as a "base" (to get nicer diagrams)
-  // hmm... should "optional" interface/service be handled differently?
-  BaseInfo base(rname,Public,Normal);
+  // "optional" interface/service get Protected which turns into dashed line
+  BaseInfo base(rname,
+          (root->spec & (Entry::Optional)) ? Protected : Public,Normal);
   findClassRelation(rootNav,cd,cd,&base,0,DocumentedOnly,true)
   || findClassRelation(rootNav,cd,cd,&base,0,Undocumented,true);
   // add file to list of used files
@@ -3154,7 +3154,7 @@ static void buildInterfaceAndServiceList(EntryNav *const rootNav)
     else if (rname.isEmpty())
     {
       warn(root->fileName,root->startLine,
-           "warning: Illegal member name found.");
+           "Illegal member name found.");
     }
 
     rootNav->releaseEntry();
@@ -3486,8 +3486,8 @@ static void buildFunctionList(EntryNav *rootNav)
             if (rnd) rnsName = rnd->name().copy();
             //printf("matching arguments for %s%s %s%s\n",
             //    md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data());
-            LockingPtr<ArgumentList> mdAl = md->argumentList();
-            LockingPtr<ArgumentList> mdTempl = md->templateArguments();
+            ArgumentList *mdAl = md->argumentList();
+            ArgumentList *mdTempl = md->templateArguments();
 
             // in case of template functions, we need to check if the
             // functions have the same number of template parameters
@@ -3509,7 +3509,7 @@ static void buildFunctionList(EntryNav *rootNav)
                     root->stat && md->isStatic() && root->fileName!=md->getDefFileName();
 
             if (
-                matchArguments2(md->getOuterScope(),mfd,mdAl.pointer(),
+                matchArguments2(md->getOuterScope(),mfd,mdAl,
                                 rnd ? rnd : Doxygen::globalScope,rfd,root->argList,
                                 FALSE) &&
                 sameNumTemplateArgs && 
@@ -3543,7 +3543,7 @@ static void buildFunctionList(EntryNav *rootNav)
               if (found)
               {
                 // merge argument lists
-                mergeArguments(mdAl.pointer(),root->argList,!root->doc.isEmpty());
+                mergeArguments(mdAl,root->argList,!root->doc.isEmpty());
                 // merge documentation
                 if (md->documentation().isEmpty() && !root->doc.isEmpty())
                 {
@@ -3762,7 +3762,7 @@ static void buildFunctionList(EntryNav *rootNav)
     else if (rname.isEmpty())
     {
         warn(root->fileName,root->startLine,
-             "warning: Illegal member name found."
+             "Illegal member name found."
             );
     }
 
@@ -3796,18 +3796,18 @@ static void findFriends()
           //printf("Checking for matching arguments 
           //        mmd->isRelated()=%d mmd->isFriend()=%d mmd->isFunction()=%d\n",
           //    mmd->isRelated(),mmd->isFriend(),mmd->isFunction());
-          LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
-          LockingPtr<ArgumentList> fmdAl = fmd->argumentList();
+          ArgumentList *mmdAl = mmd->argumentList();
+          ArgumentList *fmdAl = fmd->argumentList();
           if ((mmd->isFriend() || (mmd->isRelated() && mmd->isFunction())) &&
-              matchArguments2(mmd->getOuterScope(), mmd->getFileDef(), mmdAl.pointer(),
-                              fmd->getOuterScope(), fmd->getFileDef(), fmdAl.pointer(),
+              matchArguments2(mmd->getOuterScope(), mmd->getFileDef(), mmdAl,
+                              fmd->getOuterScope(), fmd->getFileDef(), fmdAl,
                               TRUE
                              )
                              
              ) // if the member is related and the arguments match then the 
                // function is actually a friend.
           {
-            mergeArguments(mmdAl.pointer(),fmdAl.pointer());
+            mergeArguments(mmdAl,fmdAl);
             if (!fmd->documentation().isEmpty())
             {
               mmd->setDocumentation(fmd->documentation(),fmd->docFile(),fmd->docLine());
@@ -3914,17 +3914,17 @@ static void transferFunctionReferences()
     }
     if (mdef && mdec)
     {
-      LockingPtr<ArgumentList> mdefAl = mdef->argumentList();
-      LockingPtr<ArgumentList> mdecAl = mdec->argumentList();
+      ArgumentList *mdefAl = mdef->argumentList();
+      ArgumentList *mdecAl = mdec->argumentList();
       if (
-          matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl.pointer(),
-                          mdec->getOuterScope(),mdec->getFileDef(),mdecAl.pointer(),
+          matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl,
+                          mdec->getOuterScope(),mdec->getFileDef(),mdecAl,
                           TRUE
             )
          ) /* match found */
       {
-        LockingPtr<MemberSDict> defDict = mdef->getReferencesMembers();
-        LockingPtr<MemberSDict> decDict = mdec->getReferencesMembers();
+        MemberSDict *defDict = mdef->getReferencesMembers();
+        MemberSDict *decDict = mdec->getReferencesMembers();
         if (defDict!=0)
         {
           MemberSDict::IteratorDict msdi(*defDict);
@@ -3933,8 +3933,7 @@ static void transferFunctionReferences()
           {
             if (decDict==0 || decDict->find(rmd->name())==0)
             {
-              printf("CURRENT_KEY:%s\n",msdi.currentKey().data());
-              mdec->addSourceReferences(rmd,msdi.currentKey());
+              mdec->addSourceReferences(rmd);
             }
           }
         }
@@ -3946,8 +3945,7 @@ static void transferFunctionReferences()
           {
             if (defDict==0 || defDict->find(rmd->name())==0)
             {
-              printf("CURRENT_KEY:%s\n",msdi.currentKey().data());
-              mdef->addSourceReferences(rmd,msdi.currentKey());
+              mdef->addSourceReferences(rmd);
             }
           }
         }
@@ -3962,7 +3960,7 @@ static void transferFunctionReferences()
           {
             if (decDict==0 || decDict->find(rmd->name())==0)
             {
-              mdec->addSourceReferencedBy(rmd,msdi.currentKey());
+              mdec->addSourceReferencedBy(rmd);
             }
           }
         }
@@ -3974,7 +3972,7 @@ static void transferFunctionReferences()
           {
             if (defDict==0 || defDict->find(rmd->name())==0)
             {
-              mdef->addSourceReferencedBy(rmd,msdi.currentKey());
+              mdef->addSourceReferencedBy(rmd);
             }
           }
         }
@@ -4007,12 +4005,12 @@ static void transferRelatedFunctionDocumentation()
         MemberNameIterator rmni(*rmn);
         for (rmni.toFirst();(rmd=rmni.current());++rmni) // for each member with the same name
         {
-          LockingPtr<ArgumentList>  mdAl = md->argumentList();
-          LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
+          ArgumentList *mdAl = md->argumentList();
+          ArgumentList *rmdAl = rmd->argumentList();
           //printf("  Member found: related=`%d'\n",rmd->isRelated());
           if ((rmd->isRelated() || rmd->isForeign()) && // related function
-              matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
-                              rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
+              matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl,
+                              rmd->getOuterScope(),rmd->getFileDef(),rmdAl,
                               TRUE
                              )
              )
@@ -4592,7 +4590,13 @@ static bool findClassRelation(
       //   ) // Check for base class with the same name.
       //     // If found then look in the outer scope for a match
       //     // and prevent recursion.
-      if (!isRecursiveBaseClass(rootNav->name(),baseClassName) || explicitGlobalScope)
+      if (!isRecursiveBaseClass(rootNav->name(),baseClassName)
+          || explicitGlobalScope
+          // sadly isRecursiveBaseClass always true for UNO IDL ifc/svc members
+          // (i.e. this is needed for addInterfaceOrServiceToServiceOrSingleton)
+          || (rootNav->lang()==SrcLangExt_IDL &&
+              (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC ||
+               rootNav->section()==Entry::INCLUDED_SERVICE_SEC)))
       {
         Debug::print(
             Debug::Classes,0,"    class relation %s inherited/used by %s found (%s and %s) templSpec='%s'\n",
@@ -4983,7 +4987,7 @@ static void computeClassRelations()
          )
         warn_undoc(
                    root->fileName,root->startLine,
-                   "warning: Compound %s is not documented.",
+                   "Compound %s is not documented.",
                    root->name.data()
              );
     }
@@ -5172,8 +5176,8 @@ static void addListReferences()
       name = pd->getGroupDef()->getOutputFileBase();
     }
     {
-      LockingPtr< QList<ListItemInfo> > xrefItems = pd->xrefListItems();
-      addRefItem(xrefItems.pointer(),
+      QList<ListItemInfo> *xrefItems = pd->xrefListItems();
+      addRefItem(xrefItems,
           name,
           theTranslator->trPage(TRUE,TRUE),
           name,pd->title(),0);
@@ -5188,8 +5192,8 @@ static void addListReferences()
     //{
     //  name = dd->getGroupDef()->getOutputFileBase();
     //}
-    LockingPtr< QList<ListItemInfo> > xrefItems = dd->xrefListItems();
-    addRefItem(xrefItems.pointer(),
+    QList<ListItemInfo> *xrefItems = dd->xrefListItems();
+    addRefItem(xrefItems,
         name,
         theTranslator->trDir(TRUE,TRUE),
         name,dd->displayName(),0);
@@ -5244,23 +5248,23 @@ static void addMemberDocs(EntryNav *rootNav,
   // TODO determine scope based on root not md
   Definition *rscope = md->getOuterScope();
 
-  LockingPtr<ArgumentList> mdAl = md->argumentList();
+  ArgumentList *mdAl = md->argumentList();
   if (al)
   {
     //printf("merging arguments (1) docs=%d\n",root->doc.isEmpty());
-    mergeArguments(mdAl.pointer(),al,!root->doc.isEmpty());
+    mergeArguments(mdAl,al,!root->doc.isEmpty());
   }
   else
   {
     if ( 
-          matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
+          matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl,
                            rscope,rfd,root->argList,
                            TRUE
                          )
        ) 
     {
       //printf("merging arguments (2)\n");
-      mergeArguments(mdAl.pointer(),root->argList,!root->doc.isEmpty());
+      mergeArguments(mdAl,root->argList,!root->doc.isEmpty());
     }
   }
   if (over_load)  // the \overload keyword was used
@@ -5335,7 +5339,7 @@ static void addMemberDocs(EntryNav *rootNav,
       {
         warn(
              root->fileName,root->startLine,
-             "warning: member %s belongs to two different groups. The second "
+             "member %s belongs to two different groups. The second "
              "one found here will be ignored.",
              md->name().data()
             );
@@ -5422,11 +5426,11 @@ static bool findGlobalMember(EntryNav *rootNav,
         NamespaceDef *rnd = 0;
         if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict->find(namespaceName);
 
-        LockingPtr<ArgumentList> mdAl = md->argumentList();
+        ArgumentList *mdAl = md->argumentList();
         bool matching=
           (mdAl==0 && root->argList->count()==0) ||
           md->isVariable() || md->isTypedef() || /* in case of function pointers */
-          matchArguments2(md->getOuterScope(),md->getFileDef(),mdAl.pointer(),
+          matchArguments2(md->getOuterScope(),md->getFileDef(),mdAl,
                           rnd ? rnd : Doxygen::globalScope,fd,root->argList,
                           FALSE);
 
@@ -5435,8 +5439,8 @@ static bool findGlobalMember(EntryNav *rootNav,
         // different functions.
         if (matching && root->tArgLists)
         {
-          LockingPtr<ArgumentList> mdTempl = md->templateArguments();
-          if (mdTempl!=0)
+          ArgumentList *mdTempl = md->templateArguments();
+          if (mdTempl)
           {
             if (root->tArgLists->getLast()->count()!=mdTempl->count())
             {
@@ -5486,7 +5490,7 @@ static bool findGlobalMember(EntryNav *rootNav,
       QCString fullFuncDecl=decl;
       if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE);
       QCString warnMsg =
-         QCString("warning: no matching file member found for \n")+substitute(fullFuncDecl,"%","%%");
+         QCString("no matching file member found for \n")+substitute(fullFuncDecl,"%","%%");
       if (mn->count()>0)
       {
         warnMsg+="\nPossible candidates:\n";
@@ -5511,7 +5515,7 @@ static bool findGlobalMember(EntryNav *rootNav,
        )
     {
       warn(root->fileName,root->startLine,
-           "warning: documented symbol `%s' was not declared or defined.",decl
+           "documented symbol `%s' was not declared or defined.",decl
           );
     }
   }
@@ -6040,10 +6044,10 @@ static void findMember(EntryNav *rootNav,
               // get the template parameter lists found at the member declaration
               QList<ArgumentList> declTemplArgs;
               cd->getTemplateParameterLists(declTemplArgs);
-              LockingPtr<ArgumentList> templAl = md->templateArguments();
-              if (templAl!=0)
+              ArgumentList *templAl = md->templateArguments();
+              if (templAl)
               {
-                declTemplArgs.append(templAl.pointer());
+                declTemplArgs.append(templAl);
               }
 
               // get the template parameter lists found at the member definition
@@ -6057,10 +6061,10 @@ static void findMember(EntryNav *rootNav,
               /* substitute the occurrences of class template names in the 
                * argument list before matching 
                */
-              LockingPtr<ArgumentList> mdAl = md->argumentList();
+              ArgumentList *mdAl = md->argumentList();
               if (declTemplArgs.count()>0 && defTemplArgs &&
                   declTemplArgs.count()==defTemplArgs->count() &&
-                  mdAl.pointer()
+                  mdAl
                  )
               {
                 /* the function definition has template arguments
@@ -6070,13 +6074,13 @@ static void findMember(EntryNav *rootNav,
                  */
                 argList = new ArgumentList;
                 substituteTemplatesInArgList(declTemplArgs,*defTemplArgs,
-                    mdAl.pointer(),argList);
+                    mdAl,argList);
 
                 substDone=TRUE;
               }
               else /* no template arguments, compare argument lists directly */
               {
-                argList = mdAl.pointer();
+                argList = mdAl;
               }
 
               Debug::print(Debug::FindMembers,0,
@@ -6087,7 +6091,7 @@ static void findMember(EntryNav *rootNav,
 
               bool matching=
                 md->isVariable() || md->isTypedef() || // needed for function pointers
-                (mdAl.pointer()==0 && root->argList->count()==0) || 
+                (mdAl==0 && root->argList->count()==0) || 
                 matchArguments2(
                     md->getClassDef(),md->getFileDef(),argList, 
                     cd,fd,root->argList,
@@ -6173,7 +6177,7 @@ static void findMember(EntryNav *rootNav,
                 //printf("ccd->name()==%s className=%s\n",ccd->name().data(),className.data());
                 if (ccd!=0 && rightScopeMatch(ccd->name(),className)) 
                 {
-                  LockingPtr<ArgumentList> templAl = md->templateArguments();
+                  ArgumentList *templAl = md->templateArguments();
                   if (root->tArgLists && templAl!=0 &&
                       root->tArgLists->getLast()->count()<=templAl->count())
                   { 
@@ -6220,7 +6224,7 @@ static void findMember(EntryNav *rootNav,
               }
             }
 
-            QCString warnMsg = "warning: no ";
+            QCString warnMsg = "no ";
             if (noMatchCount>1) warnMsg+="uniquely ";
             warnMsg+="matching class member found for \n";
 
@@ -6250,11 +6254,11 @@ static void findMember(EntryNav *rootNav,
                 ClassDef *cd=md->getClassDef();
                 if (cd!=0 && rightScopeMatch(cd->name(),className))
                 {
-                  LockingPtr<ArgumentList> templAl = md->templateArguments();
+                  ArgumentList *templAl = md->templateArguments();
                   if (templAl!=0)
                   {
                     warnMsg+="  'template ";
-                    warnMsg+=tempArgListToString(templAl.pointer());
+                    warnMsg+=tempArgListToString(templAl);
                     warnMsg+='\n';
                   }
                   warnMsg+="  ";
@@ -6404,7 +6408,7 @@ static void findMember(EntryNav *rootNav,
           QCString fullFuncDecl=funcDecl.copy();
           if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
           warn(root->fileName,root->startLine,
-               "warning: Cannot determine class for function\n%s",
+               "Cannot determine class for function\n%s",
                fullFuncDecl.data()
               );   
         }
@@ -6448,11 +6452,11 @@ static void findMember(EntryNav *rootNav,
           MemberDef *rmd=mn->first();
           while (rmd && newMember) // see if we got another member with matching arguments
           {
-            LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
+            ArgumentList *rmdAl = rmd->argumentList();
 
             newMember=
               className!=rmd->getOuterScope()->name() ||
-              !matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
+              !matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl,
                                cd,fd,root->argList,
                                TRUE);
             if (newMember) rmd=mn->next();
@@ -6542,10 +6546,10 @@ static void findMember(EntryNav *rootNav,
               MemberDef *rmd=rmn->first();
               while (rmd && !found) // see if we got another member with matching arguments
               {
-                LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
+                ArgumentList *rmdAl = rmd->argumentList();
                 // check for matching argument lists
                 if (
-                    matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
+                    matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl,
                                     cd,fd,root->argList,
                                     TRUE)
                    )
@@ -6612,7 +6616,7 @@ static void findMember(EntryNav *rootNav,
             QCString fullFuncDecl=funcDecl.copy();
             if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
             warn(root->fileName,root->startLine,
-               "warning: Cannot determine file/namespace for relatedalso function\n%s",
+               "Cannot determine file/namespace for relatedalso function\n%s",
                fullFuncDecl.data()
               );   
           }
@@ -6621,7 +6625,7 @@ static void findMember(EntryNav *rootNav,
       else
       {
         warn_undoc(root->fileName,root->startLine,
-                   "warning: class `%s' for related function `%s' is not "
+                   "class `%s' for related function `%s' is not "
                    "documented.", 
                    className.data(),funcName.data()
                   );
@@ -6686,14 +6690,14 @@ localObjCMethod:
       if (className.isEmpty() && !globMem)
       {
         warn(root->fileName,root->startLine,
-             "warning: class for member `%s' cannot "
+             "class for member `%s' cannot "
              "be found.", funcName.data()
             ); 
       }
       else if (!className.isEmpty() && !globMem)
       {
         warn(root->fileName,root->startLine,
-             "warning: member `%s' of class `%s' cannot be found",
+             "member `%s' of class `%s' cannot be found",
              funcName.data(),className.data());
       }
     }
@@ -6702,7 +6706,7 @@ localObjCMethod:
   {
     // this should not be called
     warn(root->fileName,root->startLine,
-         "warning: member with no name found.");
+         "member with no name found.");
   }
   return;
 } 
@@ -7428,7 +7432,7 @@ static void findEnumDocumentation(EntryNav *rootNav)
       if (!found)
       {
         warn(root->fileName,root->startLine,
-             "warning: Documentation for undefined enum `%s' found.",
+             "Documentation for undefined enum `%s' found.",
              name.data()
             );
       }
@@ -7455,9 +7459,9 @@ static void findDEV(const MemberNameSDict &mnsd)
     {
       if (md->isEnumerate()) // member is an enum
       {
-        LockingPtr<MemberList> fmdl = md->enumFieldList();
+        MemberList *fmdl = md->enumFieldList();
         int documentedEnumValues=0;
-        if (fmdl!=0) // enum has values
+        if (fmdl) // enum has values
         {
           MemberListIterator fmni(*fmdl);
           MemberDef *fmd;
@@ -7557,15 +7561,15 @@ static void computeMemberRelations()
               mcd->isBaseClass(bmcd,TRUE))
           {
             //printf("  derived scope\n");
-            LockingPtr<ArgumentList> bmdAl = bmd->argumentList();
-            LockingPtr<ArgumentList>  mdAl =  md->argumentList();
+            ArgumentList *bmdAl = bmd->argumentList();
+            ArgumentList *mdAl =  md->argumentList();
             //printf(" Base argList=`%s'\n Super argList=`%s'\n",
             //        argListToString(bmdAl.pointer()).data(),
             //        argListToString(mdAl.pointer()).data()
             //      );
             if ( 
-                matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl.pointer(),
-                  md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
+                matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl,
+                  md->getOuterScope(), md->getFileDef(), mdAl,
                   TRUE
                   ) 
                )
@@ -7679,24 +7683,136 @@ static void generateFileSources()
 {
   if (Doxygen::inputNameList->count()>0)
   {
-    FileNameListIterator fnli(*Doxygen::inputNameList); 
-    FileName *fn;
-    for (;(fn=fnli.current());++fnli)
+#if USE_LIBCLANG
+    static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+    if (clangAssistedParsing)
     {
-      FileNameIterator fni(*fn);
-      FileDef *fd;
-      for (;(fd=fni.current());++fni)
+      QDict<void> g_processedFiles(10007);
+
+      // create a dictionary with files to process
+      QDict<void> g_filesToProcess(10007);
+      FileNameListIterator fnli(*Doxygen::inputNameList); 
+      FileName *fn;
+      for (fnli.toFirst();(fn=fnli.current());++fnli)
+      {
+        FileNameIterator fni(*fn);
+        FileDef *fd;
+        for (;(fd=fni.current());++fni)
+        {
+          g_filesToProcess.insert(fd->absFilePath(),(void*)0x8);
+        }
+      }
+      // process source files (and their include dependencies)
+      for (fnli.toFirst();(fn=fnli.current());++fnli)
+      {
+        FileNameIterator fni(*fn);
+        FileDef *fd;
+        for (;(fd=fni.current());++fni)
+        {
+          if (fd->isSource() && !fd->isReference())
+          {
+            QStrList filesInSameTu;
+            fd->getAllIncludeFilesRecursively(filesInSameTu);
+            fd->startParsing();
+            if (fd->generateSourceFile()) // sources need to be shown in the output
+            {
+              msg("Generating code for file %s...\n",fd->docName().data());
+              fd->writeSource(*g_outputList,FALSE,filesInSameTu);
+
+            }
+            else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
+              // we needed to parse the sources even if we do not show them
+            {
+              msg("Parsing code for file %s...\n",fd->docName().data());
+              fd->parseSource(FALSE,filesInSameTu);
+            }
+
+            char *incFile = filesInSameTu.first();
+            while (incFile && g_filesToProcess.find(incFile))
+            {
+              if (fd->absFilePath()!=incFile && !g_processedFiles.find(incFile))
+              {
+                QStrList moreFiles;
+                bool ambig;
+                FileDef *ifd=findFileDef(Doxygen::inputNameDict,incFile,ambig);
+                if (ifd && !ifd->isReference())
+                {
+                  if (ifd->generateSourceFile()) // sources need to be shown in the output
+                  {
+                    msg(" Generating code for file %s...\n",ifd->docName().data());
+                    ifd->writeSource(*g_outputList,TRUE,moreFiles);
+
+                  }
+                  else if (!ifd->isReference() && Doxygen::parseSourcesNeeded)
+                    // we needed to parse the sources even if we do not show them
+                  {
+                    msg(" Parsing code for file %s...\n",ifd->docName().data());
+                    ifd->parseSource(TRUE,moreFiles);
+                  }
+                  g_processedFiles.insert(incFile,(void*)0x8);
+                }
+              }
+              incFile = filesInSameTu.next();
+            }
+            fd->finishParsing();
+            g_processedFiles.insert(fd->absFilePath(),(void*)0x8);
+          }
+        }
+      }
+      // process remaining files
+      for (fnli.toFirst();(fn=fnli.current());++fnli)
       {
-        if (fd->generateSourceFile()) // sources need to be shown in the output
+        FileNameIterator fni(*fn);
+        FileDef *fd;
+        for (;(fd=fni.current());++fni)
         {
-          msg("Generating code for file %s...\n",fd->docName().data());
-          fd->writeSource(*g_outputList);
+          if (!g_processedFiles.find(fd->absFilePath())) // not yet processed
+          {
+            QStrList filesInSameTu;
+            fd->startParsing();
+            if (fd->generateSourceFile()) // sources need to be shown in the output
+            {
+              msg("Generating code for file %s...\n",fd->docName().data());
+              fd->writeSource(*g_outputList,FALSE,filesInSameTu);
+
+            }
+            else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
+              // we needed to parse the sources even if we do not show them
+            {
+              msg("Parsing code for file %s...\n",fd->docName().data());
+              fd->parseSource(FALSE,filesInSameTu);
+            }
+            fd->finishParsing();
+          }
         }
-        else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
-          // we needed to parse the sources even if we do not show them
+      }
+    }
+    else
+#endif
+    {
+      FileNameListIterator fnli(*Doxygen::inputNameList); 
+      FileName *fn;
+      for (;(fn=fnli.current());++fnli)
+      {
+        FileNameIterator fni(*fn);
+        FileDef *fd;
+        for (;(fd=fni.current());++fni)
         {
-          msg("Parsing code for file %s...\n",fd->docName().data());
-          fd->parseSource();
+          QStrList filesInSameTu;
+          fd->startParsing();
+          if (fd->generateSourceFile()) // sources need to be shown in the output
+          {
+            msg("Generating code for file %s...\n",fd->docName().data());
+            fd->writeSource(*g_outputList,FALSE,filesInSameTu);
+
+          }
+          else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
+            // we needed to parse the sources even if we do not show them
+          {
+            msg("Parsing code for file %s...\n",fd->docName().data());
+            fd->parseSource(FALSE,filesInSameTu);
+          }
+          fd->finishParsing();
         }
       }
     }
@@ -8304,7 +8420,7 @@ static void findDefineDocumentation(EntryNav *rootNav)
           }
           md=mn->next();
         }
-        //warn("warning: define %s found in the following files:\n",root->name.data());
+        //warn("define %s found in the following files:\n",root->name.data());
         //warn("Cannot determine where to add the documentation found "
         //     "at line %d of file %s. \n",
         //     root->startLine,root->fileName.data());
@@ -8316,14 +8432,14 @@ static void findDefineDocumentation(EntryNav *rootNav)
       if (preEnabled)
       {
         warn(root->fileName,root->startLine,
-             "warning: documentation for unknown define %s found.\n",
+             "documentation for unknown define %s found.\n",
              root->name.data()
             );
       }
       else
       {
         warn(root->fileName,root->startLine,
-             "warning: found documented #define but ignoring it because "
+             "found documented #define but ignoring it because "
              "ENABLE_PREPROCESSING is NO.\n",
              root->name.data()
             );
@@ -8370,7 +8486,7 @@ static void findDirDocumentation(EntryNav *rootNav)
         if (matchingDir)
         {
            warn(root->fileName,root->startLine,
-             "warning: \\dir command matches multiple directories.\n"
+             "\\dir command matches multiple directories.\n"
              "  Applying the command for directory %s\n"
              "  Ignoring the command for directory %s\n",
              matchingDir->name().data(),dir->name().data()
@@ -8392,7 +8508,7 @@ static void findDirDocumentation(EntryNav *rootNav)
     }
     else
     {
-      warn(root->fileName,root->startLine,"warning: No matching "
+      warn(root->fileName,root->startLine,"No matching "
           "directory found for command \\dir %s\n",normalizedName.data());
     }
     rootNav->releaseEntry();
@@ -8474,7 +8590,7 @@ static void findMainPage(EntryNav *rootNav)
     else
     {
       warn(root->fileName,root->startLine,
-           "warning: found more than one \\mainpage comment block! Skipping this "
+           "found more than one \\mainpage comment block! Skipping this "
            "block."
           );
     }
@@ -8530,7 +8646,7 @@ static void checkPageRelations()
     {
       if (ppd==pd)
       {
-        err("warning: page defined at line %d of file %s with label %s is a subpage "
+        err("page defined at line %d of file %s with label %s is a subpage "
             "of itself! Please remove this cyclic dependency.\n",
             pd->docLine(),pd->docFile().data(),pd->name().data());
         exit(1);
@@ -8645,7 +8761,7 @@ static void buildExampleList(EntryNav *rootNav)
     if (Doxygen::exampleSDict->find(root->name))
     {
       warn(root->fileName,root->startLine,
-          "warning: Example %s was already documented. Ignoring "
+          "Example %s was already documented. Ignoring "
           "documentation found here.",
           root->name.data()
           );
@@ -8707,7 +8823,7 @@ static void generateExampleDocs()
     g_outputList->docify(pd->name());
     endTitle(*g_outputList,n,0);
     g_outputList->startContents();
-    g_outputList->parseDoc(pd->docFile(),                            // file
+    g_outputList->generateDoc(pd->docFile(),                            // file
                          pd->docLine(),                            // startLine
                          pd,                                       // context
                          0,                                        // memberDef
@@ -8878,7 +8994,7 @@ static void generateConfigFile(const char *configFile,bool shortList,
   }
   else
   {
-    err("error: Cannot open file %s for writing\n",configFile);
+    err("Cannot open file %s for writing\n",configFile);
     exit(1);
   }
 }
@@ -8918,7 +9034,7 @@ static void readTagFile(Entry *root,const char *tl)
   QFileInfo fi(fileName);
   if (!fi.exists() || !fi.isFile())
   {
-    err("error: Tag file `%s' does not exist or is not a file. Skipping it...\n",
+    err("Tag file `%s' does not exist or is not a file. Skipping it...\n",
         fileName.data());
     return;
   }
@@ -9012,62 +9128,174 @@ static void copyExtraFiles(const QCString& filesOption,const QCString &outputOpt
   }
 }
 
+//----------------------------------------------------------------------------
+
+static ParserInterface *getParserForFile(const char *fn)
+{
+  QCString fileName=fn;
+  QCString extension;
+  int ei = fileName.findRev('.');
+  if (ei!=-1)
+  {
+    extension=fileName.right(fileName.length()-ei);
+  }
+  else
+  {
+    extension = ".no_extension";
+  }
+
+  return Doxygen::parserManager->getParser(extension);
+}
+
+static void parseFile(ParserInterface *parser,
+                      Entry *root,EntryNav *rootNav,FileDef *fd,const char *fn,
+                      bool sameTu,QStrList &filesInSameTu)
+{
+#if USE_LIBCLANG
+  static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+#else
+  static bool clangAssistedParsing = FALSE;
+#endif
+  QCString fileName=fn;
+  QCString extension;
+  int ei = fileName.findRev('.');
+  if (ei!=-1)
+  {
+    extension=fileName.right(fileName.length()-ei);
+  }
+  else
+  {
+    extension = ".no_extension";
+  }
+
+  QFileInfo fi(fileName);
+  BufStr preBuf(fi.size()+4096);
+
+  if (Config_getBool("ENABLE_PREPROCESSING") && 
+      parser->needsPreprocessing(extension))
+  {
+    BufStr inBuf(fi.size()+4096);
+    msg("Preprocessing %s...\n",fn);
+    readInputFile(fileName,inBuf);
+    preprocessFile(fileName,inBuf,preBuf);
+  }
+  else // no preprocessing
+  {
+    msg("Reading %s...\n",fn);
+    readInputFile(fileName,preBuf);
+  }
+
+  BufStr convBuf(preBuf.curPos()+1024);
+
+  // convert multi-line C++ comments to C style comments
+  convertCppComments(&preBuf,&convBuf,fileName);
+
+  convBuf.addChar('\0');
+
+  if (clangAssistedParsing && !sameTu)
+  {
+    fd->getAllIncludeFilesRecursively(filesInSameTu);
+  }
+
+  // use language parse to parse the file
+  parser->parseInput(fileName,convBuf.data(),root,sameTu,filesInSameTu);
+
+  // store the Entry tree in a file and create an index to
+  // navigate/load entries
+  //printf("root->createNavigationIndex for %s\n",fd->name().data());
+  root->createNavigationIndex(rootNav,g_storage,fd);
+}
+
 //! parse the list of input files
 static void parseFiles(Entry *root,EntryNav *rootNav)
 {
-  QCString *s=g_inputFiles.first();
-  while (s)
+#if USE_LIBCLANG
+  static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+  if (clangAssistedParsing)
   {
-    QCString fileName=*s;
-    QCString extension;
-    int ei = fileName.findRev('.');
-    if (ei!=-1)
-    {
-      extension=fileName.right(fileName.length()-ei);
-    }
-    else
+    QDict<void> g_processedFiles(10007);
+
+    // create a dictionary with files to process
+    QDict<void> g_filesToProcess(10007);
+    QCString *s=g_inputFiles.first();
+    while (s)
     {
-      extension = ".no_extension";
+      g_filesToProcess.insert(*s,(void*)0x8);
+      s=g_inputFiles.next();
     }
+    s=g_inputFiles.first();
 
-    ParserInterface *parser = Doxygen::parserManager->getParser(extension);
-
-    QFileInfo fi(fileName);
-    BufStr preBuf(fi.size()+4096);
+    // process source files (and their include dependencies)
+    while (s)
+    {
+      bool ambig;
+      FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
+      ASSERT(fd!=0);
+      if (fd->isSource() && !fd->isReference()) // this is a source file
+      {
+        QStrList filesInSameTu;
+        ParserInterface * parser = getParserForFile(s->data());
+        parser->startTranslationUnit(s->data());
+        parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+        //printf("  got %d extra files in tu\n",filesInSameTu.count());
 
-    if (Config_getBool("ENABLE_PREPROCESSING") && 
-        parser->needsPreprocessing(extension))
+        // Now process any include files in the same translation unit 
+        // first. When libclang is used this is much more efficient.
+        char *incFile = filesInSameTu.first();
+        while (incFile && g_filesToProcess.find(incFile))
+        {
+          if (qstrcmp(incFile,s->data()) && !g_processedFiles.find(incFile))
+          {
+            FileDef *ifd=findFileDef(Doxygen::inputNameDict,incFile,ambig);
+            if (ifd && !ifd->isReference())
+            {
+              QStrList moreFiles;
+              //printf("  Processing %s in same translation unit as %s\n",incFile,s->data());
+              parseFile(parser,root,rootNav,ifd,incFile,TRUE,moreFiles);
+              g_processedFiles.insert(incFile,(void*)0x8);
+            }
+          }
+          incFile = filesInSameTu.next();
+        }
+        parser->finishTranslationUnit();
+        g_processedFiles.insert(*s,(void*)0x8);
+      }
+      s=g_inputFiles.next();
+    }
+    // process remaining files
+    s=g_inputFiles.first();
+    while (s)
     {
-      BufStr inBuf(fi.size()+4096);
-      msg("Preprocessing %s...\n",s->data());
-      readInputFile(fileName,inBuf);
-      preprocessFile(fileName,inBuf,preBuf);
+      if (!g_processedFiles.find(*s)) // not yet processed
+      {
+        bool ambig;
+        QStrList filesInSameTu;
+        FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
+        ASSERT(fd!=0);
+        ParserInterface * parser = getParserForFile(s->data());
+        parser->startTranslationUnit(s->data());
+        parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+        parser->finishTranslationUnit();
+        g_processedFiles.insert(*s,(void*)0x8);
+      }
+      s=g_inputFiles.next();
     }
-    else // no preprocessing
+  }
+  else // normal pocessing
+#endif
+  {
+    QCString *s=g_inputFiles.first();
+    while (s)
     {
-      msg("Reading %s...\n",s->data());
-      readInputFile(fileName,preBuf);
+      bool ambig;
+      QStrList filesInSameTu;
+      FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
+      ASSERT(fd!=0);
+      ParserInterface * parser = getParserForFile(s->data());
+      parser->startTranslationUnit(s->data());
+      parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+      s=g_inputFiles.next();
     }
-
-    BufStr convBuf(preBuf.curPos()+1024);
-
-    // convert multi-line C++ comments to C style comments
-    convertCppComments(&preBuf,&convBuf,fileName);
-
-    convBuf.addChar('\0');
-
-    // use language parse to parse the file
-    parser->parseInput(fileName,convBuf.data(),root);
-
-    // store the Entry tree in a file and create an index to
-    // navigate/load entries
-    bool ambig;
-    FileDef *fd=findFileDef(Doxygen::inputNameDict,fileName,ambig);
-    ASSERT(fd!=0);
-    //printf("root->createNavigationIndex for %s\n",fd->name().data());
-    root->createNavigationIndex(rootNav,g_storage,fd);
-
-    s=g_inputFiles.next();
   }
 }
 
@@ -9194,7 +9422,7 @@ int readDir(QFileInfo *fi,
         {
           if (errorIfNotExist)
           {
-            err("warning: source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
+            warn_uncond("source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
           }
         }
         else if (cfi->isFile() && 
@@ -9286,7 +9514,7 @@ int readFileOrDirectory(const char *s,
       {
         if (errorIfNotExist)
         {
-          err("warning: source %s is not a readable file or directory... skipping.\n",s);
+          warn_uncond("source %s is not a readable file or directory... skipping.\n",s);
         }
       }
       else if (!Config_getBool("EXCLUDE_SYMLINKS") || !fi.isSymLink())
@@ -9361,7 +9589,7 @@ void readFormulaRepository()
       int se=line.find(':'); // find name and text separator.
       if (se==-1)
       {
-        err("warning: formula.repository is corrupted!\n");
+        warn_uncond("formula.repository is corrupted!\n");
         break;
       }
       else
@@ -9784,7 +10012,7 @@ void readConfiguration(int argc, char **argv)
         formatName=getArg(argc,argv,optind);
         if (!formatName)
         {
-          err("error: option -e is missing format specifier rtf.\n");
+          err("option -e is missing format specifier rtf.\n");
           cleanUpDoxygen();
           exit(1);
         }
@@ -9792,7 +10020,7 @@ void readConfiguration(int argc, char **argv)
         {
           if (optind+1>=argc)
           {
-            err("error: option \"-e rtf\" is missing an extensions file name\n");
+            err("option \"-e rtf\" is missing an extensions file name\n");
             cleanUpDoxygen();
             exit(1);
           }
@@ -9804,7 +10032,7 @@ void readConfiguration(int argc, char **argv)
           cleanUpDoxygen();
           exit(1);
         }
-        err("error: option \"-e\" has invalid format specifier.\n");
+        err("option \"-e\" has invalid format specifier.\n");
         cleanUpDoxygen();
         exit(1);
         break; 
@@ -9812,7 +10040,7 @@ void readConfiguration(int argc, char **argv)
         formatName=getArg(argc,argv,optind);
         if (!formatName)
         {
-          err("error: option -w is missing format specifier rtf, html or latex\n");
+          err("option -w is missing format specifier rtf, html or latex\n");
           cleanUpDoxygen();
           exit(1);
         } 
@@ -9820,7 +10048,7 @@ void readConfiguration(int argc, char **argv)
         {
           if (optind+1>=argc)
           {
-            err("error: option \"-w rtf\" is missing a style sheet file name\n");
+            err("option \"-w rtf\" is missing a style sheet file name\n");
             cleanUpDoxygen();
             exit(1);
           }
@@ -9857,7 +10085,7 @@ void readConfiguration(int argc, char **argv)
           }
           if (optind+3>=argc)
           {
-            err("error: option \"-w html\" does not have enough arguments\n");
+            err("option \"-w html\" does not have enough arguments\n");
             cleanUpDoxygen();
             exit(1);
           }
@@ -9865,7 +10093,7 @@ void readConfiguration(int argc, char **argv)
           QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
           if (!setTranslator(outputLanguage))
           {
-            err("warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
+            warn_uncond("Output language %s not supported! Using English instead.\n", outputLanguage.data());
           }
 
           QFile f;
@@ -9906,7 +10134,7 @@ void readConfiguration(int argc, char **argv)
           }
           if (optind+3>=argc)
           {
-            err("error: option \"-w latex\" does not have enough arguments\n");
+            err("option \"-w latex\" does not have enough arguments\n");
             cleanUpDoxygen();
             exit(1);
           }
@@ -9914,7 +10142,7 @@ void readConfiguration(int argc, char **argv)
           QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
           if (!setTranslator(outputLanguage))
           {
-            err("warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
+            warn_uncond("Output language %s not supported! Using English instead.\n", outputLanguage.data());
           }
 
           QFile f;
@@ -9937,7 +10165,7 @@ void readConfiguration(int argc, char **argv)
         }
         else
         {
-          err("error: Illegal format specifier %s: should be one of rtf, html, latex, or bst\n",formatName);
+          err("Illegal format specifier %s: should be one of rtf, html, latex, or bst\n",formatName);
           cleanUpDoxygen();
           exit(1);
         }
@@ -10030,7 +10258,7 @@ void readConfiguration(int argc, char **argv)
     }
     else
     {
-      err("error: configuration file %s not found!\n",argv[optind]);
+      err("configuration file %s not found!\n",argv[optind]);
       usage(argv[0]);
     }
   }
@@ -10038,7 +10266,7 @@ void readConfiguration(int argc, char **argv)
 
   if (!Config::instance()->parse(configName))
   {
-    err("error: could not open or read configuration file %s!\n",configName);
+    err("could not open or read configuration file %s!\n",configName);
     cleanUpDoxygen();
     exit(1);
   }
@@ -10073,7 +10301,7 @@ void adjustConfiguration()
   QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
   if (!setTranslator(outputLanguage))
   {
-    err("warning: Output language %s not supported! Using English instead.\n",
+    warn_uncond("Output language %s not supported! Using English instead.\n",
        outputLanguage.data());
   }
   QStrList &includePath = Config_getList("INCLUDE_PATH");
@@ -10327,21 +10555,24 @@ void searchInputFiles()
   {
     QCString path=s;
     uint l = path.length();
-    // strip trailing slashes
-    if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
-
-    inputSize+=readFileOrDirectory(
-        path,
-        Doxygen::inputNameList,
-        Doxygen::inputNameDict,
-        &excludeNameDict,
-        &Config_getList("FILE_PATTERNS"),
-        &exclPatterns,
-        &g_inputFiles,0,
-        alwaysRecursive,
-        TRUE,
-        killDict,
-        &Doxygen::inputPaths);
+    if (l>0)
+    {
+      // strip trailing slashes
+      if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
+  
+      inputSize+=readFileOrDirectory(
+          path,
+          Doxygen::inputNameList,
+          Doxygen::inputNameDict,
+          &excludeNameDict,
+          &Config_getList("FILE_PATTERNS"),
+          &exclPatterns,
+          &g_inputFiles,0,
+          alwaysRecursive,
+          TRUE,
+          killDict,
+          &Doxygen::inputPaths);
+    }
     s=inputList.next();
   }
   delete killDict;
@@ -10370,14 +10601,14 @@ void parseInput()
       dir.setPath(QDir::currentDirPath());
       if (!dir.mkdir(outputDirectory))
       {
-        err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+        err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
 	    "exist and cannot be created\n",outputDirectory.data());
         cleanUpDoxygen();
         exit(1);
       }
-      else if (!Config_getBool("QUIET"))
+      else
       {
-	err("Notice: Output directory `%s' does not exist. "
+	msg("Notice: Output directory `%s' does not exist. "
 	    "I have created it for you.\n", outputDirectory.data());
       }
       dir.cd(outputDirectory);
@@ -10389,17 +10620,10 @@ void parseInput()
    *            Initialize global lists and dictionaries
    **************************************************************************/
 
-  int cacheSize = Config_getInt("SYMBOL_CACHE_SIZE");
-  if (cacheSize<0) cacheSize=0;
-  if (cacheSize>9) cacheSize=9;
-  //Doxygen::symbolCache   = new ObjCache(16+cacheSize); // 16 -> room for 65536 elements, 
-  //                                                     //       ~2.0 MByte "overhead"
-  //Doxygen::symbolCache   = new ObjCache(1);  // only to stress test cache behaviour
-  Doxygen::symbolCache   = 0; //disable cache
   Doxygen::symbolStorage = new Store;
 
   // also scale lookup cache with SYMBOL_CACHE_SIZE
-  cacheSize = Config_getInt("LOOKUP_CACHE_SIZE");
+  int cacheSize = Config_getInt("LOOKUP_CACHE_SIZE");
   if (cacheSize<0) cacheSize=0;
   if (cacheSize>9) cacheSize=9;
   uint lookupSize = 65536 << cacheSize;
@@ -10508,7 +10732,7 @@ void parseInput()
   }
   else if (!defaultLayoutUsed)
   {
-    err("warning: failed to open layout file '%s' for reading!\n",layoutFileName.data());
+    warn_uncond("failed to open layout file '%s' for reading!\n",layoutFileName.data());
   }
 
   /**************************************************************************
@@ -10931,9 +11155,9 @@ void generateOutput()
     Htags::useHtags = TRUE;
     QCString htmldir = Config_getString("HTML_OUTPUT");
     if (!Htags::execute(htmldir))
-       err("error: USE_HTAGS is YES but htags(1) failed. \n");
+       err("USE_HTAGS is YES but htags(1) failed. \n");
     if (!Htags::loadFilemap(htmldir))
-       err("error: htags(1) ended normally but failed to load the filemap. \n");
+       err("htags(1) ended normally but failed to load the filemap. \n");
   }
   
   /**************************************************************************
@@ -10947,7 +11171,7 @@ void generateOutput()
     tag=new QFile(generateTagFile);
     if (!tag->open(IO_WriteOnly))
     {
-      err("error: cannot open tag file %s for writing\n",
+      err("cannot open tag file %s for writing\n",
           generateTagFile.data()
          );
       cleanUpDoxygen();
@@ -10980,7 +11204,7 @@ void generateOutput()
     QDir searchDir(searchDirName);
     if (!searchDir.exists() && !searchDir.mkdir(searchDirName))
     {
-      err("error: Could not create search results directory '%s' $PWD='%s'\n",
+      err("Could not create search results directory '%s' $PWD='%s'\n",
           searchDirName.data(),QDir::currentDirPath().data());
       exit(1);
     }
@@ -10996,7 +11220,6 @@ void generateOutput()
   generateExampleDocs();
   g_s.end();
 
-  msg("Generating file sources...\n");
   if (!Htags::useHtags)
   {
     g_s.begin("Generating file sources...\n");
@@ -11037,8 +11260,9 @@ void generateOutput()
   if (Doxygen::formulaList->count()>0 && generateHtml
       && !Config_getBool("USE_MATHJAX"))
   {
-    msg("Generating bitmaps for formulas in HTML...\n");
+    g_s.begin("Generating bitmaps for formulas in HTML...\n");
     Doxygen::formulaList->generateBitmaps(Config_getString("HTML_OUTPUT"));
+    g_s.end();
   }
   
   writeMainPageTagFileData();
@@ -11139,29 +11363,32 @@ void generateOutput()
 
   if (Config_getBool("HAVE_DOT"))
   {
+    g_s.begin("Running dot...\n");
     DotManager::instance()->run();
+    g_s.end();
   }
 
   if (generateHtml &&
       Config_getBool("GENERATE_HTMLHELP") && 
       !Config_getString("HHC_LOCATION").isEmpty())
   {
-    msg("Running html help compiler...\n");
+    g_s.begin("Running html help compiler...\n");
     QString oldDir = QDir::currentDirPath();
     QDir::setCurrent(Config_getString("HTML_OUTPUT"));
     portable_sysTimerStart();
     if (portable_system(Config_getString("HHC_LOCATION"), "index.hhp", FALSE))
     {
-      err("error: failed to run html help compiler on index.hhp\n");
+      err("failed to run html help compiler on index.hhp\n");
     }
     portable_sysTimerStop();
     QDir::setCurrent(oldDir);
+    g_s.end();
   }
   if ( generateHtml &&
        Config_getBool("GENERATE_QHP") && 
       !Config_getString("QHG_LOCATION").isEmpty())
   {
-    msg("Running qhelpgenerator...\n");
+    g_s.begin("Running qhelpgenerator...\n");
     QCString const qhpFileName = Qhp::getQhpFileName();
     QCString const qchFileName = getQchFileName();
 
@@ -11171,26 +11398,14 @@ void generateOutput()
     portable_sysTimerStart();
     if (portable_system(Config_getString("QHG_LOCATION"), args.data(), FALSE))
     {
-      err("error: failed to run qhelpgenerator on index.qhp\n");
+      err("failed to run qhelpgenerator on index.qhp\n");
     }
     portable_sysTimerStop();
     QDir::setCurrent(oldDir);
+    g_s.end();
   }
 
   int cacheParam;
-  if (Doxygen::symbolCache)
-  {
-    msg("symbol cache used %d/%d hits=%d misses=%d\n",
-        Doxygen::symbolCache->count(),
-        Doxygen::symbolCache->size(),
-        Doxygen::symbolCache->hits(),
-        Doxygen::symbolCache->misses());
-    cacheParam = computeIdealCacheParam(Doxygen::symbolCache->misses());
-    if (cacheParam>Config_getInt("SYMBOL_CACHE_SIZE"))
-    {
-      msg("Note: based on cache misses the ideal setting for SYMBOL_CACHE_SIZE is %d at the cost of higher memory usage.\n",cacheParam);
-    }
-  }
   msg("lookup cache used %d/%d hits=%d misses=%d\n",
       Doxygen::lookupCache->count(),
       Doxygen::lookupCache->size(),
@@ -11227,7 +11442,6 @@ void generateOutput()
   thisDir.remove(Doxygen::objDBFileName);
   Config::deleteInstance();
   QTextCodec::deleteAllCodecs();
-  delete Doxygen::symbolCache;
   delete Doxygen::symbolMap;
   delete Doxygen::clangUsrMap;
   delete Doxygen::symbolStorage;
diff --git a/src/doxygen.css b/src/doxygen.css
index 715935a..c314142 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -11,6 +11,7 @@ h1.groupheader {
 }
 
 .title {
+	font: 400 14px/28px Roboto,sans-serif;
 	font-size: 150%;
 	font-weight: bold;
 	margin: 10px 2px;
@@ -168,8 +169,8 @@ pre.fragment {
 }
 
 div.fragment {
-        padding: 4px;
-        margin: 4px;
+        padding: 0px;
+        margin: 0px;
 	background-color: ##FC;
 	border: 1px solid ##CC;
 }
diff --git a/src/doxygen.h b/src/doxygen.h
index 9e55f01..4edf395 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -139,7 +139,6 @@ class Doxygen
     static SDict<DirRelation>        dirRelations;
     static ParserManager            *parserManager;
     static bool                      suppressDocWarnings;
-    static ObjCache                 *symbolCache;
     static Store                    *symbolStorage;
     static QCString                  objDBFileName;
     static QCString                  entryDBFileName;
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index 601b28f..d5348fe 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -11,6 +11,7 @@
 "}\n"
 "\n"
 ".title {\n"
+"	font: 400 14px/28px Roboto,sans-serif;\n"
 "	font-size: 150%;\n"
 "	font-weight: bold;\n"
 "	margin: 10px 2px;\n"
@@ -168,8 +169,8 @@
 "}\n"
 "\n"
 "div.fragment {\n"
-"        padding: 4px;\n"
-"        margin: 4px;\n"
+"        padding: 0px;\n"
+"        margin: 0px;\n"
 "	background-color: ##FC;\n"
 "	border: 1px solid ##CC;\n"
 "}\n"
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 82db047..784ebff 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -78,35 +78,32 @@ FileDef::FileDef(const char *p,const char *nm,
                  const char *lref,const char *dn)
    : Definition((QCString)p+nm,1,1,nm)
 {
-  path=p;
-  filepath=path+nm;
-  filename=nm;
-  diskname=dn;
-  if (diskname.isEmpty()) diskname=nm;
+  m_path=p;
+  m_filePath=m_path+nm;
+  m_fileName=nm;
+  m_diskName=dn;
+  if (m_diskName.isEmpty()) m_diskName=nm;
   setReference(lref);
-  classSDict        = 0;
-  includeList       = 0;
-  includeDict       = 0; 
-  includedByList    = 0;
-  includedByDict    = 0; 
-  namespaceSDict    = 0; 
-  srcDefDict        = 0;
-  srcMemberDict     = 0;
-  usingDirList      = 0;
-  usingDeclList     = 0;
-  package           = 0;
-  isSource          = FALSE; 
-  docname           = nm;
-  dir               = 0;
+  m_classSDict        = 0;
+  m_includeList       = 0;
+  m_includeDict       = 0; 
+  m_includedByList    = 0;
+  m_includedByDict    = 0; 
+  m_namespaceSDict    = 0; 
+  m_srcDefDict        = 0;
+  m_srcMemberDict     = 0;
+  m_usingDirList      = 0;
+  m_usingDeclList     = 0;
+  m_package           = 0;
+  m_isSource          = guessSection(nm)==Entry::SOURCE_SEC; 
+  m_docname           = nm;
+  m_dir               = 0;
   if (Config_getBool("FULL_PATH_NAMES"))
   {
-    docname.prepend(stripFromPath(path.copy()));
+    m_docname.prepend(stripFromPath(m_path.copy()));
   }
-  SrcLangExt lang = getLanguageFromFileName(name());
-  setLanguage(lang);
-  //m_isJava          = lang==SrcLangExt_Java;
-  //m_isCSharp        = lang==SrcLangExt_CSharp;
-  memberGroupSDict = 0;
+  setLanguage(getLanguageFromFileName(name()));
+  m_memberGroupSDict = 0;
   acquireFileVersion();
   m_subGrouping=Config_getBool("SUBGROUPING");
 }
@@ -114,17 +111,17 @@ FileDef::FileDef(const char *p,const char *nm,
 /*! destroy the file definition */
 FileDef::~FileDef()
 {
-  delete classSDict;
-  delete includeDict;
-  delete includeList;
-  delete includedByDict;
-  delete includedByList;
-  delete namespaceSDict;
-  delete srcDefDict;
-  delete srcMemberDict;
-  delete usingDirList;
-  delete usingDeclList;
-  delete memberGroupSDict;
+  delete m_classSDict;
+  delete m_includeDict;
+  delete m_includeList;
+  delete m_includedByDict;
+  delete m_includedByList;
+  delete m_namespaceSDict;
+  delete m_srcDefDict;
+  delete m_srcMemberDict;
+  delete m_usingDirList;
+  delete m_usingDeclList;
+  delete m_memberGroupSDict;
 }
 
 /*! Compute the HTML anchor names for all members in the class */ 
@@ -137,9 +134,9 @@ void FileDef::computeAnchors()
 void FileDef::distributeMemberGroupDocumentation()
 {
   //printf("FileDef::distributeMemberGroupDocumentation()\n");
-  if (memberGroupSDict)
+  if (m_memberGroupSDict)
   {
-    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+    MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
     MemberGroup *mg;
     for (;(mg=mgli.current());++mgli)
     {
@@ -151,9 +148,9 @@ void FileDef::distributeMemberGroupDocumentation()
 void FileDef::findSectionsInDocumentation()
 {
   docFindSections(documentation(),this,0,docFile());
-  if (memberGroupSDict)
+  if (m_memberGroupSDict)
   {
-    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+    MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
     MemberGroup *mg;
     for (;(mg=mgli.current());++mgli)
     {
@@ -194,7 +191,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
     ol.startTextBlock();
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
     {
-      ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+      ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
     }
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && 
         !documentation().isEmpty())
@@ -210,7 +207,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
     }
     if (!documentation().isEmpty())
     {
-      ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+      ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
     }
     //printf("Writing source ref for file %s\n",name().data());
     if (Config_getBool("SOURCE_BROWSER")) 
@@ -236,41 +233,41 @@ void FileDef::writeBriefDescription(OutputList &ol)
 {
   if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
   {
-    ol.startParagraph();
-    ol.parseDoc(briefFile(),briefLine(),this,0,
-                briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
-    ol.pushGeneratorState();
-    ol.disable(OutputGenerator::RTF);
-    ol.writeString(" \n");
-    ol.enable(OutputGenerator::RTF);
+    DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+                       briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
 
-    if (Config_getBool("REPEAT_BRIEF") ||
-        !documentation().isEmpty()
-       )
+    if (rootNode && !rootNode->isEmpty())
     {
-      ol.disableAllBut(OutputGenerator::Html);
-      ol.startTextLink(0,"details");
-      ol.parseText(theTranslator->trMore());
-      ol.endTextLink();
-    }
-    ol.popGeneratorState();
-    ol.endParagraph();
+      ol.startParagraph();
+      ol.writeDoc(rootNode,this,0);
+      ol.pushGeneratorState();
+      ol.disable(OutputGenerator::RTF);
+      ol.writeString(" \n");
+      ol.enable(OutputGenerator::RTF);
 
-    //ol.pushGeneratorState();
-    //ol.disable(OutputGenerator::RTF);
-    //ol.newParagraph();
-    //ol.popGeneratorState();
+      if (Config_getBool("REPEAT_BRIEF") ||
+          !documentation().isEmpty()
+         )
+      {
+        ol.disableAllBut(OutputGenerator::Html);
+        ol.startTextLink(0,"details");
+        ol.parseText(theTranslator->trMore());
+        ol.endTextLink();
+      }
+      ol.popGeneratorState();
+      ol.endParagraph();
+    }
+    delete rootNode;
   }
   ol.writeSynopsis();
 }
 
 void FileDef::writeIncludeFiles(OutputList &ol)
 {
-  if (/*Config_getBool("SHOW_INCLUDE_FILES") &&*/ includeList && 
-      includeList->count()>0)
+  if (m_includeList && m_includeList->count()>0)
   {
     ol.startTextBlock(TRUE);
-    QListIterator<IncludeInfo> ili(*includeList);
+    QListIterator<IncludeInfo> ili(*m_includeList);
     IncludeInfo *ii;
     for (;(ii=ili.current());++ili)
     {
@@ -355,7 +352,7 @@ void FileDef::writeIncludeGraph(OutputList &ol)
     DotInclDepGraph incDepGraph(this,FALSE);
     if (incDepGraph.isTooBig())
     {
-       err("warning: Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
+       warn_uncond("Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
     }
     else if (!incDepGraph.isTrivial())
     {
@@ -379,7 +376,7 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
     DotInclDepGraph incDepGraph(this,TRUE);
     if (incDepGraph.isTooBig())
     {
-       err("warning: Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
+       warn_uncond("Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
     }
     if (!incDepGraph.isTrivial())
     {
@@ -415,18 +412,18 @@ void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
             bool const isConstantGroup)
 {
   // write list of namespaces
-  if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
+  if (m_namespaceSDict) m_namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
 }
 
 void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title)
 {
   // write list of classes
-  if (classSDict) classSDict->writeDeclaration(ol,0,title,FALSE);
+  if (m_classSDict) m_classSDict->writeDeclaration(ol,0,title,FALSE);
 }
 
 void FileDef::writeInlineClasses(OutputList &ol)
 {
-  if (classSDict) classSDict->writeDocumentation(ol,this);
+  if (m_classSDict) m_classSDict->writeDocumentation(ol,this);
 }
 
 void FileDef::startMemberDeclarations(OutputList &ol)
@@ -460,10 +457,10 @@ void FileDef::endMemberDocumentation(OutputList &ol)
 void FileDef::writeMemberGroups(OutputList &ol)
 {
   /* write user defined member groups */
-  if (memberGroupSDict)
+  if (m_memberGroupSDict)
   {
-    memberGroupSDict->sort();
-    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+    m_memberGroupSDict->sort();
+    MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
     MemberGroup *mg;
     for (;(mg=mgli.current());++mgli)
     {
@@ -499,8 +496,10 @@ void FileDef::writeSummaryLinks(OutputList &ol)
   SrcLangExt lang=getLanguage();
   for (eli.toFirst();(lde=eli.current());++eli)
   {
-    if ((lde->kind()==LayoutDocEntry::FileClasses && classSDict && classSDict->declVisible()) || 
-        (lde->kind()==LayoutDocEntry::FileNamespaces && namespaceSDict && namespaceSDict->declVisible())
+    if ((lde->kind()==LayoutDocEntry::FileClasses && 
+         m_classSDict && m_classSDict->declVisible()) || 
+        (lde->kind()==LayoutDocEntry::FileNamespaces && 
+         m_namespaceSDict && m_namespaceSDict->declVisible())
        )
     {
       LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
@@ -543,12 +542,12 @@ void FileDef::writeDocumentation(OutputList &ol)
   //printf("WriteDocumentation diskname=%s\n",diskname.data());
   
   QCString versionTitle;
-  if (!fileVersion.isEmpty())
+  if (!m_fileVersion.isEmpty())
   {
-    versionTitle=("("+fileVersion+")");
+    versionTitle=("("+m_fileVersion+")");
   }
-  QCString title = docname+versionTitle;
-  QCString pageTitle=theTranslator->trFileReference(docname);
+  QCString title = m_docname+versionTitle;
+  QCString pageTitle=theTranslator->trFileReference(m_docname);
 
   if (getDirDef())
   {
@@ -585,7 +584,7 @@ void FileDef::writeDocumentation(OutputList &ol)
 
   ol.startContents();
 
-  if (!fileVersion.isEmpty())
+  if (!m_fileVersion.isEmpty())
   {
     ol.disableAllBut(OutputGenerator::Html);
     ol.startProjectNumber();
@@ -802,15 +801,15 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
 }
 
 /*! Write a source listing of this file to the output */
-void FileDef::writeSource(OutputList &ol)
+void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
 {
   static bool generateTreeView  = Config_getBool("GENERATE_TREEVIEW");
   static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
   static bool latexSourceCode   = Config_getBool("LATEX_SOURCE_CODE");
-  QCString title = docname;
-  if (!fileVersion.isEmpty())
+  QCString title = m_docname;
+  if (!m_fileVersion.isEmpty())
   {
-    title+=(" ("+fileVersion+")");
+    title+=(" ("+m_fileVersion+")");
   }
   QCString pageTitle = theTranslator->trSourceFile(title);
   ol.disable(OutputGenerator::Man);
@@ -853,15 +852,23 @@ void FileDef::writeSource(OutputList &ol)
     if (latexSourceCode) ol.enable(OutputGenerator::Latex);
   }
 
+  (void)sameTu;
+  (void)filesInSameTu;
 #if USE_LIBCLANG
   static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
   if (clangAssistedParsing && 
       (getLanguage()==SrcLangExt_Cpp || getLanguage()==SrcLangExt_ObjC))
   {
     ol.startCodeFragment();
-    ClangParser::instance()->start(absFilePath());
+    if (!sameTu)
+    {
+      ClangParser::instance()->start(absFilePath(),filesInSameTu);
+    }
+    else
+    {
+      ClangParser::instance()->switchToFile(absFilePath());
+    }
     ClangParser::instance()->writeSources(ol,this);
-    ClangParser::instance()->finish();
     ol.endCodeFragment();
   }
   else
@@ -881,17 +888,47 @@ void FileDef::writeSource(OutputList &ol)
   ol.enableAll();
 }
 
-void FileDef::parseSource()
+void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu)
 {
   static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
   DevNullCodeDocInterface devNullIntf;
-  ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
-  pIntf->resetCodeParserState();
-  pIntf->parseCode(
+  (void)sameTu;
+  (void)filesInSameTu;
+#if USE_LIBCLANG
+  static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+  if (clangAssistedParsing && 
+      (getLanguage()==SrcLangExt_Cpp || getLanguage()==SrcLangExt_ObjC))
+  {
+    if (!sameTu)
+    {
+      ClangParser::instance()->start(absFilePath(),filesInSameTu);
+    }
+    else
+    {
+      ClangParser::instance()->switchToFile(absFilePath());
+    }
+    ClangParser::instance()->writeSources(devNullIntf,this);
+  }
+  else
+#endif
+  {
+    ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
+    pIntf->resetCodeParserState();
+    pIntf->parseCode(
             devNullIntf,0,
             fileToString(absFilePath(),filterSourceFiles,TRUE),
             FALSE,0,this
            );
+  }
+}
+
+void FileDef::startParsing()
+{
+}
+
+void FileDef::finishParsing()
+{
+  ClangParser::instance()->finish();
 }
 
 void FileDef::addMembersToMemberGroup()
@@ -902,14 +939,14 @@ void FileDef::addMembersToMemberGroup()
   {
     if (ml->listType()&MemberListType_declarationLists)
     {
-      ::addMembersToMemberGroup(ml,&memberGroupSDict,this);
+      ::addMembersToMemberGroup(ml,&m_memberGroupSDict,this);
     }
   }
 
   // add members inside sections to their groups
-  if (memberGroupSDict)
+  if (m_memberGroupSDict)
   {
-    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+    MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
     MemberGroup *mg;
     for (;(mg=mgli.current());++mgli)
     {
@@ -980,14 +1017,18 @@ void FileDef::insertMember(MemberDef *md)
 void FileDef::insertClass(ClassDef *cd)
 {
   if (cd->isHidden()) return;
-  if (classSDict==0)
+  if (m_classSDict==0)
   {
-    classSDict = new ClassSDict(17);
+    m_classSDict = new ClassSDict(17);
   }
   if (Config_getBool("SORT_BRIEF_DOCS"))
-    classSDict->inSort(cd->name(),cd);
+  {
+    m_classSDict->inSort(cd->name(),cd);
+  }
   else
-    classSDict->append(cd->name(),cd);
+  {
+    m_classSDict->append(cd->name(),cd);
+  }
 }
 
 /*! Adds namespace definition \a nd to the list of all compounds of this file */
@@ -995,23 +1036,27 @@ void FileDef::insertNamespace(NamespaceDef *nd)
 {
   if (nd->isHidden()) return;
   if (!nd->name().isEmpty() && 
-      (namespaceSDict==0 || namespaceSDict->find(nd->name())==0))
+      (m_namespaceSDict==0 || m_namespaceSDict->find(nd->name())==0))
   {
-    if (namespaceSDict==0)
+    if (m_namespaceSDict==0)
     {
-      namespaceSDict = new NamespaceSDict;
+      m_namespaceSDict = new NamespaceSDict;
     }
     if (Config_getBool("SORT_BRIEF_DOCS"))
-      namespaceSDict->inSort(nd->name(),nd);
+    {
+      m_namespaceSDict->inSort(nd->name(),nd);
+    }
     else
-      namespaceSDict->append(nd->name(),nd);
+    {
+      m_namespaceSDict->append(nd->name(),nd);
+    }
   }
 }
 
 QCString FileDef::name() const 
 { 
   if (Config_getBool("FULL_PATH_NAMES")) 
-    return filename; 
+    return m_fileName; 
   else 
     return Definition::name(); 
 } 
@@ -1021,45 +1066,47 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
   //printf("FileDef::addSourceDef(%d,%p,%p)\n",line,d,md);
   if (d)
   {
-    if (srcDefDict==0)    srcDefDict    = new QIntDict<Definition>(257);
-    if (srcMemberDict==0) srcMemberDict = new QIntDict<MemberDef>(257);
-    srcDefDict->insert(line,d);
-    if (md) srcMemberDict->insert(line,md);
+    if (m_srcDefDict==0)    m_srcDefDict    = new QIntDict<Definition>(257);
+    if (m_srcMemberDict==0) m_srcMemberDict = new QIntDict<MemberDef>(257);
+    m_srcDefDict->insert(line,d);
+    if (md) m_srcMemberDict->insert(line,md);
     //printf("Adding member %s with anchor %s at line %d to file %s\n",
     //    md?md->name().data():"<none>",md?md->anchor().data():"<none>",line,name().data());
   }
 }
 
-Definition *FileDef::getSourceDefinition(int lineNr)
+Definition *FileDef::getSourceDefinition(int lineNr) const
 {
   Definition *result=0;
-  if (srcDefDict)
+  if (m_srcDefDict)
   {
-    result = srcDefDict->find(lineNr);
+    result = m_srcDefDict->find(lineNr);
   }
+  //printf("%s::getSourceDefinition(%d)=%s\n",name().data(),lineNr,result?result->name().data():"none");
   return result;
 }
 
-MemberDef *FileDef::getSourceMember(int lineNr)
+MemberDef *FileDef::getSourceMember(int lineNr) const
 {
   MemberDef *result=0;
-  if (srcMemberDict)
+  if (m_srcMemberDict)
   {
-    result = srcMemberDict->find(lineNr);
+    result = m_srcMemberDict->find(lineNr);
   }
+  //printf("%s::getSourceMember(%d)=%s\n",name().data(),lineNr,result?result->name().data():"none");
   return result;
 }
 
 
 void FileDef::addUsingDirective(NamespaceDef *nd)
 {
-  if (usingDirList==0)
+  if (m_usingDirList==0)
   {
-    usingDirList = new NamespaceSDict;
+    m_usingDirList = new NamespaceSDict;
   }
-  if (usingDirList->find(nd->qualifiedName())==0)
+  if (m_usingDirList->find(nd->qualifiedName())==0)
   {
-    usingDirList->append(nd->qualifiedName(),nd);
+    m_usingDirList->append(nd->qualifiedName(),nd);
   }
   //printf("%p: FileDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
 }
@@ -1067,18 +1114,18 @@ void FileDef::addUsingDirective(NamespaceDef *nd)
 NamespaceSDict *FileDef::getUsedNamespaces() const 
 { 
   //printf("%p: FileDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
-  return usingDirList; 
+  return m_usingDirList; 
 }
 
 void FileDef::addUsingDeclaration(Definition *d)
 {
-  if (usingDeclList==0)
+  if (m_usingDeclList==0)
   {
-    usingDeclList = new SDict<Definition>(17);
+    m_usingDeclList = new SDict<Definition>(17);
   }
-  if (usingDeclList->find(d->qualifiedName())==0)
+  if (m_usingDeclList->find(d->qualifiedName())==0)
   {
-    usingDeclList->append(d->qualifiedName(),d);
+    m_usingDeclList->append(d->qualifiedName(),d);
   }
 }
 
@@ -1087,13 +1134,13 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
 {
   //printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
   QCString iName = fd ? fd->absFilePath().data() : incName;
-  if (!iName.isEmpty() && (!includeDict || includeDict->find(iName)==0))
+  if (!iName.isEmpty() && (!m_includeDict || m_includeDict->find(iName)==0))
   {
-    if (includeDict==0)
+    if (m_includeDict==0)
     {
-      includeDict   = new QDict<IncludeInfo>(61);
-      includeList   = new QList<IncludeInfo>;
-      includeList->setAutoDelete(TRUE);
+      m_includeDict   = new QDict<IncludeInfo>(61);
+      m_includeList   = new QList<IncludeInfo>;
+      m_includeList->setAutoDelete(TRUE);
     }
     IncludeInfo *ii = new IncludeInfo;
     ii->fileDef     = fd;
@@ -1101,8 +1148,8 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
     ii->local       = local;
     ii->imported    = imported;
     ii->indirect    = indirect;
-    includeList->append(ii);
-    includeDict->insert(iName,ii);
+    m_includeList->append(ii);
+    m_includeDict->insert(iName,ii);
   }
 }
 
@@ -1113,10 +1160,10 @@ void FileDef::addIncludedUsingDirectives()
   //printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data());
 
   NamespaceList nl;
-  if (includeList) // file contains #includes
+  if (m_includeList) // file contains #includes
   {
     {
-      QListIterator<IncludeInfo> iii(*includeList);
+      QListIterator<IncludeInfo> iii(*m_includeList);
       IncludeInfo *ii;
       for (iii.toFirst();(ii=iii.current());++iii) // foreach #include...
       {
@@ -1128,7 +1175,7 @@ void FileDef::addIncludedUsingDirectives()
       }
     }
     {
-      QListIterator<IncludeInfo> iii(*includeList);
+      QListIterator<IncludeInfo> iii(*m_includeList);
       IncludeInfo *ii;
       // iterate through list from last to first
       for (iii.toLast();(ii=iii.current());--iii)
@@ -1136,7 +1183,7 @@ void FileDef::addIncludedUsingDirectives()
         if (ii->fileDef && ii->fileDef!=this)
         {
           // add using directives
-          NamespaceSDict *unl = ii->fileDef->usingDirList;
+          NamespaceSDict *unl = ii->fileDef->m_usingDirList;
           if (unl)
           {
             NamespaceSDict::Iterator nli(*unl);
@@ -1144,17 +1191,17 @@ void FileDef::addIncludedUsingDirectives()
             for (nli.toLast();(nd=nli.current());--nli)
             {
               // append each using directive found in a #include file
-              if (usingDirList==0) usingDirList = new NamespaceSDict;
+              if (m_usingDirList==0) m_usingDirList = new NamespaceSDict;
               //printf("Prepending used namespace %s to the list of file %s\n",
               //    nd->name().data(),name().data());
-              if (usingDirList->find(nd->qualifiedName())==0) // not yet added
+              if (m_usingDirList->find(nd->qualifiedName())==0) // not yet added
               {
-                usingDirList->prepend(nd->qualifiedName(),nd);
+                m_usingDirList->prepend(nd->qualifiedName(),nd);
               }
             }
           }
           // add using declarations
-          SDict<Definition> *udl = ii->fileDef->usingDeclList;
+          SDict<Definition> *udl = ii->fileDef->m_usingDeclList;
           if (udl)
           {
             SDict<Definition>::Iterator udi(*udl);
@@ -1162,13 +1209,13 @@ void FileDef::addIncludedUsingDirectives()
             for (udi.toLast();(d=udi.current());--udi)
             {
               //printf("Adding using declaration %s\n",d->name().data());
-              if (usingDeclList==0)
+              if (m_usingDeclList==0)
               {
-                usingDeclList = new SDict<Definition>(17);
+                m_usingDeclList = new SDict<Definition>(17);
               }
-              if (usingDeclList->find(d->qualifiedName())==0)
+              if (m_usingDeclList->find(d->qualifiedName())==0)
               {
-                usingDeclList->prepend(d->qualifiedName(),d);
+                m_usingDeclList->prepend(d->qualifiedName(),d);
               }
             }
           }
@@ -1185,13 +1232,13 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
 {
   //printf("FileDef::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
   QCString iName = fd ? fd->absFilePath().data() : incName;
-  if (!iName.isEmpty() && (includedByDict==0 || includedByDict->find(iName)==0))
+  if (!iName.isEmpty() && (m_includedByDict==0 || m_includedByDict->find(iName)==0))
   {
-    if (includedByDict==0)
+    if (m_includedByDict==0)
     {
-      includedByDict = new QDict<IncludeInfo>(61);
-      includedByList = new QList<IncludeInfo>;
-      includedByList->setAutoDelete(TRUE);
+      m_includedByDict = new QDict<IncludeInfo>(61);
+      m_includedByList = new QList<IncludeInfo>;
+      m_includedByList->setAutoDelete(TRUE);
     }
     IncludeInfo *ii = new IncludeInfo;
     ii->fileDef     = fd;
@@ -1199,15 +1246,15 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
     ii->local       = local;
     ii->imported    = imported;
     ii->indirect    = FALSE;
-    includedByList->append(ii);
-    includedByDict->insert(iName,ii);
+    m_includedByList->append(ii);
+    m_includedByDict->insert(iName,ii);
   }
 }
 
 bool FileDef::isIncluded(const QCString &name) const
 {
   if (name.isEmpty()) return FALSE;
-  return includeDict!=0 && includeDict->find(name)!=0;
+  return m_includeDict!=0 && m_includeDict->find(name)!=0;
 }
 
 bool FileDef::generateSourceFile() const 
@@ -1227,17 +1274,17 @@ bool FileDef::generateSourceFile() const
 void FileDef::addListReferences()
 {
   {
-    LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
-    addRefItem(xrefItems.pointer(),
+    QList<ListItemInfo> *xrefItems = xrefListItems();
+    addRefItem(xrefItems,
                getOutputFileBase(),
                theTranslator->trFile(TRUE,TRUE),
                getOutputFileBase(),name(),
                0
               );
   }
-  if (memberGroupSDict)
+  if (m_memberGroupSDict)
   {
-    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+    MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
     MemberGroup *mg;
     for (;(mg=mgli.current());++mgli)
     {
@@ -1506,9 +1553,9 @@ void FileDef::combineUsingRelations()
 {
   if (visited) return; // already done
   visited=TRUE;
-  if (usingDirList)
+  if (m_usingDirList)
   {
-    NamespaceSDict::Iterator nli(*usingDirList);
+    NamespaceSDict::Iterator nli(*m_usingDirList);
     NamespaceDef *nd;
     for (nli.toFirst();(nd=nli.current());++nli)
     {
@@ -1554,24 +1601,24 @@ bool FileDef::isDocumentationFile() const
 void FileDef::acquireFileVersion()
 {
   QCString vercmd = Config_getString("FILE_VERSION_FILTER");
-  if (!vercmd.isEmpty() && !filepath.isEmpty() && filepath!="generated") 
+  if (!vercmd.isEmpty() && !m_filePath.isEmpty() && m_filePath!="generated") 
   {
-    msg("Version of %s : ",filepath.data());
-    QCString cmd = vercmd+" \""+filepath+"\"";
+    msg("Version of %s : ",m_filePath.data());
+    QCString cmd = vercmd+" \""+m_filePath+"\"";
     Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
     FILE *f=portable_popen(cmd,"r");
     if (!f)
     {
-      err("error: could not execute %s\n",vercmd.data());
+      err("could not execute %s\n",vercmd.data());
       return;
     }
     const int bufSize=1024;
     char buf[bufSize];
     int numRead = (int)fread(buf,1,bufSize,f);
     portable_pclose(f);
-    if (numRead>0 && !(fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
+    if (numRead>0 && !(m_fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
     {
-      msg("%s\n",fileVersion.data());
+      msg("%s\n",m_fileVersion.data());
     }
     else 
     {
@@ -1585,11 +1632,11 @@ QCString FileDef::getSourceFileBase() const
 { 
   if (Htags::useHtags)
   {
-    return Htags::path2URL(filepath);
+    return Htags::path2URL(m_filePath);
   }
   else
   {
-    return convertNameToFile(diskname)+"_source"; 
+    return convertNameToFile(m_diskName)+"_source"; 
   }
 }
 
@@ -1598,11 +1645,11 @@ QCString FileDef::includeName() const
 { 
   if (Htags::useHtags)
   {
-    return Htags::path2URL(filepath);
+    return Htags::path2URL(m_filePath);
   }
   else
   {
-    return convertNameToFile(diskname)+"_source"; 
+    return convertNameToFile(m_diskName)+"_source"; 
   }
 }
 
@@ -1701,42 +1748,29 @@ bool FileDef::isLinkableInProject() const
   return hasDocumentation() && !isReference() && showFiles;
 }
 
-#if 0
-bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const
+static void getAllIncludeFilesRecursively(
+    QDict<void> *filesVisited,const FileDef *fd,QStrList &incFiles)
 {
-  //printf("%s::includes(%s)\n",name().data(),incFile->name().data());
-  if (incFile==this) return TRUE;
-  includedFiles->insert(absFilePath(),this);
-  if (includeList)
+  if (fd->includeFileList())
   {
-    QListIterator<IncludeInfo> ili(*includeList);
+    QListIterator<IncludeInfo> iii(*fd->includeFileList());
     IncludeInfo *ii;
-    for (;(ii=ili.current());++ili)
+    for (iii.toFirst();(ii=iii.current());++iii)
     {
-      //printf("ii=%s\n",ii->includeName.data());
-      if ((ii->fileDef && 
-           includedFiles->find(ii->fileDef->absFilePath())==0 &&
-           ii->fileDef->includes(incFile,includedFiles)
-          ) ||
-          incFile->absFilePath()==ii->includeName
-         ) return TRUE;
+      if (ii->fileDef && !ii->fileDef->isReference() &&
+          !filesVisited->find(ii->fileDef->absFilePath()))
+      {
+        //printf("FileDef::addIncludeDependency(%s)\n",ii->fileDef->absFilePath().data());
+        incFiles.append(ii->fileDef->absFilePath());
+        filesVisited->insert(ii->fileDef->absFilePath(),(void*)0x8);
+        getAllIncludeFilesRecursively(filesVisited,ii->fileDef,incFiles);
+      }
     }
   }
-  return FALSE;
 }
 
-bool FileDef::includesByName(const QCString &fileName) const
+void FileDef::getAllIncludeFilesRecursively(QStrList &incFiles) const
 {
-  if (includeList)
-  {
-    QListIterator<IncludeInfo> ili(*includeList);
-    IncludeInfo *ii;
-    for (;(ii=ili.current());++ili)
-    {
-      //printf("ii=%s\n",ii->includeName.data());
-      if (fileName==ii->includeName) return TRUE;
-    }
-  }
-  return FALSE;
+  QDict<void> includes(257);
+  ::getAllIncludeFilesRecursively(&includes,this,incFiles);
 }
-#endif
diff --git a/src/filedef.h b/src/filedef.h
index 7376861..f6e5bad 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -69,20 +69,22 @@ class FileDef : public Definition
 
     FileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
    ~FileDef();
+
+    // ----------------------------------------------------------------------
+
     DefType definitionType() const { return TypeFile; }
 
     /*! Returns the unique file name (this may include part of the path). */
     QCString name() const;
     QCString displayName(bool=TRUE) const { return name(); }
-    QCString fileName() const { return filename; }
+    QCString fileName() const { return m_fileName; }
     
     QCString getOutputFileBase() const 
-    { return convertNameToFile(diskname); }
-    QCString anchor() const
-    { return QCString(); }
+    { return convertNameToFile(m_diskName); }
 
-    QCString getFileBase() const
-    { return diskname; }
+    QCString anchor() const { return QCString(); }
+
+    QCString getFileBase() const { return m_diskName; }
 
     QCString getSourceFileBase() const;
     
@@ -90,59 +92,71 @@ class FileDef : public Definition
     QCString includeName() const;
     
     /*! Returns the absolute path including the file name. */
-    QCString absFilePath() const { return filepath; }
-    
+    QCString absFilePath() const { return m_filePath; }
     
     /*! Returns the name as it is used in the documentation */
-    QCString docName() const { return docname; }
-    
-    void addSourceRef(int line,Definition *d,MemberDef *md);
-    Definition *getSourceDefinition(int lineNr);
-    MemberDef *getSourceMember(int lineNr);
+    QCString docName() const { return m_docname; }
 
-    /* Sets the name of the include file to \a n. */
-    //void setIncludeName(const char *n_) { incName=n_; }
+    /*! Returns TRUE if this file is a source file. */
+    bool isSource() const { return m_isSource; }
+
+    bool isDocumentationFile() const;
     
+    Definition *getSourceDefinition(int lineNr) const;
+    MemberDef *getSourceMember(int lineNr) const;
+
     /*! Returns the absolute path of this file. */ 
-    QCString getPath() const { return path; }
+    QCString getPath() const { return m_path; }
 
     /*! Returns version of this file. */
-    QCString getVersion() const { return fileVersion; }
+    QCString getVersion() const { return m_fileVersion; }
     
     bool isLinkableInProject() const;
 
-    bool isLinkable() const
-    {
-      return isLinkableInProject() || isReference();
-    }
+    bool isLinkable() const { return isLinkableInProject() || isReference(); }
     bool isIncluded(const QCString &name) const;
 
-    //bool isJava() const { return m_isJava; }
-    //bool isCSharp() const { return m_isCSharp; }
+    PackageDef *packageDef() const { return m_package; }
+    DirDef *getDirDef() const      { return m_dir; }
+    NamespaceSDict *getUsedNamespaces() const;
+    SDict<Definition> *getUsedClasses() const      { return m_usingDeclList; }
+    QList<IncludeInfo> *includeFileList() const    { return m_includeList; }
+    QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
+    void getAllIncludeFilesRecursively(QStrList &incFiles) const;
+
+    MemberList *getMemberList(MemberListType lt) const;
+    const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+
+    /* user defined member groups */
+    MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
+    NamespaceSDict *getNamespaceSDict() const     { return m_namespaceSDict; }
+    ClassSDict *getClassSDict() const             { return m_classSDict; }
+    
+    //---------------------------------
+
+    void addSourceRef(int line,Definition *d,MemberDef *md);
 
     void writeDocumentation(OutputList &ol);
     void writeMemberPages(OutputList &ol);
     void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
     void writeSummaryLinks(OutputList &ol);
 
-    void writeSource(OutputList &ol);
-    void parseSource();
+    void startParsing();
+    void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
+    void parseSource(bool sameTu,QStrList &filesInSameTu);
+    void finishParsing();
+
     friend void generatedFileNames();
     void insertMember(MemberDef *md);
     void insertClass(ClassDef *cd);
     void insertNamespace(NamespaceDef *nd);
     void computeAnchors();
 
-    void setPackageDef(PackageDef *pd) { package=pd; }
-    PackageDef *packageDef() const { return package; }
-    
-    void setDirDef(DirDef *dd) { dir=dd; }
-    DirDef *getDirDef() const { return dir; }
+    void setPackageDef(PackageDef *pd) { m_package=pd; }
+    void setDirDef(DirDef *dd) { m_dir=dd; }
 
     void addUsingDirective(NamespaceDef *nd);
-    NamespaceSDict *getUsedNamespaces() const;
     void addUsingDeclaration(Definition *def);
-    SDict<Definition> *getUsedClasses() const { return usingDeclList; }
     void combineUsingRelations();
 
     bool generateSourceFile() const;
@@ -150,8 +164,6 @@ class FileDef : public Definition
 
     void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
     void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
-    QList<IncludeInfo> *includeFileList() const { return includeList; }
-    QList<IncludeInfo> *includedByFileList() const { return includedByList; }
 
     void addMembersToMemberGroup();
     void distributeMemberGroupDocumentation();
@@ -159,18 +171,8 @@ class FileDef : public Definition
     void addIncludedUsingDirectives();
 
     void addListReferences();
-    bool isDocumentationFile() const;
     //bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
     //bool includesByName(const QCString &name) const;
-
-    MemberList *getMemberList(MemberListType lt) const;
-    const QList<MemberList> &getMemberLists() const { return m_memberLists; }
-
-    /* user defined member groups */
-    MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
-    NamespaceSDict *getNamespaceSDict() const     { return namespaceSDict; }
-    ClassSDict *getClassSDict() const             { return classSDict; }
-    
     bool visited;
 
   protected:
@@ -201,27 +203,27 @@ class FileDef : public Definition
     void writeDetailedDescription(OutputList &ol,const QCString &title);
     void writeBriefDescription(OutputList &ol);
 
-    QDict<IncludeInfo>   *includeDict;
-    QList<IncludeInfo>   *includeList;
-    QDict<IncludeInfo>   *includedByDict;
-    QList<IncludeInfo>   *includedByList;
-    NamespaceSDict       *usingDirList;
-    SDict<Definition>    *usingDeclList;
-    QCString              path;
-    QCString              filepath;
-    QCString              diskname;
-    QCString              filename;
-    QCString              docname;
-    QIntDict<Definition> *srcDefDict;
-    QIntDict<MemberDef>  *srcMemberDict;
-    bool                  isSource;
-    QCString              fileVersion;
-    PackageDef           *package;
-    DirDef               *dir;
+    QDict<IncludeInfo>   *m_includeDict;
+    QList<IncludeInfo>   *m_includeList;
+    QDict<IncludeInfo>   *m_includedByDict;
+    QList<IncludeInfo>   *m_includedByList;
+    NamespaceSDict       *m_usingDirList;
+    SDict<Definition>    *m_usingDeclList;
+    QCString              m_path;
+    QCString              m_filePath;
+    QCString              m_diskName;
+    QCString              m_fileName;
+    QCString              m_docname;
+    QIntDict<Definition> *m_srcDefDict;
+    QIntDict<MemberDef>  *m_srcMemberDict;
+    bool                  m_isSource;
+    QCString              m_fileVersion;
+    PackageDef           *m_package;
+    DirDef               *m_dir;
     QList<MemberList>     m_memberLists;
-    MemberGroupSDict     *memberGroupSDict;
-    NamespaceSDict       *namespaceSDict;
-    ClassSDict           *classSDict;
+    MemberGroupSDict     *m_memberGroupSDict;
+    NamespaceSDict       *m_namespaceSDict;
+    ClassSDict           *m_classSDict;
     bool                  m_subGrouping;
 };
 
diff --git a/src/filename.cpp b/src/filename.cpp
index e5c5ca5..da0dccc 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -48,7 +48,7 @@ void FileName::generateDiskNames()
     while (fd && fd->isReference()) fd=next();
     // name if unique, so diskname is simply the name
     //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
-    fd->diskname=name.copy();
+    fd->m_diskName=name;
   }
   else if (count>1) // multiple occurrences of the same file name
   {
@@ -59,7 +59,7 @@ void FileName::generateDiskNames()
     {
       fd=first();
       while (fd && fd->isReference()) fd=next();
-      char c=fd->path.at(i);
+      char c=fd->m_path.at(i);
       if (c=='/') j=i; // remember last position of dirname
       fd=next();
       while (fd && !found)
@@ -67,13 +67,13 @@ void FileName::generateDiskNames()
         if (!fd->isReference())
         {
           //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
-          if (i==(int)fd->path.length())
+          if (i==(int)fd->m_path.length())
           {
-            //warning("Warning: Input file %s found multiple times!\n"
+            //warning("Input file %s found multiple times!\n"
             //        "         The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
             found=TRUE;
           }
-          else if (fd->path[i]!=c)
+          else if (fd->m_path[i]!=c)
           {
             found=TRUE;  
           }
@@ -88,10 +88,10 @@ void FileName::generateDiskNames()
       //printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
       if (!fd->isReference())
       {
-        QCString prefix = fd->path.right(fd->path.length()-j-1);
+        QCString prefix = fd->m_path.right(fd->m_path.length()-j-1);
         fd->setName(prefix+name);
         //printf("!!!!!!!! non unique disk name=%s for fd=%s\n",(prefix+name).data(),fd->diskname.data());
-        fd->diskname=prefix+name;
+        fd->m_diskName=prefix+name;
       }
       fd=next();
     }
diff --git a/src/formula.cpp b/src/formula.cpp
index ef2d5f2..0d3c4cd 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -53,7 +53,7 @@ void FormulaList::generateBitmaps(const char *path)
   int x1,y1,x2,y2;
   QDir d(path);
   // store the original directory
-  if (!d.exists()) { err("error: Output dir %s does not exist!\n",path); exit(1); }
+  if (!d.exists()) { err("Output dir %s does not exist!\n",path); exit(1); }
   QCString oldDir = QDir::currentDirPath().utf8();
   // go to the html output directory (i.e. path)
   QDir::setCurrent(d.absPath());
@@ -149,7 +149,7 @@ void FormulaList::generateBitmaps(const char *path)
         }
         else
         {
-          err("error: Couldn't extract bounding box!\n");
+          err("Couldn't extract bounding box!\n");
         }
       } 
       // next we generate a postscript file which contains the eps
@@ -207,7 +207,7 @@ void FormulaList::generateBitmaps(const char *path)
         if (!t.eof())
           s=t.readLine().utf8();
         if (s.length()<2 || s.left(2)!="P6")
-          err("error: ghostscript produced an illegal image format!");
+          err("ghostscript produced an illegal image format!");
         else
         {
           // assume the size is after the first line that does not start with
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 206106f..203a2ed 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -368,6 +368,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
   }
 }
 
+#if 0
 static QCString fileLocation() 
 {
   QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
@@ -376,6 +377,7 @@ static QCString fileLocation()
   return result;
 }
 
+
 /**
   generates dictionay entries that are used if REFERENCED_BY_RELATION ... options are set
   (e.g. the "referenced by ..." list after the function documentation) 
@@ -395,6 +397,7 @@ static void addDocCrossReference(MemberDef *src, MemberDef *dst)
     src->addSourceReferences(dst,fileLocation());
   }
 }
+#endif
 
 //-------------------------------------------------------------------------------
 /**
diff --git a/src/fortranscanner.h b/src/fortranscanner.h
index 83f7c3e..c70f948 100644
--- a/src/fortranscanner.h
+++ b/src/fortranscanner.h
@@ -28,9 +28,13 @@ class FortranLanguageScanner : public ParserInterface
 {
   public:
     virtual ~FortranLanguageScanner() {}
+    void startTranslationUnit(const char *) {}
+    void finishTranslationUnit() {}
     void parseInput(const char *fileName,
                     const char *fileBuf,
-                    Entry *root);
+                    Entry *root,
+                    bool sameTranslationUnit,
+                    QStrList &filesInSameTranslationUnit);
     bool needsPreprocessing(const QCString &extension);
     void parseCode(CodeOutputInterface &codeOutIntf,
                    const char *scopeName,
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 83da1d0..eae6d6e 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -2125,7 +2125,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
       }
       else
       {
-        warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
+        warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
         handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + 
 	                   argName + " " + doc,brief);
       }
@@ -2140,7 +2140,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
       }
       else
       {
-        warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
+        warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
         handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + 
 	                   argName + " " + doc,brief);
       }
@@ -2155,7 +2155,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
       }
       else
       {
-        warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
+        warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
         handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + 
 	                   argName + " " + doc,brief);
       }
@@ -2264,7 +2264,11 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
 
 //----------------------------------------------------------------------------
 
-void FortranLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void FortranLanguageScanner::parseInput(const char *fileName,
+                                        const char *fileBuf,
+                                        Entry *root,
+                                        bool /*sameTranslationUnit*/,
+                                        QStrList & /*filesInSameTranslationUnit*/)
 {
   g_thisParser = this;
   ::parseMain(fileName,fileBuf,root);
@@ -2300,7 +2304,7 @@ void FortranLanguageScanner::resetCodeParserState()
 
 void FortranLanguageScanner::parsePrototype(const char *text)
 {
-  (void)text;
+  current->name = QCString(text).lower();
 }
 
 static void scanner_abort() 
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 4d0707b..2b41594 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -273,19 +273,19 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
       bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace
           // both inside a file => definition and declaration do not have to be in the same file
            (srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
-            md->getOuterScope()->definitionType()==Definition::TypeFile); 
+               md->getOuterScope()->definitionType()==Definition::TypeFile); 
 
-      LockingPtr<ArgumentList> srcMdAl  = srcMd->argumentList();
-      LockingPtr<ArgumentList> mdAl     = md->argumentList();
-      LockingPtr<ArgumentList> tSrcMdAl = srcMd->templateArguments();
-      LockingPtr<ArgumentList> tMdAl    = md->templateArguments();
+      ArgumentList *srcMdAl  = srcMd->argumentList();
+      ArgumentList *mdAl     = md->argumentList();
+      ArgumentList *tSrcMdAl = srcMd->templateArguments();
+      ArgumentList *tMdAl    = md->templateArguments();
       
       if (srcMd->isFunction() && md->isFunction() && // both are a function
-          ((tSrcMdAl.pointer()==0 && tMdAl.pointer()==0) || 
-           (tSrcMdAl.pointer()!=0 && tMdAl.pointer()!=0 && tSrcMdAl->count()==tMdAl->count())
+          ((tSrcMdAl==0 && tMdAl==0) || 
+           (tSrcMdAl!=0 && tMdAl!=0 && tSrcMdAl->count()==tMdAl->count())
           ) &&       // same number of template arguments
-          matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl.pointer(),
-                          md->getOuterScope(),md->getFileDef(),mdAl.pointer(),
+          matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl,
+                          md->getOuterScope(),md->getFileDef(),mdAl,
                           TRUE
                          ) && // matching parameters
           sameScope // both are found in the same scope
@@ -295,7 +295,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
         {
           md->setGroupAlias(srcMd); 
         }
-        else
+        else if (md!=srcMd->getGroupAlias())
         {
           md->setGroupAlias(srcMd->getGroupAlias()); 
         }
@@ -523,7 +523,7 @@ void GroupDef::addGroup(const GroupDef *def)
 
 bool GroupDef::isASubGroup() const
 {
-  LockingPtr<GroupList> groups = partOfGroups();
+  GroupList *groups = partOfGroups();
   return groups!=0 && groups->count()!=0;
 }
 
@@ -569,7 +569,7 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
     // repeat brief description
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
     {
-      ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+      ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
     }
     // write separator between brief and details
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
@@ -588,13 +588,13 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
     // write detailed documentation
     if (!documentation().isEmpty())
     {
-      ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+      ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
     }
 
     // write inbody documentation
     if (!inbodyDocumentation().isEmpty())
     {
-      ol.parseDoc(inbodyFile(),inbodyLine(),this,0,inbodyDocumentation()+"\n",TRUE,FALSE);
+      ol.generateDoc(inbodyFile(),inbodyLine(),this,0,inbodyDocumentation()+"\n",TRUE,FALSE);
     }
   }
 }
@@ -603,25 +603,30 @@ void GroupDef::writeBriefDescription(OutputList &ol)
 {
   if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
   {
-    ol.startParagraph();
-    ol.parseDoc(briefFile(),briefLine(),this,0,
-                briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
-    ol.pushGeneratorState();
-    ol.disable(OutputGenerator::RTF);
-    ol.writeString(" \n");
-    ol.enable(OutputGenerator::RTF);
-
-    if (Config_getBool("REPEAT_BRIEF") ||
-        !documentation().isEmpty()
-       )
+    DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+                                briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
+    if (rootNode && !rootNode->isEmpty())
     {
-      ol.disableAllBut(OutputGenerator::Html);
-      ol.startTextLink(0,"details");
-      ol.parseText(theTranslator->trMore());
-      ol.endTextLink();
+      ol.startParagraph();
+      ol.writeDoc(rootNode,this,0);
+      ol.pushGeneratorState();
+      ol.disable(OutputGenerator::RTF);
+      ol.writeString(" \n");
+      ol.enable(OutputGenerator::RTF);
+
+      if (Config_getBool("REPEAT_BRIEF") ||
+          !documentation().isEmpty()
+         )
+      {
+        ol.disableAllBut(OutputGenerator::Html);
+        ol.startTextLink(0,"details");
+        ol.parseText(theTranslator->trMore());
+        ol.endTextLink();
+      }
+      ol.popGeneratorState();
+      ol.endParagraph();
     }
-    ol.popGeneratorState();
-    ol.endParagraph();
+    delete rootNode;
   }
 }
 
@@ -670,7 +675,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
       if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
         ol.startMemberDescription(fd->getOutputFileBase());
-        ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+        ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
         ol.endMemberDescription();
       }
       ol.endMemberDeclaration(0,0);
@@ -728,7 +733,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
         if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
         {
           ol.startMemberDescription(gd->getOutputFileBase());
-          ol.parseDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+          ol.generateDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
           ol.endMemberDescription();
         }
         ol.endMemberDeclaration(0,0);
@@ -764,7 +769,7 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
       if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
         ol.startMemberDescription(dd->getOutputFileBase());
-        ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+        ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
         ol.endMemberDescription();
       }
       ol.endMemberDeclaration(0,0);
@@ -810,7 +815,7 @@ void GroupDef::writePageDocumentation(OutputList &ol)
         ol.endSection(si->label,SectionInfo::Subsection);
       }
       ol.startTextBlock();
-      ol.parseDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE,0,TRUE,FALSE);
+      ol.generateDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE,0,TRUE,FALSE);
       ol.endTextBlock();
     }
   }
@@ -1257,7 +1262,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
       if (fgd && gd!=fgd && g->pri==pri) 
       {
         warn(root->fileName.data(), root->startLine,
-            "warning: Member %s found in multiple %s groups! "
+            "Member %s found in multiple %s groups! "
             "The member will be put in group %s, and not in group %s",
             md->name().data(), Grouping::getGroupPriName( pri ),
             gd->name().data(), fgd->name().data()
@@ -1302,7 +1307,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
           else if (!root->doc.isEmpty() && md->getGroupHasDocs())
           {
             warn(md->getGroupFileName(),md->getGroupStartLine(),
-                "warning: Member documentation for %s found several times in %s groups!\n"
+                "Member documentation for %s found several times in %s groups!\n"
                 "%s:%d: The member will remain in group %s, and won't be put into group %s",
                 md->name().data(), Grouping::getGroupPriName( pri ),
                 root->fileName.data(), root->startLine,
@@ -1374,8 +1379,8 @@ QCString GroupDef::getOutputFileBase() const
 void GroupDef::addListReferences()
 {
   {
-    LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
-    addRefItem(xrefItems.pointer(),
+    QList<ListItemInfo> *xrefItems = xrefListItems();
+    addRefItem(xrefItems,
              getOutputFileBase(),
              theTranslator->trGroup(TRUE,TRUE),
              getOutputFileBase(),name(),
diff --git a/src/htags.cpp b/src/htags.cpp
index 27ad952..5f0c71a 100644
--- a/src/htags.cpp
+++ b/src/htags.cpp
@@ -52,14 +52,14 @@ bool Htags::execute(const QCString &htmldir)
   {
     g_inputDir.setPath(inputSource.first());
     if (!g_inputDir.exists())
-      err("error: Cannot find directory %s. "
+      err("Cannot find directory %s. "
           "Check the value of the INPUT tag in the configuration file.\n",
           inputSource.first()
          );
   }
   else
   {
-    err("error: If you use USE_HTAGS then INPUT should specific a single directory. \n");
+    err("If you use USE_HTAGS then INPUT should specific a single directory. \n");
     return FALSE;
   }
 
@@ -145,7 +145,7 @@ bool Htags::loadFilemap(const QCString &htmlDir)
     }
     else
     {
-      err("error: file %s cannot be opened\n",fileMapName.data()); 
+      err("file %s cannot be opened\n",fileMapName.data()); 
     }
   }
   return FALSE;
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index d334e8f..767fa5b 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -39,26 +39,30 @@ static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
 static QCString convertIndexWordToAnchor(const QString &word)
 {
   static char hex[] = "0123456789abcdef";
-  uint i;
   QCString result;
-  for (i=0;i<word.length();i++)
-  {
-    int c = word.at(i);
-    if (isId(c))
+  const char *str = word.data();
+  unsigned char c;
+  while ((c = *str++)) 
+  {
+    if ((c >= 'a' && c <= 'z') || // ALPHA
+        (c >= 'A' && c <= 'A') || // ALPHA
+        (c >= '0' && c <= '9') || // DIGIT
+        c == '-' || 
+        c == '.' || 
+        c == '_' || 
+        c == '~'
+       )
     {
-      result+=c;
+      result += c;
     }
-    else if (isspace(c))
-    {
-      result+="_";
-    }
-    else
+    else 
     {
-      char cs[3];
-      cs[0]=hex[c>>4];
-      cs[1]=hex[c&0xf];
-      cs[2]=0;
-      result+=cs;
+      char enc[4];
+      enc[0] = '%';
+      enc[1] = hex[(c & 0xf0) >> 4];
+      enc[2] = hex[c & 0xf];
+      enc[3] = 0;
+      result += enc;
     }
   }
   return result;
@@ -153,6 +157,7 @@ void HtmlDocVisitor::visit(DocWord *w)
 void HtmlDocVisitor::visit(DocLinkedWord *w)
 {
   if (m_hide) return;
+  //printf("linked word: %s\n",w->word().data());
   startLink(w->ref(),w->file(),w->relPath(),w->anchor(),w->tooltip());
   filter(w->word());
   endLink();
@@ -277,7 +282,7 @@ void HtmlDocVisitor::visit(DocSymbol *s)
     case DocSymbol::LeftFloor:     m_t << "&lfloor;"; break;
     case DocSymbol::RightFloor:    m_t << "&rfloor;"; break;
     default:
-       err("error: unknown symbol found\n");
+       err("unknown symbol found\n");
   }
 }
 
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index b272177..1644f23 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1710,7 +1710,7 @@ void HtmlGenerator::writeStyleInfo(int part)
       QFileInfo cssfi(cssname);
       if (!cssfi.exists() || !cssfi.isFile() || !cssfi.isReadable())
       {
-        err("error: style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data());
+        err("style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data());
       }
       else
       {
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index f43beba..6b1f98b 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -304,7 +304,7 @@ void HtmlHelp::initialize()
   m_fromUtf8 = portable_iconv_open(str,"UTF-8"); 
   if (m_fromUtf8==(void *)(-1))
   {
-    err("Error: unsupported character conversion for CHM_INDEX_ENCODING: '%s'->'UTF-8'\n", str);
+    err("unsupported character conversion for CHM_INDEX_ENCODING: '%s'->'UTF-8'\n", str);
     exit(1);
   }
 
diff --git a/src/index.cpp b/src/index.cpp
index 7eed60d..944d5db 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -332,7 +332,7 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
           MemberDef *md;
           for (mi.toFirst();(md=mi.current());++mi)
           {
-            LockingPtr<MemberList> enumList = md->enumFieldList();
+            MemberList *enumList = md->enumFieldList();
             bool isDir = enumList!=0 && md->isEnumerate();
             bool isAnonymous = md->name().find('@')!=-1;
             static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
@@ -602,7 +602,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv
   if (level>20)
   {
     warn(dd->getDefFileName(),dd->getDefLine(),
-        "warning: maximum nesting level exceeded for directory %s: "
+        "maximum nesting level exceeded for directory %s: "
         "check for possible recursive directory relation!\n",dd->name().data()
         );
     return;
@@ -1265,7 +1265,7 @@ static void writeFileIndex(OutputList &ol)
         if (hasBrief)
         {
           //ol.docify(" (");
-          ol.parseDoc(
+          ol.generateDoc(
               fd->briefFile(),fd->briefLine(),
               fd,0,
               fd->briefDescription(TRUE),
@@ -1550,7 +1550,7 @@ static void writeNamespaceIndex(OutputList &ol)
       if (hasBrief)
       {
         //ol.docify(" (");
-        ol.parseDoc(
+        ol.generateDoc(
                  nd->briefFile(),nd->briefLine(),
                  nd,0,
                  nd->briefDescription(TRUE),
@@ -1667,7 +1667,7 @@ static void writeAnnotatedClassList(OutputList &ol)
       ol.startIndexValue(hasBrief);
       if (hasBrief)
       {
-        ol.parseDoc(
+        ol.generateDoc(
                  cd->briefFile(),cd->briefLine(),
                  cd,0,
                  cd->briefDescription(TRUE),
@@ -3458,7 +3458,7 @@ void writeGraphInfo(OutputList &ol)
     //printf("legendDocs=%s\n",legendDocs.data());
   }
   FileDef fd("","graph_legend");
-  ol.parseDoc("graph_legend",1,&fd,0,legendDocs,FALSE,FALSE);
+  ol.generateDoc("graph_legend",1,&fd,0,legendDocs,FALSE,FALSE);
   stripCommentsStateRef = oldStripCommentsState;
   endFile(ol);
   ol.popGeneratorState();
@@ -3477,7 +3477,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
   if (level>20)
   {
     warn(gd->getDefFileName(),gd->getDefLine(),
-        "warning: maximum nesting level exceeded for group %s: check for possible recursive group relation!\n",gd->name().data()
+        "maximum nesting level exceeded for group %s: check for possible recursive group relation!\n",gd->name().data()
         );
     return;
   }
@@ -3558,7 +3558,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
           MemberDef *md;
           for (mi.toFirst();(md=mi.current());++mi)
           {
-            LockingPtr<MemberList> enumList = md->enumFieldList();
+            MemberList *enumList = md->enumFieldList();
             bool isDir = enumList!=0 && md->isEnumerate();
             if (md->isVisible() && md->name().find('@')==-1)
             {
@@ -4010,7 +4010,7 @@ static void writeIndex(OutputList &ol)
     {
       ol.startHeaderSection();
       ol.startTitleHead(0);
-      ol.parseDoc(Doxygen::mainPage->docFile(),Doxygen::mainPage->docLine(),
+      ol.generateDoc(Doxygen::mainPage->docFile(),Doxygen::mainPage->docLine(),
                   Doxygen::mainPage,0,Doxygen::mainPage->title(),
                   TRUE,FALSE,0,TRUE,FALSE);
       headerWritten = TRUE;
@@ -4047,7 +4047,7 @@ static void writeIndex(OutputList &ol)
     }
 
     ol.startTextBlock();
-    ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,
+    ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,
                 Doxygen::mainPage->documentation(),TRUE,FALSE
                 /*,Doxygen::mainPage->sectionDict*/);
     ol.endTextBlock();
@@ -4083,7 +4083,7 @@ static void writeIndex(OutputList &ol)
   if (!Config_getString("PROJECT_NUMBER").isEmpty())
   {
     ol.startProjectNumber(); 
-    ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,Config_getString("PROJECT_NUMBER"),FALSE,FALSE);
+    ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,Config_getString("PROJECT_NUMBER"),FALSE,FALSE);
     ol.endProjectNumber();
   }
   ol.endIndexSection(isTitlePageStart);
@@ -4238,7 +4238,7 @@ static void writeIndex(OutputList &ol)
     startFile(ol,Doxygen::mainPage->name(),0,Doxygen::mainPage->title());
     ol.startContents();
     ol.startTextBlock();
-    ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,
+    ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,
                 Doxygen::mainPage->documentation(),FALSE,FALSE
                );
     ol.endTextBlock();
diff --git a/src/jquery_fx.js b/src/jquery_fx.js
index f242cb9..97e5843 100644
--- a/src/jquery_fx.js
+++ b/src/jquery_fx.js
@@ -1,11 +1 @@
-/**
- * jQuery.ScrollTo - Easy element scrolling using jQuery.
- * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
- * Dual licensed under MIT and GPL.
- * Date: 5/25/2009
- * @author Ariel Flesler
- * @version 1.4.2
- *
- * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
- */
-;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
+(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);
\ No newline at end of file
diff --git a/src/jquery_fx_js.h b/src/jquery_fx_js.h
index f5b0da2..7fd7f2e 100644
--- a/src/jquery_fx_js.h
+++ b/src/jquery_fx_js.h
@@ -1,11 +1 @@
-"/**\n"
-" * jQuery.ScrollTo - Easy element scrolling using jQuery.\n"
-" * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com\n"
-" * Dual licensed under MIT and GPL.\n"
-" * Date: 5/25/2009\n"
-" * @author Ariel Flesler\n"
-" * @version 1.4.2\n"
-" *\n"
-" * http://flesler.blogspot.com/2007/10/jqueryscrollto.html\n"
-" */\n"
-";(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\\d+(\\.\\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);\n"
+"(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:\"xy\",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),[\"iframe\",\"#document\",\"html\",\"body\"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode==\"BackCompat\"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e==\"object\"){d=e;e=0}if(typeof d==\"function\"){d={onAfter:d}}if(f==\"max\"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is(\"html,body\");switch(typeof k){case\"number\":case\"string\":if(/^([+-]=)?\\d+(\\.\\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case\"object\":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(\"\"),function(q,r){var s=r==\"x\"?\"Left\":\"Top\",u=s.toLowerCase(),p=\"scroll\"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css(\"margin\"+s))||0;g[p]-=parseInt(k.css(\"border\"+s+\"Width\"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r==\"x\"?\"width\":\"height\"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)==\"%\"?parseFloat(t)/100*n:t}if(/^\\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i==\"x\"?\"Width\":\"Height\",e=\"scroll\"+h;if(!c(j).is(\"html,body\")){return j[e]-c(j)[h.toLowerCase()]()}var g=\"client\"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d==\"object\"?d:{top:d,left:d}}})(jQuery);\n"
diff --git a/src/jquery_p1.js b/src/jquery_p1.js
index 1f06e57..06eb7e6 100644
--- a/src/jquery_p1.js
+++ b/src/jquery_p1.js
@@ -1,3 +1,18 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function()
-{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))
+}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;
+if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false
diff --git a/src/jquery_p1_js.h b/src/jquery_p1_js.h
index e48ba50..1effb45 100644
--- a/src/jquery_p1_js.h
+++ b/src/jquery_p1_js.h
@@ -1,3 +1,18 @@
-"/*! jQuery v1.7.1 jquery.com | jquery.org/license */\n"
-"(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f(\"<\"+a+\">\").appendTo(b),e=d.css(\"display\");d.remove();if(e===\"none\"||e===\"\"){cl||(cl=c.createElement(\"iframe\"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,\"display\"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==\"string\"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k===\"*\")k=l;else if(l!==\"*\"&&l!==k){m=l+\" \"+k,n=e[m]||e[\"* \"+k];if(!n){p=b;for(o in e){j=o.split(\" \");if(j[0]===l||j[0]===\"*\"){p=e[j[1]+\" \"+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error(\"No conversion from \"+m.replace(\" \",\" to \")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]===\"*\")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader(\"content-type\"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+\" \"+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+\"[\"+(typeof e==\"object\"||f.isArray(e)?b:\"\")+\"]\",e,c,d)});else if(!c&&b!=null&&typeof b==\"object\")for(var e in b)ca(a+\"[\"+e+\"]\",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==\"string\"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g[\"*\"]&&(l=b$(a,c,d,e,\"*\",g));return l}function bZ(a){return function(b,c){typeof b!=\"string\"&&(c=b,b=\"*\");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\\+/.test(h),j&&(h=h.substr(1)||\"*\"),i=a[h]=a[h]||[],i[j?\"unshift\":\"push\"](c)}}}function bC(a,b,c){var d=b===\"width\"?a.offsetWidth:a.offsetHeight,e=b===\"width\"?bx:by,g=0,h=e.length;if(d>0){if(c!==\"border\")for(;g<h;g++)c||(d-=parseFloat(f.css(a,\"padding\"+e[g]))||0),c===\"margin\"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,\"border\"+e[g]+\"Width\"))||0;return d+\"px\"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,\"padding\"+e[g]))||0,c!==\"padding\"&&(d+=parseFloat(f.css(a,\"border\"+e[g]+\"Width\"))||0),c===\"margin\"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+\"px\"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:\"script\"}):f.globalEval((b.text||b.textContent||b.innerHTML||\"\").replace(bf,\"/*$0*/\")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement(\"div\");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||\"\").toLowerCase();b===\"input\"?bm(a):b!==\"script\"&&typeof a.getElementsByTagName!=\"undefined\"&&f.grep(a.getElementsByTagName(\"input\"),bm)}function bm(a){if(a.type===\"checkbox\"||a.type===\"radio\")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!=\"undefined\"?a.getElementsByTagName(\"*\"):typeof a.querySelectorAll!=\"undefined\"?a.querySelectorAll(\"*\"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c===\"object\")b.outerHTML=a.outerHTML;else if(c!==\"input\"||a.type!==\"checkbox\"&&a.type!==\"radio\"){if(c===\"option\")b.selected=a.defaultSelected;else if(c===\"input\"||c===\"textarea\")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?\".\":\"\")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,\"table\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function U(a){var b=V.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b==\"string\"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+\"defer\",e=b+\"queue\",g=b+\"mark\",h=f._data(a,d);h&&(c===\"queue\"||!f._data(a,e))&&(c===\"mark\"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b===\"data\"&&f.isEmptyObject(a[b]))continue;if(b!==\"toJSON\")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replace(k,\"-$1\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,n=/^[\\],:{}\\s]*$/,o=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,q=/(?:^|:|,)(?:\\s*\\[)+/g,r=/(webkit)[ \\/]([\\w.]+)/,s=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,t=/(msie) ([\\w.]+)/,u=/(mozilla)(?:.*? rv:([\\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+\"\").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.charAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \":\"\")+c:b&&(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),\"slice\",F.call(arguments).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==\"boolean\"&&(l=i,i=arguments[1]||{},j=2),typeof i!=\"object\"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger(\"ready\").off(\"ready\")}},bindReady:function(){if(!A){A=e.Callbacks(\"once memory\");if(c.readyState===\"complete\")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener(\"DOMContentLoaded\",B,!1),a.addEventListener(\"load\",e.ready,!1);else if(c.attachEvent){c.attachEvent(\"onreadystatechange\",B),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return e.type(a)===\"array\"},isWindow:function(a){return a&&typeof a==\"object\"&&\"setInterval\"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||\"object\"},isPlainObject:function(a){if(!a||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,\"constructor\")&&!D.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!=\"string\"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,\"@\").replace(p,\"]\").replace(q,\"\")))return(new Function(\"return \"+b))();e.error(\"Invalid JSON: \"+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,\"text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName(\"parsererror\").length)&&e.error(\"Invalid XML: \"+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,\"ms-\").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?\"\":G.call(a)}:function(a){return a==null?\"\":(a+\"\").replace(k,\"\").replace(l,\"\")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d===\"string\"||d===\"function\"||d===\"regexp\"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==\"number\")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j==\"number\"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c==\"string\"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c==\"object\"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf(\"compatible\")<0&&u.exec(a)||[];return{browser:b[1]||\"\",version:b[2]||\"0\"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(a,b){I[\"[object \"+b+\"]\"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(\" \")&&(k=/^[\\s\\xA0]+/,l=/[\\s\\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener(\"DOMContentLoaded\",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState===\"complete\"&&(c.detachEvent(\"onreadystatechange\",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h===\"array\"?m(g):h===\"function\"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks(\"once memory\"),c=f.Callbacks(\"once memory\"),d=f.Callbacks(\"memory\"),e=\"pending\",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,\"resolve\"],fail:[b,\"reject\"],progress:[c,\"notify\"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function()\n"
-"{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+\"With\"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+\"With\"]=g[j].fireWith;i.done(function(){e=\"resolved\"},c.disable,d.lock).fail(function(){e=\"rejected\"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement(\"div\"),r=c.documentElement;q.setAttribute(\"className\",\"t\"),q.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\",d=q.getElementsByTagName(\"*\"),e=q.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e)return{};g=c.createElement(\"select\"),h=g.appendChild(c.createElement(\"option\")),i=q.getElementsByTagName(\"input\")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName(\"tbody\").length,htmlSerialize:!!q.getElementsByTagName(\"link\").length,style:/top/.test(e.getAttribute(\"style\")),hrefNormalized:e.getAttribute(\"href\")===\"/a\",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value===\"on\",optSelected:h.selected,getSetAttribute:q.className!==\"t\",enctype:!!c.createElement(\"form\").enctype,html5Clone:c.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav></:nav>\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent(\"onclick\")),i=c.createElement(\"input\"),i.value=\"t\",i.setAttribute(\"type\",\"radio\"),b.radioValue=i.value===\"t\",i.setAttribute(\"checked\",\"checked\"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML=\"\",a.getComputedStyle&&(j=c.createElement(\"div\"),j.style.width=\"0\",j.style.marginRight=\"0\",q.style.width=\"2px\",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n=\"on\"+o,p=n in q,p||(q.setAttribute(n,\"return;\"),p=typeof q[n]==\"function\"),b[o+\"Bubbles\"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName(\"body\")[0];!r||(j=1,k=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\",m=\"visibility:hidden;border:0;\",n=\"style='\"+k+\"border:5px solid #000;padding:0;'\",o=\"<div \"+n+\"><div></div></div>\"+\"<table \"+n+\" cellpadding='0' cellspacing='0'>\"+\"<tr><td></td></tr></table>\",a=c.createElement(\"div\"),a.style.cssText=m+\"width:0;height:0;position:static;top:0;margin-top:\"+j+\"px\",r.insertBefore(a,r.firstChild),q=c.createElement(\"div\"),a.appendChild(q),q.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\",l=q.getElementsByTagName(\"td\"),p=l[0].offsetHeight===0,l[0].style.display=\"\",l[1].style.display=\"none\",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML=\"\",q.style.width=q.style.paddingLeft=\"1px\",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!=\"undefined\"&&(q.style.display=\"inline\",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display=\"\",q.innerHTML=\"<div style='width:4px;'></div>\",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position=\"fixed\",e.style.top=\"20px\",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top=\"\",d.style.overflow=\"hidden\",d.style.position=\"relative\",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\\{.*\\}|\\[.*\\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c==\"string\",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c===\"events\";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c==\"object\"||typeof c==\"function\")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(\" \")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute(\"classid\")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a==\"undefined\"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf(\"data-\")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],\"parsedAttrs\",!0)}}return h}if(typeof a==\"object\")return this.each(function(){f.data(this,a)});d=a.split(\".\"),d[1]=d[1]?\".\"+d[1]:\"\";if(c===b){h=this.triggerHandler(\"getData\"+d[1]+\"!\",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler(\"setData\"+d[1]+\"!\",e),f.data(this,a,c),b.triggerHandler(\"changeData\"+d[1]+\"!\",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||\"fx\")+\"mark\",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||\"fx\";var d=c+\"mark\",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,\"mark\"))}},queue:function(a,b,c){var d;if(a){b=(b||\"fx\")+\"queue\",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||\"fx\";var c=f.queue(a,b),d=c.shift(),e={};d===\"inprogress\"&&(d=c.shift()),d&&(b===\"fx\"&&c.unshift(\"inprogress\"),f._data(a,b+\".run\",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+\"queue \"+b+\".run\",!0),n(a,b,\"queue\"))}}),f.fn.extend({queue:function(a,c){typeof a!=\"string\"&&(c=a,a=\"fx\");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a===\"fx\"&&b[0]!==\"inprogress\"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||\"fx\";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!=\"string\"&&(c=a,a=b),a=a||\"fx\";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+\"defer\",j=a+\"queue\",k=a+\"mark\",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks(\"once memory\"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\\n\\t\\r]/g,p=/\\s+/,q=/\\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=\" \"+e.className+\" \";for(h=0,i=b.length;h<i;h++)~g.indexOf(\" \"+b[h]+\" \")||(g+=b[h]+\" \");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"||a===b){c=(a||\"\").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(\" \"+g.className+\" \").replace(o,\" \");for(i=0,j=c.length;i<j;i++)h=h.replace(\" \"+c[i]+\" \",\" \");g.className=f.trim(h)}else g.className=\"\"}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b==\"boolean\";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c===\"string\"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?\"addClass\":\"removeClass\"](e)}else if(c===\"undefined\"||c===\"boolean\")this.className&&f._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":f._data(this,\"__className__\")||\"\"})},hasClass:function(a){var b=\" \"+a+\" \",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(\" \"+this[c].className+\" \").replace(o,\" \").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!(\"set\"in c)||c.set(this,h,\"value\")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&\"get\"in c&&(d=c.get(g,\"value\"))!==b)return d;d=g.value;return typeof d==\"string\"?d.replace(q,\"\"):d==null?\"\":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type===\"select-one\";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute(\"disabled\")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,\"optgroup\"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find(\"option\").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute==\"undefined\")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&\"set\"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,\"\"+d);return d}if(h&&\"get\"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,\"\"),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error(\"type property can't be changed\");else if(!f.support.radioValue&&b===\"radio\"&&f.nodeName(a,\"input\")){var c=a.value;a.setAttribute(\"type\",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,\"button\"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,\"button\"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&\"set\"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&\"get\"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabindex\");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!=\"boolean\"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!==\"\":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+\"\"}},f.attrHooks.tabindex.set=w.set,f.each([\"width\",\"height\"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAttribute(b,\"auto\");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===\"\"&&(b=\"false\"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype=\"encoding\"),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}}),f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\\.]*)?(?:\\.(.+))?$/,B=/\\bhover(\\.\\S+)?\\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||\"\").toLowerCase(),b[3]=b[3]&&new RegExp(\"(?:^|\\\\s)\"+b[3]+\"(?:\\\\s|$)\"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c[\"class\"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,\"mouseenter$1 mouseleave$1\")};\n"
+"/*!\n"
+" * jQuery JavaScript Library v1.7.1\n"
+" * http://jquery.com/\n"
+" *\n"
+" * Copyright 2011, John Resig\n"
+" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
+" * http://jquery.org/license\n"
+" *\n"
+" * Includes Sizzle.js\n"
+" * http://sizzlejs.com/\n"
+" * Copyright 2011, The Dojo Foundation\n"
+" * Released under the MIT, BSD, and GPL Licenses.\n"
+" *\n"
+" * Date: Mon Nov 21 21:11:03 2011 -0500\n"
+" */\n"
+"(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+\"\").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0===\"body\"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0===\"string\"){if(b0.charAt(0)===\"<\"&&b0.charAt(b0.length-1)===\">\"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3===\"find\"){b2.selector=this.selector+(this.selector?\" \":\"\")+b0}else{if(b3){b2.selector=this.selector+\".\"+b3+\"(\"+b0+\")\"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),\"slice\",bK.call(arguments).join(\",\"))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5===\"boolean\"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!==\"object\"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger(\"ready\").off(\"ready\")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks(\"once memory\");if(av.readyState===\"complete\"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener(\"DOMContentLoaded\",e,false);bb.addEventListener(\"load\",bF.ready,false)}else{if(av.attachEvent){av.attachEvent(\"onreadystatechange\",e);bb.attachEvent(\"onload\",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)===\"function\"},isArray:Array.isArray||function(b0){return bF.type(b0)===\"array\"},isWindow:function(b0){return b0&&typeof b0===\"object\"&&\"setInterval\" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||\"object\"},isPlainObject:function(b2){if(!b2||bF.type(b2)!==\"object\"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,\"constructor\")&&!bG.call(b2.constructor.prototype,\"isPrototypeOf\")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!==\"string\"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,\"@\").replace(bP,\"]\").replace(bJ,\"\"))){return(new Function(\"return \"+b0))()}bF.error(\"Invalid JSON: \"+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,\"text/xml\")}else{b0=new ActiveXObject(\"Microsoft.XMLDOM\");b0.async=\"false\";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName(\"parsererror\").length){bF.error(\"Invalid XML: \"+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb[\"eval\"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,\"ms-\").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?\"\":bO.call(b0)}:function(b0){return b0==null?\"\":b0.toString().replace(bI,\"\").replace(bE,\"\")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2===\"string\"||b2===\"function\"||b2===\"regexp\"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length===\"number\"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1===\"number\"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3===\"string\"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8===\"object\"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(\"compatible\")<0&&bS.exec(b1)||[];return{browser:b0[1]||\"\",version:b0[2]||\"0\"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(b1,b0){bx[\"[object \"+b0+\"]\"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test(\"\\xA0\")){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener(\"DOMContentLoaded\",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState===\"complete\"){av.detachEvent(\"onreadystatechange\",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll(\"left\")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH===\"array\"){bE(bI)}else{if(bH===\"function\"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks(\"once memory\"),bw=b.Callbacks(\"once memory\"),bv=b.Callbacks(\"memory\"),e=\"pending\",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,\"resolve\"],fail:[bE,\"reject\"],progress:[bD,\"notify\"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+\"With\"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+\"With\"]=bA[bz].fireWith}bB.done(function(){e=\"resolved\"},bw.disable,bv.lock).fail(function(){e=\"rejected\"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))\n"
+"}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(\"div\"),bH=av.documentElement;bv.setAttribute(\"className\",\"t\");bv.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";bI=bv.getElementsByTagName(\"*\");bF=bv.getElementsByTagName(\"a\")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement(\"select\");bx=bG.appendChild(av.createElement(\"option\"));bE=bv.getElementsByTagName(\"input\")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(\"tbody\").length,htmlSerialize:!!bv.getElementsByTagName(\"link\").length,style:/top/.test(bF.getAttribute(\"style\")),hrefNormalized:(bF.getAttribute(\"href\")===\"/a\"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===\"on\"),optSelected:bx.selected,getSetAttribute:bv.className!==\"t\",enctype:!!av.createElement(\"form\").enctype,html5Clone:av.createElement(\"nav\").cloneNode(true).outerHTML!==\"<:nav></:nav>\",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent(\"onclick\",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent(\"onclick\")}bE=av.createElement(\"input\");bE.value=\"t\";bE.setAttribute(\"type\",\"radio\");bJ.radioValue=bE.value===\"t\";bE.setAttribute(\"checked\",\"checked\");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=\"\";if(bb.getComputedStyle){bA=av.createElement(\"div\");bA.style.width=\"0\";bA.style.marginRight=\"0\";bv.style.width=\"2px\";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB=\"on\"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,\"return;\");bw=(typeof bv[bB]===\"function\")}bJ[by+\"Bubbles\"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(\"body\")[0];if(!bQ){return}bL=1;bS=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";bR=\"visibility:hidden;border:0;\";e=\"style='\"+bS+\"border:5px solid #000;padding:0;'\";bP=\"<div \"+e+\"><div></div></div><table \"+e+\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";bM=av.createElement(\"div\");bM.style.cssText=bR+\"width:0;height:0;position:static;top:0;margin-top:\"+bL+\"px\";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(\"div\");bM.appendChild(bv);bv.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";bz=bv.getElementsByTagName(\"td\");bw=(bz[0].offsetHeight===0);bz[0].style.display=\"\";bz[1].style.display=\"none\";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML=\"\";bv.style.width=bv.style.paddingLeft=\"1px\";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!==\"undefined\"){bv.style.display=\"inline\";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=\"\";bv.innerHTML=\"<div style='width:4px;'></div>\";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=\"fixed\";bV.style.top=\"20px\";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=\"\";bU.style.overflow=\"hidden\";bU.style.position=\"relative\";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:\"jQuery\"+(b.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:true,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv===\"string\",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv===\"events\";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv===\"object\"||typeof bv===\"function\"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(\" \")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute(\"classid\")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by===\"undefined\"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf(\"data-\")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],\"parsedAttrs\",true)}}return bz}else{if(typeof by===\"object\"){return this.each(function(){b.data(this,by)})}}bB=by.split(\".\");bB[1]=bB[1]?\".\"+bB[1]:\"\";if(bA===L){bz=this.triggerHandler(\"getData\"+bB[1]+\"!\",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler(\"setData\"+bB[1]+\"!\",bD);b.data(this,by,bA);bC.triggerHandler(\"changeData\"+bB[1]+\"!\",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv=\"data-\"+bw.replace(aA,\"-$1\").toLowerCase();by=bx.getAttribute(bv);if(typeof by===\"string\"){try{by=by===\"true\"?true:by===\"false\"?false:by===\"null\"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e===\"data\"&&b.isEmptyObject(bv[e])){continue}if(e!==\"toJSON\"){return false}}return true}function bi(by,bx,bA){var bw=bx+\"defer\",bv=bx+\"queue\",e=bx+\"mark\",bz=b._data(by,bw);if(bz&&(bA===\"queue\"||!b._data(by,bv))&&(bA===\"mark\"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||\"fx\")+\"mark\";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||\"fx\";var e=bv+\"mark\",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,\"mark\")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||\"fx\")+\"queue\";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||\"fx\";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw===\"inprogress\"){bw=bv.shift()}if(bw){if(bx===\"fx\"){bv.unshift(\"inprogress\")}b._data(by,bx+\".run\",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+\"queue \"+bx+\".run\",true);bi(by,bx,\"queue\")}}});b.fn.extend({queue:function(e,bv){if(typeof e!==\"string\"){bv=e;e=\"fx\"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e===\"fx\"&&bw[0]!==\"inprogress\"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||\"fx\";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(bD,bw){if(typeof bD!==\"string\"){bw=bD;bD=L}bD=bD||\"fx\";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+\"defer\",bA=bD+\"queue\",bC=bD+\"mark\",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks(\"once memory\"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by===\"string\"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=\" \"+bx.className+\" \";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(\" \"+bA[bB]+\" \")){bz+=bA[bB]+\" \"}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz===\"string\")||bz===L){bA=(bz||\"\").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(\" \"+by.className+\" \").replace(aP,\" \");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(\" \"+bA[bB]+\" \",\" \")}by.className=b.trim(bx)}else{by.className=\"\"}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv===\"boolean\";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw===\"string\"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?\"addClass\":\"removeClass\"](bA)}}else{if(bw===\"undefined\"||bw===\"boolean\"){if(this.className){b._data(this,\"__className__\",this.className)}this.className=this.className||bx===false?\"\":b._data(this,\"__className__\")||\"\"}}})},hasClass:function(e){var bx=\" \"+e+\" \",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(\" \"+this[bw].className+\" \").replace(aP,\" \").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&\"get\" in e&&(bv=e.get(bw,\"value\"))!==L){return bv}bv=bw.value;return typeof bv===\"string\"?bv.replace(aU,\"\"):bv==null?\"\":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=\"\"}else{if(typeof bB===\"number\"){bB+=\"\"}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?\"\":bC+\"\"})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!(\"set\" in e)||e.set(this,bB,\"value\")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===\"select-one\";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute(\"disabled\")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,\"optgroup\"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find(\"option\").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;\n"
+"if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute===\"undefined\"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&\"set\" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,\"\"+bB);return bB}}}else{if(e&&\"get\" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,\"\");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error(\"type property can't be changed\")}else{if(!b.support.radioValue&&bv===\"radio\"&&b.nodeName(e,\"input\")){var bw=e.value;e.setAttribute(\"type\",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,\"button\")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,\"button\")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&\"set\" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&\"get\" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode(\"tabindex\");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!==\"boolean\"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!==\"\":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+\"\")}};b.attrHooks.tabindex.set=be.set;b.each([\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===\"\"){bw.setAttribute(e,\"auto\");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===\"\"){bw=\"false\"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each([\"href\",\"src\",\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=\"\"+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype=\"encoding\"}if(!b.support.checkOn){b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]={get:function(e){return e.getAttribute(\"value\")===null?\"on\":e.value}}})}b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?\\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||\"\").toLowerCase();bv[3]=bv[3]&&new RegExp(\"(?:^|\\\\s)\"+bv[3]+\"(?:\\\\s|$)\")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv[\"class\"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,\"mouseenter$1 mouseleave$1\")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!==\"undefined\"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(\" \");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||\"\").split(\".\").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(\".\")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent(\"on\"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||\"\")).split(\" \");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp(\"(^|\\\\.)\"+bC.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH===\"**\"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,[\"events\",\"handle\"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf(\"!\")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(\".\")>=0){bx=bG.split(\".\");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv===\"object\"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(\".\");bv.namespace_re=bv.namespace?new RegExp(\"(^|\\\\.)\"+bx.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;by=bG.indexOf(\":\")<0?\"on\"+bG:\"\";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,\"events\")||{})[bv.type]&&b._data(bH,\"handle\");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG===\"click\"&&b.nodeName(bA,\"a\"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!==\"focus\"&&bG!==\"blur\")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,\"events\")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type===\"click\")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent(\"on\"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,\"form\")){return false\n"
diff --git a/src/jquery_p2.js b/src/jquery_p2.js
index e1f8314..bc16cf6 100644
--- a/src/jquery_p2.js
+++ b/src/jquery_p2.js
@@ -1,3 +1,10 @@
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.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 contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d
-&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={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,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),
-f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.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 contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1
+},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={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,"",""]},ac=a(av);
+ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;
diff --git a/src/jquery_p2_js.h b/src/jquery_p2_js.h
index c31afa7..7c905ef 100644
--- a/src/jquery_p2_js.h
+++ b/src/jquery_p2_js.h
@@ -1,3 +1,10 @@
-"f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(\" \");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||\"\").split(\".\").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(\".\")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent(\"on\"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||\"\")).split(\" \");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp(\"(^|\\\\.)\"+l.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d===\"**\"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,[\"events\",\"handle\"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf(\"!\")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c==\"object\"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join(\".\"),c.namespace_re=c.namespace?new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null,o=h.indexOf(\":\")<0?\"on\"+h:\"\";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,\"events\")||{})[c.type]&&f._data(m,\"handle\"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!==\"click\"||!f.nodeName(e,\"a\"))&&f.acceptData(e)&&o&&e[h]&&(h!==\"focus\"&&h!==\"blur\"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,\"events\")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!==\"click\")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent(\"on\"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,\"form\"))return!1;f.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=f.nodeName(c,\"input\")||f.nodeName(c,\"button\")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,\"submit._submit\",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate(\"submit\",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,\"form\"))return!1;f.event.remove(this,\"._submit\")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\")f.event.add(this,\"propertychange._change\",function(a){a.originalEvent.propertyName===\"checked\"&&(this._just_changed=!0)}),f.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate(\"change\",this,a,!0))});return!1}f.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,\"change._change\",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate(\"change\",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!==\"radio\"&&b.type!==\"checkbox\")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,\"._change\");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a==\"object\"){typeof c!=\"string\"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c==\"string\"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+\".\"+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a==\"object\"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c==\"function\")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||\"**\",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,\"**\"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,\"lastToggle\"+a.guid)||0)%d;f._data(this,\"lastToggle\"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.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 contextmenu\".split(\" \"),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!=\"string\"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\\\/g,k=/\\r\\n/g,l=/\\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=\"string\")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(\"\"),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]===\"~\"||w[0]===\"+\")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q=\"\",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)===\"[object Array]\")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!==\"\\\\\"){g[1]=(g[1]||\"\").replace(j,\"\"),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],\"\");break}}}}d||(d=typeof b.getElementsByTagName!=\"undefined\"?b.getElementsByTagName(\"*\"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)===\"\\\\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],\"\");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e=\"\";if(d){if(d===1||d===9){if(typeof a.textContent==\"string\")return a.textContent;if(typeof a.innerText==\"string\")return a.innerText.replace(k,\"\");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(a){return a.getAttribute(\"href\")},type:function(a){return a.getAttribute(\"type\")}},relative:{\"+\":function(a,b){var c=typeof b==\"string\",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},\">\":function(a,b){var c,d=typeof b==\"string\",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d\n"
-"&&m.filter(b,a,!0)}},\"\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"parentNode\",b,f,a,d,c)},\"~\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"previousSibling\",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=\"undefined\"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=\"undefined\"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute(\"name\")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=\"undefined\")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=\" \"+a[1].replace(j,\"\")+\" \";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(\" \"+h.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,\"\")},TAG:function(a,b){return a[1].replace(j,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,\"\");var b=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,\"\");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(j,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,e,f){if(b[1]===\"not\")if((a.exec(b[3])||\"\").length>1||/^\\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerCase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b===\"button\"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e===\"contains\")return(a.textContent||a.innerText||n([a])||\"\").indexOf(b[3])>=0;if(e===\"not\"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case\"only\":case\"first\":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k===\"first\")return!0;l=a;case\"last\":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case\"nth\":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":!f&&m.attr?d!=null:f===\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return\"\\\\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+o.match[r].source.replace(/\\\\(\\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)===\"[object Array]\")Array.prototype.push.apply(d,a);else if(typeof a.length==\"number\")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement(\"div\"),d=\"script\"+(new Date).getTime(),e=c.documentElement;a.innerHTML=\"<a name='\"+d+\"'/>\",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefined\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChild(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=\"<a href='#'></a>\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&&a.firstChild.getAttribute(\"href\")!==\"#\"&&(o.attrHandle.href=function(a){return a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"<p class='TEST'></p>\";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b===\"body\"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"object\"){var k=e,l=e.getAttribute(\"id\"),n=l||d,p=e.parentNode,q=/^\\s*[+~]/.test(b);l?n=n.replace(/'/g,\"\\\\$&\"):e.setAttribute(\"id\",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll(\"[id='\"+n+\"'] \"+b),f)}catch(r){}finally{l||k.removeAttribute(\"id\")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!='']:sizzle\")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement(\"div\");a.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\").length===1)return;o.order.splice(1,0,\"CLASS\"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=\"undefined\"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!==\"HTML\":!1};var y=function(a,b,c){var d,e=[],f=\"\",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,\"\");a=o.relative[a]?a+\"*\":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[\":\"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!=\"string\")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack(\"\",\"find\",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),\"not\",a)},filter:function(a){return this.pushStack(T(this,a,!0),\"filter\",a)},is:function(a){return!!a&&(typeof a==\"string\"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"closest\",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a==\"string\")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(\",\"))}}),f.extend({filter:function(a,b,c){c&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",W=/ jQuery\\d+=\"(?:\\d+|null)\"/g,X=/^\\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,Z=/<([\\w:]+)/,$=/<tbody/i,_=/<|&#?\\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp(\"<(?:\"+V+\")\",\"i\"),bd=/checked\\s*(?:[^=]|=\\s*.checked.)/i,be=/\\/(java|ecma)script/i,bf=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,bg={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,\"\",\"\"]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div<div>\",\"</div>\"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!=\"object\"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,\"after\",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),\n"
-"f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()\n"
+"}b.event.add(this,\"click._submit keypress._submit\",function(bx){var bw=bx.target,bv=b.nodeName(bw,\"input\")||b.nodeName(bw,\"button\")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,\"submit._submit\",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate(\"submit\",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,\"form\")){return false}b.event.remove(this,\"._submit\")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){b.event.add(this,\"propertychange._change\",function(e){if(e.originalEvent.propertyName===\"checked\"){this._just_changed=true}});b.event.add(this,\"click._change\",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate(\"change\",this,e,true)}})}return false}b.event.add(this,\"beforeactivate._change\",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,\"change._change\",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate(\"change\",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!==\"radio\"&&e.type!==\"checkbox\")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,\"._change\");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:\"focusin\",blur:\"focusout\"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===\"object\"){if(typeof e!==\"string\"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===\"string\"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+\".\"+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw===\"object\"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e===\"function\"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||\"**\",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,\"**\"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,\"lastToggle\"+bx.guid)||0)%bw;b._data(this,\"lastToggle\"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.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 contextmenu\").split(\" \"),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});\n"
+"/*!\n"
+" * Sizzle CSS Selector Engine\n"
+" *  Copyright 2011, The Dojo Foundation\n"
+" *  Released under the MIT, BSD, and GPL Licenses.\n"
+" *  More information: http://sizzlejs.com/\n"
+" */\n"
+"(function(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!==\"string\"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(\"\");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]===\"~\"||bW[0]===\"+\")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=\"\"}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===\"[object Array]\"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==\"\\\\\"){bT[1]=(bT[1]||\"\").replace(bK,\"\");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],\"\");break}}}}if(!bW){bW=typeof e.getElementsByTagName!==\"undefined\"?e.getElementsByTagName(\"*\"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===\"\\\\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],\"\");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=\"\";if(e){if(e===1||e===9){if(typeof bU.textContent===\"string\"){return bU.textContent}else{if(typeof bU.innerText===\"string\"){return bU.innerText.replace(bO,\"\")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.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|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(e){return e.getAttribute(\"href\")},type:function(e){return e.getAttribute(\"type\")}},relative:{\"+\":function(bW,bR){var bT=typeof bR===\"string\",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},\">\":function(bW,bR){var bV,bU=typeof bR===\"string\",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},\"\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"parentNode\",bR,bS,bT,bU,bV)},\"~\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"previousSibling\",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==\"undefined\"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==\"undefined\"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute(\"name\")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==\"undefined\"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=\" \"+bT[1].replace(bK,\"\")+\" \";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(\" \"+bV.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,\"\")},TAG:function(bR,e){return bR[1].replace(bK,\"\").toLowerCase()},CHILD:function(e){if(e[1]===\"nth\"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,\"\");var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===\"even\"&&\"2n\"||e[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(e[2])&&\"0n+\"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,\"\");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||\"\").replace(bK,\"\");if(bU[2]===\"~=\"){bU[4]=\" \"+bU[4]+\" \"}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===\"not\"){if((bH.exec(bU[3])||\"\").length>1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!==\"hidden\"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(\"type\"),bR=bS.type;return bS.nodeName.toLowerCase()===\"input\"&&\"text\"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"radio\"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===e.type},file:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"file\"===e.type},password:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"password\"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"submit\"===bR.type},image:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"image\"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"reset\"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===\"input\"&&\"button\"===bR.type||e===\"button\"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1\n"
+"},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===\"contains\"){return(bS.textContent||bS.innerText||bw([bS])||\"\").indexOf(bX[3])>=0}else{if(e===\"not\"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case\"only\":case\"first\":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===\"first\"){return true}bR=bS;case\"last\":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case\"nth\":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute(\"id\")===e},TAG:function(bR,e){return(e===\"*\"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(\" \"+(bR.className||bR.getAttribute(\"class\"))+\" \").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+\"\",bU=bT[2],bR=bT[4];return e==null?bU===\"!=\":!bU&&by.attr?e!=null:bU===\"=\"?bW===bR:bU===\"*=\"?bW.indexOf(bR)>=0:bU===\"~=\"?(\" \"+bW+\" \").indexOf(bR)>=0:!bR?bW&&e!==false:bU===\"!=\"?bW!==bR:bU===\"^=\"?bW.indexOf(bR)===0:bU===\"$=\"?bW.substr(bW.length-bR.length)===bR:bU===\"|=\"?bW===bR||bW.substr(0,bR.length+1)===bR+\"-\":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return\"\\\\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===\"[object Array]\"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===\"number\"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(\"div\"),bS=\"script\"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=\"<a name='\"+bS+\"'/>\";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==\"undefined\"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==\"undefined\"&&bT.getAttributeNode(\"id\").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==\"undefined\"&&bV.getAttributeNode(\"id\");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(\"div\");e.appendChild(av.createComment(\"\"));if(e.getElementsByTagName(\"*\").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===\"*\"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=\"<a href='#'></a>\";if(e.firstChild&&typeof e.firstChild.getAttribute!==\"undefined\"&&e.firstChild.getAttribute(\"href\")!==\"#\"){bE.attrHandle.href=function(bR){return bR.getAttribute(\"href\",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(\"div\"),bS=\"__sizzle__\";bT.innerHTML=\"<p class='TEST'></p>\";if(bT.querySelectorAll&&bT.querySelectorAll(\".TEST\").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===\"body\"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!==\"object\"){var bW=bV,bX=bV.getAttribute(\"id\"),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(\"id\",bU)}else{bU=bU.replace(/'/g,\"\\\\$&\")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(\"[id='\"+bU+\"'] \"+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(\"id\")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(\"div\"),\"div\"),bR=false;try{bS.call(av.documentElement,\"[test!='']:sizzle\")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement(\"div\");e.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!e.getElementsByClassName||e.getElementsByClassName(\"e\").length===0){return}e.lastChild.className=\"e\";if(e.getElementsByClassName(\"e\").length===1){return}bE.order.splice(1,0,\"CLASS\");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!==\"undefined\"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!==\"string\"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!==\"HTML\":false};var bM=function(bS,e,bW){var bV,bX=[],bU=\"\",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,\"\")}bS=bE.relative[bS]?bS+\"*\":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[\":\"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!==\"string\"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(\"\",\"find\",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),\"not\",e)},filter:function(e){return this.pushStack(aG(this,e,true),\"filter\",e)},is:function(e){return !!e&&(typeof e===\"string\"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!==\"string\"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,\"closest\",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e===\"string\"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e===\"string\"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,\"parentNode\")},parentsUntil:function(bv,e,bw){return b.dir(bv,\"parentNode\",bw)},next:function(e){return b.nth(e,2,\"nextSibling\")},prev:function(e){return b.nth(e,2,\"previousSibling\")},nextAll:function(e){return b.dir(e,\"nextSibling\")},prevAll:function(e){return b.dir(e,\"previousSibling\")},nextUntil:function(bv,e,bw){return b.dir(bv,\"nextSibling\",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,\"previousSibling\",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw===\"string\"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(\",\"))}});b.extend({filter:function(bw,e,bv){if(bv){bw=\":not(\"+bw+\")\"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw===\"string\"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split(\"|\"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ag=/ jQuery\\d+=\"(?:\\d+|null)\"/g,ar=/^\\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,d=/<([\\w:]+)/,w=/<tbody/i,W=/<|&#?\\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp(\"<(?:\"+aR+\")\",\"i\"),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,ax={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,\"\",\"\"]},ac=a(av);\n"
+"ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,\"div<div>\",\"</div>\"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!==\"object\"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,\"body\")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,\"before\",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,\"after\",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName(\"*\"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName(\"*\"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,\"\"):null}else{if(typeof bx===\"string\"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||[\"\",\"\"])[1].toLowerCase()]){bx=bx.replace(R,\"<$1></$2>\");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName(\"*\"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!==\"string\"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),\"replaceWith\",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC===\"string\"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,\"tr\");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,\"table\")?(e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?\".\":\"\")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw===\"object\"){e.outerHTML=bv.outerHTML}else{if(bw===\"input\"&&(bv.type===\"checkbox\"||bv.type===\"radio\")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw===\"option\"){e.selected=bv.defaultSelected}else{if(bw===\"input\"||bw===\"textarea\"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB===\"string\"&&bB.length<512&&bA===av&&bB.charAt(0)===\"<\"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!==\"undefined\"){return e.getElementsByTagName(\"*\")}else{if(typeof e.querySelectorAll!==\"undefined\"){return e.querySelectorAll(\"*\")}else{return[]}}}function az(e){if(e.type===\"checkbox\"||e.type===\"radio\"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||\"\").toLowerCase();if(bv===\"input\"){az(e)}else{if(bv!==\"script\"&&typeof e.getElementsByTagName!==\"undefined\"){b.grep(e.getElementsByTagName(\"input\"),az)}}}function al(e){var bv=av.createElement(\"div\");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test(\"<\"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement===\"undefined\"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz===\"number\"){bz+=\"\"}if(!bz){continue}if(typeof bz===\"string\"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,\"<$1></$2>\");var bK=(d.exec(bz)||[\"\",\"\"])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(\"div\");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK===\"table\"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===\"<table>\"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],\"tbody\")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)===\"number\"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],\"script\")&&(!bI[bE].type||bI[bE].type.toLowerCase()===\"text/javascript\")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName(\"script\"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:\"script\"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||\"\").replace(aN,\"/*$0*/\"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:\"absolute\",visibility:\"hidden\",display:\"block\"},an=[\"Left\",\"Right\"],a1=[\"Top\",\"Bottom\"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,\"opacity\",\"opacity\");return e===\"\"?\"1\":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{\"float\":b.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC===\"string\"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC=\"number\"}if(bD==null||bC===\"number\"&&isNaN(bD)){return}if(bC===\"number\"&&!b.cssNumber[bz]){bD+=\"px\"}if(!bE||!(\"set\" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&\"get\" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx===\"cssFloat\"){bx=\"float\"}if(e&&\"get\" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each([\"height\",\"width\"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+\"px\"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||\"\")?(parseFloat(RegExp.$1)/100)+\"\":e?\"1\":\"\"},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?\"alpha(opacity=\"+bz*100+\")\":\"\",bw=bv&&bv.filter||bx.filter||\"\";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,\"\"))===\"\"){bx.removeAttribute(\"filter\");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+\" \"+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:\"inline-block\"},function(){if(bv){e=Z(bw,\"margin-right\",\"marginRight\")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,\"-$1\").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===\"\"&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw===\"fontSize\"?\"1em\":(bv||0);bv=bx.pixelLeft+\"px\";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===\"\"?\"auto\":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw===\"width\"?by.offsetWidth:by.offsetHeight,bz=bw===\"width\"?an:a1,bx=0,e=bz.length;\n"
diff --git a/src/jquery_p3.js b/src/jquery_p3.js
index 3635172..c0f18ce 100644
--- a/src/jquery_p3.js
+++ b/src/jquery_p3.js
@@ -1,2 +1,3 @@
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c)
-{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.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,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
+if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)
+}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.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 e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b
+})}})(window);
\ No newline at end of file
diff --git a/src/jquery_p3_js.h b/src/jquery_p3_js.h
index 9fe869c..880da7f 100644
--- a/src/jquery_p3_js.h
+++ b/src/jquery_p3_js.h
@@ -1,2 +1,3 @@
-"{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,\"\"):null;if(typeof a==\"string\"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace(Y,\"<$1></$2>\");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName(\"*\")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!=\"string\"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),\"replaceWith\",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j==\"string\"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,\"tr\");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j==\"string\"&&j.length<512&&i===c&&j.charAt(0)===\"<\"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test(\"<\"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k==\"number\"&&(k+=\"\");if(!k)continue;if(typeof k==\"string\")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,\"<$1></$2>\");var l=(Z.exec(k)||[\"\",\"\"])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement(\"div\");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l===\"table\"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===\"<table>\"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],\"tbody\")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)==\"number\")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],\"script\")&&(!h[j].type||h[j].type.toLowerCase()===\"text/javascript\"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName(\"script\"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\\([^)]*\\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\\d+(?:px)?$/i,bu=/^-?\\d/,bv=/^([\\-+])=([\\-+.\\de]+)/,bw={position:\"absolute\",visibility:\"hidden\",display:\"block\"},bx=[\"Left\",\"Right\"],by=[\"Top\",\"Bottom\"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,\"opacity\",\"opacity\");return c===\"\"?\"1\":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":f.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&\"get\"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h===\"string\"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h=\"number\");if(d==null||h===\"number\"&&isNaN(d))return;h===\"number\"&&!f.cssNumber[i]&&(d+=\"px\");if(!k||!(\"set\"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c===\"cssFloat\"&&(c=\"float\");if(g&&\"get\"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each([\"height\",\"width\"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+\"px\"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?\"alpha(opacity=\"+b*100+\")\":\"\",g=d&&d.filter||c.filter||\"\";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,\"\"))===\"\"){c.removeAttribute(\"filter\");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:\"inline-block\"},function(){b?c=bz(a,\"margin-right\",\"marginRight\"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,\"-$1\").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===\"\"&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b===\"fontSize\"?\"1em\":f||0,f=g.pixelLeft+\"px\",g.left=c,d&&(a.runtimeStyle.left=d));return f===\"\"?\"auto\":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\\[\\]$/,bF=/\\r?\\n/g,bG=/#.*$/,bH=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\\/\\//,bM=/\\?/,bN=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=[\"*/\"]+[\"*\"];try{bV=e.href}catch(bY){bV=c.createElement(\"a\"),bV.href=\"\",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"string\"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.traditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f(\"<div>\").append(c.replace(bN,\"\")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,\"\\r\\n\")}}):{name:b.name,value:c.replace(bF,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"script\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||\"\",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader(\"Last-Modified\"))f.lastModified[k]=y;if(z=v.getResponseHeader(\"Etag\"))f.etag[k]=z}if(a===304)w=\"notmodified\",o=!0;else try{r=cc(d,x),w=\"success\",o=!0}catch(A){w=\"parsererror\",u=A}}else{u=w;if(!w||a)w=\"error\",a<0&&(a=0)}v.status=a,v.statusText=\"\"+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxStop\"))}}typeof a==\"object\"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks(\"once memory\"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"abort\",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+\"\").replace(bG,\"\").replace(bL,bW[1]+\"//\"),d.dataTypes=f.trim(d.dataType||\"*\").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]===\"http:\"?80:443))==(bW[3]||(bW[1]===\"http:\"?80:443)))),d.data&&d.processData&&typeof d.data!=\"string\"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?\"&\":\"?\")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,\"$1_=\"+x);d.url=y+(y===d.url?(bM.test(d.url)?\"&\":\"?\")+\"_=\"+x:\"\")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader(\"If-Modified-Since\",f.lastModified[k]),f.etag[k]&&v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!==\"*\"?\", \"+bX+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,\"No Transport\");else{v.readyState=1,t&&g.trigger(\"ajaxSend\",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join(\"&\").replace(bD,\"+\")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cd++}}),f.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e=b.contentType===\"application/x-www-form-urlencoded\"&&typeof b.data==\"string\";if(b.dataTypes[0]===\"jsonp\"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\\?/.test(j)?\"&\":\"?\")+b.jsonp+\"=\"+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}),f.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElement;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,\"success\")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&\"withCredentials\"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c)\n"
-"{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e[\"X-Requested-With\"]&&(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=\"\"}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,cp,cq=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu(\"show\",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,\"olddisplay\")&&e===\"none\"&&(e=d.style.display=\"\"),e===\"\"&&f.css(d,\"display\")===\"none\"&&f._data(d,\"olddisplay\",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===\"\"||e===\"none\")d.style.display=f._data(d,\"olddisplay\")||\"\"}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu(\"hide\",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,\"display\"),e!==\"none\"&&!f._data(d,\"olddisplay\")&&f._data(d,\"olddisplay\",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display=\"none\");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a==\"boolean\";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(\":hidden\");f(this)[b?\"show\":\"hide\"]()}):this.animate(cu(\"toggle\",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(\":hidden\"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||\"swing\";if(h===\"hide\"&&d||h===\"show\"&&!d)return b.complete.call(this);c&&(g===\"height\"||g===\"width\")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,\"display\")===\"inline\"&&f.css(this,\"float\")===\"none\"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)===\"inline\"?this.style.display=\"inline-block\":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow=\"hidden\");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,\"toggle\"+i)||(h===\"toggle\"?d?\"show\":\"hide\":0),o?(f._data(this,\"toggle\"+i,o===\"show\"?\"hide\":\"show\"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?\"\":\"px\"),n!==\"px\"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]===\"-=\"?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,\"\"));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!=\"string\"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(\".run\")===b.length-4&&h(this,g,b);else g[b=a+\".run\"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu(\"show\",1),slideUp:cu(\"hide\",1),slideToggle:cu(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a==\"object\"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration==\"number\"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue=\"fx\";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.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,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b===\"auto\"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?\"\":\"px\"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,\"fxshow\"+e.prop)===b&&f._data(e.elem,\"fxshow\"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,\"fxshow\"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){h.style[\"overflow\"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,\"fxshow\"+b,!0),f.removeData(h,\"toggle\"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,\"opacity\",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each([\"width\",\"height\"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;\"getBoundingClientRect\"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position===\"fixed\")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!==\"visible\"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position===\"relative\"||k.position===\"static\")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position===\"fixed\"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d===\"static\"&&(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&&f.inArray(\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTopWidth\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"position\")===\"static\")a=a.offsetParent;return a})}}),f.each([\"Left\",\"Top\"],function(a,c){var d=\"scroll\"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?\"pageXOffset\"in g?g[a?\"pageYOffset\":\"pageXOffset\"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each([\"Height\",\"Width\"],function(a,c){var d=c.toLowerCase();f.fn[\"inner\"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,\"padding\")):this[d]():null},f.fn[\"outer\"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?\"margin\":\"border\")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement[\"client\"+c],h=e.document.body;return e.document.compatMode===\"CSS1Compat\"&&g||h&&h[\"client\"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement[\"client\"+c],e.body[\"scroll\"+c],e.documentElement[\"scroll\"+c],e.body[\"offset\"+c],e.documentElement[\"offset\"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a==\"string\"?a:a+\"px\")}}),a.jQuery=a.$=f,typeof define==\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){return f})})(window);\n"
+"if(bA>0){if(bv!==\"border\"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,\"padding\"+bz[bx]))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}}}return bA+\"px\"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,\"padding\"+bz[bx]))||0;if(bv!==\"padding\"){bA+=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+\"px\"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,\"display\"))===\"none\")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\\[\\]$/,bs=/\\r?\\n/g,bq=/#.*$/,aD=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\\/\\//,M=/\\?/,a6=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,q=/^(?:select|textarea)/i,h=/\\s+/,br=/([?&])_=[^&]*/,K=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=[\"*/\"]+[\"*\"];try{aE=bl.href}catch(aw){aE=av.createElement(\"a\");aE.href=\"\";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!==\"string\"){bA=by;by=\"*\"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\\+/.test(bv);if(bC){bv=bv.substr(1)||\"*\"}bB=e[bv]=e[bv]||[];bB[bC?\"unshift\":\"push\"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC===\"string\"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx[\"*\"]){bC=aW(bv,bE,bz,bD,\"*\",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!==\"string\"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(\" \");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx=\"GET\";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz===\"object\"){bz=b.param(bz,b.ajaxSettings.traditional);bx=\"POST\"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:\"html\",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b(\"<div>\").append(bD.replace(a6,\"\")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,\"\\r\\n\")}}):{name:bv.name,value:bw.replace(bs,\"\\r\\n\")}}).get()}});b.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each([\"get\",\"post\"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,\"script\")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,\"json\")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":bb.String,\"text html\":true,\"text json\":b.parseJSON,\"text xml\":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz===\"object\"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks(\"once memory\"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||\"abort\";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||\"\";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader(\"Last-Modified\"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader(\"Etag\"))){b.etag[bC]=b2}}if(bZ===304){bX=\"notmodified\";bT=true}else{try{b4=G(bD,bY);bX=\"success\";bT=true}catch(b1){bX=\"parsererror\";b3=b1}}}else{b3=bX;if(!bX||bZ){bX=\"error\";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=\"\"+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger(\"ajax\"+(bT?\"Success\":\"Error\"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger(\"ajaxComplete\",[bJ,bD]);if(!(--b.active)){b.event.trigger(\"ajaxStop\")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+\"\").replace(bq,\"\").replace(c,s[1]+\"//\");bD.dataTypes=b.trim(bD.dataType||\"*\").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]===\"http:\"?80:443))!=(s[3]||(s[1]===\"http:\"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!==\"string\"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger(\"ajaxStart\")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?\"&\":\"?\")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,\"$1_=\"+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?\"&\":\"?\")+\"_=\"+bv:\"\")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader(\"Content-Type\",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader(\"If-Modified-Since\",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader(\"If-None-Match\",b.etag[bC])}}bJ.setRequestHeader(\"Accept\",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!==\"*\"?\", \"+aV+\"; q=0.01\":\"\"):bD.accepts[\"*\"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,\"No Transport\")}else{bJ.readyState=1;if(bw){bG.trigger(\"ajaxSend\",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort(\"timeout\")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+\"=\"+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join(\"&\").replace(k,\"+\")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+\"[\"+(typeof bz===\"object\"||b.isArray(bz)?bA:\"\")+\"]\",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by===\"object\"){for(var e in by){v(bw+\"[\"+e+\"]\",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]===\"*\"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader(\"content-type\")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+\" \"+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE===\"string\"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC===\"*\"){bC=bx}else{if(bx!==\"*\"&&bx!==bC){by=bx+\" \"+bC;bF=bG[by]||bG[\"* \"+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(\" \");if(bB[0]===bx||bB[0]===\"*\"){e=bG[bB[1]+\" \"+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error(\"No conversion from \"+by.replace(\" \",\" to \"))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\\=)\\?(&|$)|\\?\\?/i;b.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return b.expando+\"_\"+(aC++)}});b.ajaxPrefilter(\"json jsonp\",function(bD,bA,bC){var bx=bD.contentType===\"application/x-www-form-urlencoded\"&&(typeof bD.data===\"string\");if(bD.dataTypes[0]===\"jsonp\"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv=\"$1\"+bw+\"$2\";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\\?/.test(e)?\"&\":\"?\")+bD.jsonp+\"=\"+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters[\"script json\"]=function(){if(!bB){b.error(bw+\" was not called\")}return bB[0]};bD.dataTypes[0]=\"json\";return\"script\"}});b.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter(\"script\",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type=\"GET\";e.global=false}});b.ajaxTransport(\"script\",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName(\"head\")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement(\"script\");e.async=\"async\";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,\"success\")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&(\"withCredentials\" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB[\"X-Requested-With\"]){bB[\"X-Requested-With\"]=\"XMLHttpRequest\"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=\"\"}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)\n"
+"}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,a3,aH=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0(\"show\",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,\"olddisplay\")&&by===\"none\"){by=bw.style.display=\"\"}if(by===\"\"&&b.css(bw,\"display\")===\"none\"){b._data(bw,\"olddisplay\",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===\"\"||by===\"none\"){bw.style.display=b._data(bw,\"olddisplay\")||\"\"}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0(\"hide\",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,\"display\");if(by!==\"none\"&&!b._data(bw,\"olddisplay\")){b._data(bw,\"olddisplay\",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display=\"none\"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw===\"boolean\";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(\":hidden\");b(this)[by?\"show\":\"hide\"]()})}else{this.animate(a0(\"toggle\",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(\":hidden\"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||\"swing\"}if(bF===\"hide\"&&bI||bF===\"show\"&&!bI){return bE.complete.call(this)}if(bK&&(bB===\"height\"||bB===\"width\")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,\"display\")===\"inline\"&&b.css(this,\"float\")===\"none\"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)===\"inline\"){this.style.display=\"inline-block\"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow=\"hidden\"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,\"toggle\"+bD)||(bF===\"toggle\"?bI?\"show\":\"hide\":0);if(bA){b._data(this,\"toggle\"+bD,bA===\"show\"?\"hide\":\"show\");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?\"\":\"px\");if(bL!==\"px\"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]===\"-=\"?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,\"\")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!==\"string\"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||\"fx\",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(\".run\")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+\".run\"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0(\"show\",1),slideUp:a0(\"hide\",1),slideToggle:a0(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw===\"object\"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration===\"number\"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue=\"fx\"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.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 e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv===\"auto\"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?\"\":\"px\");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,\"fxshow\"+e.prop)===L){b._data(e.elem,\"fxshow\"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,\"fxshow\"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each([\"\",\"X\",\"Y\"],function(bC,bD){bz.style[\"overflow\"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,\"fxshow\"+bA,true);b.removeData(bz,\"toggle\"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,\"opacity\",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each([\"width\",\"height\"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b(\"<\"+bx+\">\").appendTo(e),bw=bv.css(\"display\");bv.remove();if(bw===\"none\"||bw===\"\"){if(!a8){a8=av.createElement(\"iframe\");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,\"display\");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if(\"getBoundingClientRect\" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position===\"fixed\"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!==\"visible\"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position===\"relative\"||e.position===\"static\"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position===\"fixed\"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,\"marginTop\"))||0;bv+=parseFloat(b.css(e,\"marginLeft\"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,\"position\");if(bB===\"static\"){bx.style.position=\"relative\"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,\"top\"),bE=b.css(bx,\"left\"),bF=(bB===\"absolute\"||bB===\"fixed\")&&b.inArray(\"auto\",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if(\"using\" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,\"marginTop\"))||0;bx.left-=parseFloat(b.css(bw,\"marginLeft\"))||0;e.top+=parseFloat(b.css(bv[0],\"borderTopWidth\"))||0;e.left+=parseFloat(b.css(bv[0],\"borderLeftWidth\"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,\"position\")===\"static\")){e=e.offsetParent}return e})}});b.each([\"Left\",\"Top\"],function(bv,e){var bw=\"scroll\"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?(\"pageXOffset\" in by)?by[bv?\"pageYOffset\":\"pageXOffset\"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each([\"Height\",\"Width\"],function(bv,e){var bw=e.toLowerCase();b.fn[\"inner\"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,\"padding\")):this[bw]():null};b.fn[\"outer\"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?\"margin\":\"border\")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement[\"client\"+e],bx=bA.document.body;return bA.document.compatMode===\"CSS1Compat\"&&bB||bx&&bx[\"client\"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement[\"client\"+e],bA.body[\"scroll\"+e],bA.documentElement[\"scroll\"+e],bA.body[\"offset\"+e],bA.documentElement[\"offset\"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz===\"string\"?bz:bz+\"px\")}}}}});bb.jQuery=bb.$=b;if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define(\"jquery\",[],function(){return b\n"
+"})}})(window);\n"
diff --git a/src/jquery_ui.js b/src/jquery_ui.js
index b705d2e..0ef321d 100644
--- a/src/jquery_ui.js
+++ b/src/jquery_ui.js
@@ -7,8 +7,7 @@
  *
  * http://docs.jquery.com/UI
  */
-(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);
-/*!
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
  * jQuery UI Widget 1.8.18
  *
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
@@ -17,8 +16,7 @@
  *
  * http://docs.jquery.com/UI/Widget
  */
-(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);
-/*!
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.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(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
  * jQuery UI Mouse 1.8.18
  *
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
@@ -30,24 +28,8 @@
  * Depends:
  *	jquery.ui.widget.js
  */
-(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);
-/*
- * jQuery UI Resizable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<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=!0,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=c.handles||(a(".ui-resizable-handle",this.element).length?{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"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).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 c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.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(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(":hidden")||!!a(c).parents(":hidden").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,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}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p
-&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);
-/*
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.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:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<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=k.handles||(!c(".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 l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,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}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;
+p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
  * jQuery hashchange event - v1.3 - 7/21/2010
  * http://benalman.com/projects/jquery-hashchange-plugin/
  * 
@@ -55,4 +37,4 @@
  * Dual licensed under the MIT and GPL licenses.
  * http://benalman.com/about/license/
  */
-(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
\ No newline at end of file
diff --git a/src/jquery_ui_js.h b/src/jquery_ui_js.h
index f27a5ba..c860682 100644
--- a/src/jquery_ui_js.h
+++ b/src/jquery_ui_js.h
@@ -7,8 +7,7 @@
 " *\n"
 " * http://docs.jquery.com/UI\n"
 " */\n"
-"(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,\"visibility\")===\"hidden\"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if(\"area\"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!==\"map\")return!1;h=a(\"img[usemap=#\"+g+\"]\")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:\"a\"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:\"1.8.18\",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b==\"number\"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css(\"position\"))||/absolute/.test(this.css(\"position\"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,\"position\",1))&&/(auto|scroll)/.test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0);return/fixed/.test(this.css(\"position\"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css(\"zIndex\",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css(\"position\");if(e===\"absolute\"||e===\"relative\"||e===\"fixed\"){f=parseInt(d.css(\"zIndex\"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?\"selectstart\":\"mousedown\")+\".ui-disableSelection\",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(\".ui-disableSelection\")}}),a.each([\"Width\",\"Height\"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,\"padding\"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,\"border\"+this+\"Width\",!0))||0),f&&(c-=parseFloat(a.curCSS(b,\"margin\"+this,!0))||0)});return c}var e=d===\"Width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn[\"inner\"+d]=function(c){if(c===b)return g[\"inner\"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+\"px\")})},a.fn[\"outer\"+d]=function(b,c){if(typeof b!=\"number\")return g[\"outer\"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+\"px\")})}}),a.extend(a.expr[\":\"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,\"tabindex\")))},tabbable:function(b){var d=a.attr(b,\"tabindex\"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement(\"div\"));c.offsetHeight,a.extend(c.style,{minHeight:\"100px\",height:\"auto\",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart=\"onselectstart\"in c,b.removeChild(c).style.display=\"none\"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css(\"overflow\")===\"hidden\")return!1;var d=c&&c===\"left\"?\"scrollLeft\":\"scrollTop\",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);\n"
-"/*!\n"
+"(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:\"1.8.18\",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e===\"number\"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css(\"zIndex\",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css(\"position\");if(e===\"absolute\"||e===\"relative\"||e===\"fixed\"){g=parseInt(f.css(\"zIndex\"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?\"selectstart\":\"mousedown\")+\".ui-disableSelection\",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(\".ui-disableSelection\")}});a.each([\"Width\",\"Height\"],function(g,e){var f=e===\"Width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,\"padding\"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,\"border\"+this+\"Width\",true))||0}if(n){l-=parseFloat(a.curCSS(m,\"margin\"+this,true))||0}});return l}a.fn[\"inner\"+e]=function(i){if(i===d){return k[\"inner\"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+\"px\")})};a.fn[\"outer\"+e]=function(i,l){if(typeof i!==\"number\"){return k[\"outer\"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+\"px\")})}});function c(g,e){var j=g.nodeName.toLowerCase();if(\"area\"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!==\"map\"){return false}f=a(\"img[usemap=#\"+h+\"]\")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:\"a\"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,\"visibility\")===\"hidden\"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[\":\"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,\"tabindex\")))},tabbable:function(g){var e=a.attr(g,\"tabindex\"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement(\"div\"));f.offsetHeight;a.extend(f.style,{minHeight:\"100px\",height:\"auto\",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart=\"onselectstart\" in f;e.removeChild(f).style.display=\"none\"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css(\"overflow\")===\"hidden\"){return false}var e=(f&&f===\"left\")?\"scrollLeft\":\"scrollTop\",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!\n"
 " * jQuery UI Widget 1.8.18\n"
 " *\n"
 " * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
@@ -17,8 +16,7 @@
 " *\n"
 " * http://docs.jquery.com/UI/Widget\n"
 " */\n"
-"(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler(\"remove\")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a(\"*\",this).add([this]).each(function(){try{a(this).triggerHandler(\"remove\")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(\".\")[0],f;b=b.split(\".\")[1],f=e+\"-\"+b,d||(d=c,c=a.Widget),a.expr[\":\"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e==\"string\",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)===\"_\")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind(\"remove.\"+this.widgetName,function(){d.destroy()}),this._create(),this._trigger(\"create\"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind(\".\"+this.widgetName).removeData(this.widgetName),this.widget().unbind(\".\"+this.widgetName).removeAttr(\"aria-disabled\").removeClass(this.widgetBaseClass+\"-disabled \"+\"ui-state-disabled\")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c==\"string\"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a===\"disabled\"&&this.widget()[b?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled\"+\" \"+\"ui-state-disabled\").attr(\"aria-disabled\",b);return this},enable:function(){return this._setOption(\"disabled\",!1)},disable:function(){return this._setOption(\"disabled\",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);\n"
-"/*!\n"
+"(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler(\"remove\")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b(\"*\",this).add([this]).each(function(){try{b(this).triggerHandler(\"remove\")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(\".\")[0],j;f=f.split(\".\")[1];j=g+\"-\"+f;if(!e){e=h;h=b.Widget}b.expr[\":\"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i===\"string\",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)===\"_\"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind(\"remove.\"+this.widgetName,function(){e.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(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f===\"string\"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e===\"disabled\"){this.widget()[f?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled ui-state-disabled\").attr(\"aria-disabled\",f)}return this},enable:function(){return this._setOption(\"disabled\",false)},disable:function(){return this._setOption(\"disabled\",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!\n"
 " * jQuery UI Mouse 1.8.18\n"
 " *\n"
 " * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
@@ -30,24 +28,8 @@
 " * Depends:\n"
 " *	jquery.ui.widget.js\n"
 " */\n"
-"(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget(\"ui.mouse\",{options:{cancel:\":input,option\",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind(\"mousedown.\"+this.widgetName,function(a){return b._mouseDown(a)}).bind(\"click.\"+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+\".preventClickEvent\")){a.removeData(c.target,b.widgetName+\".preventClickEvent\"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel==\"string\"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+\".preventClickEvent\")&&a.removeData(b.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);\n"
-"/*\n"
-" * jQuery UI Resizable 1.8.18\n"
-" *\n"
-" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * http://docs.jquery.com/UI/Resizables\n"
-" *\n"
-" * Depends:\n"
-" *	jquery.ui.core.js\n"
-" *	jquery.ui.mouse.js\n"
-" *	jquery.ui.widget.js\n"
-" */\n"
-"(function(a,b){a.widget(\"ui.resizable\",a.ui.mouse,{widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass(\"ui-resizable\"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<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=!0,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=c.handles||(a(\".ui-resizable-handle\",this.element).length?{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\"}:\"e,s,se\");if(this.handles.constructor==String){this.handles==\"all\"&&(this.handles=\"n,e,s,w,se,sw,ne,nw\");var d=this.handles.split(\",\");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g=\"ui-resizable-\"+f,h=a('<div class=\"ui-resizable-handle '+g+'\"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),\"se\"==f&&h.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\"),this.handles[f]=\".ui-resizable-\"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=[\"padding\",/ne|nw|n/.test(c)?\"Top\":/se|sw|s/.test(c)?\"Bottom\":/^e$/.test(c)?\"Right\":\"Left\"].join(\"\");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(\".ui-resizable-handle\",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:\"se\"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass(\"ui-resizable-autohide\").hover(function(){c.disabled||(a(this).removeClass(\"ui-resizable-autohide\"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass(\"ui-resizable-autohide\"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).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 c=this.element;c.after(this.originalElement.css({position:c.css(\"position\"),width:c.outerWidth(),height:c.outerHeight(),top:c.css(\"top\"),left:c.css(\"left\")})).remove()}this.originalElement.css(\"resize\",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(\".ui-draggable\")||/absolute/.test(f.css(\"position\")))&&f.css({position:\"absolute\",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css(\"left\")),h=c(this.helper.css(\"top\"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio==\"number\"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(\".ui-resizable-\"+this.axis).css(\"cursor\");a(\"body\").css(\"cursor\",i==\"auto\"?this.axis+\"-resize\":i),f.addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate(\"resize\",b),c.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(l),this._trigger(\"resize\",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],\"left\")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css(\"left\"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css(\"top\"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a(\"body\").css(\"cursor\",\"auto\"),this.element.removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g==\"sw\"&&(a.left=e.left+(f.width-a.width),a.top=null),g==\"nw\"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css(\"borderTopWidth\"),e.css(\"borderRightWidth\"),e.css(\"borderBottomWidth\"),e.css(\"borderLeftWidth\")],g=[e.css(\"paddingTop\"),e.css(\"paddingRight\"),e.css(\"paddingBottom\"),e.css(\"paddingLeft\")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(\":hidden\")||!!a(c).parents(\":hidden\").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style=\"overflow:hidden;\"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:\"absolute\",left:this.elementOffset.left-e+\"px\",top:this.elementOffset.top-e+\"px\",zIndex:++c.zIndex}),this.helper.appendTo(\"body\").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!=\"resize\"&&this._trigger(b,c,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}}}),a.extend(a.ui.resizable,{version:\"1.8.18\"}),a.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data(\"resizable-alsoresize\",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css(\"left\"),10),top:parseInt(b.css(\"top\"),10)})})};typeof e.alsoResize==\"object\"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data(\"resizable-alsoresize\"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize==\"object\"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData(\"resizable-alsoresize\")}}),a.ui.plugin.add(\"resizable\",\"animate\",{stop:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],\"left\")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css(\"left\"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css(\"top\"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css(\"width\"),10),height:parseInt(d.element.css(\"height\"),10),top:parseInt(d.element.css(\"top\"),10),left:parseInt(d.element.css(\"left\"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate(\"resize\",b)}})}}),a.ui.plugin.add(\"resizable\",\"containment\",{start:function(b,d){var e=a(this).data(\"resizable\"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(a,b){k[a]=c(j.css(\"padding\"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,\"left\")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css(\"position\"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css(\"position\"));o&&p\n"
-"&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css(\"position\"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css(\"position\"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add(\"resizable\",\"ghost\",{start:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof e.ghost==\"string\"?e.ghost:\"\"),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options;d.ghost&&d.ghost.css({position:\"relative\",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data(\"resizable\"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add(\"resizable\",\"grid\",{resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid==\"number\"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);\n"
-"/*\n"
+"(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget(\"ui.mouse\",{options:{cancel:\":input,option\",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind(\"mousedown.\"+this.widgetName,function(e){return d._mouseDown(e)}).bind(\"click.\"+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+\".preventClickEvent\")){b.removeData(e.target,d.widgetName+\".preventClickEvent\");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel==\"string\"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+\".preventClickEvent\")){b.removeData(f.target,this.widgetName+\".preventClickEvent\")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+\".preventClickEvent\",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget(\"ui.resizable\",c.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:1000},_create:function(){var f=this,k=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<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=k.handles||(!c(\".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 l=this.handles.split(\",\");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e=\"ui-resizable-\"+j;var h=c('<div class=\"ui-resizable-handle '+e+'\"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if(\"se\"==j){h.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[j]=\".ui-resizable-\"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=[\"padding\",/ne|nw|n/.test(n)?\"Top\":/se|sw|s/.test(n)?\"Bottom\":/^e$/.test(n)?\"Right\":\"Left\"].join(\"\");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:\"se\"}});if(k.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){if(k.disabled){return}c(this).removeClass(\"ui-resizable-autohide\");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass(\"ui-resizable-autohide\");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css(\"position\"),width:f.outerWidth(),height:f.outerHeight(),top:f.css(\"top\"),left:f.css(\"left\")})).remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(\".ui-draggable\")||(/absolute/).test(e.css(\"position\"))){e.css({position:\"absolute\",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css(\"left\")),h=b(this.helper.css(\"top\"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio==\"number\")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",i==\"auto\"?this.axis+\"-resize\":i);e.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate(\"resize\",e);h.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger(\"resize\",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],\"left\")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css(\"left\"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css(\"top\"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e==\"sw\"){h.left=j.left+(f.width-h.width);h.top=null}if(e==\"nw\"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css(\"borderTopWidth\"),h.css(\"borderRightWidth\"),h.css(\"borderBottomWidth\"),h.css(\"borderLeftWidth\")],j=[h.css(\"paddingTop\"),h.css(\"paddingRight\"),h.css(\"paddingBottom\"),h.css(\"paddingLeft\")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(\":hidden\")||c(g).parents(\":hidden\").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:\"absolute\",left:this.elementOffset.left-g+\"px\",top:this.elementOffset.top-g+\"px\",zIndex:++i.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!=\"resize\"&&this._trigger(f,e,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}}});c.extend(c.ui.resizable,{version:\"1.8.18\"});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(f,g){var e=c(this).data(\"resizable\"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data(\"resizable-alsoresize\",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css(\"left\"),10),top:parseInt(k.css(\"top\"),10)})})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data(\"resizable\"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data(\"resizable-alsoresize\"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)==\"object\"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData(\"resizable-alsoresize\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(i,n){var p=c(this).data(\"resizable\"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],\"left\")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css(\"left\"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css(\"top\"),10)+(p.position.top-p.originalPosition.top))||null;\n"
+"p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css(\"width\"),10),height:parseInt(p.element.css(\"height\"),10),top:parseInt(p.element.css(\"top\"),10),left:parseInt(p.element.css(\"left\"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate(\"resize\",i)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(f,r){var t=c(this).data(\"resizable\"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){i[p]=b(n.css(\"padding\"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,\"left\")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data(\"resizable\"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css(\"position\"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css(\"position\"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data(\"resizable\"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(g,h){var e=c(this).data(\"resizable\"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof i.ghost==\"string\"?i.ghost:\"\");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost){e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(e,m){var p=c(this).data(\"resizable\"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid==\"number\"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!\n"
 " * jQuery hashchange event - v1.3 - 7/21/2010\n"
 " * http://benalman.com/projects/jquery-hashchange-plugin/\n"
 " * \n"
diff --git a/src/language.cpp b/src/language.cpp
index ab69cf2..1037d7f 100644
--- a/src/language.cpp
+++ b/src/language.cpp
@@ -387,7 +387,7 @@ bool setTranslator(const char *langName)
 #ifdef LANG_AR
   else if (L_EQUAL("arabic"))
   {
-    theTranslator=new TranslatorDecoder(new TranslatorArabic);
+    theTranslator=new TranslatorArabic;
   }
 #endif
 #ifdef LANG_FA
@@ -428,6 +428,6 @@ bool setTranslator(const char *langName)
   }
   
   QCString msg = theTranslator->updateNeededMessage();
-  if (!msg.isEmpty()) err(msg);
+  if (!msg.isEmpty()) warn_uncond(msg);
   return TRUE;
 }
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index ce20e0d..0a96530 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -257,7 +257,7 @@ void LatexDocVisitor::visit(DocSymbol *s)
     case DocSymbol::LeftFloor:     m_t << "{$\\lfloor$}"; break;
     case DocSymbol::RightFloor:    m_t << "{$\\rfloor$}"; break;
     default:
-                             err("error: unknown symbol found\n");
+                             err("unknown symbol found\n");
   }
 }
 
@@ -424,10 +424,10 @@ void LatexDocVisitor::visit(DocVerbatim *s)
 void LatexDocVisitor::visit(DocAnchor *anc)
 {
   if (m_hide) return;
-  m_t << "\\label{" << anc->file() << "_" << anc->anchor() << "}%" << endl;
+  m_t << "\\label{" << stripPath(anc->file()) << "_" << anc->anchor() << "}%" << endl;
   if (!anc->file().isEmpty() && Config_getBool("PDF_HYPERLINKS")) 
   {
-    m_t << "\\hypertarget{" << anc->file() << "_" << anc->anchor() 
+    m_t << "\\hypertarget{" << stripPath(anc->file()) << "_" << anc->anchor() 
       << "}{}%" << endl;
   }    
 }
@@ -798,11 +798,11 @@ void LatexDocVisitor::visitPre(DocSection *s)
   if (m_hide) return;
   if (Config_getBool("PDF_HYPERLINKS"))
   {
-    m_t << "\\hypertarget{" << s->file() << "_" << s->anchor() << "}{}";
+    m_t << "\\hypertarget{" << stripPath(s->file()) << "_" << s->anchor() << "}{}";
   }
   m_t << "\\" << getSectionName(s->level()) << "{";
   filter(convertCharEntitiesToUTF8(s->title().data()));
-  m_t << "}\\label{" << s->file() << "_" << s->anchor() << "}" << endl;
+  m_t << "}\\label{" << stripPath(s->file()) << "_" << s->anchor() << "}" << endl;
 }
 
 void LatexDocVisitor::visitPost(DocSection *) 
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 8f99b30..ac73331 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -777,7 +777,7 @@ static void writeDefaultStyleSheet(FTextStream &t)
   t << "% Used by parameter lists\n"
        "\\newenvironment{DoxyParams}[2][]{%\n"
        "  \\begin{DoxyDesc}{#2}%\n"
-       "    \\item[] \\hspace{\\fill} \\vspace{-40pt}%\n"
+       "    \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
        "    \\settowidth{\\labelwidth}{40pt}%\n"
        "    \\setlength{\\LTleft}{0pt}%\n"
        "    \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
@@ -801,7 +801,7 @@ static void writeDefaultStyleSheet(FTextStream &t)
   t << "% Used for fields of simple structs\n"
        "\\newenvironment{DoxyFields}[1]{%\n"
        "  \\begin{DoxyDesc}{#1}%\n"
-       "    \\item[] \\hspace{\\fill} \\vspace{-40pt}%\n"
+       "    \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
        "    \\settowidth{\\labelwidth}{40pt}%\n"
        "    \\setlength{\\LTleft}{0pt}%\n"
        "    \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
@@ -840,9 +840,6 @@ static void writeDefaultStyleSheet(FTextStream &t)
        "  \\begin{DoxyDesc}{#1}%\n"
        "    \\begin{description}%\n"
        "      \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
-       "      \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
-       "      \\rowcolors{1}{white}{tableShade}%\n"
-       "      \\arrayrulecolor{gray}%\n"
        "      \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
        "      \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
        "                          p{0.705\\textwidth}|}%\n"
@@ -858,9 +855,6 @@ static void writeDefaultStyleSheet(FTextStream &t)
        "  \\begin{DoxyDesc}{#1}%\n"
        "    \\begin{description}%\n"
        "      \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
-       "      \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
-       "      \\rowcolors{1}{white}{tableShade}%\n"
-       "      \\arrayrulecolor{gray}%\n"
        "      \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
        "      \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
        "                          p{0.705\\textwidth}|}%\n"
@@ -1715,7 +1709,7 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name)
   t << "}" << endl;
   if (name)
   {
-    t << "\\label{" << fileName << "}\\index{";
+    t << "\\label{" << stripPath(fileName) << "}\\index{";
     escapeLabelName(name);
     t << "@{";
     escapeMakeIndexChars(name);
@@ -1875,7 +1869,7 @@ void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
     t << "}";
   }
   t << "\\label{";
-  if (fName) t << fName;
+  if (fName) t << stripPath(fName);
   if (anchor) t << "_" << anchor;
   t << "}" << endl;
 }
diff --git a/src/layout.cpp b/src/layout.cpp
index acddbc0..c2b1ac5 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -64,7 +64,7 @@ static bool elemIsVisible(const QXmlAttributes &attrib,bool defVal=TRUE)
     }
     else if (!opt)
     {
-      err("error: found unsupported value %s for visible attribute in layout file\n",
+      err("found unsupported value %s for visible attribute in layout file\n",
           visible.data());
     }
   }
@@ -120,7 +120,7 @@ QCString LayoutNavEntry::url() const
     }
     if (!found)
     {
-      msg("warning: explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString("LAYOUT_FILE")));
+      msg("explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString("LAYOUT_FILE")));
     }
   }
   //printf("LayoutNavEntry::url()=%s\n",url.data());
@@ -1061,11 +1061,11 @@ class LayoutParser : public QXmlDefaultHandler
       {
         if (type.isEmpty())
         {
-          err("error: an entry tag within a navindex has no type attribute! Check your layout file!\n");
+          err("an entry tag within a navindex has no type attribute! Check your layout file!\n");
         }
         else
         {
-          err("error: the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n",type.data());
+          err("the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n",type.data());
         }
         m_invalidEntry=TRUE;
         return;
@@ -1239,7 +1239,7 @@ class LayoutParser : public QXmlDefaultHandler
       }
       else
       {
-        err("error: Unexpected start tag `%s' found in scope='%s'!\n",
+        err("Unexpected start tag `%s' found in scope='%s'!\n",
             name.data(),m_scope.data());
       }
       return TRUE;
@@ -1289,21 +1289,21 @@ class LayoutErrorHandler : public QXmlErrorHandler
     LayoutErrorHandler(const char *fn) : fileName(fn) {}
     bool warning( const QXmlParseException &exception )
     {
-      err("warning: at line %d column %d of %s: %s\n",
+      warn_uncond("at line %d column %d of %s: %s\n",
           exception.lineNumber(),exception.columnNumber(),fileName.data(),
           exception.message().data());
       return FALSE;
     }
     bool error( const QXmlParseException &exception )
     {
-      err("error: at line %d column %d of %s: %s\n",
+      err("at line %d column %d of %s: %s\n",
           exception.lineNumber(),exception.columnNumber(),fileName.data(),
           exception.message().data());
       return FALSE;
     }
     bool fatalError( const QXmlParseException &exception )
     {
-      err("fatal error: at line %d column %d of %s: %s\n",
+      err("fatal: at line %d column %d of %s: %s\n",
           exception.lineNumber(),exception.columnNumber(),fileName.data(),
           exception.message().data());
       return FALSE;
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 6b1cb7e..48bd7df 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -78,7 +78,6 @@ HEADERS      =	arguments.h \
 		latexgen.h \
                 layout.h \
                 layout_default.h \
-                lockingptr.h \
 		logos.h \
 		mandocvisitor.h \
 		mangen.h \
diff --git a/src/libdoxygen.t.in b/src/libdoxygen.t.in
index 53628dd..6b45ce7 100644
--- a/src/libdoxygen.t.in
+++ b/src/libdoxygen.t.in
@@ -162,6 +162,9 @@ jquery_p2_js.h: jquery_p2.js
 jquery_p3_js.h: jquery_p3.js
 	cat jquery_p3.js | $(TO_C_CMD) >jquery_p3_js.h
 
+jquery_p4_js.h: jquery_p4.js
+	cat jquery_p4.js | $(TO_C_CMD) >jquery_p4_js.h
+
 jquery_ui_js.h: jquery_ui.js
 	cat jquery_ui.js | $(TO_C_CMD) >jquery_ui_js.h
 
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 9411782..c15516e 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -1449,11 +1449,11 @@ static bool isCodeBlock(const char *data,int offset,int size,int &indent)
  */
 int findTableColumns(const char *data,int size,int &start,int &end,int &columns)
 {
-  int i=0;
+  int i=0,n=0;
   int eol;
   // find start character of the table line
   while (i<size && data[i]==' ') i++;
-  if (i<size && data[i]=='|') i++; // leading | does not count
+  if (i<size && data[i]=='|' && data[i]!='\n') i++,n++; // leading | does not count
   start = i;
 
   // find end character of the table line
@@ -1461,15 +1461,19 @@ int findTableColumns(const char *data,int size,int &start,int &end,int &columns)
   eol=i+1;
   i--;
   while (i>0 && data[i]==' ') i--;
-  if (i>0 && data[i]=='|') i--; // trailing | does not count
+  if (i>0 && data[i]=='|') i--,n++; // trailing | does not count
   end = i;
 
   // count columns between start and end
-  columns=1;
+  columns=0;
+  if (n==2) // table row has | ... |
+  {
+    columns++;
+  }
   if (end>start)
   {
     i=start;
-    while (i<=end)
+    while (i<=end) // look for more column markers
     {
       if (data[i]=='|' && (i==0 || data[i-1]!='\\')) columns++;
       i++;
@@ -1487,7 +1491,7 @@ static bool isTableBlock(const char *data,int size)
 
   // the first line should have at least two columns separated by '|'
   int i = findTableColumns(data,size,start,end,cc0);
-  if (i>=size || cc0<2) 
+  if (i>=size || cc0<1) 
   {
     //printf("isTableBlock: no |'s in the header\n");
     return FALSE;
@@ -1580,9 +1584,9 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
     out.addStr("<th");
     switch (columnAlignment[k])
     {
-      case AlignLeft:   out.addStr(" align=left"); break;
-      case AlignRight:  out.addStr(" align=right"); break;
-      case AlignCenter: out.addStr(" align=center"); break;
+      case AlignLeft:   out.addStr(" align=\"left\""); break;
+      case AlignRight:  out.addStr(" align=\"right\""); break;
+      case AlignCenter: out.addStr(" align=\"center\""); break;
       case AlignNone:   break;
     }
     out.addStr(">");
@@ -1592,6 +1596,7 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
     }
     m++;
   }
+  out.addStr("\n</th>\n");
 
   // write table cells
   while (i<size)
@@ -1611,9 +1616,9 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
         out.addStr("<td");
         switch (columnAlignment[k])
         {
-          case AlignLeft:   out.addStr(" align=left"); break;
-          case AlignRight:  out.addStr(" align=right"); break;
-          case AlignCenter: out.addStr(" align=center"); break;
+          case AlignLeft:   out.addStr(" align=\"left\""); break;
+          case AlignRight:  out.addStr(" align=\"right\""); break;
+          case AlignCenter: out.addStr(" align=\"center\""); break;
           case AlignNone:   break;
         }
         out.addStr(">");
@@ -1635,7 +1640,7 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
     i+=ret;
   }
 
-  out.addStr("</table>\n");
+  out.addStr("</table> ");
 
   delete[] columnAlignment;
   return i;
@@ -2248,7 +2253,9 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input
 
 void MarkdownFileParser::parseInput(const char *fileName, 
                 const char *fileBuf, 
-                Entry *root)
+                Entry *root,
+                bool /*sameTranslationUnit*/,
+                QStrList & /*filesInSameTranslationUnit*/)
 {
   Entry *current = new Entry;
   current->lang = SrcLangExt_Markdown;
@@ -2266,12 +2273,15 @@ void MarkdownFileParser::parseInput(const char *fileName,
   QCString id;
   QCString title=extractPageTitle(docs,id).stripWhiteSpace();
   //g_correctSectionLevel = !title.isEmpty();
-  QCString baseFn = QFileInfo(fileName).baseName().utf8();
-  QCString fn     = QFileInfo(fileName).fileName().utf8();
-  QCString baseName = substitute(baseFn," ","_");
+  QCString baseFn  = stripFromPath(QFileInfo(fileName).absFilePath().utf8());
+  int i = baseFn.findRev('.');
+  if (i!=-1) baseFn = baseFn.left(i);
+  QCString titleFn = QFileInfo(fileName).baseName().utf8();
+  QCString fn      = QFileInfo(fileName).fileName().utf8();
+  QCString baseName = substitute(substitute(baseFn," ","_"),"/","_");
   static QCString mdfileAsMainPage = Config_getString("USE_MDFILE_AS_MAINPAGE");
   if (id.isEmpty()) id = "md_"+baseName;
-  if (title.isEmpty()) title = baseName;
+  if (title.isEmpty()) title = titleFn;
   if (fn==mdfileAsMainPage)
   {
     docs.prepend("@mainpage\n");
diff --git a/src/markdown.h b/src/markdown.h
index a9f80ee..71884d5 100644
--- a/src/markdown.h
+++ b/src/markdown.h
@@ -28,9 +28,13 @@ class MarkdownFileParser : public ParserInterface
 {
   public:
     virtual ~MarkdownFileParser() {}
+    void startTranslationUnit(const char *) {}
+    void finishTranslationUnit() {}
     void parseInput(const char *fileName, 
                     const char *fileBuf, 
-                    Entry *root);
+                    Entry *root,
+                    bool sameTranslationUnit,
+                    QStrList &filesInSameTranslationUnit);
     bool needsPreprocessing(const QCString &) { return FALSE; }
     void parseCode(CodeOutputInterface &codeOutIntf,
                    const char *scopeName,
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index cdf5686..c5bf787 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -45,14 +45,6 @@
 #include "filedef.h"
 #include "config.h"
 
-#define START_MARKER 0x4D454D5B // MEM[
-#define END_MARKER   0x4D454D5D // MEM]
-
-// Put this macro at the start of any method of MemberDef that can directly
-// or indirectly access other MemberDefs. It prevents that the content 
-// pointed to by m_impl gets flushed to disk in the middle of the method call!
-#define KEEP_RESIDENT_DURING_CALL makeResident();LockingPtr<MemberDef> lock(this,this)
-
 //-----------------------------------------------------------------------------
 
 int MemberDef::s_indentLevel = 0;
@@ -129,7 +121,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
 static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
                                  const QCString & /*scopeName*/,MemberDef *md)
 {
-  LockingPtr<ArgumentList> defArgList=(md->isDocsForDefinition()) ? 
+  ArgumentList *defArgList=(md->isDocsForDefinition()) ? 
                              md->argumentList() : md->declArgumentList();
   //printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition());
   if (defArgList==0 || md->isProperty()) 
@@ -765,11 +757,8 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
                     ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na))
 {
   //printf("MemberDef::MemberDef(%s)\n",na);
-  m_storagePos=-1;
-  m_cacheHandle=-1;
   m_impl = new MemberDefImpl;
   m_impl->init(this,t,a,e,p,v,s,r,mt,tal,al);
-  m_flushPending = FALSE;
   m_isLinkableCached    = 0;
   m_isConstructorCached = 0;
   m_isDestructorCached  = 0;
@@ -777,10 +766,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
 
 MemberDef::MemberDef(const MemberDef &md) : Definition(md)
 {
-  m_storagePos=-1;
-  m_cacheHandle=-1;
   m_impl = new MemberDefImpl;
-  m_flushPending = FALSE;
   m_isLinkableCached    = 0;
   m_isConstructorCached = 0;
   m_isDestructorCached  = 0;
@@ -788,7 +774,6 @@ MemberDef::MemberDef(const MemberDef &md) : Definition(md)
 
 MemberDef *MemberDef::deepCopy() const
 {
-  makeResident();
   //MemberDef *result = new MemberDef(getDefFileName(),getDefLine(),name());
   MemberDef *result = new MemberDef(*this);
   // first copy everything by reference
@@ -887,23 +872,15 @@ MemberDef::~MemberDef()
   delete m_impl;
   //printf("%p: ~MemberDef()\n",this);
   m_impl=0;
-  if (m_cacheHandle!=-1)
-  {
-    Doxygen::symbolCache->del(m_cacheHandle);
-    m_cacheHandle=-1;
-  }
 }
 
 void MemberDef::setReimplements(MemberDef *md)   
 { 
-  makeResident();
-
   m_impl->redefines = md;
 }
 
 void MemberDef::insertReimplementedBy(MemberDef *md)
 {
-  makeResident();
   if (m_impl->templateMaster)
   {
     m_impl->templateMaster->insertReimplementedBy(md);
@@ -917,19 +894,16 @@ void MemberDef::insertReimplementedBy(MemberDef *md)
 
 MemberDef *MemberDef::reimplements() const      
 { 
-  makeResident();
   return m_impl->redefines; 
 }
 
-LockingPtr<MemberList> MemberDef::reimplementedBy() const   
+MemberList *MemberDef::reimplementedBy() const   
 { 
-  makeResident();
-  return LockingPtr<MemberList>(this,m_impl->redefinedBy); 
+  return m_impl->redefinedBy; 
 }
 
 bool MemberDef::isReimplementedBy(ClassDef *cd) const
 {
-  makeResident();
   if (cd && m_impl->redefinedBy)
   {
     MemberListIterator mi(*m_impl->redefinedBy);
@@ -951,7 +925,6 @@ bool MemberDef::isReimplementedBy(ClassDef *cd) const
 
 void MemberDef::insertEnumField(MemberDef *md)
 {
-  makeResident();
   if (m_impl->enumFields==0) m_impl->enumFields=new MemberList(MemberListType_enumFields);
   m_impl->enumFields->append(md);
 }
@@ -959,7 +932,6 @@ void MemberDef::insertEnumField(MemberDef *md)
 bool MemberDef::addExample(const char *anchor,const char *nameStr,
                            const char *file)
 {
-  makeResident();
   //printf("%s::addExample(%s,%s,%s)\n",name().data(),anchor,nameStr,file);
   if (m_impl->exampleSDict==0) m_impl->exampleSDict = new ExampleSDict;
   if (m_impl->exampleSDict->find(nameStr)==0) 
@@ -977,7 +949,6 @@ bool MemberDef::addExample(const char *anchor,const char *nameStr,
 
 bool MemberDef::hasExamples()
 {
-  makeResident();
   if (m_impl->exampleSDict==0) 
     return FALSE;
   else
@@ -986,7 +957,6 @@ bool MemberDef::hasExamples()
 
 QCString MemberDef::getOutputFileBase() const
 {
-  makeResident();
   static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES");
   QCString baseName;
   //printf("Member: %s: templateMaster=%p group=%p classDef=%p nspace=%p fileDef=%p\n",
@@ -1020,7 +990,7 @@ QCString MemberDef::getOutputFileBase() const
   if (baseName.isEmpty())
   {
     warn(getDefFileName(),getDefLine(),
-       "warning: Internal inconsistency: member %s does not belong to any"
+       "Internal inconsistency: member %s does not belong to any"
        " container!",qPrint(name())
       );
     return "dummy";
@@ -1041,7 +1011,6 @@ QCString MemberDef::getOutputFileBase() const
 
 QCString MemberDef::getReference() const
 {
-  makeResident();
   QCString ref = Definition::getReference();
   if (!ref.isEmpty())
   {
@@ -1072,7 +1041,6 @@ QCString MemberDef::getReference() const
 
 QCString MemberDef::anchor() const
 {
-  KEEP_RESIDENT_DURING_CALL;
   QCString result=m_impl->anc;
   if (m_impl->groupAlias)     return m_impl->groupAlias->anchor();
   if (m_impl->templateMaster) return m_impl->templateMaster->anchor();
@@ -1096,7 +1064,6 @@ QCString MemberDef::anchor() const
 
 void MemberDef::_computeLinkableInProject()
 {
-  KEEP_RESIDENT_DURING_CALL;
   static bool extractStatic  = Config_getBool("EXTRACT_STATIC");
   m_isLinkableCached = 2; // linkable
   //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
@@ -1168,28 +1135,24 @@ void MemberDef::_computeLinkableInProject()
 
 void MemberDef::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
 {
-  makeResident();
   Definition::setDocumentation(d,docFile,docLine,stripWhiteSpace);
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setBriefDescription(const char *b,const char *briefFile,int briefLine)
 {
-  makeResident();
   Definition::setBriefDescription(b,briefFile,briefLine);
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
 {
-  makeResident();
   Definition::setInbodyDocumentation(d,inbodyFile,inbodyLine);
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setHidden(bool b)
 {
-  makeResident();
   Definition::setHidden(b);
   m_isLinkableCached = 0;
 }
@@ -1207,7 +1170,6 @@ bool MemberDef::isLinkableInProject() const
 
 bool MemberDef::isLinkable() const
 {
-  makeResident();
   if (m_impl->templateMaster)
   {
     return m_impl->templateMaster->isLinkable();
@@ -1223,7 +1185,6 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
 {
   if (lists)
   {
-    makeResident();
     if (m_impl->defTmpArgLists) delete m_impl->defTmpArgLists;
     m_impl->defTmpArgLists = copyArgumentLists(lists);
   }
@@ -1232,7 +1193,6 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
 void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
                       FileDef *fd,GroupDef *gd,bool onlyText)
 {
-  KEEP_RESIDENT_DURING_CALL;
   SrcLangExt lang = getLanguage();
   static bool hideScopeNames     = Config_getBool("HIDE_SCOPE_NAMES");
   QCString sep = getLanguageSpecificSeparator(lang,TRUE);
@@ -1285,12 +1245,7 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
  */
 ClassDef *MemberDef::getClassDefOfAnonymousType() 
 {
-  // split KEEP_RESIDENT_DURING_CALL for performance
-  makeResident();
   if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType;
-  LockingPtr<MemberDef> lock(this,this); // since this memberDef can access 
-                                         // other memberDefs prevent it from 
-                                         // being flushed to disk halfway
 
   QCString cname;
   if (getClassDef()!=0) 
@@ -1355,8 +1310,6 @@ bool MemberDef::isBriefSectionVisible() const
   //    "", //getFileDef()->name().data(),
   //    argsString());
 
-  KEEP_RESIDENT_DURING_CALL;
-
   MemberGroupInfo *info = Doxygen::memGrpInfoDict[m_impl->grpId];
   //printf("name=%s m_impl->grpId=%d info=%p\n",name().data(),m_impl->grpId,info);
   //QCString *pMemGrp = Doxygen::memberDocDict[grpId];
@@ -1447,7 +1400,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
 
   // hide enum value, since they appear already as part of the enum, unless they
   // are explicitly grouped.
-  KEEP_RESIDENT_DURING_CALL;
   if (!inGroup && m_impl->mtype==MemberType_EnumValue) return;
 
   // hide members whose brief section should not be visible
@@ -1817,36 +1769,42 @@ void MemberDef::writeDeclaration(OutputList &ol,
       /* && !annMemb */
      )
   {
-    ol.startMemberDescription(anchor(),inheritId);
-    ol.parseDoc(briefFile(),briefLine(),
+    DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),
                 getOuterScope()?getOuterScope():d,this,briefDescription(),
                 TRUE,FALSE,0,TRUE,FALSE);
-    if (detailsVisible) 
+
+    if (rootNode && !rootNode->isEmpty())
     {
-      ol.pushGeneratorState();
-      ol.disableAllBut(OutputGenerator::Html);
-      //ol.endEmphasis();
-      ol.docify(" ");
-      if (m_impl->group!=0 && gd==0) // forward link to the group
-      {
-        ol.startTextLink(getOutputFileBase(),anchor());
-      }
-      else // local link
+      ol.startMemberDescription(anchor(),inheritId);
+      ol.writeDoc(rootNode,getOuterScope()?getOuterScope():d,this);
+      if (detailsVisible) 
       {
-        ol.startTextLink(0,anchor());
+        ol.pushGeneratorState();
+        ol.disableAllBut(OutputGenerator::Html);
+        //ol.endEmphasis();
+        ol.docify(" ");
+        if (m_impl->group!=0 && gd==0) // forward link to the group
+        {
+          ol.startTextLink(getOutputFileBase(),anchor());
+        }
+        else // local link
+        {
+          ol.startTextLink(0,anchor());
+        }
+        ol.parseText(theTranslator->trMore());
+        ol.endTextLink();
+        //ol.startEmphasis();
+        ol.popGeneratorState();
       }
-      ol.parseText(theTranslator->trMore());
-      ol.endTextLink();
-      //ol.startEmphasis();
-      ol.popGeneratorState();
-    }
-    // for RTF we need to add an extra empty paragraph
-    ol.pushGeneratorState();
-    ol.disableAllBut(OutputGenerator::RTF);
+      // for RTF we need to add an extra empty paragraph
+      ol.pushGeneratorState();
+      ol.disableAllBut(OutputGenerator::RTF);
       ol.startParagraph();
       ol.endParagraph();
-    ol.popGeneratorState();
-    ol.endMemberDescription();
+      ol.popGeneratorState();
+      ol.endMemberDescription();
+    }
+    delete rootNode;
   }
 
   ol.endMemberDeclaration(anchor(),inheritId);
@@ -1863,8 +1821,6 @@ bool MemberDef::isDetailedSectionLinkable() const
   static bool hideUndocMembers  = Config_getBool("HIDE_UNDOC_MEMBERS");
   static bool extractStatic     = Config_getBool("EXTRACT_STATIC");
 
-  KEEP_RESIDENT_DURING_CALL;
-
   // the member has details documentation for any of the following reasons
   bool docFilter = 
          // treat everything as documented
@@ -2061,7 +2017,7 @@ void MemberDef::_writeCallGraph(OutputList &ol)
     DotCallGraph callGraph(this,FALSE);
     if (callGraph.isTooBig())
     {
-       err("warning: Call graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
+       warn_uncond("Call graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
     }
     else if (!callGraph.isTrivial())
     {
@@ -2086,7 +2042,7 @@ void MemberDef::_writeCallerGraph(OutputList &ol)
     DotCallGraph callerGraph(this, TRUE);
     if (callerGraph.isTooBig())
     {
-       err("warning: Caller graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
+       warn_uncond("Caller graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
     }
     else if (!callerGraph.isTrivial() && !callerGraph.isTooBig())
     {
@@ -2154,7 +2110,7 @@ void MemberDef::_writeReimplements(OutputList &ol)
       }
       else
       {
-        err("error: translation error: no marker in trReimplementsFromList()\n");
+        err("translation error: no marker in trReimplementsFromList()\n");
       }
       ol.endParagraph();
     }
@@ -2163,8 +2119,8 @@ void MemberDef::_writeReimplements(OutputList &ol)
 
 void MemberDef::_writeReimplementedBy(OutputList &ol)
 {
-  LockingPtr<MemberList> bml=reimplementedBy();
-  if (bml!=0)
+  MemberList *bml=reimplementedBy();
+  if (bml)
   {
     MemberListIterator mli(*bml);
     MemberDef *bmd=0;
@@ -2318,9 +2274,9 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
   if (isEnumerate())
   {
     bool first=TRUE;
-    LockingPtr<MemberList> fmdl=enumFieldList();
+    MemberList *fmdl=enumFieldList();
     //printf("** %s: enum values=%d\n",name().data(),fmdl!=0 ? fmdl->count() : 0);
-    if (fmdl!=0)
+    if (fmdl)
     {
       MemberDef *fmd=fmdl->first();
       while (fmd)
@@ -2367,7 +2323,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
 
           if (hasBrief)
           { 
-            ol.parseDoc(fmd->briefFile(),fmd->briefLine(),
+            ol.generateDoc(fmd->briefFile(),fmd->briefLine(),
                 getOuterScope()?getOuterScope():container,
                 fmd,fmd->briefDescription(),TRUE,FALSE);
           }
@@ -2379,7 +2335,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
           //}
           if (hasDetails)
           { 
-            ol.parseDoc(fmd->docFile(),fmd->docLine(),
+            ol.generateDoc(fmd->docFile(),fmd->docLine(),
                 getOuterScope()?getOuterScope():container,
                 fmd,fmd->documentation()+"\n",TRUE,FALSE);
           }
@@ -2422,8 +2378,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   if ( !hasDocs ) return;
   if (isEnumValue() && !showEnumValues) return;
 
-  KEEP_RESIDENT_DURING_CALL;
-
   SrcLangExt lang = getLanguage();
   //printf("member=%s lang=%d\n",name().data(),lang);
   bool optVhdl = lang==SrcLangExt_VHDL;
@@ -2754,7 +2708,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
 
   QCString brief           = briefDescription();
   QCString detailed        = documentation();
-  LockingPtr<ArgumentList> docArgList = LockingPtr<ArgumentList>(this,m_impl->defArgList);
+  ArgumentList *docArgList = m_impl->defArgList;
   if (m_impl->templateMaster)
   {
     brief      = m_impl->templateMaster->briefDescription();
@@ -2770,7 +2724,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
      )  
   { 
     ol.startParagraph();
-    ol.parseDoc(briefFile(),briefLine(),
+    ol.generateDoc(briefFile(),briefLine(),
                 getOuterScope()?getOuterScope():container,this,
                 brief,FALSE,FALSE,0,TRUE,FALSE);
     ol.endParagraph();
@@ -2788,12 +2742,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
     }
     else
     {
-      ol.parseDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
+      ol.generateDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
     }
    
     if (!inbodyDocumentation().isEmpty())
     {
-      ol.parseDoc(inbodyFile(),inbodyLine(),
+      ol.generateDoc(inbodyFile(),inbodyLine(),
                   getOuterScope()?getOuterScope():container,this,
                   inbodyDocumentation()+"\n",TRUE,FALSE);
     }
@@ -2803,7 +2757,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
   {
     if (!inbodyDocumentation().isEmpty())
     {
-      ol.parseDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,inbodyDocumentation()+"\n",TRUE,FALSE);
+      ol.generateDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,inbodyDocumentation()+"\n",TRUE,FALSE);
     }
   }
 
@@ -2826,7 +2780,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
       }
     }
     // feed the result to the documentation parser
-    ol.parseDoc(
+    ol.generateDoc(
         docFile(),docLine(),
         getOuterScope()?getOuterScope():container,
         this,         // memberDef
@@ -2877,13 +2831,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
     if (!hasDocumentedParams())
     {
       warn_doc_error(docFile(),docLine(),
-          "warning: parameters of member %s are not (all) documented",
+          "parameters of member %s are not (all) documented",
           qPrint(qualifiedName()));
     }
     if (!hasDocumentedReturnType() && isFunction() && hasDocumentation())
     {
       warn_doc_error(docFile(),docLine(),
-          "warning: return type of member %s is not documented",
+          "return type of member %s is not documented",
           qPrint(qualifiedName()));
     }
   }
@@ -2955,8 +2909,6 @@ static Definition *getClassFromType(Definition *scope,const QCString &type,SrcLa
 
 void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
 {
-  KEEP_RESIDENT_DURING_CALL;
-
   Definition *scope  = getOuterScope();
   QCString doxyName  = name();
   QCString doxyArgs  = argsString();
@@ -3042,7 +2994,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
       ) 
      )  
   { 
-    ol.parseDoc(briefFile(),briefLine(),
+    ol.generateDoc(briefFile(),briefLine(),
                 getOuterScope()?getOuterScope():container,this,
                 brief,FALSE,FALSE,0,TRUE,FALSE);
   }
@@ -3050,7 +3002,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
   /* write detailed description */
   if (!detailed.isEmpty())
   { 
-    ol.parseDoc(docFile(),docLine(),
+    ol.generateDoc(docFile(),docLine(),
                 getOuterScope()?getOuterScope():container,this,
                 detailed+"\n",FALSE,FALSE,0,FALSE,FALSE);
    
@@ -3061,7 +3013,6 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
 
 QCString MemberDef::memberTypeName() const
 {
-  makeResident();
   switch (m_impl->mtype)
   {
     case MemberType_Define:      return "macro definition";
@@ -3084,7 +3035,6 @@ QCString MemberDef::memberTypeName() const
 
 void MemberDef::warnIfUndocumented()
 {
-  makeResident();
   if (m_impl->memberGroup) return;
   ClassDef     *cd = getClassDef();
   NamespaceDef *nd = getNamespaceDef();
@@ -3113,7 +3063,7 @@ void MemberDef::warnIfUndocumented()
       !isReference()
      )
   {
-    warn_undoc(getDefFileName(),getDefLine(),"warning: Member %s%s (%s) of %s %s is not documented.",
+    warn_undoc(getDefFileName(),getDefLine(),"Member %s%s (%s) of %s %s is not documented.",
          qPrint(name()),qPrint(argsString()),qPrint(memberTypeName()),t,qPrint(d->name()));
   }
 }
@@ -3122,7 +3072,6 @@ void MemberDef::warnIfUndocumented()
 
 bool MemberDef::isFriendClass() const
 {
-  makeResident();
   return (isFriend() && 
          (m_impl->type=="friend class" || m_impl->type=="friend struct" || 
           m_impl->type=="friend union"));
@@ -3130,7 +3079,6 @@ bool MemberDef::isFriendClass() const
 
 bool MemberDef::isDocumentedFriendClass() const
 {
-  makeResident();
   ClassDef *fcd=0;
   QCString baseName=name();
   int i=baseName.find('<');
@@ -3141,7 +3089,6 @@ bool MemberDef::isDocumentedFriendClass() const
 
 bool MemberDef::hasDocumentation() const
 { 
-  makeResident();
   return Definition::hasDocumentation() || 
          (m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) ||  // has enum values
          (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments
@@ -3158,20 +3105,17 @@ bool MemberDef::hasUserDocumentation() const
 
 void MemberDef::setMemberGroup(MemberGroup *grp)
 {
-  makeResident();
   m_impl->memberGroup = grp;
 }
 
 bool MemberDef::visibleMemberGroup(bool hideNoHeader) 
 { 
-  makeResident();
   return m_impl->memberGroup!=0 && 
           (!hideNoHeader || m_impl->memberGroup->header()!="[NOHEADER]"); 
 }
 
 QCString MemberDef::getScopeString() const
 {
-  makeResident();
   QCString result;
   if (getClassDef()) result=getClassDef()->displayName();
   else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
@@ -3205,7 +3149,6 @@ static QCString escapeAnchor(const QCString &anchor)
 
 void MemberDef::setAnchor()
 {
-  makeResident();
   QCString memAnchor = name();
   if (!m_impl->args.isEmpty()) memAnchor+=m_impl->args;
 
@@ -3238,7 +3181,6 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
                             bool hasDocs,MemberDef *member)
 {
   //printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
-  makeResident();
   m_impl->group=gd;
   m_impl->grouppri=pri;
   m_impl->groupFileName=fileName;
@@ -3250,7 +3192,6 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
 
 void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum) 
 { 
-  makeResident();
   m_impl->enumScope=md; 
   m_impl->livesInsideEnum=livesInsideEnum;
   if (md->getGroupDef())
@@ -3266,7 +3207,6 @@ void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
 
 void MemberDef::setMemberClass(ClassDef *cd)     
 { 
-  makeResident();
   m_impl->classDef=cd; 
   m_isLinkableCached = 0; 
   m_isConstructorCached = 0; 
@@ -3275,7 +3215,6 @@ void MemberDef::setMemberClass(ClassDef *cd)
 
 void MemberDef::setNamespace(NamespaceDef *nd) 
 { 
-  makeResident();
   m_impl->nspace=nd; 
   setOuterScope(nd); 
 }
@@ -3283,7 +3222,6 @@ void MemberDef::setNamespace(NamespaceDef *nd)
 MemberDef *MemberDef::createTemplateInstanceMember(
         ArgumentList *formalArgs,ArgumentList *actualArgs)
 {
-  KEEP_RESIDENT_DURING_CALL;
   //printf("  Member %s %s %s\n",typeString(),name().data(),argsString());
   ArgumentList *actualArgList = 0;
   if (m_impl->defArgList)
@@ -3328,7 +3266,6 @@ MemberDef *MemberDef::createTemplateInstanceMember(
 
 bool MemberDef::hasOneLineInitializer() const
 {
-  makeResident();
   //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
   //    name().data(),m_impl->initializer.data(),m_impl->initLines,
   //    m_impl->maxInitLines,m_impl->userInitLines);
@@ -3338,7 +3275,6 @@ bool MemberDef::hasOneLineInitializer() const
 
 bool MemberDef::hasMultiLineInitializer() const
 {
-  makeResident();
   //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
   //    initLines,userInitLines,maxInitLines);
   return m_impl->initLines>0 && 
@@ -3349,7 +3285,6 @@ bool MemberDef::hasMultiLineInitializer() const
 
 void MemberDef::setInitializer(const char *initializer)    
 { 
-  makeResident();
   m_impl->initializer=initializer; 
   int l=m_impl->initializer.length();
   int p=l-1;
@@ -3361,7 +3296,6 @@ void MemberDef::setInitializer(const char *initializer)
 
 void MemberDef::addListReference(Definition *)
 {
-  KEEP_RESIDENT_DURING_CALL;
   static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
   //static bool hideScopeNames     = Config_getBool("HIDE_SCOPE_NAMES");
   //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
@@ -3410,10 +3344,10 @@ void MemberDef::addListReference(Definition *)
       memArgs = argsString();
     }
   }
-  LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
-  if (xrefItems!=0)
+  QList<ListItemInfo> *xrefItems = xrefListItems();
+  if (xrefItems)
   {
-    addRefItem(xrefItems.pointer(),
+    addRefItem(xrefItems,
         qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
         memLabel,
         getOutputFileBase()+"#"+anchor(),memName,memArgs);
@@ -3422,7 +3356,6 @@ void MemberDef::addListReference(Definition *)
 
 MemberList *MemberDef::getSectionList(Definition *d) const 
 { 
-  makeResident();
   char key[20];
   sprintf(key,"%p",d);
   return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0;
@@ -3430,7 +3363,6 @@ MemberList *MemberDef::getSectionList(Definition *d) const
 
 void MemberDef::setSectionList(Definition *d, MemberList *sl)   
 { 
-  makeResident();
   //printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
   char key[20];
   sprintf(key,"%p",d);
@@ -3443,16 +3375,14 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl)
 
 Specifier MemberDef::virtualness(int count) const
 {
-  KEEP_RESIDENT_DURING_CALL;
   if (count>25) 
   {
      warn(getDefFileName(),getDefLine(),
-       "warning: Internal inconsistency: recursion detected in overload relation for member %s!"
+       "Internal inconsistency: recursion detected in overload relation for member %s!"
        ,qPrint(name())
       );
      return Normal;
   }
-  makeResident();
   Specifier v = m_impl->virt;
   MemberDef *rmd = reimplements();
   while (rmd && v==Normal)
@@ -3511,6 +3441,11 @@ void MemberDef::_writeTagData(const DefType compoundType)
     Doxygen::tagFile << "      <name>" << convertToXML(name()) << "</name>" << endl;
     Doxygen::tagFile << "      <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
     Doxygen::tagFile << "      <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
+    QCString idStr = id();
+    if (!idStr.isEmpty())
+    {
+      Doxygen::tagFile << "      <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+    }
     Doxygen::tagFile << "      <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
     writeDocAnchorsToTagFile();
     Doxygen::tagFile << "    </member>" << endl;
@@ -3531,6 +3466,11 @@ void MemberDef::_writeTagData(const DefType compoundType)
           Doxygen::tagFile << "      <name>" << convertToXML(fmd->name()) << "</name>" << endl; 
           Doxygen::tagFile << "      <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;              
           Doxygen::tagFile << "      <anchor>" << convertToXML(fmd->anchor()) << "</anchor>" << endl; 
+          QCString idStr = fmd->id();
+          if (!idStr.isEmpty())
+          {
+            Doxygen::tagFile << "      <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+          }
           Doxygen::tagFile << "      <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl; 
           Doxygen::tagFile << "    </member>" << endl;
           fmd->m_impl->tagDataWritten |= typeMask;
@@ -3544,7 +3484,6 @@ void MemberDef::_writeTagData(const DefType compoundType)
 
 void MemberDef::_computeIsConstructor()
 {
-  KEEP_RESIDENT_DURING_CALL;
   m_isConstructorCached=1; // FALSE
   if (m_impl->classDef) 
   {
@@ -3600,7 +3539,6 @@ bool MemberDef::isConstructor() const
 
 void MemberDef::_computeIsDestructor()
 {
-  KEEP_RESIDENT_DURING_CALL;
   bool isDestructor;
   if (m_impl->isDMember) // for D
   {
@@ -3643,8 +3581,6 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
      ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, 
      const DefType compoundType)
 {
-  KEEP_RESIDENT_DURING_CALL;
-
   int enumMemCount=0;
 
   MemberList *fmdl=m_impl->enumFields;
@@ -3762,14 +3698,12 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
 
 void MemberDef::setArgumentList(ArgumentList *al) 
 { 
-  makeResident();
   if (m_impl->defArgList) delete m_impl->defArgList;
   m_impl->defArgList = al;
 }
 
 void MemberDef::setDeclArgumentList(ArgumentList *al)
 {
-  makeResident();
   if (m_impl->declArgList) delete m_impl->declArgList;
   m_impl->declArgList = al;
 }
@@ -3777,7 +3711,6 @@ void MemberDef::setDeclArgumentList(ArgumentList *al)
 void MemberDef::setTypeConstraints(ArgumentList *al)
 {
   if (al==0) return;
-  makeResident();
   if (m_impl->typeConstraints) delete m_impl->typeConstraints;
   m_impl->typeConstraints = new ArgumentList;
   m_impl->typeConstraints->setAutoDelete(TRUE);
@@ -3791,33 +3724,28 @@ void MemberDef::setTypeConstraints(ArgumentList *al)
 
 void MemberDef::setType(const char *t)
 {
-  makeResident();
   m_impl->type = t;
 }
 
 void MemberDef::setAccessorType(ClassDef *cd,const char *t)
 {
-  makeResident();
   m_impl->accessorClass = cd;
   m_impl->accessorType = t;
 }
 
 void MemberDef::findSectionsInDocumentation()
 {
-  makeResident();
   docFindSections(documentation(),this,0,docFile());  
 }
 
 void MemberDef::enableCallGraph(bool e) 
 { 
-  makeResident();
   m_impl->hasCallGraph=e; 
   if (e) Doxygen::parseSourcesNeeded = TRUE;
 }
 
 void MemberDef::enableCallerGraph(bool e) 
 { 
-  makeResident();
   m_impl->hasCallerGraph=e; 
   if (e) Doxygen::parseSourcesNeeded = TRUE;
 }
@@ -3825,7 +3753,6 @@ void MemberDef::enableCallerGraph(bool e)
 #if 0
 bool MemberDef::protectionVisible() const
 {
-  makeResident();
   return m_impl->prot==Public || 
          (m_impl->prot==Private   && Config_getBool("EXTRACT_PRIVATE"))   ||
          (m_impl->prot==Protected && Config_getBool("EXTRACT_PROTECTED")) ||
@@ -3837,7 +3764,6 @@ bool MemberDef::protectionVisible() const
 void MemberDef::setInbodyDocumentation(const char *docs,
                   const char *docFile,int docLine)
 {
-  makeResident();
   m_impl->inbodyDocs = docs;
   m_impl->inbodyDocs = m_impl->inbodyDocs.stripWhiteSpace();
   m_impl->inbodyLine = docLine;
@@ -3847,21 +3773,18 @@ void MemberDef::setInbodyDocumentation(const char *docs,
 
 bool MemberDef::isObjCMethod() const
 {
-  makeResident();
   if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isFunction()) return TRUE;
   return FALSE; 
 }
 
 bool MemberDef::isObjCProperty() const
 {
-  makeResident();
   if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isProperty()) return TRUE;
   return FALSE; 
 }
 
 QCString MemberDef::qualifiedName() const
 {
-  makeResident();
   if (isObjCMethod())
   {
     QCString qm;
@@ -3882,7 +3805,6 @@ void MemberDef::setTagInfo(TagInfo *ti)
 {
   if (ti)
   {
-    makeResident();
     //printf("%s: Setting tag name=%s anchor=%s\n",name().data(),ti->tagName.data(),ti->anchor.data());
     m_impl->anc=ti->anchor;
     setReference(ti->tagName);
@@ -3892,7 +3814,6 @@ void MemberDef::setTagInfo(TagInfo *ti)
 
 QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
 {
-  makeResident();
   QCString qm;
   if (showStatic)
   {
@@ -3910,682 +3831,578 @@ QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
 
 const char *MemberDef::declaration() const
 { 
-  makeResident();
   return m_impl->decl; 
 }
 
 const char *MemberDef::definition() const
 { 
-  makeResident();
   return m_impl->def;
 }
 
 const char *MemberDef::extraTypeChars() const
 {
-  makeResident();
   return m_impl->extraTypeChars;
 }
 
 const char *MemberDef::typeString() const
 { 
-  makeResident();
   return m_impl->type; 
 }
 
 const char *MemberDef::argsString() const
 { 
-  makeResident();
   return m_impl->args; 
 }
 
 const char *MemberDef::excpString() const
 { 
-  makeResident();
   return m_impl->exception; 
 }
 
 const char *MemberDef::bitfieldString() const
 { 
-  makeResident();
   return m_impl->bitfields; 
 }
 
 const QCString &MemberDef::initializer() const
 { 
-  makeResident();
   return m_impl->initializer; 
 }
 
 int MemberDef::initializerLines() const
 { 
-  makeResident();
   return m_impl->initLines; 
 }
 
 uint64 MemberDef::getMemberSpecifiers() const
 { 
-  makeResident();
   return m_impl->memSpec; 
 }
 
 ClassDef *MemberDef::getClassDef() const
 { 
-  makeResident();
   return m_impl->classDef; 
 }
 
 FileDef  *MemberDef::getFileDef() const
 { 
-  makeResident();
   return m_impl->fileDef; 
 }
 
 NamespaceDef* MemberDef::getNamespaceDef() const
 { 
-  makeResident();
   return m_impl->nspace; 
 }
 
 const char *MemberDef::getReadAccessor() const
 { 
-  makeResident();
   return m_impl->read; 
 }
 
 const char *MemberDef::getWriteAccessor() const
 { 
-  makeResident();
   return m_impl->write; 
 }
 
 GroupDef *MemberDef::getGroupDef() const
 { 
-  makeResident();
   return m_impl->group; 
 }
 
 Grouping::GroupPri_t MemberDef::getGroupPri() const
 { 
-  makeResident();
   return m_impl->grouppri; 
 }
 
 const char *MemberDef::getGroupFileName() const
 { 
-  makeResident();
   return m_impl->groupFileName; 
 }
 
 int MemberDef::getGroupStartLine() const
 { 
-  makeResident();
   return m_impl->groupStartLine; 
 }
 
 bool MemberDef::getGroupHasDocs() const
 { 
-  makeResident();
   return m_impl->groupHasDocs; 
 }
 
 Protection MemberDef::protection() const
 { 
-  makeResident();
   return m_impl->prot; 
 }
 
 MemberType MemberDef::memberType() const
 { 
-  makeResident();
   return m_impl->mtype; 
 }
 
 bool MemberDef::isSignal() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Signal;      
 }
 
 bool MemberDef::isSlot() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Slot;        
 }
 
 bool MemberDef::isVariable() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Variable;    
 }
 
 bool MemberDef::isEnumerate() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Enumeration; 
 }
 
 bool MemberDef::isEnumValue() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_EnumValue;   
 }
 
 bool MemberDef::isTypedef() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Typedef;     
 }
 
 bool MemberDef::isFunction() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Function;    
 }
 
 bool MemberDef::isFunctionPtr() const
 {
-  makeResident();
   return m_impl->mtype==MemberType_Variable && QCString(argsString()).find(")(")!=-1;
 }
 
 bool MemberDef::isDefine() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Define;      
 }
 
 bool MemberDef::isFriend() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Friend;      
 }
 
 bool MemberDef::isDCOP() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_DCOP;        
 }
 
 bool MemberDef::isProperty() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Property;    
 }
 
 bool MemberDef::isEvent() const
 { 
-  makeResident();
   return m_impl->mtype==MemberType_Event;       
 }
 
 bool MemberDef::isRelated() const
 { 
-  makeResident();
   return m_impl->related == Related;
 }
 
 bool MemberDef::isForeign() const
 { 
-  makeResident();
   return m_impl->related == Foreign; 
 }
 
 bool MemberDef::isStatic() const
 { 
-  makeResident();
   return m_impl->stat; 
 }
 
 bool MemberDef::isInline() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Inline)!=0; 
 }
 
 bool MemberDef::isExplicit() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Explicit)!=0; 
 }
 
 bool MemberDef::isMutable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Mutable)!=0; 
 }
 
 bool MemberDef::isGettable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Gettable)!=0; 
 }
 
 bool MemberDef::isSettable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Settable)!=0; 
 }
 
 bool MemberDef::isAddable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Addable)!=0; 
 }
 
 bool MemberDef::isRemovable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Removable)!=0; 
 }
 
 bool MemberDef::isRaisable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Raisable)!=0; 
 }
 
 bool MemberDef::isReadable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Readable)!=0; 
 }
 
 bool MemberDef::isWritable() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Writable)!=0; 
 }
 
 bool MemberDef::isFinal() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Final)!=0; 
 }
 
 bool MemberDef::isNew() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::New)!=0; 
 }
 
 bool MemberDef::isSealed() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Sealed)!=0; 
 }
 
 bool MemberDef::isOverride() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Override)!=0; 
 }
 
 bool MemberDef::isInitonly() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Initonly)!=0; 
 }
 
 bool MemberDef::isAbstract() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Abstract)!=0; 
 }
 
 bool MemberDef::isOptional() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Optional)!=0; 
 }
 
 bool MemberDef::isRequired() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Required)!=0; 
 }
 
 bool MemberDef::isNonAtomic() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::NonAtomic)!=0; 
 }
 
 bool MemberDef::isCopy() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Copy)!=0; 
 }
 
 bool MemberDef::isAssign() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Assign)!=0; 
 }
 
 bool MemberDef::isRetain() const
 { 
-  makeResident();
   return (m_impl->memSpec&Entry::Retain)!=0; 
 }
 
 bool MemberDef::isWeak() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Weak)!=0; 
 }
 
 bool MemberDef::isStrong() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Strong)!=0; 
 }
 
 bool MemberDef::isUnretained() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Unretained)!=0; 
 }
 
 bool MemberDef::isAlias() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Alias)!=0;
 }
 
 bool MemberDef::isDefault() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Default)!=0;
 }
 
 bool MemberDef::isDelete() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Delete)!=0;
 }
 
 bool MemberDef::isNoExcept() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::NoExcept)!=0;
 }
 
 bool MemberDef::isAttribute() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Attribute)!=0;
 }
 
 bool MemberDef::isUNOProperty() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Property)!=0;
 }
 
 bool MemberDef::isReadonly() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Readonly)!=0;
 }
 
 bool MemberDef::isBound() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Bound)!=0;
 }
 
 bool MemberDef::isConstrained() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Constrained)!=0;
 }
 
 bool MemberDef::isTransient() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Transient)!=0;
 }
 
 bool MemberDef::isMaybeVoid() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::MaybeVoid)!=0;
 }
 
 bool MemberDef::isMaybeDefault() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::MaybeDefault)!=0;
 }
 
 bool MemberDef::isMaybeAmbiguous() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::MaybeAmbiguous)!=0;
 }
 
 bool MemberDef::isPublished() const
 {
-  makeResident();
   return (m_impl->memSpec&Entry::Published)!=0;
 }
 
 
 bool MemberDef::isImplementation() const
 { 
-  makeResident();
   return m_impl->implOnly; 
 }
 
 bool MemberDef::isExternal() const
 { 
-  makeResident();
   return m_impl->explExt; 
 }
 
 bool MemberDef::isTemplateSpecialization() const
 { 
-  makeResident();
   return m_impl->tspec; 
 }
 
 bool MemberDef::hasDocumentedParams() const
 { 
-  makeResident();
   return m_impl->hasDocumentedParams; 
 }
 
 bool MemberDef::hasDocumentedReturnType() const
 { 
-  makeResident();
   return m_impl->hasDocumentedReturnType; 
 }
 
+bool MemberDef::showInCallGraph() const
+{
+  return isFunction() || 
+         isSlot() || 
+         isConstructor() ||
+         isDestructor() || 
+         isObjCMethod();
+}
+
 ClassDef *MemberDef::relatedAlso() const
 { 
-  makeResident();
   return m_impl->relatedAlso; 
 }
 
 bool MemberDef::hasDocumentedEnumValues() const
 { 
-  makeResident();
   return m_impl->docEnumValues; 
 }
 
 MemberDef *MemberDef::getAnonymousEnumType() const
 { 
-  makeResident();
   return m_impl->annEnumType; 
 }
 
 bool MemberDef::isDocsForDefinition() const
 { 
-  makeResident();
   return m_impl->docsForDefinition; 
 }
 
 MemberDef *MemberDef::getEnumScope() const
 { 
-  makeResident();
   return m_impl->enumScope; 
 }
 
-LockingPtr<MemberList> MemberDef::enumFieldList() const
+MemberList *MemberDef::enumFieldList() const
 { 
-  makeResident();
-  return LockingPtr<MemberList>(this,m_impl->enumFields); 
+  return m_impl->enumFields; 
 }
 
-LockingPtr<ExampleSDict> MemberDef::getExamples() const
+ExampleSDict *MemberDef::getExamples() const
 { 
-  makeResident();
-  return LockingPtr<ExampleSDict>(this,m_impl->exampleSDict); 
+  return m_impl->exampleSDict; 
 }
 
 bool MemberDef::isPrototype() const
 { 
-  makeResident();
   return m_impl->proto; 
 }
 
-LockingPtr<ArgumentList> MemberDef::argumentList() const
+ArgumentList *MemberDef::argumentList() const
 { 
-  makeResident();
-  return LockingPtr<ArgumentList>(this,m_impl->defArgList); 
+  return m_impl->defArgList; 
 }
 
-LockingPtr<ArgumentList> MemberDef::declArgumentList() const
+ArgumentList *MemberDef::declArgumentList() const
 { 
-  makeResident();
-  return LockingPtr<ArgumentList>(this,m_impl->declArgList); 
+  return m_impl->declArgList; 
 }
 
-LockingPtr<ArgumentList> MemberDef::templateArguments() const
+ArgumentList *MemberDef::templateArguments() const
 { 
-  makeResident();
-  return LockingPtr<ArgumentList>(this,m_impl->tArgList); 
+  return m_impl->tArgList; 
 }
 
-LockingPtr< QList<ArgumentList> > MemberDef::definitionTemplateParameterLists() const
+QList<ArgumentList> *MemberDef::definitionTemplateParameterLists() const
 { 
-  makeResident();
-  return LockingPtr< QList<ArgumentList> >(this,m_impl->defTmpArgLists); 
+  return m_impl->defTmpArgLists; 
 }
 
 int MemberDef::getMemberGroupId() const
 { 
-  makeResident();
   return m_impl->grpId; 
 }
 
 MemberGroup *MemberDef::getMemberGroup() const
 { 
-  makeResident();
   return m_impl->memberGroup; 
 }
 
 bool MemberDef::fromAnonymousScope() const
 { 
-  makeResident();
   return m_impl->annScope; 
 }
 
 bool MemberDef::anonymousDeclShown() const
 { 
-  makeResident();
   return m_impl->annUsed; 
 }
 
 void MemberDef::setAnonymousUsed() 
 {
-  makeResident();
   m_impl->annUsed = TRUE;
 }
 
 bool MemberDef::hasCallGraph() const
 { 
-  makeResident();
   return m_impl->hasCallGraph; 
 }
 
 bool MemberDef::hasCallerGraph() const
 { 
-  makeResident();
   return m_impl->hasCallerGraph; 
 }
 
 MemberDef *MemberDef::templateMaster() const
 { 
-  makeResident();
   return m_impl->templateMaster; 
 }
 
 bool MemberDef::isTypedefValCached() const
 { 
-  makeResident();
   return m_impl->isTypedefValCached; 
 }
 
 ClassDef *MemberDef::getCachedTypedefVal() const
 { 
-  makeResident();
   return m_impl->cachedTypedefValue; 
 }
 
 QCString MemberDef::getCachedTypedefTemplSpec() const
 { 
-  makeResident();
   return m_impl->cachedTypedefTemplSpec; 
 }
 
 QCString MemberDef::getCachedResolvedTypedef() const
 { 
-  makeResident();
   //printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
   return m_impl->cachedResolvedType; 
 }
 
 MemberDef *MemberDef::memberDefinition() const
 { 
-  makeResident();
   return m_impl->memDef; 
 }
 
 MemberDef *MemberDef::memberDeclaration() const
 { 
-  makeResident();
   return m_impl->memDec; 
 }
 
 MemberDef *MemberDef::inheritsDocsFrom() const
 { 
-  makeResident();
   return m_impl->docProvider; 
 }
 
 MemberDef *MemberDef::getGroupAlias() const
 { 
-  makeResident();
   return m_impl->groupAlias; 
 }
 
 void MemberDef::setMemberType(MemberType t)
 { 
-  makeResident();
   m_impl->mtype=t; 
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setDefinition(const char *d)
 { 
-  makeResident();
   m_impl->def=d; 
 }
 
 void MemberDef::setFileDef(FileDef *fd)
 { 
-  makeResident();
   m_impl->fileDef=fd; 
   m_isLinkableCached = 0;
   m_isConstructorCached = 0;
@@ -4594,26 +4411,22 @@ void MemberDef::setFileDef(FileDef *fd)
 
 void MemberDef::setProtection(Protection p)
 { 
-  makeResident();
   m_impl->prot=p; 
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setMemberSpecifiers(uint64 s)
 { 
-  makeResident();
   m_impl->memSpec=s; 
 }
 
 void MemberDef::mergeMemberSpecifiers(uint64 s)
 { 
-  makeResident();
   m_impl->memSpec|=s; 
 }
 
 void MemberDef::setBitfields(const char *s)
 { 
-  makeResident();
   m_impl->bitfields = s; 
 }
 
@@ -4621,82 +4434,69 @@ void MemberDef::setMaxInitLines(int lines)
 { 
   if (lines!=-1)
   {
-    makeResident();
     m_impl->userInitLines=lines; 
   }
 }
 
 void MemberDef::setExplicitExternal(bool b)
 { 
-  makeResident();
   m_impl->explExt=b; 
 }
 
 void MemberDef::setReadAccessor(const char *r)
 { 
-  makeResident();
   m_impl->read=r; 
 }
 
 void MemberDef::setWriteAccessor(const char *w)
 { 
-  makeResident();
   m_impl->write=w; 
 }
 
 void MemberDef::setTemplateSpecialization(bool b)
 { 
-  makeResident();
   m_impl->tspec=b; 
 }
 
 void MemberDef::makeRelated()
 { 
-  makeResident();
   m_impl->related = Related; 
   m_isLinkableCached = 0;
 }
 
 void MemberDef::makeForeign()
 { 
-  makeResident();
   m_impl->related = Foreign; 
   m_isLinkableCached = 0;
 }
 
 void MemberDef::setHasDocumentedParams(bool b)
 { 
-  makeResident();
   m_impl->hasDocumentedParams = b; 
 }
 
 void MemberDef::setHasDocumentedReturnType(bool b)
 { 
-  makeResident();
   m_impl->hasDocumentedReturnType = b; 
 }
 
 void MemberDef::setInheritsDocsFrom(MemberDef *md)
 { 
-  makeResident();
   m_impl->docProvider = md; 
 }
 
 void MemberDef::setArgsString(const char *as)
 { 
-  makeResident();
   m_impl->args = as; 
 }
 
 void MemberDef::setRelatedAlso(ClassDef *cd)
 { 
-  makeResident();
   m_impl->relatedAlso=cd; 
 }
 
 void MemberDef::setEnumClassScope(ClassDef *cd)
 { 
-  makeResident();
   m_impl->classDef = cd; 
   m_isLinkableCached = 0; 
   m_isConstructorCached = 0; 
@@ -4704,123 +4504,103 @@ void MemberDef::setEnumClassScope(ClassDef *cd)
 
 void MemberDef::setDocumentedEnumValues(bool value)
 { 
-  makeResident();
   m_impl->docEnumValues=value; 
 }
 
 void MemberDef::setAnonymousEnumType(MemberDef *md)
 { 
-  makeResident();
   m_impl->annEnumType = md; 
 }
 
 void MemberDef::setPrototype(bool p)
 { 
-  makeResident();
   m_impl->proto=p; 
 }
 
 void MemberDef::setMemberGroupId(int id)
 { 
-  makeResident();
   m_impl->grpId=id; 
 }
 
 void MemberDef::makeImplementationDetail()
 { 
-  makeResident();
   m_impl->implOnly=TRUE; 
 }
 
 void MemberDef::setFromAnonymousScope(bool b)
 { 
-  makeResident();
   m_impl->annScope=b; 
 }
 
 void MemberDef::setFromAnonymousMember(MemberDef *m)
 { 
-  makeResident();
   m_impl->annMemb=m; 
 }
 
 void MemberDef::setTemplateMaster(MemberDef *mt)
 { 
-  makeResident();
   m_impl->templateMaster=mt; 
   m_isLinkableCached = 0; 
 }
 
 void MemberDef::setDocsForDefinition(bool b)
 { 
-  makeResident();
   m_impl->docsForDefinition = b; 
 }
 
 void MemberDef::setGroupAlias(MemberDef *md)
 { 
-  makeResident();
   m_impl->groupAlias = md; 
 }
 
 void MemberDef::invalidateTypedefValCache()
 { 
-  makeResident();
   m_impl->isTypedefValCached=FALSE; 
 }
 
 void MemberDef::setMemberDefinition(MemberDef *md)
 { 
-  makeResident();
   m_impl->memDef=md; 
 }
 
 void MemberDef::setMemberDeclaration(MemberDef *md)
 { 
-  makeResident();
   m_impl->memDec=md; 
 }
 
 ClassDef *MemberDef::category() const
 {
-  makeResident();
   return m_impl->category;
 }
 
 void MemberDef::setCategory(ClassDef *def)
 {
-  makeResident();
   m_impl->category = def;
 }
 
 MemberDef *MemberDef::categoryRelation() const
 {
-  makeResident();
   return m_impl->categoryRelation;
 }
 
 void MemberDef::setCategoryRelation(MemberDef *md)
 {
-  makeResident();
   m_impl->categoryRelation = md;
 }
 
 void MemberDef::setEnumBaseType(const QCString &type)
 {
-  makeResident();
   m_impl->enumBaseType = type;
 }
 
 QCString MemberDef::enumBaseType() const
 {
-  makeResident();
   return m_impl->enumBaseType;
 }
 
 
 void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
 {
-  makeResident();
   m_impl->isTypedefValCached=TRUE; 
   m_impl->cachedTypedefValue=val; 
   m_impl->cachedTypedefTemplSpec=templSpec; 
@@ -4830,10 +4610,9 @@ void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const
 
 void MemberDef::copyArgumentNames(MemberDef *bmd)
 {
-  makeResident();
   {
-    LockingPtr<ArgumentList> arguments = bmd->argumentList();
-    if (m_impl->defArgList && arguments!=0)
+    ArgumentList *arguments = bmd->argumentList();
+    if (m_impl->defArgList && arguments)
     {
       ArgumentListIterator aliDst(*m_impl->defArgList);
       ArgumentListIterator aliSrc(*arguments);
@@ -4845,8 +4624,8 @@ void MemberDef::copyArgumentNames(MemberDef *bmd)
     }
   }
   {
-    LockingPtr<ArgumentList> arguments = bmd->declArgumentList();
-    if (m_impl->declArgList && arguments!=0)
+    ArgumentList *arguments = bmd->declArgumentList();
+    if (m_impl->declArgList && arguments)
     {
       ArgumentListIterator aliDst(*m_impl->declArgList);
       ArgumentListIterator aliSrc(*arguments);
@@ -4874,297 +4653,10 @@ static void invalidateCachedTypesInArgumentList(ArgumentList *al)
 
 void MemberDef::invalidateCachedArgumentTypes()
 {
-  makeResident();
   invalidateCachedTypesInArgumentList(m_impl->defArgList);
   invalidateCachedTypesInArgumentList(m_impl->declArgList);
 }
 
-
-//-----------------------------------------------------------------
-
-void MemberDef::flushToDisk() const
-{
-  if (isLocked()) return;
-  MemberDef *that = (MemberDef*)this;
-  that->m_storagePos = Doxygen::symbolStorage->alloc();
-  //printf("%p: MemberDef::flushToDisk() m_impl=%p\n",this,m_impl);
-  // write the definition base class member variables to disk
-  Definition::flushToDisk();
-
-  //printf("%p:   flushing specific part\n",this);
-
-  // write the memberdef member variables to disk
-  marshalUInt(Doxygen::symbolStorage,START_MARKER);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->classDef);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->fileDef);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->nspace);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->enumScope);
-  marshalBool         (Doxygen::symbolStorage,m_impl->livesInsideEnum); 
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->annEnumType);
-  marshalMemberList   (Doxygen::symbolStorage,m_impl->enumFields);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->redefines);
-  marshalMemberList   (Doxygen::symbolStorage,m_impl->redefinedBy);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->memDef);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->memDec);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->relatedAlso);
-  marshalExampleSDict (Doxygen::symbolStorage,m_impl->exampleSDict);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->type);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->enumBaseType);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->accessorType);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->accessorClass);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->args);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->def);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->anc);
-  marshalInt          (Doxygen::symbolStorage,(int)m_impl->virt);
-  marshalInt          (Doxygen::symbolStorage,(int)m_impl->prot);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->decl);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->bitfields);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->read);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->write);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->exception);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->initializer);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->extraTypeChars);
-  marshalInt          (Doxygen::symbolStorage,m_impl->initLines);
-  marshalUInt64       (Doxygen::symbolStorage,m_impl->memSpec);
-  marshalInt          (Doxygen::symbolStorage,(int)m_impl->mtype);
-  marshalInt          (Doxygen::symbolStorage,m_impl->maxInitLines);
-  marshalInt          (Doxygen::symbolStorage,m_impl->userInitLines);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->annMemb);
-  marshalArgumentList (Doxygen::symbolStorage,m_impl->defArgList);
-  marshalArgumentList (Doxygen::symbolStorage,m_impl->declArgList);
-  marshalArgumentList (Doxygen::symbolStorage,m_impl->tArgList);
-  marshalArgumentList (Doxygen::symbolStorage,m_impl->typeConstraints);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->templateMaster);
-  marshalArgumentLists(Doxygen::symbolStorage,m_impl->defTmpArgLists);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->cachedAnonymousType);
-  marshalMemberLists  (Doxygen::symbolStorage,m_impl->classSectionSDict);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->groupAlias);
-  marshalInt          (Doxygen::symbolStorage,m_impl->grpId);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->memberGroup);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->group);
-  marshalInt          (Doxygen::symbolStorage,(int)m_impl->grouppri);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->groupFileName);
-  marshalInt          (Doxygen::symbolStorage,m_impl->groupStartLine);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->groupMember);
-  marshalBool         (Doxygen::symbolStorage,m_impl->isTypedefValCached);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->cachedTypedefValue);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->cachedTypedefTemplSpec);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->cachedResolvedType);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->docProvider);
-  marshalQCString     (Doxygen::symbolStorage,m_impl->explicitOutputFileBase);
-  marshalBool         (Doxygen::symbolStorage,m_impl->implOnly); 
-  marshalBool         (Doxygen::symbolStorage,m_impl->hasDocumentedParams);
-  marshalBool         (Doxygen::symbolStorage,m_impl->hasDocumentedReturnType);
-  marshalBool         (Doxygen::symbolStorage,m_impl->isDMember);
-  marshalInt          (Doxygen::symbolStorage,(int)m_impl->related);
-  marshalBool         (Doxygen::symbolStorage,m_impl->stat);
-  marshalBool         (Doxygen::symbolStorage,m_impl->proto);
-  marshalBool         (Doxygen::symbolStorage,m_impl->docEnumValues);
-  marshalBool         (Doxygen::symbolStorage,m_impl->annScope);
-  marshalBool         (Doxygen::symbolStorage,m_impl->annUsed);
-  marshalBool         (Doxygen::symbolStorage,m_impl->hasCallGraph);
-  marshalBool         (Doxygen::symbolStorage,m_impl->hasCallerGraph);
-  marshalBool         (Doxygen::symbolStorage,m_impl->explExt);
-  marshalBool         (Doxygen::symbolStorage,m_impl->tspec);
-  marshalBool         (Doxygen::symbolStorage,m_impl->groupHasDocs);
-  marshalBool         (Doxygen::symbolStorage,m_impl->docsForDefinition);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->category);
-  marshalObjPointer   (Doxygen::symbolStorage,m_impl->categoryRelation);
-  marshalUInt         (Doxygen::symbolStorage,m_impl->tagDataWritten);
-  marshalUInt(Doxygen::symbolStorage,END_MARKER);
-
-  // function doesn't modify the object conceptually but compiler doesn't know this.
-  delete that->m_impl;
-  that->m_impl=0;
-  that->m_flushPending=FALSE;
-}
-
-void MemberDef::loadFromDisk() const
-{
-  MemberDef *that = (MemberDef *)this;
-  if (isLocked()) 
-  {
-    //printf("%p: loadFromDisk() locked: so still in memory\n",this);
-    assert(m_impl!=0);
-    return;
-  }
-  assert(m_impl==0);
-
-  Doxygen::symbolStorage->seek(m_storagePos);
-  Definition::loadFromDisk();
-
-  //printf("%p:   loading specific part\n",this);
-
-  that->m_impl = new MemberDefImpl;
-  //printf("%p: MemberDef::loadFromDisk(): m_impl=%p\n",this,m_impl);
-
-  uint marker = unmarshalUInt(Doxygen::symbolStorage);
-  assert(marker==START_MARKER);
-  m_impl->classDef                = (ClassDef*)unmarshalObjPointer     (Doxygen::symbolStorage);
-  m_impl->fileDef                 = (FileDef*)unmarshalObjPointer      (Doxygen::symbolStorage);
-  m_impl->nspace                  = (NamespaceDef*)unmarshalObjPointer (Doxygen::symbolStorage);
-  m_impl->enumScope               = (MemberDef*)unmarshalObjPointer    (Doxygen::symbolStorage);
-  m_impl->livesInsideEnum         = unmarshalBool                      (Doxygen::symbolStorage);
-  m_impl->annEnumType             = (MemberDef*)unmarshalObjPointer    (Doxygen::symbolStorage);
-  m_impl->enumFields              = unmarshalMemberList                (Doxygen::symbolStorage);
-  m_impl->redefines               = (MemberDef*)unmarshalObjPointer    (Doxygen::symbolStorage);
-  m_impl->redefinedBy             = unmarshalMemberList                (Doxygen::symbolStorage);
-  m_impl->memDef                  = (MemberDef*)unmarshalObjPointer    (Doxygen::symbolStorage);
-  m_impl->memDec                  = (MemberDef*)unmarshalObjPointer    (Doxygen::symbolStorage);
-  m_impl->relatedAlso             = (ClassDef*)unmarshalObjPointer     (Doxygen::symbolStorage);
-  m_impl->exampleSDict            = unmarshalExampleSDict (Doxygen::symbolStorage);
-  m_impl->type                    = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->enumBaseType            = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->accessorType            = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->accessorClass           = (ClassDef*)unmarshalObjPointer     (Doxygen::symbolStorage);
-  m_impl->args                    = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->def                     = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->anc                     = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->virt                    = (Specifier)unmarshalInt (Doxygen::symbolStorage);
-  m_impl->prot                    = (Protection)unmarshalInt(Doxygen::symbolStorage);
-  m_impl->decl                    = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->bitfields               = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->read                    = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->write                   = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->exception               = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->initializer             = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->extraTypeChars          = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->initLines               = unmarshalInt          (Doxygen::symbolStorage);
-  m_impl->memSpec                 = unmarshalUInt64       (Doxygen::symbolStorage);
-  m_impl->mtype                   = (MemberType)unmarshalInt          (Doxygen::symbolStorage);
-  m_impl->maxInitLines            = unmarshalInt          (Doxygen::symbolStorage);
-  m_impl->userInitLines           = unmarshalInt          (Doxygen::symbolStorage);
-  m_impl->annMemb                 = (MemberDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->defArgList              = unmarshalArgumentList (Doxygen::symbolStorage);
-  m_impl->declArgList             = unmarshalArgumentList (Doxygen::symbolStorage);
-  m_impl->tArgList                = unmarshalArgumentList (Doxygen::symbolStorage);
-  m_impl->typeConstraints         = unmarshalArgumentList (Doxygen::symbolStorage);
-  m_impl->templateMaster          = (MemberDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->defTmpArgLists          = unmarshalArgumentLists(Doxygen::symbolStorage);
-  m_impl->cachedAnonymousType     = (ClassDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->classSectionSDict       = unmarshalMemberLists  (Doxygen::symbolStorage);
-  m_impl->groupAlias              = (MemberDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->grpId                   = unmarshalInt          (Doxygen::symbolStorage);
-  m_impl->memberGroup             = (MemberGroup*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->group                   = (GroupDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->grouppri                = (Grouping::GroupPri_t)unmarshalInt          (Doxygen::symbolStorage);
-  m_impl->groupFileName           = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->groupStartLine          = unmarshalInt          (Doxygen::symbolStorage);
-  m_impl->groupMember             = (MemberDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->isTypedefValCached      = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->cachedTypedefValue      = (ClassDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->cachedTypedefTemplSpec  = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->cachedResolvedType      = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->docProvider             = (MemberDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->explicitOutputFileBase  = unmarshalQCString     (Doxygen::symbolStorage);
-  m_impl->implOnly                = unmarshalBool         (Doxygen::symbolStorage); 
-  m_impl->hasDocumentedParams     = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->hasDocumentedReturnType = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->isDMember               = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->related                 = (Relationship)unmarshalInt(Doxygen::symbolStorage);
-  m_impl->stat                    = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->proto                   = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->docEnumValues           = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->annScope                = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->annUsed                 = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->hasCallGraph            = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->hasCallerGraph          = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->explExt                 = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->tspec                   = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->groupHasDocs            = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->docsForDefinition       = unmarshalBool         (Doxygen::symbolStorage);
-  m_impl->category                = (ClassDef*)unmarshalObjPointer   (Doxygen::symbolStorage);
-  m_impl->categoryRelation        = (MemberDef*)unmarshalObjPointer  (Doxygen::symbolStorage);
-  m_impl->tagDataWritten          = unmarshalUInt         (Doxygen::symbolStorage);
-  marker = unmarshalUInt(Doxygen::symbolStorage);
-  assert(marker==END_MARKER);
-
-  //printf("%p: MemberDef::loadFromDisk(): sorting\n",this);
-}
-
-void MemberDef::makeResident() const
-{ 
-  if (Doxygen::symbolCache==0) return;
-  if (m_cacheHandle==-1) // not yet in cache
-  { 
-    MemberDef *victim = 0;
-    MemberDef *that = (MemberDef*)this; // fake method constness
-    that->m_cacheHandle = Doxygen::symbolCache->add(that,(void **)&victim);
-    //printf("adding %s to cache, handle=%d\n",m_impl->name.data(),that->m_cacheHandle);
-    if (victim)  // cache was full, victim was the least recently used item and has to go
-    {
-      //printf("%p: makeResident(): cache full %p::saveToDisk(): m_impl=%p\n",this,victim,victim->m_impl);
-      victim->m_cacheHandle=-1; // invalidate cache handle
-      victim->saveToDisk();     // store the item on disk
-    }
-    else // cache not yet full
-    {
-      //printf("Adding %s to cache, handle=%d\n",m_impl->name.data(),m_cacheHandle);
-    }
-    if (m_storagePos!=-1) // already been written to disk
-    {
-      if (isLocked()) // locked in memory
-      {
-        assert(m_impl!=0);
-        that->m_flushPending=FALSE; // no need to flush anymore
-      }
-      else // not locked in memory
-      {
-        assert(m_impl==0);
-        loadFromDisk();
-      }
-    }
-  }
-  else // already cached, make this object the most recently used.
-  {
-    assert(m_impl!=0);
-    //printf("Touching symbol %s\n",m_impl->name.data());
-    Doxygen::symbolCache->use(m_cacheHandle);
-  }
-}
-
-void MemberDef::saveToDisk() const
-{
-  assert(m_impl!=0);
-  MemberDef *that = (MemberDef *)this;
-  //printf("%p: saveToDisk(): m_impl=%p\n",this,m_impl);
-  if (isLocked()) // cannot flush the item as it is locked
-  {
-    that->m_flushPending=TRUE; // flush when unlocked
-  }
-  else // ready to flush the item to disk
-  {
-    //printf("Adding %s to cache, handle=%d by replacing %s\n",
-    //    m_impl->name.data(),m_cacheHandle,victim->m_impl->name.data());
-    if (m_storagePos!=-1) 
-      // if victim was stored on disk already and is not locked
-    {
-      // free the storage space occupied by the old store item
-      Doxygen::symbolStorage->release(m_storagePos); // free up space for others
-    }
-    // write a the new (possibly modified) instance to disk
-    flushToDisk();
-    // end to write sequence (unless nothing was written due to the lock)
-    Doxygen::symbolStorage->end();
-  }
-}
-
-void MemberDef::lock() const
-{
-}
-
-void MemberDef::unlock() const
-{
-  if (m_flushPending && !isLocked())
-  {
-    //printf("%p: flush after unlock\n",this);
-    // write a the new (possibly modified) instance to disk
-    flushToDisk();
-    // end to write sequence (unless nothing was written due to the lock)
-    Doxygen::symbolStorage->end();
-  }
-}
-
 //----------------
 
 QCString MemberDef::displayName(bool) const 
@@ -5238,10 +4730,10 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
     //    mdef, mdef ? mdef->name().data() : "",
     //    mdec, mdec ? mdec->name().data() : "");
 
-    LockingPtr<ArgumentList> mdefAl = mdef->argumentList();
-    LockingPtr<ArgumentList> mdecAl = mdec->argumentList();
-    if (matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl.pointer(),
-          mdec->getOuterScope(),mdec->getFileDef(),mdecAl.pointer(),
+    ArgumentList *mdefAl = mdef->argumentList();
+    ArgumentList *mdecAl = mdec->argumentList();
+    if (matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl,
+          mdec->getOuterScope(),mdec->getFileDef(),mdecAl,
           TRUE
           )
        ) /* match found */
@@ -5253,7 +4745,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
       //    );
 
       // first merge argument documentation
-      transferArgumentDocumentation(mdecAl.pointer(),mdefAl.pointer());
+      transferArgumentDocumentation(mdecAl,mdefAl);
 
       /* copy documentation between function definition and declaration */
       if (!mdec->briefDescription().isEmpty())
@@ -5273,7 +4765,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
         {
           ArgumentList *mdefAlComb = new ArgumentList;
           stringToArgumentList(mdef->argsString(),mdefAlComb);
-          transferArgumentDocumentation(mdefAl.pointer(),mdefAlComb);
+          transferArgumentDocumentation(mdefAl,mdefAlComb);
           mdec->setArgumentList(mdefAlComb);
         }
       }
@@ -5286,7 +4778,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
         {
           ArgumentList *mdecAlComb = new ArgumentList;
           stringToArgumentList(mdec->argsString(),mdecAlComb);
-          transferArgumentDocumentation(mdecAl.pointer(),mdecAlComb);
+          transferArgumentDocumentation(mdecAl,mdecAlComb);
           mdef->setDeclArgumentList(mdecAlComb);
         }
       }
@@ -5353,3 +4845,4 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
   }
 }
 
+
diff --git a/src/memberdef.h b/src/memberdef.h
index 9ed4102..8c88f7c 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -168,6 +168,7 @@ class MemberDef : public Definition
     bool hasOneLineInitializer() const;
     bool hasMultiLineInitializer() const;
     bool protectionVisible() const;
+    bool showInCallGraph() const;
 
     // output info
     bool isLinkableInProject() const;
@@ -181,7 +182,7 @@ class MemberDef : public Definition
     bool isDocumentedFriendClass() const;
 
     MemberDef *reimplements() const;
-    LockingPtr< MemberList > reimplementedBy() const;
+    MemberList *reimplementedBy() const;
     bool isReimplementedBy(ClassDef *cd) const;
 
     //int inbodyLine() const;
@@ -194,19 +195,19 @@ class MemberDef : public Definition
     MemberDef *getAnonymousEnumType() const;
     bool isDocsForDefinition() const;
     MemberDef *getEnumScope() const;
-    LockingPtr< MemberList > enumFieldList() const;
+    MemberList *enumFieldList() const;
     void setEnumBaseType(const QCString &type);
     QCString enumBaseType() const;
 
     bool hasExamples();
-    LockingPtr<ExampleSDict> getExamples() const;
+    ExampleSDict *getExamples() const;
     bool isPrototype() const;
 
     // argument related members
-    LockingPtr<ArgumentList> argumentList() const;
-    LockingPtr<ArgumentList> declArgumentList() const;
-    LockingPtr<ArgumentList> templateArguments() const;
-    LockingPtr< QList<ArgumentList> > definitionTemplateParameterLists() const;
+    ArgumentList *argumentList() const;
+    ArgumentList *declArgumentList() const;
+    ArgumentList *templateArguments() const;
+    QList<ArgumentList> *definitionTemplateParameterLists() const;
 
     // member group related members
     int getMemberGroupId() const;
@@ -405,9 +406,6 @@ class MemberDef : public Definition
                    bool onlyText=FALSE);
 
     MemberDefImpl *m_impl;
-    int m_cacheHandle;
-    off_t m_storagePos;     // location where the item is stored in file (if impl==0)
-    bool m_flushPending;
     uchar m_isLinkableCached;    // 0 = not cached, 1=FALSE, 2=TRUE
     uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
     uchar m_isDestructorCached;  // 0 = not cached, 1=FALSE, 2=TRUE
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index c44bd81..76ffff1 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -31,6 +31,7 @@
 #include "filedef.h"
 #include "membergroup.h"
 #include "config.h"
+#include "docparser.h"
 
 MemberList::MemberList()
 {
@@ -160,7 +161,7 @@ void MemberList::countDecMembers(bool countEnumValues,GroupDef *gd)
         case MemberType_Friend:      m_friendCnt++,m_numDecMembers++;  
                                      break;
         default:
-          err("Error: Unknown member type found for member `%s'\n!",md->name().data());
+          err("Unknown member type found for member `%s'\n!",md->name().data());
       }
     }
   }
@@ -385,24 +386,29 @@ void MemberList::writePlainDeclarations(OutputList &ol,
               ol.endMemberItem();
               if (!md->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
               {
-                ol.startMemberDescription(md->anchor());
-                ol.parseDoc(
+                DocRoot *rootNode = validatingParseDoc(
                     md->briefFile(),md->briefLine(),
                     cd,md,
                     md->briefDescription(),
                     TRUE,FALSE,0,TRUE,FALSE
                     );
-                if (md->isDetailedSectionLinkable())
+                if (rootNode && !rootNode->isEmpty())
                 {
-                  ol.disableAllBut(OutputGenerator::Html);
-                  ol.docify(" ");
-                  ol.startTextLink(md->getOutputFileBase(),
-                                   md->anchor());
-                  ol.parseText(theTranslator->trMore());
-                  ol.endTextLink();
-                  ol.enableAll();
+                  ol.startMemberDescription(md->anchor());
+                  ol.writeDoc(rootNode,cd,md);
+                  if (md->isDetailedSectionLinkable())
+                  {
+                    ol.disableAllBut(OutputGenerator::Html);
+                    ol.docify(" ");
+                    ol.startTextLink(md->getOutputFileBase(),
+                        md->anchor());
+                    ol.parseText(theTranslator->trMore());
+                    ol.endTextLink();
+                    ol.enableAll();
+                  }
+                  ol.endMemberDescription();
                 }
-                ol.endMemberDescription();
+                delete rootNode;
               }
               ol.endMemberDeclaration(md->anchor(),inheritId);
             }
@@ -476,6 +482,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
  *  @param gd non-null if this list is part of group documentation.
  *  @param title Title to use for the member list.
  *  @param subtitle Sub title to use for the member list.
+ *  @param compoundType Container type for this member list.
  *  @param showEnumValues Obsolete, always set to FALSE.
  *  @param showInline if set to TRUE if title is rendered differently
  *  @param inheritedFrom if not 0, the list is shown inside the
@@ -552,7 +559,7 @@ void MemberList::writeDeclarations(OutputList &ol,
       if (!st.isEmpty())
       {
         ol.startMemberSubtitle();
-        ol.parseDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE);
+        ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE);
         ol.endMemberSubtitle();
       }
     }
@@ -595,7 +602,7 @@ void MemberList::writeDeclarations(OutputList &ol,
           {
             //printf("Member group has docs!\n");
             ol.startMemberGroupDocs();
-            ol.parseDoc("[generated]",-1,ctx,0,mg->documentation()+"\n",FALSE,FALSE);
+            ol.generateDoc("[generated]",-1,ctx,0,mg->documentation()+"\n",FALSE,FALSE);
             ol.endMemberGroupDocs();
           }
           ol.startMemberGroup();
@@ -756,8 +763,8 @@ void MemberList::addListReferences(Definition *def)
     if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)
     {
       md->addListReference(def);
-      LockingPtr<MemberList> enumFields = md->enumFieldList();
-      if (md->memberType()==MemberType_Enumeration && enumFields!=0)
+      MemberList *enumFields = md->enumFieldList();
+      if (md->memberType()==MemberType_Enumeration && enumFields)
       {
         //printf("  Adding enum values!\n");
         MemberListIterator vmli(*enumFields);
diff --git a/src/message.cpp b/src/message.cpp
index 60cb861..dd1f05c 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -26,6 +26,8 @@
 #include "filedef.h"
 
 static QCString outputFormat;
+static const char *warning_str = "Warning: ";
+static const char *error_str = "Error: ";
 //static int warnFormatOrder; // 1 = $file,$line,$text
 //                            // 2 = $text,$line,$file
 //                            // 3 = $line,$text,$file
@@ -149,11 +151,17 @@ static void format_warn(const char *file,int line,const char *text)
   fwrite(msgText.data(),1,msgText.length(),warnFile);
 }
 
-static void do_warn(const char *tag, const char *file, int line, const char *fmt, va_list args)
+static void do_warn(const char *tag, const char *file, int line, const char *prefix, const char *fmt, va_list args)
 {
   if (!Config_getBool(tag)) return; // warning type disabled
   char text[4096];
-  vsnprintf(text, 4096, fmt, args);
+  int l=0;
+  if (prefix)
+  {
+    strcpy(text,prefix);
+    l=strlen(prefix);
+  }
+  vsnprintf(text+l, 4096-l, fmt, args);
   text[4095]='\0';
   format_warn(file,line,text);
 }
@@ -162,21 +170,21 @@ void warn(const char *file,int line,const char *fmt, ...)
 {
   va_list args;
   va_start(args, fmt);
-  do_warn("WARNINGS", file, line, fmt, args);
+  do_warn("WARNINGS", file, line, warning_str, fmt, args);
   va_end(args); 
 }
 
 void warn_simple(const char *file,int line,const char *text)
 {
   if (!Config_getBool("WARNINGS")) return; // warning type disabled
-  format_warn(file,line,text);
+  format_warn(file,line,QCString(warning_str) + text);
 }
 
 void warn_undoc(const char *file,int line,const char *fmt, ...)
 {
   va_list args;
   va_start(args, fmt);
-  do_warn("WARN_IF_UNDOCUMENTED", file, line, fmt, args);
+  do_warn("WARN_IF_UNDOCUMENTED", file, line, warning_str, fmt, args);
   va_end(args);
 }
   
@@ -184,14 +192,22 @@ void warn_doc_error(const char *file,int line,const char *fmt, ...)
 {
   va_list args;
   va_start(args, fmt);
-  do_warn("WARN_IF_DOC_ERROR", file, line, fmt, args);
+  do_warn("WARN_IF_DOC_ERROR", file, line, warning_str, fmt, args);
   va_end(args);
 }
 
+void warn_uncond(const char *fmt, ...)
+{
+  va_list args;
+  va_start(args, fmt);
+  vfprintf(warnFile, (QCString(warning_str) + fmt).data(), args);
+  va_end(args); 
+}
+
 void err(const char *fmt, ...)
 {
   va_list args;
   va_start(args, fmt);
-  vfprintf(warnFile, fmt, args);
+  vfprintf(warnFile, (QCString(error_str) + fmt).data(), args);
   va_end(args); 
 }
diff --git a/src/message.h b/src/message.h
index acdbaff..e01b8be 100644
--- a/src/message.h
+++ b/src/message.h
@@ -25,6 +25,7 @@ extern void warn(const char *file,int line,const char *fmt, ...);
 extern void warn_simple(const char *file,int line,const char *text);
 extern void warn_undoc(const char *file,int line,const char *fmt, ...);
 extern void warn_doc_error(const char *file,int line,const char *fmt, ...);
+extern void warn_uncond(const char *fmt, ...);
 extern void err(const char *fmt, ...);
 void initWarningFormat();
 
diff --git a/src/msc.cpp b/src/msc.cpp
index e87c16f..f9b069e 100644
--- a/src/msc.cpp
+++ b/src/msc.cpp
@@ -34,7 +34,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,const QCString rel
   QFile f(mapName);
   if (!f.open(IO_ReadOnly))
   {
-    err("error: failed to open map file %s for inclusion in the docs!\n"
+    err("failed to open map file %s for inclusion in the docs!\n"
         "If you installed Graphviz/dot after a previous failing run, \n"
         "try deleting the output directory and rerun doxygen.\n",mapName);
     return FALSE;
@@ -136,7 +136,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
     portable_sysTimerStart();
     if (portable_system("epstopdf",epstopdfArgs)!=0)
     {
-      err("error: Problems running epstopdf. Check your TeX installation!\n");
+      err("Problems running epstopdf. Check your TeX installation!\n");
     }
     portable_sysTimerStop();
   }
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index b95cec8..cfca6d6 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -268,7 +268,7 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title
     ol.startTextBlock();
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
     {
-      ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+      ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
     }
     if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
         !documentation().isEmpty())
@@ -284,7 +284,7 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title
     }
     if (!documentation().isEmpty())
     {
-      ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+      ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
     }
     ol.endTextBlock();
   }
@@ -294,25 +294,30 @@ void NamespaceDef::writeBriefDescription(OutputList &ol)
 {
   if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
   {
-    ol.startParagraph();
-    ol.parseDoc(briefFile(),briefLine(),this,0,
-                briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
-    ol.pushGeneratorState();
-    ol.disable(OutputGenerator::RTF);
-    ol.writeString(" \n");
-    ol.enable(OutputGenerator::RTF);
-
-    if (Config_getBool("REPEAT_BRIEF") ||
-        !documentation().isEmpty()
-       )
+    DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+                        briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
+    if (rootNode && !rootNode->isEmpty())
     {
-      ol.disableAllBut(OutputGenerator::Html);
-      ol.startTextLink(0,"details");
-      ol.parseText(theTranslator->trMore());
-      ol.endTextLink();
+      ol.startParagraph();
+      ol.writeDoc(rootNode,this,0);
+      ol.pushGeneratorState();
+      ol.disable(OutputGenerator::RTF);
+      ol.writeString(" \n");
+      ol.enable(OutputGenerator::RTF);
+
+      if (Config_getBool("REPEAT_BRIEF") ||
+          !documentation().isEmpty()
+         )
+      {
+        ol.disableAllBut(OutputGenerator::Html);
+        ol.startTextLink(0,"details");
+        ol.parseText(theTranslator->trMore());
+        ol.endTextLink();
+      }
+      ol.popGeneratorState();
+      ol.endParagraph();
     }
-    ol.popGeneratorState();
-    ol.endParagraph();
+    delete rootNode;
 
     // FIXME:PARA
     //ol.pushGeneratorState();
@@ -506,6 +511,11 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
     Doxygen::tagFile << "  <compound kind=\"namespace\">" << endl;
     Doxygen::tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
     Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
+    QCString idStr = id();
+    if (!idStr.isEmpty())
+    {
+      Doxygen::tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+    }
   }
 
   Doxygen::indexList->addIndexItem(this,0);
@@ -763,8 +773,8 @@ void NamespaceDef::addListReferences()
 {
   //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
   {
-    LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
-    addRefItem(xrefItems.pointer(),
+    QList<ListItemInfo> *xrefItems = xrefListItems();
+    addRefItem(xrefItems,
         qualifiedName(),
         getLanguage()==SrcLangExt_Fortran ? 
           theTranslator->trModule(TRUE,TRUE) : 
@@ -965,7 +975,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
       if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
       {
         ol.startMemberDescription(nd->getOutputFileBase());
-        ol.parseDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
+        ol.generateDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
         ol.endMemberDescription();
       }
       ol.endMemberDeclaration(0,0);
diff --git a/src/outputgen.h b/src/outputgen.h
index 719f2cd..2a959e4 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -96,7 +96,7 @@ class BaseOutputDocInterface : public CodeOutputInterface
                         Examples 
                       };
 
-    virtual void parseText(const QCString &)  {}
+    virtual bool parseText(const QCString &s)  { return s.isEmpty(); }
     
     /*! Start of a bullet list: e.g. \c \<ul\> in html. startItemListItem() is
      *  Used for the bullet items.
diff --git a/src/outputlist.cpp b/src/outputlist.cpp
index d51b548..2928400 100644
--- a/src/outputlist.cpp
+++ b/src/outputlist.cpp
@@ -130,14 +130,14 @@ void OutputList::popGeneratorState()
   }
 }
 
-void OutputList::parseDoc(const char *fileName,int startLine,
+bool OutputList::generateDoc(const char *fileName,int startLine,
                   Definition *ctx,MemberDef * md,
                   const QCString &docStr,bool indexWords,
                   bool isExample,const char *exampleName,
                   bool singleLine,bool linkFromIndex)
 {
   int count=0;
-  if (docStr.isEmpty()) return;
+  if (docStr.isEmpty()) return TRUE;
   
   OutputGenerator *og=outputs->first();
   while (og)
@@ -145,23 +145,25 @@ void OutputList::parseDoc(const char *fileName,int startLine,
     if (og->isEnabled()) count++;
     og=outputs->next();
   }
-  if (count==0) return; // no output formats enabled.
+  if (count==0) return TRUE; // no output formats enabled.
 
-  DocNode *root=0;
-  if (docStr.at(docStr.length()-1)=='\n')
-  {
-    root = validatingParseDoc(fileName,startLine,
-                              ctx,md,docStr,indexWords,isExample,exampleName,
-                              singleLine,linkFromIndex);
-  }
-  else
-  {
-    root = validatingParseDoc(fileName,startLine,
-                              ctx,md,docStr+"\n",indexWords,isExample,exampleName,
-                              singleLine,linkFromIndex);
-  }
+  DocRoot *root=0;
+  root = validatingParseDoc(fileName,startLine,
+                            ctx,md,docStr,indexWords,isExample,exampleName,
+                            singleLine,linkFromIndex);
 
-  og=outputs->first();
+  writeDoc(root,ctx,md);
+
+  bool isEmpty = root->isEmpty();
+
+  delete root;
+
+  return isEmpty;
+}
+
+void OutputList::writeDoc(DocRoot *root,Definition *ctx,MemberDef *md)
+{
+  OutputGenerator *og=outputs->first();
   while (og)
   {
     //printf("og->printDoc(extension=%s)\n",
@@ -171,11 +173,9 @@ void OutputList::parseDoc(const char *fileName,int startLine,
   }
 
   VhdlDocGen::setFlowMember(0);
-
-  delete root;
 }
 
-void OutputList::parseText(const QCString &textStr)
+bool OutputList::parseText(const QCString &textStr)
 {
   int count=0;
   OutputGenerator *og=outputs->first();
@@ -184,9 +184,9 @@ void OutputList::parseText(const QCString &textStr)
     if (og->isEnabled()) count++;
     og=outputs->next();
   }
-  if (count==0) return; // no output formats enabled.
+  if (count==0) return TRUE; // no output formats enabled.
 
-  DocNode *root = validatingParseText(textStr);
+  DocText *root = validatingParseText(textStr);
 
   og=outputs->first();
   while (og)
@@ -195,7 +195,11 @@ void OutputList::parseText(const QCString &textStr)
     og=outputs->next();
   }
 
+  bool isEmpty = root->isEmpty();
+
   delete root;
+
+  return isEmpty;
 }
 
 
diff --git a/src/outputlist.h b/src/outputlist.h
index 71481ba..b328056 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -42,6 +42,7 @@ class DotInclDepGraph;
 class DotGfxHierarchyTable;
 class SectionDict;
 class DotGroupCollaboration;
+class DocRoot;
 
 /** Class representing a list of output generators that are written to
  *  in parallel. 
@@ -69,11 +70,12 @@ class OutputList : public OutputDocInterface
     // OutputDocInterface implementation
     //////////////////////////////////////////////////
 
-    void parseDoc(const char *fileName,int startLine,
-                  Definition *ctx,MemberDef *md,const QCString &docStr,
-                  bool indexWords,bool isExample,const char *exampleName=0,
-                  bool singleLine=FALSE,bool linkFromIndex=FALSE);
-    void parseText(const QCString &textStr);
+    bool generateDoc(const char *fileName,int startLine,
+                     Definition *ctx,MemberDef *md,const QCString &docStr,
+                     bool indexWords,bool isExample,const char *exampleName=0,
+                     bool singleLine=FALSE,bool linkFromIndex=FALSE);
+    void writeDoc(DocRoot *root,Definition *ctx,MemberDef *md);
+    bool parseText(const QCString &textStr);
     
 
     void startIndexSection(IndexSections is)
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index 7445287..113eaa5 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -49,7 +49,7 @@ void PageDef::findSectionsInDocumentation()
 
 GroupDef *PageDef::getGroupDef() const 
 { 
-  LockingPtr<GroupList> groups = partOfGroups();
+  GroupList *groups = partOfGroups();
   return groups!=0 ? groups->getFirst() : 0; 
 }
 
@@ -130,7 +130,7 @@ void PageDef::writeDocumentation(OutputList &ol)
   ol.endTitleHead(pageName, pageName);
   if (si)
   {
-    ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
+    ol.generateDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
     ol.endSection(si->label,si->type);
   }
   ol.popGeneratorState();
@@ -146,7 +146,7 @@ void PageDef::writeDocumentation(OutputList &ol)
   {
     //ol.startSection(si->label,si->title,si->type);
     startTitle(ol,getOutputFileBase(),this);
-    ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
+    ol.generateDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
     //stringToSearchIndex(getOutputFileBase(),
     //                    theTranslator->trPage(TRUE,TRUE)+" "+si->title,
     //                    si->title);
@@ -214,7 +214,7 @@ void PageDef::writePageDocumentation(OutputList &ol)
   }
 
   ol.startTextBlock();
-  ol.parseDoc(
+  ol.generateDoc(
       docFile(),           // fileName
       docLine(),           // startLine
       this,                // context
diff --git a/src/parserintf.h b/src/parserintf.h
index fa9184c..0274c13 100644
--- a/src/parserintf.h
+++ b/src/parserintf.h
@@ -19,6 +19,7 @@
 #define PARSERINTF_H
 
 #include <qdict.h>
+#include <qstrlist.h>
 
 class Entry;
 class FileDef;
@@ -36,15 +37,37 @@ class ParserInterface
 {
   public:
     virtual ~ParserInterface() {}
+
+    /** Starts processing a translation unit (source files + headers).
+     *  After this call parseInput() is called with sameTranslationUnit
+     *  set to FALSE. If parseInput() returns additional include files,
+     *  these are also processed using parseInput() with 
+     *  sameTranslationUnit set to TRUE. After that
+     *  finishTranslationUnit() is called.
+     */
+    virtual void startTranslationUnit(const char *fileName) = 0;
+
+    /** Called after all files in a translation unit have been 
+     *  processed.
+     */
+    virtual void finishTranslationUnit() = 0;
+
     /** Parses a single input file with the goal to build an Entry tree. 
      *  @param[in] fileName    The full name of the file.
      *  @param[in] fileBuf     The contents of the file (zero terminated).
      *  @param[in,out] root    The root of the tree of Entry *nodes 
      *             representing the information extracted from the file.
+     *  @param[in] sameTranslationUnit TRUE if this file was found in the same
+     *             translation unit (in the filesInSameTranslationUnit list
+     *             returned for another file).
+     *  @param[in,out] filesInSameTranslationUnit other files expected to be
+     *              found in the same translation unit (used for libclang)
      */
     virtual void parseInput(const char *fileName,
                             const char *fileBuf,
-                            Entry *root) = 0;
+                            Entry *root,
+                            bool sameTranslationUnit,
+                            QStrList &filesInSameTranslationUnit) = 0;
 
     /** Returns TRUE if the language identified by \a extension needs
      *  the C preprocessor to be run before feed the result to the input
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index be8b1d9..9257df0 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -642,7 +642,7 @@ void PerlModDocVisitor::visit(DocSymbol *sy)
     case DocSymbol::RightCeil:     symbol = "rceil"; break;
     case DocSymbol::LeftFloor:     symbol = "lfloor"; break;
     case DocSymbol::RightFloor:    symbol = "rfloor"; break;
-    case DocSymbol::Unknown: err("error: unknown symbol found\n");
+    case DocSymbol::Unknown: err("unknown symbol found\n");
                              break;
   }
   if (c != 0) 
@@ -910,7 +910,7 @@ void PerlModDocVisitor::visitPre(DocSimpleSect *s)
   case DocSimpleSect::User:		type = "par"; break;
   case DocSimpleSect::Rcs:		type = "rcs"; break;
   case DocSimpleSect::Unknown:
-    err("error: unknown simple section found\n");
+    err("unknown simple section found\n");
     break;
   }
   leaveText();
@@ -1283,7 +1283,7 @@ void PerlModDocVisitor::visitPre(DocParamSect *s)
   case DocParamSect::Exception: type = "exceptions"; break;
   case DocParamSect::TemplateParam: type = "templateparam"; break;
   case DocParamSect::Unknown:
-    err("error: unknown parameter section found\n");
+    err("unknown parameter section found\n");
     break;
   }
   openOther();
@@ -1592,16 +1592,16 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
       md->memberType()!=MemberType_Enumeration)
     m_output.addFieldQuotedString("type", md->typeString());
   
-  LockingPtr<ArgumentList> al = md->argumentList();
+  ArgumentList *al = md->argumentList();
   if (isFunc) //function
   {
     m_output.addFieldBoolean("const", al!=0 && al->constSpecifier)
       .addFieldBoolean("volatile", al!=0 && al->volatileSpecifier);
 
     m_output.openList("parameters");
-    LockingPtr<ArgumentList> declAl = md->declArgumentList();
-    LockingPtr<ArgumentList> defAl  = md->argumentList();
-    if (declAl!=0 && declAl->count()>0)
+    ArgumentList *declAl = md->declArgumentList();
+    ArgumentList *defAl  = md->argumentList();
+    if (declAl && declAl->count()>0)
     {
       ArgumentListIterator declAli(*declAl);
       ArgumentListIterator defAli(*defAl);
@@ -1662,8 +1662,8 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
   
   if (md->memberType()==MemberType_Enumeration) // enum
   {
-    LockingPtr<MemberList> enumFields = md->enumFieldList();
-    if (enumFields!=0)
+    MemberList *enumFields = md->enumFieldList();
+    if (enumFields)
     {
       m_output.openList("values");
       MemberListIterator emli(*enumFields);
@@ -1692,8 +1692,8 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
       .addFieldQuotedString("name", rmd->name())
       .closeHash();
 
-  LockingPtr<MemberList> rbml = md->reimplementedBy();
-  if (rbml!=0)
+  MemberList *rbml = md->reimplementedBy();
+  if (rbml)
   {
     MemberListIterator mli(*rbml);
     m_output.openList("reimplemented_by");
@@ -2258,13 +2258,13 @@ bool PerlModGenerator::createOutputDir(QDir &perlModDir)
       dir.setPath(QDir::currentDirPath());
       if (!dir.mkdir(outputDirectory))
       {
-	err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+	err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
 	    "exist and cannot be created\n",outputDirectory.data());
 	exit(1);
       }
-      else if (!Config_getBool("QUIET"))
+      else
       {
-	err("notice: Output directory `%s' does not exist. "
+	msg("Notice: Output directory `%s' does not exist. "
 	    "I have created it for you.\n", outputDirectory.data());
       }
       dir.cd(outputDirectory);
diff --git a/src/pre.l b/src/pre.l
index f11cae7..a207a6a 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -221,7 +221,9 @@ class DefineManager
      */
     Define *isDefined(const char *name) const
     {
-      return m_contextDefines.find(name);
+      Define *d = m_contextDefines.find(name);
+      //printf("isDefined(%s)=%p\n",name,d);
+      return d;
     }
     /** Returns a reference to the defines found in the current context. */
     const DefineDict &defineContext() const
@@ -407,7 +409,7 @@ static void decrLevel()
   }
   else
   {
-    warn(g_yyFileName,g_yyLineNr,"warning: More #endif's than #if's found.\n");
+    warn(g_yyFileName,g_yyLineNr,"More #endif's than #if's found.\n");
   }
 }
 
@@ -415,7 +417,7 @@ static bool otherCaseDone()
 {
   if (g_level==0)
   {
-    warn(g_yyFileName,g_yyLineNr,"warning: Found an #else without a preceding #if.\n");
+    warn(g_yyFileName,g_yyLineNr,"Found an #else without a preceding #if.\n");
     return TRUE;
   }
   else
@@ -429,57 +431,6 @@ static void setCaseDone(bool value)
   g_levelGuard[g_level-1]=value;
 }
 
-#if 0
-static bool macroIsAccessible(Define *def)
-{
-  //printf("macroIsAccessible(%s) input=%s def=%s\n",
-  //    def->name.data(),g_inputFileDef?g_inputFileDef->name().data():"<none>",
-  //    def->fileDef ? def->fileDef->name().data() : "<none>");
-  if (def && def->isPredefined) // predefined macro -> globally accessible
-  {
-    //printf("%s: predefined macro %s\n",g_inputFileDef->name().data(),def->name.data());
-    return TRUE;
-  }
-  if (def && def->fileDef==g_inputFileDef)
-  {
-    //printf("%s: macro %s defined in this file at line %d now at %d\n",
-    //	g_inputFileDef->name().data(),def->name.data(),def->lineNr,g_yyLineNr);
-    return def->lineNr<=g_yyLineNr;
-  }
-  if (g_inputFileDef && def && def->fileDef) // check if g_inputFileDef actually includes def->fileDef
-  {
-    QDict<FileDef> includedFiles(257);
-    bool b = g_inputFileDef->includes(def->fileDef,&includedFiles);
-    //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
-    //       g_inputFileDef->name().data(),def->name.data(),def->fileDef->name().data(),b);
-    return b;
-  }
-  if (g_inputFileDef && def && !def->fileName.isEmpty())
-  {
-    bool b = g_inputFileDef->includesByName(def->fileName);
-    //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
-    //       g_inputFileDef->name().data(),def->name.data(),def->fileName.data(),b);
-    return b;
-  }
-  //printf("not accessible!\n");
-  return FALSE;
-}
-
-static Define *isDefined(const char *name)
-{
-  Define *def=0;
-  if (name)
-  {
-    def=g_globalDefineDict->find(name);
-    if (def && def->undef) def=0;
-    if (def && !macroIsAccessible(def)) def=0;
-  }
-  //printf("isDefined(%s)=%p\n",name,def);
-  return def;
-}
-#endif
-
-
 static QDict<void> g_allIncludes(10009);
 
 static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyIncluded)
@@ -1649,7 +1600,7 @@ static void readIncludeFile(const QCString &inc)
       }
       if (g_curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... }
       {
-	warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
+	warn(g_yyFileName,g_yyLineNr,"include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
       }
     }
   }
@@ -1667,6 +1618,7 @@ static void startCondSection(const char *sectId)
   {
     g_skip=TRUE;
   }
+  //printf("  expResult=%d skip=%d\n",expResult,g_skip);
 }
 
 static void endCondSection()
@@ -2326,7 +2278,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  g_defVarArgs = FALSE;
 					  //printf("Guard check: %s!=%s || %d\n",
 					  //    g_defName.data(),g_lastGuardName.data(),g_expectGuard);
-					  if ( g_defName!=g_lastGuardName || !g_expectGuard)
+					  if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
 					  { // define may appear in the output
 					    QCString tmp=(QCString)"#define "+g_defName;
 					    outputArray(tmp.data(),tmp.length());
@@ -2356,7 +2308,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  g_defVarArgs = FALSE;
 					  //printf("Guard check: %s!=%s || %d\n",
 					  //    g_defName.data(),g_lastGuardName.data(),g_expectGuard);
-					  if ( g_defName!=g_lastGuardName || !g_expectGuard)
+					  if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
 					  { // define may appear in the output
 					    QCString tmp=(QCString)"#define "+g_defName;
 					    outputArray(tmp.data(),tmp.length());
@@ -2507,10 +2459,12 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
   					}
 <SkipCPPComment>[\\@]"cond"[ \t]+	{ // conditional section
                                           g_ccomment=TRUE;  
+                                          g_condCtx=YY_START;
   					  BEGIN(CondLineCpp);
   					}
 <SkipCComment>[\\@]"cond"[ \t]+	{ // conditional section
                                           g_ccomment=FALSE;  
+                                          g_condCtx=YY_START;
   					  BEGIN(CondLineC);
   					}
 <CondLineC,CondLineCpp>[!()&| \ta-z_A-Z0-9.\-]+      {
@@ -2567,6 +2521,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
                                           {
                                             g_ccomment=FALSE;
                                           }
+                                          g_condCtx=YY_START;
                                           BEGIN(SkipCond);
   					}
 <SkipCond>\n                            { g_yyLineNr++; outputChar('\n'); }
@@ -2575,8 +2530,9 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 <SkipCond>"//"[/!]                      { g_ccomment=FALSE; }
 <SkipCond>"/*"[*!]                      { g_ccomment=TRUE; }
 <SkipCond>[\\@]"endcond"/[^a-z_A-Z0-9]  { 
+                                          bool oldSkip = g_skip;
                                           endCondSection(); 
-                                          if (!g_skip)
+                                          if (oldSkip && !g_skip)
                                           {
                                             if (g_ccomment)
                                             {
@@ -2586,8 +2542,9 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
                                           }
                                         }
 <SkipCComment,SkipCPPComment>[\\@]"endcond"/[^a-z_A-Z0-9] {
+                                          bool oldSkip = g_skip;
   					  endCondSection();
-                                          if (!g_skip) 
+                                          if (oldSkip && !g_skip) 
                                           {
                                             BEGIN(g_condCtx);
                                           }
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 74acd4b..dc28d26 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -58,104 +58,104 @@ class PrintDocVisitor : public DocVisitor
       indent_leaf();
       switch(s->symbol())
       {
-	case DocSymbol::BSlash:  printf("\\"); break;
-	case DocSymbol::At:      printf("@"); break;
-	case DocSymbol::Less:    printf("<"); break;
-	case DocSymbol::Greater: printf(">"); break;
-	case DocSymbol::Amp:     printf("&"); break;
-	case DocSymbol::Dollar:  printf("$"); break;
-	case DocSymbol::Hash:    printf("#"); break;
-	case DocSymbol::Percent: printf("%%"); break;
-	case DocSymbol::Pipe:    printf("|"); break;
-	case DocSymbol::Copy:    printf("&copy;"); break;
-	case DocSymbol::Apos:    printf("'"); break;
-	case DocSymbol::Quot:    printf("\""); break;
+        case DocSymbol::BSlash:  printf("\\"); break;
+        case DocSymbol::At:      printf("@"); break;
+        case DocSymbol::Less:    printf("<"); break;
+        case DocSymbol::Greater: printf(">"); break;
+        case DocSymbol::Amp:     printf("&"); break;
+        case DocSymbol::Dollar:  printf("$"); break;
+        case DocSymbol::Hash:    printf("#"); break;
+        case DocSymbol::Percent: printf("%%"); break;
+        case DocSymbol::Pipe:    printf("|"); break;
+        case DocSymbol::Copy:    printf("&copy;"); break;
+        case DocSymbol::Apos:    printf("'"); break;
+        case DocSymbol::Quot:    printf("\""); break;
         case DocSymbol::Lsquo:   printf("&lsquo;"); break;
         case DocSymbol::Rsquo:   printf("&rsquo;"); break;
         case DocSymbol::Ldquo:   printf("&ldquo;"); break;
         case DocSymbol::Rdquo:   printf("&rdquo;"); break;
         case DocSymbol::Ndash:   printf("&ndash;"); break;
         case DocSymbol::Mdash:   printf("&mdash;"); break;
-	case DocSymbol::Uml:     printf("&%cuml;",s->letter()); break;
-	case DocSymbol::Acute:   printf("&%cacute;",s->letter()); break;
-	case DocSymbol::Grave:   printf("&%cgrave;",s->letter()); break;
-	case DocSymbol::Circ:    printf("&%ccirc;",s->letter()); break;
-	case DocSymbol::Tilde:   printf("&%ctilde;",s->letter()); break;
-	case DocSymbol::Szlig:   printf("&szlig;"); break;
-	case DocSymbol::Cedil:   printf("&%ccedul;",s->letter()); break;
-	case DocSymbol::Ring:    printf("&%cring;",s->letter()); break;
-	case DocSymbol::Nbsp:    printf("&nbsp;"); break;
-	case DocSymbol::Aelig:   printf("&aelig;"); break;
-	case DocSymbol::AElig:   printf("&AElig;"); break;
-    case DocSymbol::GrkGamma:      printf("&Gamma;"); break;
-    case DocSymbol::GrkDelta:      printf("&Delta;"); break;
-    case DocSymbol::GrkTheta:      printf("&Theta;"); break;
-    case DocSymbol::GrkLambda:     printf("&Lambda;"); break;
-    case DocSymbol::GrkXi:         printf("&Xi;"); break;
-    case DocSymbol::GrkPi:         printf("&Pi;"); break;
-    case DocSymbol::GrkSigma:      printf("&Sigma;"); break;
-    case DocSymbol::GrkUpsilon:    printf("&Upsilon;"); break;
-    case DocSymbol::GrkPhi:        printf("&Phi;"); break;
-    case DocSymbol::GrkPsi:        printf("&Psi;"); break;
-    case DocSymbol::GrkOmega:      printf("&Omega;"); break;
-    case DocSymbol::Grkalpha:      printf("&alpha;"); break;
-    case DocSymbol::Grkbeta:       printf("&beta;"); break;
-    case DocSymbol::Grkgamma:      printf("&gamma;"); break;
-    case DocSymbol::Grkdelta:      printf("&delta;"); break;
-    case DocSymbol::Grkepsilon:    printf("&epsilon;"); break;
-    case DocSymbol::Grkzeta:       printf("&zeta;"); break;
-    case DocSymbol::Grketa:        printf("&eta;"); break;
-    case DocSymbol::Grktheta:      printf("&theta;"); break;
-    case DocSymbol::Grkiota:       printf("&iota;"); break;
-    case DocSymbol::Grkkappa:      printf("&kappa;"); break;
-    case DocSymbol::Grklambda:     printf("&lambda;"); break;
-    case DocSymbol::Grkmu:         printf("&mu;"); break;
-    case DocSymbol::Grknu:         printf("&nu;"); break;
-    case DocSymbol::Grkxi:         printf("&xi;"); break;
-    case DocSymbol::Grkpi:         printf("&pi;"); break;
-    case DocSymbol::Grkrho:        printf("&rho;"); break;
-    case DocSymbol::Grksigma:      printf("&sigma;"); break;
-    case DocSymbol::Grktau:        printf("&tau;"); break;
-    case DocSymbol::Grkupsilon:    printf("&upsilon;"); break;
-    case DocSymbol::Grkphi:        printf("&phi;"); break;
-    case DocSymbol::Grkchi:        printf("&chi;"); break;
-    case DocSymbol::Grkpsi:        printf("&psi;"); break;
-    case DocSymbol::Grkomega:      printf("&omega;"); break;
-    case DocSymbol::Grkvarsigma:   printf("&sigmaf;"); break;
-    case DocSymbol::Section:       printf("&sect;"); break;
-    case DocSymbol::Degree:        printf("&deg;"); break;
-    case DocSymbol::Prime:         printf("&prime;"); break;
-    case DocSymbol::DoublePrime:   printf("&Prime;"); break;
-    case DocSymbol::Infinity:      printf("&infin;"); break;
-    case DocSymbol::EmptySet:      printf("&empty;"); break;
-    case DocSymbol::PlusMinus:     printf("&plusmn;"); break;
-    case DocSymbol::Times:         printf("&times;"); break;
-    case DocSymbol::Minus:         printf("&minus;"); break;
-    case DocSymbol::CenterDot:     printf("&sdot;"); break;
-    case DocSymbol::Partial:       printf("&part;"); break;
-    case DocSymbol::Nabla:         printf("&nabla;"); break;
-    case DocSymbol::SquareRoot:    printf("&radic;"); break;
-    case DocSymbol::Perpendicular: printf("&perp;"); break;
-    case DocSymbol::Sum:           printf("&sum;"); break;
-    case DocSymbol::Integral:      printf("&int;"); break;
-    case DocSymbol::Product:       printf("&prod;"); break;
-    case DocSymbol::Similar:       printf("&sim;"); break;
-    case DocSymbol::Approx:        printf("&asymp;"); break;
-    case DocSymbol::NotEqual:      printf("&ne;"); break;
-    case DocSymbol::Equivalent:    printf("&equiv;"); break;
-    case DocSymbol::Proportional:  printf("&prop;"); break;
-    case DocSymbol::LessEqual:     printf("&le;"); break;
-    case DocSymbol::GreaterEqual:  printf("&ge;"); break;
-    case DocSymbol::LeftArrow:     printf("&larr;"); break;
-    case DocSymbol::RightArrow:    printf("&rarr;"); break;
-    case DocSymbol::SetIn:         printf("&isin;"); break;
-    case DocSymbol::SetNotIn:      printf("&notin;"); break;
-    case DocSymbol::LeftCeil:      printf("&lceil;"); break;
-    case DocSymbol::RightCeil:     printf("&rceil;"); break;
-    case DocSymbol::LeftFloor:     printf("&lfloor;"); break;
-    case DocSymbol::RightFloor:    printf("&rfloor;"); break;
-	default:
-	  printf("Error: unknown symbol found\n");
+        case DocSymbol::Uml:     printf("&%cuml;",s->letter()); break;
+        case DocSymbol::Acute:   printf("&%cacute;",s->letter()); break;
+        case DocSymbol::Grave:   printf("&%cgrave;",s->letter()); break;
+        case DocSymbol::Circ:    printf("&%ccirc;",s->letter()); break;
+        case DocSymbol::Tilde:   printf("&%ctilde;",s->letter()); break;
+        case DocSymbol::Szlig:   printf("&szlig;"); break;
+        case DocSymbol::Cedil:   printf("&%ccedul;",s->letter()); break;
+        case DocSymbol::Ring:    printf("&%cring;",s->letter()); break;
+        case DocSymbol::Nbsp:    printf("&nbsp;"); break;
+        case DocSymbol::Aelig:   printf("&aelig;"); break;
+        case DocSymbol::AElig:   printf("&AElig;"); break;
+        case DocSymbol::GrkGamma:      printf("&Gamma;"); break;
+        case DocSymbol::GrkDelta:      printf("&Delta;"); break;
+        case DocSymbol::GrkTheta:      printf("&Theta;"); break;
+        case DocSymbol::GrkLambda:     printf("&Lambda;"); break;
+        case DocSymbol::GrkXi:         printf("&Xi;"); break;
+        case DocSymbol::GrkPi:         printf("&Pi;"); break;
+        case DocSymbol::GrkSigma:      printf("&Sigma;"); break;
+        case DocSymbol::GrkUpsilon:    printf("&Upsilon;"); break;
+        case DocSymbol::GrkPhi:        printf("&Phi;"); break;
+        case DocSymbol::GrkPsi:        printf("&Psi;"); break;
+        case DocSymbol::GrkOmega:      printf("&Omega;"); break;
+        case DocSymbol::Grkalpha:      printf("&alpha;"); break;
+        case DocSymbol::Grkbeta:       printf("&beta;"); break;
+        case DocSymbol::Grkgamma:      printf("&gamma;"); break;
+        case DocSymbol::Grkdelta:      printf("&delta;"); break;
+        case DocSymbol::Grkepsilon:    printf("&epsilon;"); break;
+        case DocSymbol::Grkzeta:       printf("&zeta;"); break;
+        case DocSymbol::Grketa:        printf("&eta;"); break;
+        case DocSymbol::Grktheta:      printf("&theta;"); break;
+        case DocSymbol::Grkiota:       printf("&iota;"); break;
+        case DocSymbol::Grkkappa:      printf("&kappa;"); break;
+        case DocSymbol::Grklambda:     printf("&lambda;"); break;
+        case DocSymbol::Grkmu:         printf("&mu;"); break;
+        case DocSymbol::Grknu:         printf("&nu;"); break;
+        case DocSymbol::Grkxi:         printf("&xi;"); break;
+        case DocSymbol::Grkpi:         printf("&pi;"); break;
+        case DocSymbol::Grkrho:        printf("&rho;"); break;
+        case DocSymbol::Grksigma:      printf("&sigma;"); break;
+        case DocSymbol::Grktau:        printf("&tau;"); break;
+        case DocSymbol::Grkupsilon:    printf("&upsilon;"); break;
+        case DocSymbol::Grkphi:        printf("&phi;"); break;
+        case DocSymbol::Grkchi:        printf("&chi;"); break;
+        case DocSymbol::Grkpsi:        printf("&psi;"); break;
+        case DocSymbol::Grkomega:      printf("&omega;"); break;
+        case DocSymbol::Grkvarsigma:   printf("&sigmaf;"); break;
+        case DocSymbol::Section:       printf("&sect;"); break;
+        case DocSymbol::Degree:        printf("&deg;"); break;
+        case DocSymbol::Prime:         printf("&prime;"); break;
+        case DocSymbol::DoublePrime:   printf("&Prime;"); break;
+        case DocSymbol::Infinity:      printf("&infin;"); break;
+        case DocSymbol::EmptySet:      printf("&empty;"); break;
+        case DocSymbol::PlusMinus:     printf("&plusmn;"); break;
+        case DocSymbol::Times:         printf("&times;"); break;
+        case DocSymbol::Minus:         printf("&minus;"); break;
+        case DocSymbol::CenterDot:     printf("&sdot;"); break;
+        case DocSymbol::Partial:       printf("&part;"); break;
+        case DocSymbol::Nabla:         printf("&nabla;"); break;
+        case DocSymbol::SquareRoot:    printf("&radic;"); break;
+        case DocSymbol::Perpendicular: printf("&perp;"); break;
+        case DocSymbol::Sum:           printf("&sum;"); break;
+        case DocSymbol::Integral:      printf("&int;"); break;
+        case DocSymbol::Product:       printf("&prod;"); break;
+        case DocSymbol::Similar:       printf("&sim;"); break;
+        case DocSymbol::Approx:        printf("&asymp;"); break;
+        case DocSymbol::NotEqual:      printf("&ne;"); break;
+        case DocSymbol::Equivalent:    printf("&equiv;"); break;
+        case DocSymbol::Proportional:  printf("&prop;"); break;
+        case DocSymbol::LessEqual:     printf("&le;"); break;
+        case DocSymbol::GreaterEqual:  printf("&ge;"); break;
+        case DocSymbol::LeftArrow:     printf("&larr;"); break;
+        case DocSymbol::RightArrow:    printf("&rarr;"); break;
+        case DocSymbol::SetIn:         printf("&isin;"); break;
+        case DocSymbol::SetNotIn:      printf("&notin;"); break;
+        case DocSymbol::LeftCeil:      printf("&lceil;"); break;
+        case DocSymbol::RightCeil:     printf("&rceil;"); break;
+        case DocSymbol::LeftFloor:     printf("&lfloor;"); break;
+        case DocSymbol::RightFloor:    printf("&rfloor;"); break;
+        default:
+          printf("unknown symbol found\n");
       }
     }
     void visit(DocURL *u)
@@ -179,35 +179,35 @@ class PrintDocVisitor : public DocVisitor
       switch (s->style())
       {
         case DocStyleChange::Bold:
-         if (s->enable()) printf("<bold>"); else printf("</bold>");
-         break;
+          if (s->enable()) printf("<bold>"); else printf("</bold>");
+          break;
         case DocStyleChange::Italic:
-         if (s->enable()) printf("<italic>"); else printf("</italic>");
-         break;
+          if (s->enable()) printf("<italic>"); else printf("</italic>");
+          break;
         case DocStyleChange::Code:
-         if (s->enable()) printf("<code>"); else printf("</code>");
-         break;
+          if (s->enable()) printf("<code>"); else printf("</code>");
+          break;
         case DocStyleChange::Subscript:
-         if (s->enable()) printf("<sub>"); else printf("</sub>");
-         break;
+          if (s->enable()) printf("<sub>"); else printf("</sub>");
+          break;
         case DocStyleChange::Superscript:
-         if (s->enable()) printf("<sup>"); else printf("</sup>");
-         break;
+          if (s->enable()) printf("<sup>"); else printf("</sup>");
+          break;
         case DocStyleChange::Center:
-         if (s->enable()) printf("<center>"); else printf("</center>");
-         break;
+          if (s->enable()) printf("<center>"); else printf("</center>");
+          break;
         case DocStyleChange::Small:
-         if (s->enable()) printf("<small>"); else printf("</small>");
-         break;
+          if (s->enable()) printf("<small>"); else printf("</small>");
+          break;
         case DocStyleChange::Preformatted:
-         if (s->enable()) printf("<pre>"); else printf("</pre>");
-         break;
+          if (s->enable()) printf("<pre>"); else printf("</pre>");
+          break;
         case DocStyleChange::Div:
-         if (s->enable()) printf("<div>"); else printf("</div>");
-         break;
+          if (s->enable()) printf("<div>"); else printf("</div>");
+          break;
         case DocStyleChange::Span:
-         if (s->enable()) printf("<span>"); else printf("</span>");
-         break;
+          if (s->enable()) printf("<span>"); else printf("</span>");
+          break;
       }
     }
     void visit(DocVerbatim *s)
diff --git a/src/pycode.l b/src/pycode.l
index 226c448..c87f5bb 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -483,6 +483,7 @@ static void codifyLines(char *text)
   }
 }
 
+#if 0
 static QCString fileLocation() 
 {
   QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
@@ -508,6 +509,7 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst)
     src->addSourceReferences(dst,fileLocation());
   }
 }
+#endif
 
 
 
diff --git a/src/pyscanner.h b/src/pyscanner.h
index 8a6971f..707edbd 100644
--- a/src/pyscanner.h
+++ b/src/pyscanner.h
@@ -35,9 +35,13 @@ class PythonLanguageScanner : public ParserInterface
 {
   public:
     virtual ~PythonLanguageScanner() {}
+    void startTranslationUnit(const char *) {}
+    void finishTranslationUnit() {}
     void parseInput(const char * fileName, 
                     const char *fileBuf, 
-                    Entry *root);
+                    Entry *root,
+                    bool sameTranslationUnit,
+                    QStrList &filesInSameTranslationUnit);
     bool needsPreprocessing(const QCString &extension);
     void parseCode(CodeOutputInterface &codeOutIntf,
                    const char *scopeName,
diff --git a/src/pyscanner.l b/src/pyscanner.l
index ef11320..69b7558 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -1679,7 +1679,11 @@ void pyscanFreeScanner()
 
 //----------------------------------------------------------------------------
 
-void PythonLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void PythonLanguageScanner::parseInput(const char *fileName,
+                                       const char *fileBuf,
+                                       Entry *root,
+                                       bool /*sameTranslationUnit*/,
+                                       QStrList & /*filesInSameTranslationUnit*/)
 {
   g_thisParser = this;
   ::parseMain(fileName,fileBuf,root);
diff --git a/src/resize.js b/src/resize.js
index 8365b25..a80dece 100644
--- a/src/resize.js
+++ b/src/resize.js
@@ -38,7 +38,7 @@ function resizeWidth()
 {
   var windowWidth = $(window).width() + "px";
   var sidenavWidth = $(sidenav).outerWidth();
-  content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar
+  content.css({marginLeft:parseInt(sidenavWidth)+"px"}); 
   writeCookie('width',sidenavWidth, null);
 }
 
diff --git a/src/resize_js.h b/src/resize_js.h
index e24c0b0..160b16c 100644
--- a/src/resize_js.h
+++ b/src/resize_js.h
@@ -38,7 +38,7 @@
 "{\n"
 "  var windowWidth = $(window).width() + \"px\";\n"
 "  var sidenavWidth = $(sidenav).outerWidth();\n"
-"  content.css({marginLeft:parseInt(sidenavWidth)+6+\"px\"}); //account for 6px-wide handle-bar\n"
+"  content.css({marginLeft:parseInt(sidenavWidth)+\"px\"}); \n"
 "  writeCookie('width',sidenavWidth, null);\n"
 "}\n"
 "\n"
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 8eb3e98..2d07957 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -311,7 +311,7 @@ void RTFDocVisitor::visit(DocSymbol *s)
     case DocSymbol::LeftFloor:       m_t << "lfloor "; break;
     case DocSymbol::RightFloor:      m_t << "rfloor "; break;
     default:
-                             err("error: unknown symbol found\n");
+                             err("unknown symbol found\n");
   }
   m_lastIsPara=FALSE;
 }
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index c3b715c..9a7dbee 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -178,7 +178,7 @@ void RTFGenerator::init()
   while(def->reference != 0)
   {
     if (def->definition == 0)
-      err("Internal error: rtf_Style_Default[%s] has no definition.\n", def->name);
+      err("Internal: rtf_Style_Default[%s] has no definition.\n", def->name);
     StyleData* styleData = new StyleData(def->reference, def->definition);
     rtf_Style.insert(def->name, styleData);
     def++;
@@ -2009,7 +2009,7 @@ void RTFGenerator::incrementIndentLevel()
   m_listLevel++;
   if (m_listLevel>rtf_maxIndentLevels-1)
   {
-    err("error: Maximum indent level (%d) exceeded while generating RTF output!\n",rtf_maxIndentLevels);
+    err("Maximum indent level (%d) exceeded while generating RTF output!\n",rtf_maxIndentLevels);
     m_listLevel=rtf_maxIndentLevels-1;
   }
 }
@@ -2019,7 +2019,7 @@ void RTFGenerator::decrementIndentLevel()
   m_listLevel--;
   if (m_listLevel<0)
   {
-    err("error: Negative indent level while generating RTF output!\n");
+    err("Negative indent level while generating RTF output!\n");
     m_listLevel=0;
   }
 }
@@ -2337,7 +2337,7 @@ static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncl
   QFile f(infName);
   if (!f.open(IO_ReadOnly))
   {
-    err("error: problems opening rtf file %s for reading\n",infName.data());
+    err("problems opening rtf file %s for reading\n",infName.data());
     return FALSE;
   }
 
@@ -2352,7 +2352,7 @@ static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncl
   {
     if (f.readLine(lineBuf.data(),maxLineLength)==-1)
     {
-      err("ERROR - read error in %s before end of RTF header!\n",infName.data());
+      err("read error in %s before end of RTF header!\n",infName.data());
       return FALSE;
     }
     if (bIncludeHeader) encodeForOutput(t,lineBuf);
@@ -2535,9 +2535,9 @@ void testRTFOutput(const char *name)
   }
   if (bcount==0) return; // file is OK.
 err:
-  err("error: RTF integrity test failed at line %d of %s due to a bracket mismatch.\n",line,name);
-  err("       Please try to create a small code example that produces this error \n"
-      "       and send that to dimitri@stack.nl.\n");
+  err("RTF integrity test failed at line %d of %s due to a bracket mismatch.\n"
+      "       Please try to create a small code example that produces this error \n"
+      "       and send that to dimitri@stack.nl.\n",line,name);
 }
 
 /**
@@ -2550,7 +2550,7 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name)
   // store the original directory
   if (!d.exists())
   {
-    err("error: Output dir %s does not exist!\n",path);
+    err("Output dir %s does not exist!\n",path);
     return FALSE;
   }
   QCString oldDir = QDir::currentDirPath().utf8();
diff --git a/src/scanner.h b/src/scanner.h
index 5c226a1..54a3c1c 100644
--- a/src/scanner.h
+++ b/src/scanner.h
@@ -30,9 +30,13 @@ class CLanguageScanner : public ParserInterface
 {
   public:
     virtual ~CLanguageScanner() {}
+    void startTranslationUnit(const char *fileName);
+    void finishTranslationUnit();
     void parseInput(const char *fileName,
                     const char *fileBuf,
-                    Entry *root);
+                    Entry *root,
+                    bool sameTranslationUnit,
+                    QStrList &filesInSameTranslationUnit);
     bool needsPreprocessing(const QCString &extension);
     void parseCode(CodeOutputInterface &codeOutIntf,
                    const char *scopeName,
diff --git a/src/scanner.l b/src/scanner.l
index 452632b..32f00c8 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -79,6 +79,7 @@ static int              lastRawStringContext;
 static int              lastCSConstraint;
 static int              lastHereDocContext;
 static int              lastDefineContext;
+static int              lastAlignAsContext;
 static Protection	protection;
 static Protection	baseProt;
 static int		sharpCount   = 0 ;
@@ -310,6 +311,7 @@ static void lineCount()
       g_column++,yyColNr++;
     }
   }
+  //printf("lineCount()=%d\n",g_column);
 }
 
 static inline int computeIndent(const char *s,int startIndent)
@@ -627,6 +629,8 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 
   /* language parsing states */
 
+%x      AlignAs
+%x      AlignAsEnd
 %x	Define
 %x	DefineEnd
 %x	CompoundName
@@ -2031,9 +2035,12 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
   					  // *currentTemplateSpec+=yytext; 
   					}
 <EndTemplate>"<"			{ 
-  					  current->name+='<';
-  					  // *currentTemplateSpec+='<'; 
-					  sharpCount++; 
+                                          if (roundCount==0)
+                                          {
+  					    // *currentTemplateSpec+='<'; 
+					    sharpCount++; 
+                                          }
+  					  current->name+=yytext;
 					}
 <ClassTemplSpec,EndTemplate>">>"	{
   					  if (insideJava || insideCS || insideCli || roundCount==0)
@@ -2051,7 +2058,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 <EndTemplate>">"			{
   					  current->name+='>';
 					  // *currentTemplateSpec+='>';
-					  if (--sharpCount<=0)
+					  if (roundCount==0 && --sharpCount<=0)
 					  {  
 					    //printf("Found %s\n",current->name.data());
 					    BEGIN(FindMembers);
@@ -2061,7 +2068,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
   					  lineCount();
   					  current->name+='>';
 					  // *currentTemplateSpec+='>';
-					  if (--sharpCount<=0)
+					  if (roundCount==0 && --sharpCount<=0)
 					  {
 					    current->bodyLine = yyLineNr;
 					    current->args = "(";
@@ -2075,13 +2082,16 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 <EndTemplate>">"{BN}*/"("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+ { // function pointer returning a template instance
   					  lineCount();
   					  current->name+='>';
-					  BEGIN(FindMembers);
+                                          if (roundCount==0)
+                                          {
+					    BEGIN(FindMembers);
+                                          }
   					}
 <EndTemplate>">"{BN}*/"::"		{
   					  lineCount();
   					  current->name+='>';
   					  // *currentTemplateSpec+='>';
-					  if (--sharpCount<=0)
+					  if (roundCount==0 && --sharpCount<=0)
 					  {
 					    BEGIN(FindMemberName);
 					  }
@@ -2234,6 +2244,11 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 					    insideTryBlock=FALSE;
 					    BEGIN(TryFunctionBlock);
 					  }
+                                          else if (insideCpp && qstrcmp(yytext,"alignas")==0)
+                                          {
+                                            lastAlignAsContext = YY_START;
+                                            BEGIN(AlignAs);
+                                          }
 					  else if (insideJS && qstrcmp(yytext,"var")==0)
 					  { // javascript variable
 					    current->type="var";
@@ -2565,7 +2580,6 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
   					  addType( current );
 					}
 <FindMembers,MemberSpec,Function,NextSemi,EnumBaseType,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
-  					  lineCount();
 					  if (current->bodyLine==-1)
 					  {
 					    current->bodyLine=yyLineNr;
@@ -2576,8 +2590,10 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 					                      ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
 
                                           QCString indent;
-                                          indent.fill(' ',computeIndent(yytext+1,g_column));
+                                          indent.fill(' ',computeIndent(yytext,g_column));
                                           docBlock=indent;
+                                          //printf("indent=%d\n",computeIndent(yytext+1,g_column));
+  					  lineCount();
 
 					  docBlockTerm = ';';
                                           if (YY_START==EnumBaseType && current->section==Entry::ENUM_SEC)
@@ -2598,15 +2614,15 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 					  }
   					}
 <MemberSpec,FindFields,FindMembers,NextSemi,EnumBaseType,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
-  					  lineCount();
 					  docBlockContext   = YY_START;
 					  docBlockInBody    = FALSE;
 					  docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
 					                      ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
 
                                           QCString indent;
-                                          indent.fill(' ',computeIndent(yytext+1,g_column));
+                                          indent.fill(' ',computeIndent(yytext,g_column));
                                           docBlock=indent;
+  					  lineCount();
 
 					  docBlockTerm = ',';
                                           if (YY_START==EnumBaseType && current->section==Entry::ENUM_SEC)
@@ -2627,7 +2643,6 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 					  }
   					}
 <DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" {
-  					  lineCount();
 					  if (current->bodyLine==-1)
 					  {
 					    current->bodyLine=yyLineNr;
@@ -2639,6 +2654,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
                                           QCString indent;
                                           indent.fill(' ',computeIndent(yytext,g_column));
                                           docBlock=indent;
+  					  lineCount();
 
 					  docBlockTerm = 0;
 					  if (yytext[yyleng-3]=='/')
@@ -3130,7 +3146,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 					  yyLineNr = line.mid(s,e-s).toInt();
 					  if (yytext[yyleng-1]=='\n')
 					  {
-					    yyLineNr++;
+                                            lineCount();
                                             g_column=0;
 					  }
   					}
@@ -3674,7 +3690,9 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 						}
 						else
 						{
-						  if (!isTypedef) // not typedef 
+                                                  static QRegExp re("@[0-9]+$");
+						  if (!isTypedef && memspecEntry &&
+                                                      memspecEntry->name.find(re)==-1) // not typedef or anonymous type (see bug691071)
 						  {
 						    // enabled the next two lines for bug 623424
 						    current->doc.resize(0);
@@ -4320,7 +4338,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 <CopyArgComment,CopyArgVerbatim>.	{ fullArgString+=*yytext; }
 <CopyArgComment>{CMD}("brief"|"short"){B}+ {
   					  warn(yyFileName,yyLineNr,
-					      "warning: Ignoring %cbrief command inside argument documentation",*yytext
+					      "Ignoring %cbrief command inside argument documentation",*yytext
 					     );
                                           fullArgString+=' ';
                                         }
@@ -5019,7 +5037,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 					}
 <SkipInits>;	                        {
   					  warn(yyFileName,yyLineNr,
-					      "warning: Found ';' while parsing initializer list! "
+					      "Found ';' while parsing initializer list! "
 					      "(doxygen could be confused by a macro call without semicolon)"
 					     );
 					  BEGIN( FindMembers );
@@ -5065,7 +5083,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
   					  unput(':');
 					  BEGIN(ClassVar);
   					}
-<Bases,CompoundName>";"			{ 
+<CompoundName>";"			{
 					  current->section = Entry::EMPTY_SEC ;
 					  current->type.resize(0) ;
 					  current->name.resize(0) ;
@@ -5073,6 +5091,37 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 					  current->argList->clear();
 					  BEGIN( FindMembers ) ;
 					}
+<Bases>";"			{
+					  if (insideIDL && (current->spec & (Entry::Singleton |
+					                                     Entry::Service)))
+					  {
+					    // in UNO IDL a service or singleton may be defined
+					    // completely like this: "service Foo : XFoo;"
+					    if (!current->name.isEmpty() && !current_root->name.isEmpty())
+					    {
+					      prependScope();
+					    }
+					    current->name = current->name.stripWhiteSpace();
+					    // there can be only one base class here
+					    if (!baseName.isEmpty())
+					    {
+					      current->extends->append(
+					        new BaseInfo(baseName,Public,Normal));
+					      baseName.resize(0);
+					    }
+					    current_root->addSubEntry( current ) ;
+					    current = new Entry;
+					  }
+					  else
+					  {
+					    current->section = Entry::EMPTY_SEC ;
+					    current->type.resize(0) ;
+					    current->name.resize(0) ;
+					    current->args.resize(0) ;
+					    current->argList->clear();
+					  }
+					  BEGIN( FindMembers ) ;
+					}
 <CompoundName>{SCOPENAME}{BN}*/"<"	{
   					  sharpCount = 0;
   					  current->name = yytext ;
@@ -5196,12 +5245,33 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
 <CompoundName>{SCOPENAME}/{BN}*"("	{ 
 					  current->name = yytext ;
 					  lineCount();
-					  if (current->spec & Entry::Protocol)
-					  {
-					    current->name += "-p";
-					  }
-					  BEGIN( ClassVar );
+                                          if (insideCpp && current->name=="alignas") // C++11
+                                          {
+                                            lastAlignAsContext = YY_START;
+                                            BEGIN( AlignAs );
+                                          }
+                                          else
+                                          {
+                                            if (current->spec & Entry::Protocol)
+                                            {
+                                              current->name += "-p";
+                                            }
+                                            BEGIN( ClassVar );
+                                          }
 					}
+<AlignAs>"("                            { roundCount=1; 
+                                          BEGIN( AlignAsEnd ); 
+                                        }
+<AlignAs>\n                             { lineCount(); }
+<AlignAs>.
+<AlignAsEnd>"("                         { roundCount++; }
+<AlignAsEnd>")"                         { if (--roundCount<=0) 
+                                          {
+                                            BEGIN( lastAlignAsContext ); 
+                                          }
+                                        }
+<AlignAsEnd>\n                          { lineCount(); }
+<AlignAsEnd>.
 <CompoundName>{SCOPENAME}/{BN}*","	{  // multiple forward declarations on one line
                                            // e.g. @protocol A,B;
 					  current->reset();
@@ -6166,7 +6236,7 @@ RAWEND    ")"[^ \t\(\)\\]{0,16}\"
   					}
 <DocCopyBlock><<EOF>>			{
   					  warn(yyFileName,yyLineNr,
-					      "warning: reached end of file while inside a %s block!\n"
+					      "reached end of file while inside a %s block!\n"
 					      "The command that should end the block seems to be missing!\n",
 					      docBlockName.data());
   					  yyterminate();
@@ -6546,7 +6616,11 @@ static void parseCompounds(Entry *rt)
 
 //----------------------------------------------------------------------------
 
-static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
+static void parseMain(const char *fileName,
+                      const char *fileBuf,
+                      Entry *rt,
+                      bool sameTranslationUnit,
+                      QStrList & filesInSameTranslationUnit)
 {
   initParser();
 
@@ -6568,9 +6642,17 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
     yyLineNr= 1 ; 
     yyFileName = fileName;
     setContext();
-    if (insideCpp || insideObjC)
+    bool processWithClang = insideCpp || insideObjC;
+    if (processWithClang)
     {
-      ClangParser::instance()->start(fileName);
+      if (!sameTranslationUnit) // new file
+      {
+        ClangParser::instance()->start(fileName,filesInSameTranslationUnit);
+      }
+      else
+      {
+        ClangParser::instance()->switchToFile(fileName);
+      }
     }
     rt->lang = language;
     msg("Parsing file %s...\n",yyFileName.data());
@@ -6605,7 +6687,7 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
 
     if (YY_START==Comment)
     {
-      warn(yyFileName,yyLineNr,"warning: File ended in the middle of a comment block! Perhaps a missing \\endcode?");
+      warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
     }
 
     //forceEndGroup();
@@ -6630,10 +6712,6 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
 
     anonNSCount++;
 
-    if (insideCpp || insideObjC)
-    {
-      ClangParser::instance()->finish();
-    }
   }
 }
 
@@ -6647,6 +6725,10 @@ static void parsePrototype(const QCString &text)
     warn(yyFileName,yyLineNr,"Empty prototype found!");
     return;
   }
+  if (!current) // nothing to store (see bug683516)
+  {
+    return;
+  }
 
   const char *orgInputString;
   int orgInputPosition;
@@ -6705,10 +6787,28 @@ void scanFreeScanner()
 
 //----------------------------------------------------------------------------
 
-void CLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void CLanguageScanner::startTranslationUnit(const char *)
+{
+}
+
+void CLanguageScanner::finishTranslationUnit()
+{
+  bool processWithClang = insideCpp || insideObjC;
+  if (processWithClang)
+  {
+    ClangParser::instance()->finish();
+  }
+}
+
+void CLanguageScanner::parseInput(const char *fileName,
+                                  const char *fileBuf,
+                                  Entry *root,
+                                  bool sameTranslationUnit,
+                                  QStrList & filesInSameTranslationUnit)
 {
   g_thisParser = this;
-  ::parseMain(fileName,fileBuf,root);
+  ::parseMain(fileName,fileBuf,root,
+              sameTranslationUnit,filesInSameTranslationUnit);
 }
 
 void CLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 681fe96..0380b33 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -92,7 +92,9 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
   //printf("SearchIndex::setCurrentDoc(%s,%s,%s)\n",name,baseName,anchor);
   QCString url=isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
   url+=Config_getString("HTML_FILE_EXTENSION");
+  QCString baseUrl = url;
   if (anchor) url+=QCString("#")+anchor;  
+  if (!isSourceFile) baseUrl=url;
   QCString name=ctx->qualifiedName();
   if (ctx->definitionType()==Definition::TypeMember)
   {
@@ -164,11 +166,11 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
     }
   }
 
-  int *pIndex = m_url2IdMap.find(url);
+  int *pIndex = m_url2IdMap.find(baseUrl);
   if (pIndex==0)
   {
     ++m_urlIndex;
-    m_url2IdMap.insert(url,new int(m_urlIndex));
+    m_url2IdMap.insert(baseUrl,new int(m_urlIndex));
     m_urls.insert(m_urlIndex,new URL(name,url));
   }
   else
@@ -422,11 +424,7 @@ struct SearchDocEntry
 
 struct SearchIndexExternal::Private
 {
-  Private() : docEntries(257) {}
-  //QFile f;
-  //bool openOk;
-  //FTextStream t;
-  //bool insideDoc;
+  Private() : docEntries(12251) {}
   SDict<SearchDocEntry> docEntries;
   SearchDocEntry *current;
 };
@@ -436,29 +434,11 @@ SearchIndexExternal::SearchIndexExternal() : SearchIndexIntf(External)
   p = new SearchIndexExternal::Private;
   p->docEntries.setAutoDelete(TRUE);
   p->current=0;
-  //p->f.setName(fileName);
-  //p->openOk = p->f.open(IO_WriteOnly);
-  //if (p->openOk) 
-  //{
-  //  p->t.setDevice(&p->f);
-  //  p->t << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
-  //  p->t << "<add>" << endl;
-  //  p->insideDoc=FALSE;
-  //}
 }
 
 SearchIndexExternal::~SearchIndexExternal()
 {
-  //if (p->openOk)
-  //{
-  //  if (p->insideDoc)
-  //  {
-  //    p->t << "  </doc>" << endl;
-  //  }
-  //  p->t << "</add>" << endl;
-  //  p->f.close();
-  //  p->openOk=FALSE;
-  //}
+  //printf("p->docEntries.count()=%d\n",p->docEntries.count());
   delete p;
 }
 
@@ -526,6 +506,7 @@ void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool
   QCString key = extId+";"+url;
 
   p->current = p->docEntries.find(key);
+  //printf("setCurrentDoc(url=%s,isSourceFile=%d) current=%p\n",url.data(),isSourceFile,p->current);
   if (!p->current)
   {
     SearchDocEntry *e = new SearchDocEntry;
diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp
index c50ea75..931341d 100644
--- a/src/sqlite3gen.cpp
+++ b/src/sqlite3gen.cpp
@@ -1355,7 +1355,7 @@ void generateSqlite3()
 #else // USE_SQLITE3
 void generateSqlite3()
 {
-  err("Error: sqlite3 support has not been compiled in!");
+  err("sqlite3 support has not been compiled in!");
 }
 #endif
 
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 8739c99..8b59c05 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -72,6 +72,7 @@ class TagMemberInfo
     QCString anchor;
     QCString arglist;
     QCString kind;
+    QCString clangId;
     TagAnchorInfoList docAnchors;
     Protection prot;
     Specifier virt;
@@ -87,6 +88,7 @@ class TagClassInfo
    ~TagClassInfo() { delete bases; delete templateArguments; }
     QCString name;
     QCString filename;
+    QCString clangId;
     TagAnchorInfoList docAnchors;
     QList<BaseInfo> *bases;
     QList<TagMemberInfo> members;
@@ -103,6 +105,7 @@ class TagNamespaceInfo
     TagNamespaceInfo() { members.setAutoDelete(TRUE); }
     QCString name;
     QCString filename;
+    QCString clangId;
     QStringList classList;
     QStringList namespaceList;
     TagAnchorInfoList docAnchors;
@@ -335,7 +338,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unknown compound attribute `%s' found!\n",kind.data());
+        warn("Unknown compound attribute `%s' found!\n",kind.data());
         m_state = Invalid;
       }
       if (isObjC=="yes" && m_curClass)
@@ -363,7 +366,7 @@ class TagFileParser : public QXmlDefaultHandler
         case InPackage:   m_tagFilePackages.append(m_curPackage); 
                           m_curPackage=0; break; 
         default:
-                          warn("warning: tag `compound' was not expected!\n");
+                          warn("tag `compound' was not expected!\n");
       }
     }
 
@@ -409,7 +412,7 @@ class TagFileParser : public QXmlDefaultHandler
         case InNamespace: m_curNamespace->members.append(m_curMember); break;
         case InGroup:     m_curGroup->members.append(m_curMember); break;
         case InPackage:   m_curPackage->members.append(m_curMember); break;
-        default:   warn("warning: Unexpected tag `member' found\n"); break; 
+        default:   warn("Unexpected tag `member' found\n"); break; 
       }
     }
 
@@ -425,7 +428,7 @@ class TagFileParser : public QXmlDefaultHandler
         case InMember:    m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
         case InPackage:   m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
         case InDir:       m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
-        default:   warn("warning: Unexpected tag `member' found\n"); break; 
+        default:   warn("Unexpected tag `member' found\n"); break; 
       }
     }
 
@@ -438,7 +441,7 @@ class TagFileParser : public QXmlDefaultHandler
         case InNamespace: m_curNamespace->classList.append(m_curString); break;
         case InGroup:     m_curGroup->classList.append(m_curString); break;
         case InPackage:   m_curPackage->classList.append(m_curString); break;
-        default:   warn("warning: Unexpected tag `class' found\n"); break; 
+        default:   warn("Unexpected tag `class' found\n"); break; 
       }
     }
 
@@ -449,7 +452,7 @@ class TagFileParser : public QXmlDefaultHandler
         case InNamespace: m_curNamespace->classList.append(m_curString); break;
         case InFile:      m_curFile->namespaceList.append(m_curString); break;
         case InGroup:     m_curGroup->namespaceList.append(m_curString); break;
-        default:   warn("warning: Unexpected tag `namespace' found\n"); break; 
+        default:   warn("Unexpected tag `namespace' found\n"); break; 
       }
     }
 
@@ -459,7 +462,7 @@ class TagFileParser : public QXmlDefaultHandler
       {
         case InGroup:      m_curGroup->fileList.append(m_curString); break;
         case InDir:        m_curDir->fileList.append(m_curString); break;
-        default:   warn("warning: Unexpected tag `file' found\n"); break; 
+        default:   warn("Unexpected tag `file' found\n"); break; 
       }
     }
 
@@ -468,7 +471,7 @@ class TagFileParser : public QXmlDefaultHandler
       switch(m_state)
       {
         case InGroup:      m_curGroup->fileList.append(m_curString); break;
-        default:   warn("warning: Unexpected tag `page' found\n"); break; 
+        default:   warn("Unexpected tag `page' found\n"); break; 
       }
     }
 
@@ -477,7 +480,7 @@ class TagFileParser : public QXmlDefaultHandler
       switch(m_state)
       {
         case InDir:      m_curDir->subdirList.append(m_curString); break;
-        default:   warn("warning: Unexpected tag `page' found\n"); break; 
+        default:   warn("Unexpected tag `page' found\n"); break; 
       }
     }
 
@@ -501,7 +504,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `type' found\n");
+        warn("Unexpected tag `type' found\n");
       }
     }
 
@@ -517,7 +520,7 @@ class TagFileParser : public QXmlDefaultHandler
         case InDir:       m_curDir->name       = m_curString; break;
         case InMember:    m_curMember->name    = m_curString; break;
         case InPackage:   m_curPackage->name   = m_curString; break;
-        default: warn("warning: Unexpected tag `name' found\n"); break; 
+        default: warn("Unexpected tag `name' found\n"); break; 
       }
     }
 
@@ -551,7 +554,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `base' found\n");
+        warn("Unexpected tag `base' found\n");
       }
     }
 
@@ -563,7 +566,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `base' found\n");
+        warn("Unexpected tag `base' found\n");
       }
     }
 
@@ -580,7 +583,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `includes' found\n");
+        warn("Unexpected tag `includes' found\n");
       }
       m_curString="";
     }
@@ -603,7 +606,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `templarg' found\n");
+        warn("Unexpected tag `templarg' found\n");
       }
     }
 
@@ -618,7 +621,7 @@ class TagFileParser : public QXmlDefaultHandler
         case InPage:      m_curPage->filename      = m_curString;    break;
         case InPackage:   m_curPackage->filename   = m_curString;    break;
         case InDir:       m_curDir->filename       = m_curString;    break;
-        default: warn("warning: Unexpected tag `filename' found\n"); break; 
+        default: warn("Unexpected tag `filename' found\n"); break; 
       }
     }
 
@@ -628,7 +631,7 @@ class TagFileParser : public QXmlDefaultHandler
       {
         case InFile:      m_curFile->path          = m_curString;    break;
         case InDir:       m_curDir->path           = m_curString;    break;
-        default: warn("warning: Unexpected tag `path' found\n");     break; 
+        default: warn("Unexpected tag `path' found\n");     break; 
       }
     }
     
@@ -640,9 +643,31 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
+        warn("Unexpected tag `anchor' found\n");
+      }
+    }
+
+    void endClangId()
+    {
+      if (m_state==InMember)
+      {
+        m_curMember->clangId = m_curString; 
+      }
+      else if (m_state==InClass)
+      {
+        m_curClass->clangId =  m_curString;
+      }
+      else if (m_state==InNamespace)
+      {
+        m_curNamespace->clangId = m_curString;
+      }
+      else
+      {
         warn("warning: Unexpected tag `anchor' found\n");
       }
     }
+
+
     
     void endAnchorFile()
     {
@@ -652,7 +677,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `anchorfile' found\n");
+        warn("Unexpected tag `anchorfile' found\n");
       }
     }
     
@@ -664,7 +689,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `arglist' found\n");
+        warn("Unexpected tag `arglist' found\n");
       }
     }
     void endTitle()
@@ -673,7 +698,7 @@ class TagFileParser : public QXmlDefaultHandler
       {
         case InGroup:     m_curGroup->title     = m_curString;    break;
         case InPage:      m_curPage->title      = m_curString;    break;
-        default: warn("warning: Unexpected tag `title' found\n"); break; 
+        default: warn("Unexpected tag `title' found\n"); break; 
       }
     }
 
@@ -685,7 +710,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else
       {
-        warn("warning: Unexpected tag `subgroup' found\n");
+        warn("Unexpected tag `subgroup' found\n");
       }
     }
 
@@ -727,6 +752,7 @@ class TagFileParser : public QXmlDefaultHandler
       m_startElementHandlers.insert("path",        new StartElementHandler(this,&TagFileParser::startStringValue));
       m_startElementHandlers.insert("anchorfile",  new StartElementHandler(this,&TagFileParser::startStringValue));
       m_startElementHandlers.insert("anchor",      new StartElementHandler(this,&TagFileParser::startStringValue));
+      m_startElementHandlers.insert("clangid",     new StartElementHandler(this,&TagFileParser::startStringValue));
       m_startElementHandlers.insert("arglist",     new StartElementHandler(this,&TagFileParser::startStringValue));
       m_startElementHandlers.insert("title",       new StartElementHandler(this,&TagFileParser::startStringValue));
       m_startElementHandlers.insert("subgroup",    new StartElementHandler(this,&TagFileParser::startStringValue));
@@ -749,6 +775,7 @@ class TagFileParser : public QXmlDefaultHandler
       m_endElementHandlers.insert("path",        new EndElementHandler(this,&TagFileParser::endPath));
       m_endElementHandlers.insert("anchorfile",  new EndElementHandler(this,&TagFileParser::endAnchorFile));
       m_endElementHandlers.insert("anchor",      new EndElementHandler(this,&TagFileParser::endAnchor));
+      m_endElementHandlers.insert("clangid",     new EndElementHandler(this,&TagFileParser::endClangId));
       m_endElementHandlers.insert("arglist",     new EndElementHandler(this,&TagFileParser::endArglist));
       m_endElementHandlers.insert("title",       new EndElementHandler(this,&TagFileParser::endTitle));
       m_endElementHandlers.insert("subgroup",    new EndElementHandler(this,&TagFileParser::endSubgroup));
@@ -776,7 +803,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else 
       {
-        warn("warning: Unknown tag `%s' found!\n",name.data());
+        warn("Unknown tag `%s' found!\n",name.data());
       }
       return TRUE;
     }
@@ -791,7 +818,7 @@ class TagFileParser : public QXmlDefaultHandler
       }
       else 
       {
-        warn("warning: Unknown tag `%s' found!\n",name.data());
+        warn("Unknown tag `%s' found!\n",name.data());
       }
       return TRUE;
     }
@@ -1079,6 +1106,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
     me->virt       = tmi->virt;
     me->stat       = tmi->isStatic;
     me->fileName   = ce->fileName;
+    me->id         = tmi->clangId;
     if (ce->section == Entry::GROUPDOC_SEC)
     {
       me->groups->append(new Grouping(ce->name,Grouping::GROUPING_INGROUP));
@@ -1204,8 +1232,9 @@ void TagFileParser::buildLists(Entry *root)
     TagInfo *ti  = new TagInfo;
     ti->tagName  = m_tagName;
     ti->fileName = tci->filename;
-    ce->tagInfo = ti;
-    ce->lang = tci->isObjC ? SrcLangExt_ObjC : SrcLangExt_Unknown;
+    ce->id       = tci->clangId;
+    ce->tagInfo  = ti;
+    ce->lang     = tci->isObjC ? SrcLangExt_ObjC : SrcLangExt_Unknown;
     // transfer base class list
     if (tci->bases)
     {
@@ -1286,6 +1315,7 @@ void TagFileParser::buildLists(Entry *root)
     TagInfo *ti  = new TagInfo;
     ti->tagName  = m_tagName;
     ti->fileName = tni->filename;
+    ne->id       = tni->clangId;
     ne->tagInfo  = ti;
 
     buildMemberList(ne,tni->members);
diff --git a/src/tclscanner.h b/src/tclscanner.h
index f06f3de..a7c0dde 100644
--- a/src/tclscanner.h
+++ b/src/tclscanner.h
@@ -29,9 +29,13 @@ class TclLanguageScanner : public ParserInterface
 {
   public:
     virtual ~TclLanguageScanner() {}
+    void startTranslationUnit(const char *) {}
+    void finishTranslationUnit() {}
     void parseInput(const char *fileName,
                     const char *fileBuf,
-                    Entry *root);
+                    Entry *root,
+                    bool sameTranslationUnit,
+                    QStrList &filesInSameTranslationUnit);
     bool needsPreprocessing(const QCString &extension);
     void parseCode(CodeOutputInterface &codeOutIntf,
                    const char *scopeName,
diff --git a/src/tclscanner.l b/src/tclscanner.l
index b91d7c4..73b2b58 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -1651,7 +1651,7 @@ static void tcl_codify_link(QCString name)
     if (tcl.memberdef)
     {
         myDef->addSourceReferencedBy(tcl.memberdef);
-        tcl.memberdef->addSourceReferences(myDef,NULL);
+        tcl.memberdef->addSourceReferences(myDef);
     }
   }
   else if (tcl_keyword(myName)) // check keyword
@@ -1899,7 +1899,7 @@ D
   tcl.entry_current->endBodyLine = tcl.line_body1;
   tcl_protection(tcl.entry_current);
   tcl_command_ARGLIST(*tcl.list_commandwords.at(2));
-  myEntryCl->addSubEntry(tcl.entry_current);
+  if (myEntryCl) myEntryCl->addSubEntry(tcl.entry_current);
   myEntry = tcl.entry_current;
   tcl.fn.insert(myName,myEntry);
   myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),
@@ -2527,7 +2527,11 @@ static void tcl_parse(const QCString ns, const QCString cls)
 }
 
 //! Parse text file and build up entry tree.
-void TclLanguageScanner::parseInput(const char *fileName,const char *input,Entry *root)
+void TclLanguageScanner::parseInput(const char *fileName,
+                                    const char *input,
+                                    Entry *root,
+                                    bool /*sameTranslationUnit*/,
+                                    QStrList & /*filesInSameTranslationUnit*/)
 {
   QFile            myFile;
 tcl_inf("%s\n",fileName);
diff --git a/src/textdocvisitor.cpp b/src/textdocvisitor.cpp
index bc45de2..9275846 100644
--- a/src/textdocvisitor.cpp
+++ b/src/textdocvisitor.cpp
@@ -127,7 +127,7 @@ void TextDocVisitor::visit(DocSymbol *s)
     case DocSymbol::LeftFloor:     m_t << "&lfloor;"; break;
     case DocSymbol::RightFloor:    m_t << "&rfloor;"; break;
     default:
-                             err("error: unknown symbol found\n");
+                             err("unknown symbol found\n");
   }
 }
 
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 4a4db9d..ad89b4b 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -22,7 +22,7 @@ class TranslatorAdapterBase : public Translator
     inline QCString createUpdateNeededMessage(const QCString & languageName,
                                               const QCString & versionString)
     {
-      return QCString("Warning: The selected output language \"")
+      return QCString("The selected output language \"")
              + languageName
              + "\" has not been updated\nsince "
              + versionString
diff --git a/src/translator_ar.h b/src/translator_ar.h
index 8b6b2e0..156a471 100644
--- a/src/translator_ar.h
+++ b/src/translator_ar.h
@@ -78,82 +78,82 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     /*! used in the compound documentation before a list of related functions. */
     virtual QCString trRelatedFunctions()
-    { return "���� ��� ���"; }
+    { return "دوال ذات صلة"; }
 
     /*! subscript for the related functions. */
     virtual QCString trRelatedSubscript()
-    { return "(���� �� ��� ������ ���� �����)"; }
+    { return "(لاحظ أن هذه الدوال ليست أعضاء)"; }
 
     /*! header that is put before the detailed description of files, classes and namespaces. */
     virtual QCString trDetailedDescription()
-    { return "��� ������"; }
+    { return "وصف تفصيلي"; }
 
     /*! header that is put before the list of typedefs. */
     virtual QCString trMemberTypedefDocumentation()
-    { return "����� ������� ����� �������"; }
+    { return "توثيق تعريفات النوع الأعضاء"; }
     
     /*! header that is put before the list of enumerations. */
     virtual QCString trMemberEnumerationDocumentation()
-    { return "����� �������� �������"; }
+    { return "توثيق العدديات الأعضاء"; }
     
     /*! header that is put before the list of member functions. */
     virtual QCString trMemberFunctionDocumentation()
-    { return "����� ������ �������"; }
+    { return "توثيق الدوال الأعضاء"; }
     
     /*! header that is put before the list of member attributes. */
     virtual QCString trMemberDataDocumentation()
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "����� �����"; 
+        return "توثيق الحقل"; 
       }
       else
       {
-        return "����� ������ �����"; 
+        return "توثيق البيان العضو"; 
       }
     }
 
     /*! this is the text of a link put after brief descriptions. */
     virtual QCString trMore() 
-    { return "������ ..."; }
+    { return "المزيد ..."; }
 
     /*! put in the class documentation */
     virtual QCString trListOfAllMembers()
-    { return "���� �� �������"; }
+    { return "اعرض كل الأعضاء"; }
 
     /*! used as the title of the "list of all members" page of a class */
     virtual QCString trMemberList()
-    { return "����� �������"; }
+    { return "قائمة الأعضاء"; }
 
     /*! this is the first part of a sentence that is followed by a class name */
     virtual QCString trThisIsTheListOfAllMembers()
-    { return "��� ����� ��� ������� �� "; }
+    { return "هذه فائمة بكل الأعضاء في "; }
 
     /*! this is the remainder of the sentence after the class name */
     virtual QCString trIncludingInheritedMembers()
-    { return ", ������ �� ������� ��������"; }
+    { return ", متضمنة كل الأعضاء الموروثة"; }
     
     /*! this is put at the author sections at the bottom of man pages.
      *  parameter s is name of the project name.
      */
     virtual QCString trGeneratedAutomatically(const char *s)
-    { QCString result="�� ������� ���� ������ Doxygen";
-      if (s) result+=(QCString)" �� "+s;
-      result+=" �� ����� ������."; 
+    { QCString result="تم تكوينها آليا بواسطة Doxygen";
+      if (s) result+=(QCString)" لـ "+s;
+      result+=" من ملفات المصدر."; 
       return result;
     }
 
     /*! put after an enum name in the list of all members */
     virtual QCString trEnumName()
-    { return "����� ������"; }
+    { return "الإسم العددي"; }
     
     /*! put after an enum value in the list of all members */
     virtual QCString trEnumValue()
-    { return "������ �������"; }
+    { return "القيمة العددية"; }
     
     /*! put after an undocumented member in the list of all members */
     virtual QCString trDefinedIn()
-    { return "���� ��"; }
+    { return "معرف في"; }
 
     // quick reference sections
 
@@ -161,43 +161,43 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  compounds or files (see the \\group command).
      */
     virtual QCString trModules()
-    { return "������"; }
+    { return "مكونات"; }
     
     /*! This is put above each page as a link to the class hierarchy */
     virtual QCString trClassHierarchy()
-    { return "����� ������ �����"; }
+    { return "الشكل الهرمي للفئة"; }
     
     /*! This is put above each page as a link to the list of annotated classes */
     virtual QCString trCompoundList()
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "����� ��������";
+        return "هياكل البيانات";
       }
       else
       {
-        return "����� ������"; 
+        return "قائمة الفئات"; 
       }
     }
     
     /*! This is put above each page as a link to the list of documented files */
     virtual QCString trFileList()
-    { return "����� �������"; }
+    { return "قائمة الملفات"; }
 
     /*! This is put above each page as a link to the list of all verbatim headers */
     virtual QCString trHeaderFiles()
-    { return "������� �������"; }
+    { return "الملفات الرأسية"; }
 
     /*! This is put above each page as a link to all members of compounds. */
     virtual QCString trCompoundMembers()
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "���� ��������"; 
+        return "حقول البيانات"; 
       }
       else
       {
-        return "����� �����"; 
+        return "أعضاء الفئة"; 
       }
     }
 
@@ -206,38 +206,38 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "������"; 
+        return "العوام"; 
       }
       else
       {
-        return "����� �����"; 
+        return "أعضاء الملف"; 
       }
     }
 
     /*! This is put above each page as a link to all related pages. */
     virtual QCString trRelatedPages()
-    { return "����� ��� ���"; }
+    { return "صفحات ذات صلة"; }
 
     /*! This is put above each page as a link to all examples. */
     virtual QCString trExamples()
-    { return "�����"; }
+    { return "أمثلة"; }
 
     /*! This is put above each page as a link to the search engine. */
     virtual QCString trSearch()
-    { return "���"; }
+    { return "بحث"; }
 
     /*! This is an introduction to the class hierarchy. */
     virtual QCString trClassHierarchyDescription()
-    { return "����� ������� ��� �� ������� ������ ����� ������� � "
-             "���� ��� ����� ����:";
+    { return "قائمة التوارث هذه تم ترتيبها أبجديا بصورة تقريبية ، "
+             "ولكن ليس بصورة تامة:";
     }
 
     /*! This is an introduction to the list with all files. */
     virtual QCString trFileListDescription(bool extractAll)
     {
-      QCString result="��� ����� ��� �������";
-      if (!extractAll) result+="������� ";
-	  result+="�� ��� ����� :";
+      QCString result="هذه قائمة بكل الملفات";
+      if (!extractAll) result+="الموثقة ";
+	  result+="مع وصف مختصر :";
       return result;
     }
 
@@ -247,53 +247,53 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
       
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "��� �� ����� �������� �� ��� �����:"; 
+        return "هذه هي هياكل البيانات مع وصف مختصر:"; 
       }
       else
       {
-        return "��� �� ������ � �������� �"
-			"��������� ��������� �� ��� �����:"; 
+        return "هذه هي الفئات ، البناءات ،"
+			"الإتحادات والواجهات مع وصف مختصر:"; 
       }
     }
 
     /*! This is an introduction to the page with all class members. */
     virtual QCString trCompoundMembersDescription(bool extractAll)
     {
-      QCString result="��� ����� ��� ";
+      QCString result="هذه قائمة بكل ";
       
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        result+="���� �������� ����������";
+        result+="حقول البناءات والإتحادات";
       }
       else
       {
-        result+="����� �����";
+        result+="أعضاء الفئة";
       }
 	  if (!extractAll)
       {
-        result+=" ������� ";
+        result+=" الموثقة ";
       }
-      result+=" �� ����� ��� ";
+      result+=" مع وصلات إلى ";
       if (!extractAll) 
       {
         if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
         {
-          result+="����� ������/������� ��� ���:";
+          result+="توثيق البناء/الإتحاد لكل حقل:";
         }
         else
         {
-          result+="����� ����� ��� ���:";
+          result+="توثيق الفئة لكل عضو:";
         }
       }
       else 
       {
         if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
         {
-          result+="��������/��������� ���� ������ �����:";
+          result+="البناءات/الإتحادات التي ينتمون إليها:";
         }
         else
         {
-          result+="������ ���� ������ �����:";
+          result+="الفئات التي ينتمون إليها:";
         }
       }
       return result;
@@ -327,40 +327,40 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     /*! This is an introduction to the page with the list of all examples */
     virtual QCString trExamplesDescription()
-    { return "��� ����� ��� �������:"; }
+    { return "هذه قائمة بكل الأمثلة:"; }
 
     /*! This is an introduction to the page with the list of related pages */
     virtual QCString trRelatedPagesDescription()
-    { return "��� ����� ��� ����� ������� ��� �����:"; }
+    { return "هذه قائمة بكل صفحات التوثيق ذات الصلة:"; }
 
     /*! This is an introduction to the page with the list of class/file groups */
     virtual QCString trModulesDescription()
-    { return "��� ����� ��� ��������:"; }
+    { return "هذه قائمة بكل المكونات:"; }
 
     /*! This sentences is used in the annotated class/file lists if no brief
      * description is given. 
      */
     virtual QCString trNoDescriptionAvailable()
-    { return "�� ���� ��� ����"; }
+    { return "لا يوجد وصف متاح"; }
     
     // index titles (the project name is prepended for these) 
 
 
     /*! This is used in HTML as the title of index.html. */
     virtual QCString trDocumentation()
-    { return "�������"; }
+    { return "التوثيق"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * index of all groups.
      */
     virtual QCString trModuleIndex()
-    { return "���� ��������"; }
+    { return "فهرس المكونات"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * class hierarchy.
      */
     virtual QCString trHierarchicalIndex()
-    { return "������ ������"; }
+    { return "الفهرس الهرمي"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * annotated compound index.
@@ -369,11 +369,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       { 
-        return "���� ���� ��������";
+        return "فهرس هيكل البيانات";
       }
       else
       {
-        return "���� �����"; 
+        return "فهرس الفئة"; 
       }
     }
 
@@ -381,13 +381,13 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      * list of all files.
      */
     virtual QCString trFileIndex() 
-    { return "���� �������"; }
+    { return "فهرس الملفات"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all groups.
      */
     virtual QCString trModuleDocumentation()
-    { return "����� ������"; }
+    { return "توثيق المكون"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all classes, structs and unions.
@@ -396,11 +396,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "���� ���� ��������"; 
+        return "فهرس هيكل البيانات"; 
       }
       else
       {
-        return "���� �����"; 
+        return "فهرس الفئة"; 
       }
     }
 
@@ -408,29 +408,29 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  the documentation of all files.
      */
     virtual QCString trFileDocumentation()
-    { return "����� �������"; }
+    { return "توثيق الملفات"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all examples.
      */
     virtual QCString trExampleDocumentation()
-    { return "����� �������"; }
+    { return "توثيق الأمثلة"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all related pages.
      */
     virtual QCString trPageDocumentation()
-    { return "����� �������"; }
+    { return "توثيق الصفحات"; }
 
     /*! This is used in LaTeX as the title of the document */
     virtual QCString trReferenceManual()
-    { return "������ �������"; }
+    { return "الكتيب المرجعي"; }
     
     /*! This is used in the documentation of a file as a header before the 
      *  list of defines
      */
     virtual QCString trDefines()
-    { return "���������"; }
+    { return "التعريفات"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of function prototypes
@@ -448,19 +448,19 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  list of enumerations
      */
     virtual QCString trEnumerations()
-    { return "��������"; }
+    { return "العدديات"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of (global) functions
      */
     virtual QCString trFunctions()
-    { return "������"; }
+    { return "الدوال"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of (global) variables
      */
     virtual QCString trVariables()
-    { return "���������"; }
+    { return "المتغيرات"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of (global) variables
@@ -502,13 +502,13 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  of documentation blocks for functions
      */
     virtual QCString trFunctionDocumentation()
-    { return "����� ������"; }
+    { return "توثيق الدالة"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for variables
      */
     virtual QCString trVariableDocumentation()
-    { return "����� �������"; }
+    { return "توثيق المتغير"; }
 
     /*! This is used in the documentation of a file/namespace/group before 
      *  the list of links to documented compounds
@@ -517,11 +517,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "����� ��������"; 
+        return "هياكل البيانات"; 
       }
       else
       {
-        return "������"; 
+        return "الفئات"; 
       }
     }
 
@@ -539,7 +539,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trWrittenBy()
     {
-      return "��� ������";
+      return "كتب بواسطة";
     }
 
     /*! this text is put before a class diagram */
@@ -550,7 +550,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     
     /*! this text is generated when the \\internal command is used. */
     virtual QCString trForInternalUseOnly()
-    { return "��������� ������� ���."; }
+    { return "للاستخدام الداخلي فقط."; }
 
     /*! this text is generated when the \\reimp command is used. */
     virtual QCString trReimplementedForInternalReasons()
@@ -558,7 +558,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     /*! this text is generated when the \\warning command is used. */
     virtual QCString trWarning()
-    { return "�����"; }
+    { return "تنبيه"; }
 
     /*! this text is generated when the \\bug command is used. */
     virtual QCString trBugsAndLimitations()
@@ -566,11 +566,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     /*! this text is generated when the \\version command is used. */
     virtual QCString trVersion()
-    { return "������"; }
+    { return "إصدارة"; }
 
     /*! this text is generated when the \\date command is used. */
     virtual QCString trDate()
-    { return "�����"; }
+    { return "تاريخ"; }
 
     /*! this text is generated when the \\return command is used. */
     virtual QCString trReturns()
@@ -578,7 +578,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     /*! this text is generated when the \\sa command is used. */
     virtual QCString trSeeAlso()
-    { return "���� ����"; }
+    { return "انظر أيضا"; }
 
     /*! this text is generated when the \\param command is used. */
     virtual QCString trParameters()
@@ -586,11 +586,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     /*! this text is generated when the \\exception command is used. */
     virtual QCString trExceptions()
-    { return "���������"; }
+    { return "استثناءات"; }
     
     /*! this text is used in the title page of a LaTeX document. */
     virtual QCString trGeneratedBy()
-    { return "����� ������"; }
+    { return "انتجت بواسطة"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990307
@@ -598,7 +598,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     
     /*! used as the title of page containing all the index of all namespaces. */
     virtual QCString trNamespaceList()
-    { return "����� ������ �������"; }
+    { return "قائمة مجالات الأسماء"; }
 
     /*! used as an introduction to the namespace list */
     virtual QCString trNamespaceListDescription(bool extractAll)
@@ -765,13 +765,13 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  index of all namespaces.
      */
     virtual QCString trNamespaceIndex()
-    { return "���� ������ �������"; }
+    { return "فهرس مجالات الأسماء"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all namespaces.
      */
     virtual QCString trNamespaceDocumentation()
-    { return "����� ������ �������"; }
+    { return "توثيق مجالات الأسماء"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990522
@@ -781,7 +781,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  namespaces in a file.
      */
     virtual QCString trNamespaces()
-    { return "������ �������"; }
+    { return "مجالات الأسماء"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990728
@@ -794,20 +794,20 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
         bool single)
     { // here s is one of " Class", " Struct" or " Union"
       // single is true implies a single file
-      QCString result=(QCString)"�����   ";
+      QCString result=(QCString)"توثيق   ";
       switch(compType)
       {
-        case ClassDef::Class:      result+="��� �����"; break;
-        case ClassDef::Struct:     result+="��� ������"; break;
-        case ClassDef::Union:      result+="��� �������"; break;
-        case ClassDef::Interface:  result+="��� �������"; break;
-        case ClassDef::Protocol:   result+="��� ����������"; break;
-        case ClassDef::Category:   result+="��� �������"; break;
-        case ClassDef::Exception:  result+="��� ���������"; break;
+        case ClassDef::Class:      result+="هذه الفئة"; break;
+        case ClassDef::Struct:     result+="هذا البناء"; break;
+        case ClassDef::Union:      result+="هذا الإتحاد"; break;
+        case ClassDef::Interface:  result+="هذه الواجهة"; break;
+        case ClassDef::Protocol:   result+="هذا البروتوكول"; break;
+        case ClassDef::Category:   result+="هذا التصنيف"; break;
+        case ClassDef::Exception:  result+="هذا الإستثناء"; break;
         default: break;
       }
-      result+=" �� ������ �� ";
-	  if (single) result+="��� �����:"; else result+="��� �������:";
+      result+=" تم تكوينه من ";
+	  if (single) result+="هذا الملف:"; else result+="هذه الملفات:";
       return result;
     }
 
@@ -815,7 +815,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      * list.
      */
     virtual QCString trAlphabeticalList()
-    { return "����� ������"; }
+    { return "قائمة أبجدية"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990901
@@ -823,18 +823,18 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     /*! This is used as the heading text for the retval command. */
     virtual QCString trReturnValues()
-    { return "��� ������"; }
+    { return "قيم العودة"; }
 
     /*! This is in the (quick) index as a link to the main page (index.html)
      */
     virtual QCString trMainPage()
-    { return "������ ��������"; }
+    { return "الصفحة الرئيسية"; }
 
     /*! This is used in references to page that are put in the LaTeX 
      *  documentation. It should be an abbreviation of the word page.
      */
     virtual QCString trPageAbbreviation()
-    { return "�."; }
+    { return "ص."; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-991003
@@ -842,7 +842,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     virtual QCString trSources()
     {
-      return "�����";
+      return "مصادر";
     }
     virtual QCString trDefinedAtLineInSourceFile()
     {
@@ -869,68 +869,68 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     /*! this text is put before a collaboration diagram */
     virtual QCString trCollaborationDiagram(const char *clName)
     {
-      return (QCString)"��� ������� �� "+clName+":";
+      return (QCString)"رسم التعاون لـ "+clName+":";
     }
     /*! this text is put before an include dependency graph */
     virtual QCString trInclDepGraph(const char *fName)
     {
-      return (QCString)"��� �������� ������� �� "+fName+":";
+      return (QCString)"رسم اعتمادية التضمين لـ "+fName+":";
     }
     /*! header that is put before the list of constructor/destructors. */
     virtual QCString trConstructorDocumentation()
     {
-      return "����� ���� ������ ������"; 
+      return "توثيق دوال البناء والهدم"; 
     }
     /*! Used in the file documentation to point to the corresponding sources. */
     virtual QCString trGotoSourceCode()
     {
-      return "���� ��� ����� ����� ���� �����.";
+      return "اذهب إلى الكود الخاص بهذا الملف.";
     }
     /*! Used in the file sources to point to the corresponding documentation. */
     virtual QCString trGotoDocumentation()
     {
-      return "���� ��� ����� ��� �����.";
+      return "اذهب إلى توثيق هذا الملف.";
     }
     /*! Text for the \\pre command */
     virtual QCString trPrecondition()
     {
-      return "��� ����";
+      return "شرط سابق";
     }
     /*! Text for the \\post command */
     virtual QCString trPostcondition()
     {
-      return "��� ����";
+      return "شرط لاحق";
     }
     /*! Text for the \\invariant command */
     virtual QCString trInvariant()
     {
-      return "����";
+      return "ثابت";
     }
     /*! Text shown before a multi-line variable/enum initialization */
     virtual QCString trInitialValue()
     {
-		return "���� ������:";
+		return "قيمة مبدئية:";
     }
     /*! Text used the source code in the file index */
     virtual QCString trCode()
     {
-      return "���";
+      return "كود";
     }
     virtual QCString trGraphicalHierarchy()
     {
-      return "����� ������� ������";
+      return "الشكل الرسومي للفئات";
     }
     virtual QCString trGotoGraphicalHierarchy()
     {
-      return "���� ��� ����� ������ ������� ������";
+      return "اذهب إلى الشكل الهرمي الرسومي للفئات";
     }
     virtual QCString trGotoTextualHierarchy()
     {
-      return "���� ��� ����� ������ ����� ������";
+      return "اذهب إلى الشكل الهرمي النصي للفئات";
     }
     virtual QCString trPageIndex()
     {
-      return "���� �������";
+      return "فهرس الصفحات";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -939,50 +939,50 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     
     virtual QCString trNote()
     {
-      return "�������";
+      return "ملاحظات";
     }
     virtual QCString trPublicTypes()
     {
-      return "����� ����";
+      return "أنواع عامة";
     }
     virtual QCString trPublicAttribs()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "���� ������";
+        return "حقول بيانات";
       }
       else
       {
-        return "���� ����";
+        return "صفات عامة";
       }
     }
     virtual QCString trStaticPublicAttribs()
     {
-      return "���� ����� ����";
+      return "صفات ساكنة عامة";
     }
     virtual QCString trProtectedTypes()
     {
-      return "����� �����";
+      return "أنواع محمية";
     }
     virtual QCString trProtectedAttribs()
     {
-      return "���� �����";
+      return "صفات محمية";
     }
     virtual QCString trStaticProtectedAttribs()
     {
-      return "���� ����� �����";
+      return "صفات ساكنة محمية";
     }
     virtual QCString trPrivateTypes()
     {
-      return "����� ����";
+      return "أنواع خاصة";
     }
     virtual QCString trPrivateAttribs()
     {
-      return "���� ����";
+      return "صفات خاصة";
     }
     virtual QCString trStaticPrivateAttribs()
     {
-      return "���� ����� ����";
+      return "صفات ساكنة خاصة";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -992,12 +992,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     /*! Used as a marker that is put before a \\todo item */
     virtual QCString trTodo()
     {
-      return "����";
+      return "مهام";
     }
     /*! Used as the header of the todo list */
     virtual QCString trTodoList()
     {
-      return "����� ������";
+      return "قائمة المهام";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1006,24 +1006,24 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
 
     virtual QCString trReferencedBy()
     {
-      return "��� ������";
+      return "ذكر بواسطة";
     }
     virtual QCString trRemarks()
     {
-      return "�������";
+      return "تعليقات";
     }
     virtual QCString trAttention()
     {
-      return "�����";
+      return "انتبه";
     }
     virtual QCString trInclByDepGraph()
     {
-      return "��� ����� ���� ������� ���� ���� ��� �����"
-             "����� ������ �� ��� ������:";
+      return "هذا الرسم يوضح الملفات التي ضمنت هذا الملف"
+             "بصورة مباشرة أو غير مباشرة:";
     }
     virtual QCString trSince()
     {
-      return "���";
+      return "منذ";
     }
     
 //////////////////////////////////////////////////////////////////////////
@@ -1113,12 +1113,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     /*! Used as a marker that is put before a test item */
     virtual QCString trTest()
     {
-      return "������";
+      return "اختبار";
     }
     /*! Used as the header of the test list */
     virtual QCString trTestList()
     {
-      return "����� ����������";
+      return "قائمة الإختبارات";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1138,12 +1138,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     /*! Used as a section header for IDL properties */
     virtual QCString trProperties()
     {
-      return "�����";
+      return "خصائص";
     }
     /*! Used as a section header for IDL property documentation */
     virtual QCString trPropertyDocumentation()
     {
-      return "����� �������";
+      return "توثيق الخاصية";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1153,49 +1153,49 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     /*! Used for Java interfaces in the summary section of Java packages */
     virtual QCString trInterfaces()
     {
-      return "������";
+      return "واجهات";
     }
     /*! Used for Java classes in the summary section of Java packages */
     virtual QCString trClasses()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "����� ��������";
+        return "هياكل البيانات";
       }
       else
       {
-        return "����";
+        return "فئات";
       }
     }
     /*! Used as the title of a Java package */
     virtual QCString trPackage(const char *name)
     {
-      return (QCString)"���� "+name;
+      return (QCString)"حزمة "+name;
     }
     /*! Title of the package index page */
     virtual QCString trPackageList()
     {
-      return "����� �����";
+      return "قائمة الحزم";
     }
     /*! The description of the package index page */
     virtual QCString trPackageListDescription()
     {
-		return "��� �� ����� �� ��� ����� ��� ���� )�� ���( :";	  
+		return "هذه هي الحزم مع وصف مختصر لكل منها )إن وجد( :";	  
     }
     /*! The link name in the Quick links header for each page */
     virtual QCString trPackages()
     {
-      return "���";
+      return "حزم";
     }
     /*! Used as a chapter title for Latex & RTF output */
     virtual QCString trPackageDocumentation()
     {
-      return "����� �����";
+      return "توثيق الحزم";
     }
     /*! Text shown before a multi-line define */
     virtual QCString trDefineValue()
     {
-		return "������:";
+		return "القيمة:";
     }
     
 //////////////////////////////////////////////////////////////////////////
@@ -1205,12 +1205,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     /*! Used as a marker that is put before a \\bug item */
     virtual QCString trBug()
     {
-      return "����";
+      return "ثغرة";
     }
     /*! Used as the header of the bug list */
     virtual QCString trBugList()
     {
-      return "����� �������";
+      return "قائمة الثغرات";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1259,7 +1259,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     /*! Used as header RTF general index */
     virtual QCString trRTFGeneralIndex()
     {
-      return "����";
+      return "فهرس";
     }
    
     /*! This is used for translation of the word that will possibly
@@ -1268,8 +1268,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trClass(bool /*first_capital*/, bool singular)
     { 
-      QCString result("���");
-      if (!singular)  result="����";
+      QCString result("فئة");
+      if (!singular)  result="فئات";
       return result; 
     }
 
@@ -1279,8 +1279,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trFile(bool /*first_capital*/, bool singular)
     { 
-      QCString result("���");
-      if (!singular)  result="�����";
+      QCString result("ملف");
+      if (!singular)  result="ملفات";
       return result; 
     }
 
@@ -1290,8 +1290,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trNamespace(bool /*first_capital*/, bool singular)
     { 
-      QCString result("���� �����");
-      if (!singular)  result="������ �����";
+      QCString result("مجال أسماء");
+      if (!singular)  result="مجالات أسماء";
       return result; 
     }
 
@@ -1301,8 +1301,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trGroup(bool /*first_capital*/, bool singular)
     { 
-      QCString result("������");
-      if (!singular)  result="�������";
+      QCString result("مجموعة");
+      if (!singular)  result="مجموعات";
       return result; 
     }
 
@@ -1312,8 +1312,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trPage(bool /*first_capital*/, bool singular)
     { 
-      QCString result("����");
-      if (!singular)  result="�����";
+      QCString result("صفحة");
+      if (!singular)  result="صفحات";
       return result; 
     }
 
@@ -1323,8 +1323,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trMember(bool /*first_capital*/, bool singular)
     { 
-      QCString result("���");
-      if (!singular)  result="�����";
+      QCString result("عضو");
+      if (!singular)  result="أعضاء";
       return result; 
     }
    
@@ -1334,8 +1334,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trField(bool /*first_capital*/, bool singular)
     { 
-      QCString result("���");
-      if (!singular)  result="����";
+      QCString result("حقل");
+      if (!singular)  result="حقول";
       return result; 
     }
 
@@ -1345,8 +1345,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trGlobal(bool /*first_capital*/, bool singular)
     { 
-      QCString result("���");
-      if (!singular)  result="����";
+      QCString result("عام");
+      if (!singular)  result="عوام";
       return result; 
     }
 
@@ -1358,8 +1358,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  for the author section in man pages. */
     virtual QCString trAuthor(bool /*first_capital*/, bool singular)
     {                                                                         
-      QCString result("������");
-      if (!singular)  result="��������";
+      QCString result("المؤلف");
+      if (!singular)  result="المؤلفون";
       return result; 
     }
 
@@ -1371,7 +1371,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trReferences()
     {
-      return "�������";
+      return "مرجعيات";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1403,7 +1403,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trRTFTableOfContents()
     {
-      return "���� ���������";
+      return "جدول المحتويات";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1427,12 +1427,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trEvents()
     {
-      return "�������";
+      return "الأحداث";
     }
     /*! Header used for the documentation section of a class' events. */
     virtual QCString trEventDocumentation()
     {
-      return "����� �������";
+      return "توثيق الأحداث";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1443,35 +1443,35 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trPackageTypes()
     { 
-      return "����� ������";
+      return "أنواع الحزمة";
     }
     /*! Used as a heading for a list of Java class functions with package 
      * scope. 
      */
     virtual QCString trPackageMembers()
     { 
-      return "���� ������";
+      return "دوال الحزمة";
     }
     /*! Used as a heading for a list of static Java class functions with 
      *  package scope.
      */
     virtual QCString trStaticPackageMembers()
     { 
-      return "���� ����� ������";
+      return "دوال ساكنة للحزمة";
     }
     /*! Used as a heading for a list of Java class variables with package 
      * scope.
      */
     virtual QCString trPackageAttribs()
     { 
-      return "����� ������";
+      return "خصائص الحزمة";
     }
     /*! Used as a heading for a list of static Java class variables with 
      * package scope.
      */
     virtual QCString trStaticPackageAttribs()
     { 
-      return "����� ����� ������";
+      return "خصائص ساكنة للحزمة";
     }
     
 //////////////////////////////////////////////////////////////////////////
@@ -1483,12 +1483,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trAll()
     {
-      return "����";
+      return "الكل";
     }
     /*! Put in front of the call graph for a function. */
     virtual QCString trCallGraph()
     {
-		return "��� �� ��� ��������� ���� ������:";
+		return "هذا هو رسم الاستدعاء لهذه الدالة:";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1501,14 +1501,14 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trSearchForIndex()
     {
-      return "��� ��";
+      return "بحث عن";
     }
     /*! This string is used as the title for the page listing the search
      *  results.
      */
     virtual QCString trSearchResultsTitle()
     {
-      return "����� �����";
+      return "نتائج البحث";
     }
     /*! This string is put just before listing the search results. The
      *  text can be different depending on the number of documents found.
@@ -1522,16 +1522,16 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
     {
       if (numDocuments==0)
       {
-        return "���� � �� ���� ����� ����� ��� ���� ���.";
+        return "عفوا ، لا يوجد توثيق ملائم لما بحثت عنه.";
       }
       else if (numDocuments==1)
       {
-        return "����� ������ ��� ���� ���. <b>1</b> �� ������ ���.";
+        return "وثيقة مناسبة لما بحثت عنه. <b>1</b> تم العثور على.";
       }
       else 
       {
-        return "����� ������ ��� ���� ��� <b>$num</b> �� ����� ."
-               "��� ������� ���� ���� ������ ������ ����� ����.";
+        return "وثيقة مطابقة لما بحثت عنه <b>$num</b> تم إيجاد ."
+               "وتم ترتيبهم بحيث يكون الأقرب لنتيجة البحث أولا.";
       }
     }
     /*! This string is put before the list of matched words, for each search 
@@ -1539,7 +1539,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trSearchMatches()
     {
-		return "������ ��:";
+		return "يتطابق مع:";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1550,7 +1550,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trSourceFile(QCString& filename)
     {
-      return " ��� ������" + filename ;
+      return " ملف المصدر" + filename ;
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1561,33 +1561,33 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      *  hierarchy.
      */
     virtual QCString trDirIndex()
-    { return "��� ���� ������"; }
+    { return "شكل هرمي للأدلة"; }
 
     /*! This is used as the name of the chapter containing the documentation
      *  of the directories.
      */
     virtual QCString trDirDocumentation()
-    { return "����� ������"; }
+    { return "توثيق الأدلة"; }
 
     /*! This is used as the title of the directory index and also in the
      *  Quick links of an HTML page, to link to the directory hierarchy.
      */
     virtual QCString trDirectories()
-    { return "������"; }
+    { return "الأدلة"; }
 
     /*! This returns a sentences that introduces the directory hierarchy. 
      *  and the fact that it is sorted alphabetically per level
      */
     virtual QCString trDirDescription()
-    { return "��� ����� ������ ������ �� ������ ������ ����� ������ɡ "
-	"���� ������ ������ �����:";
+    { return "هذا الشكل الهرمي للأدلة تم ترتيبه أبجديا بصورة تقريبية، "
+	"وليس ترتيبا أبجديا كاملا:";
     }
 
     /*! This returns the title of a directory page. The name of the
      *  directory is passed via \a dirName.
      */
     virtual QCString trDirReference(const char *dirName)
-    { QCString result=" ���� ������"; result+=dirName; return result; }
+    { QCString result=" مرجع الدليل"; result+=dirName; return result; }
 
     /*! This returns the word directory with or without starting capital
      *  (\a first_capital) and in sigular or plural form (\a singular).
@@ -1608,9 +1608,9 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
      */
     virtual QCString trOverloadText()
     {
-       return "��� ���� ��� ����� ������� �"
-              "��� ���� ������. ���� ����� �� ������ �����"
-              "��� �� ����� �� argument(s) ���� ������.";
+       return "هذه دالة عضو زائدة التحميل ،"
+              "وجد أنها ملائمة. إنها تختلف عن الدالة أعلاه"
+              "فقط في نوعية ال argument(s) التي تقبلها.";
     }
 };
 
diff --git a/src/translator_fi.h b/src/translator_fi.h
index ff852e8..3a9a890 100644
--- a/src/translator_fi.h
+++ b/src/translator_fi.h
@@ -95,7 +95,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0
      */
     /*virtual QCString updateNeededMessage()
     {
-      return "Warning: The Finnish translator is really obsolete.\n"
+      return "The Finnish translator is really obsolete.\n"
              "It was not updated since version 1.0.0.  As a result,\n"
              "some sentences may appear in English.\n\n";
     }*/
diff --git a/src/translator_kr.h b/src/translator_kr.h
index 3e411aa..a1ae9ea 100644
--- a/src/translator_kr.h
+++ b/src/translator_kr.h
@@ -1938,6 +1938,125 @@ class TranslatorKorean : public TranslatorAdapter_1_7_5
     { return "�߰��� ��ӵ� �����"; }
 
 //////////////////////////////////////////////////////////////////////////
+// new since 1.8.2
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a tooltip for the toggle button that appears in the
+     *  navigation tree in the HTML output when GENERATE_TREEVIEW is 
+     *  enabled. This tooltip explains the meaning of the button.
+     */
+    virtual QCString trPanelSynchronisationTooltip(bool enable)
+    {
+      QCString opt = enable ? "Ȱ��ȭ" : "��Ȱ��ȭ";
+      return "�г� ����ȭ�� "+opt+"�ϱ� ���� Ŭ���Ͻʽÿ�";
+    }
+
+    /*! Used in a method of an Objective-C class that is declared in a
+     *  a category. Note that the @1 marker is required and is replaced
+     *  by a link.
+     */
+    virtual QCString trProvidedByCategory()
+    {
+      return "ī�װ��� @1�� ���� ������.";
+    }
+
+    /*! Used in a method of an Objective-C category that extends a class.
+     *  Note that the @1 marker is required and is replaced by a link to
+     *  the class method.
+     */
+    virtual QCString trExtendsClass()
+    {
+      return "Ŭ���� @1 Ȯ��.";
+    }
+
+    /*! Used as the header of a list of class methods in Objective-C.
+     *  These are similar to static public member functions in C++.
+     */
+    virtual QCString trClassMethods()
+    {
+      return "Ŭ���� �޼ҵ��";
+    }
+
+    /*! Used as the header of a list of instance methods in Objective-C.
+     *  These are similar to public member functions in C++.
+     */
+    virtual QCString trInstanceMethods()
+    {
+      return "�ν��Ͻ� �޼ҵ��";
+    }
+
+    /*! Used as the header of the member functions of an Objective-C class.
+     */
+    virtual QCString trMethodDocumentation()
+    {
+      return "�޼ҵ� ����ȭ";
+    }
+
+    /*! Used as the title of the design overview picture created for the
+     *  VHDL output.
+     */
+    virtual QCString trDesignOverview()
+    {
+      return "������ ����";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+//////////////////////////////////////////////////////////////////////////
+
+    /** old style UNO IDL services: implemented interfaces */
+    virtual QCString trInterfaces()
+    { return "�ͽ���Ʈ�� �������̽���"; }
+
+    /** old style UNO IDL services: inherited services */
+    virtual QCString trServices()
+    { return "���Ե� ���񽺵�"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroups()
+    { return "��� �׷��"; }
+
+    /** UNO IDL constant groups */
+    virtual QCString trConstantGroupReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=" ��� �׷� ���۷���";
+      return result;
+    }
+    /** UNO IDL service page title */
+    virtual QCString trServiceReference(const char *sName)
+    {
+      QCString result=(QCString)sName;
+      result+=" ���� ���۷���";
+      return result;
+    }
+    /** UNO IDL singleton page title */
+    virtual QCString trSingletonReference(const char *sName)
+    {
+      QCString result=(QCString)sName;
+      result+=" �̱��� ���۷���";
+      return result;
+    }
+    /** UNO IDL service page */
+    virtual QCString trServiceGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"�� ���񽺿� ���� ����ȭ�� ������ ����";
+      if (!single) result+="��";
+	  result+="�κ��� �����Ǿ����ϴ�.:";
+      return result;
+    }
+    /** UNO IDL singleton page */
+    virtual QCString trSingletonGeneratedFromFiles(bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"�� �̱��濡 ���� ����ȭ�� ������ ����";
+      if (!single) result+="��";
+	  result+="�κ��� �����Ǿ����ϴ�.:";
+      return result;
+    }
+
+//////////////////////////////////////////////////////////////////////////
 
 };
 
diff --git a/src/types.h b/src/types.h
index 18affcc..0c269be 100644
--- a/src/types.h
+++ b/src/types.h
@@ -22,11 +22,22 @@
  *  @brief This file contains a number of basic enums and types. 
  */
 
+/** Protection level of members */
 enum Protection   { Public, Protected, Private, Package } ;
+
+/** Virtualness of a member. */
 enum Specifier    { Normal, Virtual, Pure } ;
+
+/** Kind of method */
 enum MethodTypes  { Method, Signal, Slot, DCOP, Property, Event };
+
+/** Type of member relation */
 enum RelatesType  { Simple, Duplicate, MemberOf };
+
+/** Kind of member relationship */
 enum Relationship { Member, Related, Foreign };
+
+/** Language as given by extension */
 enum SrcLangExt
 {
   SrcLangExt_Unknown  = 0x00000,
@@ -46,8 +57,10 @@ enum SrcLangExt
   SrcLangExt_Markdown = 0x10000
 };
 
+/** Grouping info */
 struct Grouping 
 {
+  /** Grouping priority */
   enum GroupPri_t 
   {
     GROUPING_LOWEST,
diff --git a/src/util.cpp b/src/util.cpp
index 205d0ba..0d70d43 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -498,7 +498,7 @@ NamespaceDef *getResolvedNamespace(const char *name)
     }
     if (count==10)
     {
-      err("warning: possible recursive namespace alias detected for %s!\n",name);
+      warn_uncond("possible recursive namespace alias detected for %s!\n",name);
     }
     return Doxygen::namespaceSDict->find(subst->data());
   }
@@ -2339,7 +2339,7 @@ QCString transcodeCharacterStringToUTF8(const QCString &input)
   void *cd = portable_iconv_open(outputEncoding,inputEncoding);
   if (cd==(void *)(-1)) 
   {
-    err("error: unsupported character conversion: '%s'->'%s'\n",
+    err("unsupported character conversion: '%s'->'%s'\n",
         inputEncoding.data(),outputEncoding);
     error=TRUE;
   }
@@ -2358,7 +2358,7 @@ QCString transcodeCharacterStringToUTF8(const QCString &input)
     }
     else
     {
-      err("error: failed to translate characters from %s to %s: check INPUT_ENCODING\ninput=[%s]\n",
+      err("failed to translate characters from %s to %s: check INPUT_ENCODING\ninput=[%s]\n",
           inputEncoding.data(),outputEncoding,input.data());
       error=TRUE;
     }
@@ -2403,7 +2403,7 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
     QFileInfo fi(name);
     if (!fi.exists() || !fi.isFile())
     {
-      err("error: file `%s' not found\n",name);
+      err("file `%s' not found\n",name);
       return "";
     }
     QCString filterName = getFileFilter(name,isSourceCode);
@@ -2437,7 +2437,7 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
       FILE *f=portable_popen(cmd,"r");
       if (!f)
       {
-        err("error: could not execute filter %s\n",filterName.data());
+        err("could not execute filter %s\n",filterName.data());
         return "";
       }
       const int bSize=4096;
@@ -2461,7 +2461,7 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
   }
   if (!fileOpened)  
   {
-    err("error: cannot open file `%s' for reading\n",name);
+    err("cannot open file `%s' for reading\n",name);
   }
   return "";
 }
@@ -2501,7 +2501,7 @@ int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level)
   if (cd==bcd) return level; 
   if (level==256)
   {
-    err("warning: class %s seem to have a recursive "
+    warn_uncond("class %s seem to have a recursive "
         "inheritance relation!\n",cd->name().data());
     return -1;
   }
@@ -2533,7 +2533,7 @@ Protection classInheritedProtectionLevel(ClassDef *cd,ClassDef *bcd,Protection p
   }
   if (level==256)
   {
-    err("error: Internal inconsistency: found class %s seem to have a recursive "
+    err("Internal inconsistency: found class %s seem to have a recursive "
         "inheritance relation! Please send a bug report to dimitri@stack.nl\n",cd->name().data());
   }
   else if (cd->baseClasses())
@@ -3857,10 +3857,10 @@ static void findMembersWithSpecificName(MemberName *mn,
       if (args && !md->isDefine() && qstrcmp(args,"()")!=0)
       {
         argList=new ArgumentList;
-        LockingPtr<ArgumentList> mdAl = md->argumentList();
+        ArgumentList *mdAl = md->argumentList();
         stringToArgumentList(args,argList);
         match=matchArguments2(
-            md->getOuterScope(),fd,mdAl.pointer(),
+            md->getOuterScope(),fd,mdAl,
             Doxygen::globalScope,fd,argList,
             checkCV); 
         delete argList; argList=0;
@@ -3989,9 +3989,9 @@ bool getDefs(const QCString &scName,
         {
           //if (mmd->isLinkable())
           //{
-          LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
+          ArgumentList *mmdAl = mmd->argumentList();
           bool match=args==0 || 
-            matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
+            matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
                 fcd,fcd->getFileDef(),argList,
                 checkCV
                 );  
@@ -4089,8 +4089,8 @@ bool getDefs(const QCString &scName,
 
       QCString className = mmd->getClassDef()->name();
 
-      LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
-      if (matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
+      ArgumentList *mmdAl = mmd->argumentList();
+      if (matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
             Doxygen::globalScope,mmd->getFileDef(),argList,
             checkCV
             )
@@ -4153,10 +4153,10 @@ bool getDefs(const QCString &scName,
             if (args && qstrcmp(args,"()")!=0)
             {
               argList=new ArgumentList;
-              LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
+              ArgumentList *mmdAl = mmd->argumentList();
               stringToArgumentList(args,argList);
               match=matchArguments2(
-                  mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
+                  mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
                   fnd,mmd->getFileDef(),argList,
                   checkCV); 
             }
@@ -5677,6 +5677,7 @@ QCString convertCharEntitiesToUTF8(const QCString &s)
   }
   growBuf.addStr(s.mid(i,s.length()-i));
   growBuf.addChar(0);
+  //printf("convertCharEntitiesToUTF8(%s)->%s\n",s.data(),growBuf.get());
   return growBuf.get();
 }
 
@@ -5705,7 +5706,7 @@ void addMembersToMemberGroup(MemberList *ml,
   {
     if (md->isEnumerate()) // insert enum value of this enum into groups
     {
-      LockingPtr<MemberList> fmdl=md->enumFieldList();
+      MemberList *fmdl=md->enumFieldList();
       if (fmdl!=0)
       {
         MemberDef *fmd=fmdl->first();
@@ -6305,8 +6306,8 @@ void addRefItem(const QList<ListItemInfo> *sli,
 
 void addGroupListToTitle(OutputList &ol,Definition *d)
 {
-  LockingPtr<GroupList> groups = d->partOfGroups();
-  if (groups!=0) // write list of group to which this definition belongs
+  GroupList *groups = d->partOfGroups();
+  if (groups) // write list of group to which this definition belongs
   {
     ol.pushGeneratorState();
     ol.disableAllBut(OutputGenerator::Html);
@@ -7163,7 +7164,7 @@ void writeTypeConstraints(OutputList &ol,Definition *d,ArgumentList *al)
     linkifyText(TextGeneratorOLImpl(ol),d,0,0,a->type);
     ol.endConstraintType();
     ol.startConstraintDocs();
-    ol.parseDoc(d->docFile(),d->docLine(),d,0,a->docs,TRUE,FALSE);
+    ol.generateDoc(d->docFile(),d->docLine(),d,0,a->docs,TRUE,FALSE);
     ol.endConstraintDocs();
   }
   ol.endConstraintList();
@@ -7206,7 +7207,7 @@ static int transcodeCharacterBuffer(const char *fileName,BufStr &srcBuf,int size
   void *cd = portable_iconv_open(outputEncoding,inputEncoding);
   if (cd==(void *)(-1)) 
   {
-    err("error: unsupported character conversion: '%s'->'%s': %s\n"
+    err("unsupported character conversion: '%s'->'%s': %s\n"
         "Check the INPUT_ENCODING setting in the config file!\n",
         inputEncoding,outputEncoding,strerror(errno));
     exit(1);
@@ -7227,7 +7228,7 @@ static int transcodeCharacterBuffer(const char *fileName,BufStr &srcBuf,int size
   }
   else
   {
-    err("%s: error: failed to translate characters from %s to %s: check INPUT_ENCODING\n",
+    err("%s: failed to translate characters from %s to %s: check INPUT_ENCODING\n",
         fileName,inputEncoding,outputEncoding);
     exit(1);
   }
@@ -7251,7 +7252,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
     QFile f(fileName);
     if (!f.open(IO_ReadOnly))
     {
-      err("error: could not open file %s\n",fileName);
+      err("could not open file %s\n",fileName);
       return FALSE;
     }
     size=fi.size();
@@ -7259,7 +7260,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
     inBuf.skip(size);
     if (f.readBlock(inBuf.data()/*+oldPos*/,size)!=size)
     {
-      err("error: problems while reading file %s\n",fileName);
+      err("problems while reading file %s\n",fileName);
       return FALSE;
     }
   }
@@ -7270,7 +7271,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
     FILE *f=portable_popen(cmd,"r");
     if (!f)
     {
-      err("error: could not execute filter %s\n",filterName.data());
+      err("could not execute filter %s\n",filterName.data());
       return FALSE;
     }
     const int bufSize=1024;
@@ -7536,13 +7537,13 @@ bool copyFile(const QCString &src,const QCString &dest)
     }
     else
     {
-      err("error: could not write to file %s\n",dest.data());
+      err("could not write to file %s\n",dest.data());
       return FALSE;
     }
   }
   else
   {
-    err("error: could not open user specified file %s\n",src.data());
+    err("could not open user specified file %s\n",src.data());
     return FALSE;
   }
   return TRUE;
@@ -7736,3 +7737,46 @@ bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile)
          );
 }
 
+void addDocCrossReference(MemberDef *src,MemberDef *dst)
+{
+  static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
+  static bool referencesRelation   = Config_getBool("REFERENCES_RELATION");
+  static bool callerGraph          = Config_getBool("CALLER_GRAPH");
+  static bool callGraph            = Config_getBool("CALL_GRAPH");
+
+  //printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
+  if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
+  if ((referencedByRelation || callerGraph || dst->hasCallerGraph()) && 
+      src->showInCallGraph()
+     )
+  {
+    dst->addSourceReferencedBy(src);
+    MemberDef *mdDef = dst->memberDefinition();
+    if (mdDef)
+    {
+      mdDef->addSourceReferencedBy(src);
+    }
+    MemberDef *mdDecl = dst->memberDeclaration();
+    if (mdDecl)
+    {
+      mdDecl->addSourceReferencedBy(src);
+    }
+  }
+  if ((referencesRelation || callGraph || src->hasCallGraph()) && 
+      src->showInCallGraph()
+     )
+  {
+    src->addSourceReferences(dst);
+    MemberDef *mdDef = src->memberDefinition();
+    if (mdDef)
+    {
+      mdDef->addSourceReferences(dst);
+    }
+    MemberDef *mdDecl = src->memberDeclaration();
+    if (mdDecl)
+    {
+      mdDecl->addSourceReferences(dst);
+    }
+  }
+}
+
diff --git a/src/util.h b/src/util.h
index daeef09..e19e829 100644
--- a/src/util.h
+++ b/src/util.h
@@ -408,5 +408,7 @@ QCString stripIndentation(const QCString &s);
 
 bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile);
 
+void addDocCrossReference(MemberDef *src,MemberDef *dst);
+
 #endif
 
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index 441aa10..8e20419 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -412,7 +412,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
 static void setParameterList(MemberDef *md)
 {
   g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
-  LockingPtr<ArgumentList> al = md->argumentList();
+  ArgumentList *al = md->argumentList();
   if (al==0) return; 
   Argument *a = al->first();
   while (a)
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index fa25000..8545c90 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -876,11 +876,11 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
       QCString mname=mdef->name();
       if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (compareString(funcname,mname)==0))
       {
-        LockingPtr<ArgumentList> alp = mdef->argumentList();
+        ArgumentList *alp = mdef->argumentList();
 
         //  ArgumentList* arg2=mdef->getArgumentList();
         if (alp==0) break;
-        ArgumentListIterator ali(*alp.pointer());
+        ArgumentListIterator ali(*alp);
         ArgumentListIterator ali1(ql);
 
         if (ali.count() != ali1.count()) break;
@@ -1844,7 +1844,7 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
       ol.docify(" ");
     }
     ol.docify(mdef->name());
-    hasParams = VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList().pointer());
+    hasParams = VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList());
   }
 
 
@@ -1903,7 +1903,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
     bool /*inGroup*/)
 {
   static QRegExp reg("[%]");
-  LockingPtr<MemberDef> lock(mdef,mdef);
 
   Definition *d=0;
 
@@ -1962,9 +1961,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
     Doxygen::tagFile << "      <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl;
 
     if (VhdlDocGen::isVhdlFunction(mdef))
-      Doxygen::tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),TRUE)) << "</arglist>" << endl;
+      Doxygen::tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "</arglist>" << endl;
     else if (VhdlDocGen::isProcedure(mdef))
-      Doxygen::tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),FALSE)) << "</arglist>" << endl;
+      Doxygen::tagFile << "      <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "</arglist>" << endl;
     else
       Doxygen::tagFile << "      <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl;
 
@@ -2027,7 +2026,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
   mdef->setArgsString(largs.data());
   //ClassDef * plo=mdef->getClassDef();
   ClassDef *kl=0;
-  LockingPtr<ArgumentList> alp = mdef->argumentList();
+  ArgumentList *alp = mdef->argumentList();
   QCString nn;
   //VhdlDocGen::adjustRecordMember(mdef);
   if (gd) gd=0;
@@ -2046,10 +2045,10 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
 
       writeLink(mdef,ol);
       if (alp!=0 && mm==VhdlDocGen::FUNCTION)
-        VhdlDocGen::writeFunctionProto(ol,alp.pointer(),mdef);
+        VhdlDocGen::writeFunctionProto(ol,alp,mdef);
 
       if (alp!=0 && mm==VhdlDocGen::PROCEDURE)
-        VhdlDocGen::writeProcedureProto(ol,alp.pointer(),mdef);
+        VhdlDocGen::writeProcedureProto(ol,alp,mdef);
 
       break;
     case VhdlDocGen::USE:
@@ -2112,7 +2111,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
     case VhdlDocGen::PROCESS:
       writeLink(mdef,ol);
       ol.insertMemberAlign();
-      VhdlDocGen::writeProcessProto(ol,alp.pointer(),mdef);
+      VhdlDocGen::writeProcessProto(ol,alp,mdef);
       break;
     case VhdlDocGen::PACKAGE:
     case VhdlDocGen::ENTITY:
@@ -2244,7 +2243,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
   if (!mdef->briefDescription().isEmpty() &&   Config_getBool("BRIEF_MEMBER_DESC") /* && !annMemb */)
   {
     ol.startMemberDescription(mdef->anchor());
-    ol.parseDoc(mdef->briefFile(),mdef->briefLine(),
+    ol.generateDoc(mdef->briefFile(),mdef->briefLine(),
         mdef->getOuterScope()?mdef->getOuterScope():d,
         mdef,mdef->briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
     if (detailsVisible)
@@ -2350,7 +2349,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
   if (subtitle && subtitle[0]!=0)
   {
     ol.startMemberSubtitle();
-    ol.parseDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE,0,TRUE,FALSE);
+    ol.generateDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE,0,TRUE,FALSE);
     ol.endMemberSubtitle();
   } //printf("memberGroupList=%p\n",memberGroupList);
 
@@ -2376,7 +2375,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
         {
           //printf("Member group has docs!\n");
           ol.startMemberGroupDocs();
-          ol.parseDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE);
+          ol.generateDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE);
           ol.endMemberGroupDocs();
         }
         ol.startMemberGroup();
@@ -2951,7 +2950,7 @@ void assignBinding(VhdlConfNode * conf)
 
   if (!archClass)
   {
- //   err("\n error:architecture %s not found ! ",conf->confVhdl.data());
+ //   err("architecture %s not found ! ",conf->confVhdl.data());
     return;
   }
 
@@ -3075,7 +3074,7 @@ void VhdlDocGen::computeVhdlComponentRelations()
     }
 
     // if (classEntity==0)
-    //   err("error: %s:%d:Entity:%s%s",cur->fileName.data(),cur->startLine,entity.data()," could not be found");
+    //   err("%s:%d:Entity:%s%s",cur->fileName.data(),cur->startLine,entity.data()," could not be found");
     
     addInstance(classEntity,ar,cd,cur);
   }
@@ -3315,7 +3314,10 @@ void VhdlDocGen::createFlowChart(const MemberDef *mdef)
   VHDLLanguageScanner *pIntf =(VHDLLanguageScanner*) Doxygen::parserManager->getParser(".vhd");
   VhdlDocGen::setFlowMember(mdef);
   Entry root;
-  pIntf->parseInput("",codeFragment.data(),&root);
+  QStrList filesInSameTu;
+  pIntf->startTranslationUnit("");
+  pIntf->parseInput("",codeFragment.data(),&root,FALSE,filesInSameTu);
+  pIntf->finishTranslationUnit();
 }
 
 bool VhdlDocGen::isConstraint(const MemberDef *mdef) 
@@ -3906,7 +3908,7 @@ void FlowChart::writeFlowChart()
 
   if (!f.open(IO_WriteOnly))
   {
-    err("Error: Cannot open file %s for writing\n",fileName.data());
+    err("Cannot open file %s for writing\n",fileName.data());
     return;
   }
 
diff --git a/src/vhdlscanner.h b/src/vhdlscanner.h
index 1eb3c83..12c2d13 100644
--- a/src/vhdlscanner.h
+++ b/src/vhdlscanner.h
@@ -48,9 +48,13 @@ class VHDLLanguageScanner : public ParserInterface
 {
   public:
     virtual ~VHDLLanguageScanner() {}
+    void startTranslationUnit(const char *) {}
+    void finishTranslationUnit() {}
     void parseInput(const char * fileName, 
                     const char *fileBuf, 
-                    Entry *root);
+                    Entry *root,
+                    bool sameTranslationUnit,
+                    QStrList &filesInSameTranslationUnit);
     bool needsPreprocessing(const QCString &extension);
     void parseCode(CodeOutputInterface &codeOutIntf,
                    const char *scopeName,
diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l
index 9eec358..934a985 100644
--- a/src/vhdlscanner.l
+++ b/src/vhdlscanner.l
@@ -740,7 +740,11 @@ void VHDLLanguageScanner::parsePrototype(const char *text)
 //  return token;
 //}
 
-void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void VHDLLanguageScanner::parseInput(const char *fileName,
+                                     const char *fileBuf,
+                                     Entry *root,
+                                     bool /*sameTranslationUnit*/,
+                                     QStrList & /*filesInSameTranslationUnit*/)
 {
   yyFileName=QCString(fileName);
 
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index dcc40e1..5bae376 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -173,7 +173,7 @@ void XmlDocVisitor::visit(DocSymbol *s)
     case DocSymbol::LeftFloor:     m_t << "<lfloor>"; break;
     case DocSymbol::RightFloor:    m_t << "<rfloor>"; break;
     default:
-                             err("error: unknown symbol found\n");
+                             err("unknown symbol found\n");
   }
 }
 
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 9ab5c0a..b1bfc9c 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -417,10 +417,10 @@ static void writeTemplateArgumentList(ArgumentList *al,
 
 static void writeMemberTemplateLists(MemberDef *md,FTextStream &t)
 {
-  LockingPtr<ArgumentList> templMd = md->templateArguments();
-  if (templMd!=0) // function template prefix
+  ArgumentList *templMd = md->templateArguments();
+  if (templMd) // function template prefix
   {
-    writeTemplateArgumentList(templMd.pointer(),t,md->getClassDef(),md->getFileDef(),8);
+    writeTemplateArgumentList(templMd,t,md->getClassDef(),md->getFileDef(),8);
   }
 }
 
@@ -439,7 +439,7 @@ static void writeXMLDocBlock(FTextStream &t,
   QCString stext = text.stripWhiteSpace();
   if (stext.isEmpty()) return;
   // convert the documentation string into an abstract syntax tree
-  DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text+"\n",FALSE,FALSE);
+  DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text,FALSE,FALSE);
   // create a code generator
   XMLCodeGenerator *xmlCodeGen = new XMLCodeGenerator(t);
   // create a parse tree visitor for XML
@@ -614,7 +614,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
 
   if (isFunc)
   {
-    LockingPtr<ArgumentList> al = md->argumentList();
+    ArgumentList *al = md->argumentList();
     t << " const=\"";
     if (al!=0 && al->constSpecifier)    t << "yes"; else t << "no"; 
     t << "\"";
@@ -805,8 +805,8 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
       << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">"
       << convertToXML(rmd->name()) << "</reimplements>" << endl;
   }
-  LockingPtr<MemberList> rbml = md->reimplementedBy();
-  if (rbml!=0)
+  MemberList *rbml = md->reimplementedBy();
+  if (rbml)
   {
     MemberListIterator mli(*rbml);
     for (mli.toFirst();(rmd=mli.current());++mli)
@@ -819,9 +819,9 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
 
   if (isFunc) //function
   {
-    LockingPtr<ArgumentList> declAl = md->declArgumentList();
-    LockingPtr<ArgumentList> defAl = md->argumentList();
-    if (declAl!=0 && declAl->count()>0)
+    ArgumentList *declAl = md->declArgumentList();
+    ArgumentList *defAl = md->argumentList();
+    if (declAl && declAl->count()>0)
     {
       ArgumentListIterator declAli(*declAl);
       ArgumentListIterator defAli(*defAl);
@@ -914,8 +914,8 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
   
   if (md->memberType()==MemberType_Enumeration) // enum
   {
-    LockingPtr<MemberList> enumFields = md->enumFieldList();
-    if (enumFields!=0)
+    MemberList *enumFields = md->enumFieldList();
+    if (enumFields)
     {
       MemberListIterator emli(*enumFields);
       MemberDef *emd;
@@ -983,8 +983,8 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
   }
 
   //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
-  LockingPtr<MemberSDict> mdict = md->getReferencesMembers();
-  if (mdict!=0)
+  MemberSDict *mdict = md->getReferencesMembers();
+  if (mdict)
   {
     MemberSDict::Iterator mdi(*mdict);
     MemberDef *rmd;
@@ -994,7 +994,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
     }
   }
   mdict = md->getReferencedByMembers();
-  if (mdict!=0)
+  if (mdict)
   {
     MemberSDict::Iterator mdi(*mdict);
     MemberDef *rmd;
-- 
cgit v0.12

