Index: /tags/2.00/Authors
===================================================================
--- /tags/2.00/Authors	(revision 478)
+++ /tags/2.00/Authors	(revision 478)
@@ -0,0 +1,44 @@
+Olivier Thauvin <Olivier dot thauvin at latmos dot ipsl dot fr>
+
+******************
+* Special Thanks *
+******************
+
+* Many tasks:
+  Michael Scherer
+
+* CSS + HTML:
+  Yann Delcambre
+
+* Tests and bug report:
+  Florence Goutail
+  Christian Malique
+  Eric D'Almeida
+  Philippe Weill
+  Francis Vivat
+
+* Translations:
+  Oliver Burger
+  Sigrid Carrera
+  Gerhard Proess
+  Ahmad Samir
+  Thorsten van Lil
+  Marcello Anni
+  Remco Rijnders
+  Eugeny Rozhkov
+  Jerzy Trzeciak
+  Numan DemirdÃ¶Äen
+  Alev Erzurumlu
+  Can KaÃ§an
+  Ufuk AnÄ±l Uyalhas
+  Cem AltÄ±parmak
+  Murat Ãakir
+  Marek Laane
+  Franklin Weng
+  Dimitrios Glentadakis
+  Jean Peyratout
+  Florin CÄtÄlin Russen
+  Dan-Marian JoiÈa
+  Diego Bello
+  Josep Lluis Guallar
+  Tamara Aymerich
Index: /tags/2.00/CeCILL.txt
===================================================================
--- /tags/2.00/CeCILL.txt	(revision 478)
+++ /tags/2.00/CeCILL.txt	(revision 478)
@@ -0,0 +1,506 @@
+
+CeCILL FREE SOFTWARE LICENSE AGREEMENT
+
+
+    Notice
+
+This Agreement is a Free Software license agreement that is the result
+of discussions between its authors in order to ensure compliance with
+the two main principles guiding its drafting:
+
+    * firstly, compliance with the principles governing the distribution
+      of Free Software: access to source code, broad rights granted to
+      users,
+    * secondly, the election of a governing law, French law, with which
+      it is conformant, both as regards the law of torts and
+      intellectual property law, and the protection that it offers to
+      both authors and holders of the economic rights over software.
+
+The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
+license are:
+
+Commissariat à l'Energie Atomique - CEA, a public scientific, technical
+and industrial research establishment, having its principal place of
+business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France.
+
+Centre National de la Recherche Scientifique - CNRS, a public scientific
+and technological establishment, having its principal place of business
+at 3 rue Michel-Ange, 75794 Paris cedex 16, France.
+
+Institut National de Recherche en Informatique et en Automatique -
+INRIA, a public scientific and technological establishment, having its
+principal place of business at Domaine de Voluceau, Rocquencourt, BP
+105, 78153 Le Chesnay cedex, France.
+
+
+    Preamble
+
+The purpose of this Free Software license agreement is to grant users
+the right to modify and redistribute the software governed by this
+license within the framework of an open source distribution model.
+
+The exercising of these rights is conditional upon certain obligations
+for users so as to preserve this status for all subsequent redistributions.
+
+In consideration of access to the source code and the rights to copy,
+modify and redistribute granted by the license, users are provided only
+with a limited warranty and the software's author, the holder of the
+economic rights, and the successive licensors only have limited liability.
+
+In this respect, the risks associated with loading, using, modifying
+and/or developing or reproducing the software by the user are brought to
+the user's attention, given its Free Software status, which may make it
+complicated to use, with the result that its use is reserved for
+developers and experienced professionals having in-depth computer
+knowledge. Users are therefore encouraged to load and test the
+suitability of the software as regards their requirements in conditions
+enabling the security of their systems and/or data to be ensured and,
+more generally, to use and operate it in the same conditions of
+security. This Agreement may be freely reproduced and published,
+provided it is not altered, and that no provisions are either added or
+removed herefrom.
+
+This Agreement may apply to any or all software for which the holder of
+the economic rights decides to submit the use thereof to its provisions.
+
+
+    Article 1 - DEFINITIONS
+
+For the purpose of this Agreement, when the following expressions
+commence with a capital letter, they shall have the following meaning:
+
+Agreement: means this license agreement, and its possible subsequent
+versions and annexes.
+
+Software: means the software in its Object Code and/or Source Code form
+and, where applicable, its documentation, "as is" when the Licensee
+accepts the Agreement.
+
+Initial Software: means the Software in its Source Code and possibly its
+Object Code form and, where applicable, its documentation, "as is" when
+it is first distributed under the terms and conditions of the Agreement.
+
+Modified Software: means the Software modified by at least one
+Contribution.
+
+Source Code: means all the Software's instructions and program lines to
+which access is required so as to modify the Software.
+
+Object Code: means the binary files originating from the compilation of
+the Source Code.
+
+Holder: means the holder(s) of the economic rights over the Initial
+Software.
+
+Licensee: means the Software user(s) having accepted the Agreement.
+
+Contributor: means a Licensee having made at least one Contribution.
+
+Licensor: means the Holder, or any other individual or legal entity, who
+distributes the Software under the Agreement.
+
+Contribution: means any or all modifications, corrections, translations,
+adaptations and/or new functions integrated into the Software by any or
+all Contributors, as well as any or all Internal Modules.
+
+Module: means a set of sources files including their documentation that
+enables supplementary functions or services in addition to those offered
+by the Software.
+
+External Module: means any or all Modules, not derived from the
+Software, so that this Module and the Software run in separate address
+spaces, with one calling the other when they are run.
+
+Internal Module: means any or all Module, connected to the Software so
+that they both execute in the same address space.
+
+GNU GPL: means the GNU General Public License version 2 or any
+subsequent version, as published by the Free Software Foundation Inc.
+
+Parties: mean both the Licensee and the Licensor.
+
+These expressions may be used both in singular and plural form.
+
+
+    Article 2 - PURPOSE
+
+The purpose of the Agreement is the grant by the Licensor to the
+Licensee of a non-exclusive, transferable and worldwide license for the
+Software as set forth in Article 5 hereinafter for the whole term of the
+protection granted by the rights over said Software. 
+
+
+    Article 3 - ACCEPTANCE
+
+3.1 The Licensee shall be deemed as having accepted the terms and
+conditions of this Agreement upon the occurrence of the first of the
+following events:
+
+    * (i) loading the Software by any or all means, notably, by
+      downloading from a remote server, or by loading from a physical
+      medium;
+    * (ii) the first time the Licensee exercises any of the rights
+      granted hereunder.
+
+3.2 One copy of the Agreement, containing a notice relating to the
+characteristics of the Software, to the limited warranty, and to the
+fact that its use is restricted to experienced users has been provided
+to the Licensee prior to its acceptance as set forth in Article 3.1
+hereinabove, and the Licensee hereby acknowledges that it has read and
+understood it.
+
+
+    Article 4 - EFFECTIVE DATE AND TERM
+
+
+      4.1 EFFECTIVE DATE
+
+The Agreement shall become effective on the date when it is accepted by
+the Licensee as set forth in Article 3.1.
+
+
+      4.2 TERM
+
+The Agreement shall remain in force for the entire legal term of
+protection of the economic rights over the Software.
+
+
+    Article 5 - SCOPE OF RIGHTS GRANTED
+
+The Licensor hereby grants to the Licensee, who accepts, the following
+rights over the Software for any or all use, and for the term of the
+Agreement, on the basis of the terms and conditions set forth hereinafter.
+
+Besides, if the Licensor owns or comes to own one or more patents
+protecting all or part of the functions of the Software or of its
+components, the Licensor undertakes not to enforce the rights granted by
+these patents against successive Licensees using, exploiting or
+modifying the Software. If these patents are transferred, the Licensor
+undertakes to have the transferees subscribe to the obligations set
+forth in this paragraph.
+
+
+      5.1 RIGHT OF USE
+
+The Licensee is authorized to use the Software, without any limitation
+as to its fields of application, with it being hereinafter specified
+that this comprises:
+
+   1. permanent or temporary reproduction of all or part of the Software
+      by any or all means and in any or all form.
+
+   2. loading, displaying, running, or storing the Software on any or
+      all medium.
+
+   3. entitlement to observe, study or test its operation so as to
+      determine the ideas and principles behind any or all constituent
+      elements of said Software. This shall apply when the Licensee
+      carries out any or all loading, displaying, running, transmission
+      or storage operation as regards the Software, that it is entitled
+      to carry out hereunder.
+
+
+      5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS
+
+The right to make Contributions includes the right to translate, adapt,
+arrange, or make any or all modifications to the Software, and the right
+to reproduce the resulting software.
+
+The Licensee is authorized to make any or all Contributions to the
+Software provided that it includes an explicit notice that it is the
+author of said Contribution and indicates the date of the creation thereof.
+
+
+      5.3 RIGHT OF DISTRIBUTION
+
+In particular, the right of distribution includes the right to publish,
+transmit and communicate the Software to the general public on any or
+all medium, and by any or all means, and the right to market, either in
+consideration of a fee, or free of charge, one or more copies of the
+Software by any means.
+
+The Licensee is further authorized to distribute copies of the modified
+or unmodified Software to third parties according to the terms and
+conditions set forth hereinafter.
+
+
+        5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION
+
+The Licensee is authorized to distribute true copies of the Software in
+Source Code or Object Code form, provided that said distribution
+complies with all the provisions of the Agreement and is accompanied by:
+
+   1. a copy of the Agreement,
+
+   2. a notice relating to the limitation of both the Licensor's
+      warranty and liability as set forth in Articles 8 and 9,
+
+and that, in the event that only the Object Code of the Software is
+redistributed, the Licensee allows future Licensees unhindered access to
+the full Source Code of the Software by indicating how to access it, it
+being understood that the additional cost of acquiring the Source Code
+shall not exceed the cost of transferring the data.
+
+
+        5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE
+
+When the Licensee makes a Contribution to the Software, the terms and
+conditions for the distribution of the resulting Modified Software
+become subject to all the provisions of this Agreement.
+
+The Licensee is authorized to distribute the Modified Software, in
+source code or object code form, provided that said distribution
+complies with all the provisions of the Agreement and is accompanied by:
+
+   1. a copy of the Agreement,
+
+   2. a notice relating to the limitation of both the Licensor's
+      warranty and liability as set forth in Articles 8 and 9,
+
+and that, in the event that only the object code of the Modified
+Software is redistributed, the Licensee allows future Licensees
+unhindered access to the full source code of the Modified Software by
+indicating how to access it, it being understood that the additional
+cost of acquiring the source code shall not exceed the cost of
+transferring the data.
+
+
+        5.3.3 DISTRIBUTION OF EXTERNAL MODULES
+
+When the Licensee has developed an External Module, the terms and
+conditions of this Agreement do not apply to said External Module, that
+may be distributed under a separate license agreement.
+
+
+        5.3.4 COMPATIBILITY WITH THE GNU GPL
+
+The Licensee can include a code that is subject to the provisions of one
+of the versions of the GNU GPL in the Modified or unmodified Software,
+and distribute that entire code under the terms of the same version of
+the GNU GPL.
+
+The Licensee can include the Modified or unmodified Software in a code
+that is subject to the provisions of one of the versions of the GNU GPL,
+and distribute that entire code under the terms of the same version of
+the GNU GPL.
+
+
+    Article 6 - INTELLECTUAL PROPERTY
+
+
+      6.1 OVER THE INITIAL SOFTWARE
+
+The Holder owns the economic rights over the Initial Software. Any or
+all use of the Initial Software is subject to compliance with the terms
+and conditions under which the Holder has elected to distribute its work
+and no one shall be entitled to modify the terms and conditions for the
+distribution of said Initial Software.
+
+The Holder undertakes that the Initial Software will remain ruled at
+least by this Agreement, for the duration set forth in Article 4.2.
+
+
+      6.2 OVER THE CONTRIBUTIONS
+
+The Licensee who develops a Contribution is the owner of the
+intellectual property rights over this Contribution as defined by
+applicable law.
+
+
+      6.3 OVER THE EXTERNAL MODULES
+
+The Licensee who develops an External Module is the owner of the
+intellectual property rights over this External Module as defined by
+applicable law and is free to choose the type of agreement that shall
+govern its distribution.
+
+
+      6.4 JOINT PROVISIONS
+
+The Licensee expressly undertakes:
+
+   1. not to remove, or modify, in any manner, the intellectual property
+      notices attached to the Software;
+
+   2. to reproduce said notices, in an identical manner, in the copies
+      of the Software modified or not.
+
+The Licensee undertakes not to directly or indirectly infringe the
+intellectual property rights of the Holder and/or Contributors on the
+Software and to take, where applicable, vis-à-vis its staff, any and all
+measures required to ensure respect of said intellectual property rights
+of the Holder and/or Contributors.
+
+
+    Article 7 - RELATED SERVICES
+
+7.1 Under no circumstances shall the Agreement oblige the Licensor to
+provide technical assistance or maintenance services for the Software.
+
+However, the Licensor is entitled to offer this type of services. The
+terms and conditions of such technical assistance, and/or such
+maintenance, shall be set forth in a separate instrument. Only the
+Licensor offering said maintenance and/or technical assistance services
+shall incur liability therefor.
+
+7.2 Similarly, any Licensor is entitled to offer to its licensees, under
+its sole responsibility, a warranty, that shall only be binding upon
+itself, for the redistribution of the Software and/or the Modified
+Software, under terms and conditions that it is free to decide. Said
+warranty, and the financial terms and conditions of its application,
+shall be subject of a separate instrument executed between the Licensor
+and the Licensee.
+
+
+    Article 8 - LIABILITY
+
+8.1 Subject to the provisions of Article 8.2, the Licensee shall be
+entitled to claim compensation for any direct loss it may have suffered
+from the Software as a result of a fault on the part of the relevant
+Licensor, subject to providing evidence thereof.
+
+8.2 The Licensor's liability is limited to the commitments made under
+this Agreement and shall not be incurred as a result of in particular:
+(i) loss due the Licensee's total or partial failure to fulfill its
+obligations, (ii) direct or consequential loss that is suffered by the
+Licensee due to the use or performance of the Software, and (iii) more
+generally, any consequential loss. In particular the Parties expressly
+agree that any or all pecuniary or business loss (i.e. loss of data,
+loss of profits, operating loss, loss of customers or orders,
+opportunity cost, any disturbance to business activities) or any or all
+legal proceedings instituted against the Licensee by a third party,
+shall constitute consequential loss and shall not provide entitlement to
+any or all compensation from the Licensor.
+
+
+    Article 9 - WARRANTY
+
+9.1 The Licensee acknowledges that the scientific and technical
+state-of-the-art when the Software was distributed did not enable all
+possible uses to be tested and verified, nor for the presence of
+possible defects to be detected. In this respect, the Licensee's
+attention has been drawn to the risks associated with loading, using,
+modifying and/or developing and reproducing the Software which are
+reserved for experienced users.
+
+The Licensee shall be responsible for verifying, by any or all means,
+the suitability of the product for its requirements, its good working
+order, and for ensuring that it shall not cause damage to either persons
+or properties.
+
+9.2 The Licensor hereby represents, in good faith, that it is entitled
+to grant all the rights over the Software (including in particular the
+rights set forth in Article 5).
+
+9.3 The Licensee acknowledges that the Software is supplied "as is" by
+the Licensor without any other express or tacit warranty, other than
+that provided for in Article 9.2 and, in particular, without any warranty 
+as to its commercial value, its secured, safe, innovative or relevant
+nature.
+
+Specifically, the Licensor does not warrant that the Software is free
+from any error, that it will operate without interruption, that it will
+be compatible with the Licensee's own equipment and software
+configuration, nor that it will meet the Licensee's requirements.
+
+9.4 The Licensor does not either expressly or tacitly warrant that the
+Software does not infringe any third party intellectual property right
+relating to a patent, software or any other property right. Therefore,
+the Licensor disclaims any and all liability towards the Licensee
+arising out of any or all proceedings for infringement that may be
+instituted in respect of the use, modification and redistribution of the
+Software. Nevertheless, should such proceedings be instituted against
+the Licensee, the Licensor shall provide it with technical and legal
+assistance for its defense. Such technical and legal assistance shall be
+decided on a case-by-case basis between the relevant Licensor and the
+Licensee pursuant to a memorandum of understanding. The Licensor
+disclaims any and all liability as regards the Licensee's use of the
+name of the Software. No warranty is given as regards the existence of
+prior rights over the name of the Software or as regards the existence
+of a trademark.
+
+
+    Article 10 - TERMINATION
+
+10.1 In the event of a breach by the Licensee of its obligations
+hereunder, the Licensor may automatically terminate this Agreement
+thirty (30) days after notice has been sent to the Licensee and has
+remained ineffective.
+
+10.2 A Licensee whose Agreement is terminated shall no longer be
+authorized to use, modify or distribute the Software. However, any
+licenses that it may have granted prior to termination of the Agreement
+shall remain valid subject to their having been granted in compliance
+with the terms and conditions hereof.
+
+
+    Article 11 - MISCELLANEOUS
+
+
+      11.1 EXCUSABLE EVENTS
+
+Neither Party shall be liable for any or all delay, or failure to
+perform the Agreement, that may be attributable to an event of force
+majeure, an act of God or an outside cause, such as defective
+functioning or interruptions of the electricity or telecommunications
+networks, network paralysis following a virus attack, intervention by
+government authorities, natural disasters, water damage, earthquakes,
+fire, explosions, strikes and labor unrest, war, etc.
+
+11.2 Any failure by either Party, on one or more occasions, to invoke
+one or more of the provisions hereof, shall under no circumstances be
+interpreted as being a waiver by the interested Party of its right to
+invoke said provision(s) subsequently.
+
+11.3 The Agreement cancels and replaces any or all previous agreements,
+whether written or oral, between the Parties and having the same
+purpose, and constitutes the entirety of the agreement between said
+Parties concerning said purpose. No supplement or modification to the
+terms and conditions hereof shall be effective as between the Parties
+unless it is made in writing and signed by their duly authorized
+representatives.
+
+11.4 In the event that one or more of the provisions hereof were to
+conflict with a current or future applicable act or legislative text,
+said act or legislative text shall prevail, and the Parties shall make
+the necessary amendments so as to comply with said act or legislative
+text. All other provisions shall remain effective. Similarly, invalidity
+of a provision of the Agreement, for any reason whatsoever, shall not
+cause the Agreement as a whole to be invalid.
+
+
+      11.5 LANGUAGE
+
+The Agreement is drafted in both French and English and both versions
+are deemed authentic.
+
+
+    Article 12 - NEW VERSIONS OF THE AGREEMENT
+
+12.1 Any person is authorized to duplicate and distribute copies of this
+Agreement.
+
+12.2 So as to ensure coherence, the wording of this Agreement is
+protected and may only be modified by the authors of the License, who
+reserve the right to periodically publish updates or new versions of the
+Agreement, each with a separate number. These subsequent versions may
+address new issues encountered by Free Software.
+
+12.3 Any Software distributed under a given version of the Agreement may
+only be subsequently distributed under the same version of the Agreement
+or a subsequent version, subject to the provisions of Article 5.3.4.
+
+
+    Article 13 - GOVERNING LAW AND JURISDICTION
+
+13.1 The Agreement is governed by French law. The Parties agree to
+endeavor to seek an amicable solution to any disagreements or disputes
+that may arise during the performance of the Agreement.
+
+13.2 Failing an amicable solution within two (2) months as from their
+occurrence, and unless emergency proceedings are necessary, the
+disagreements or disputes shall be referred to the Paris Courts having
+jurisdiction, by the more diligent Party.
+
+
+Version 2.0 dated 2006-09-05.
Index: /tags/2.00/Changes
===================================================================
--- /tags/2.00/Changes	(revision 478)
+++ /tags/2.00/Changes	(revision 478)
@@ -0,0 +1,21 @@
+This file documents the revision history for Perl extension Vote.
+
+2.00
+        - allow to encrypt ballot
+        - preserve line break in ballot page
+        - group value per ballot
+        - generate a pdf output using Latex
+
+1.00  2009-04-03 16:00
+        - add '-- ' marker in mail to avoid login/pass in mail on reply
+        - fix some typo
+
+0.20  2009-03-30 17:30:00
+        - lowercase email to detect uniqness
+        - kill whitespace caracters before and after login
+
+0.10  2009-03-28 23:00:00
+        - initial pre - release
+
+0.01  2009-03-05 11:13:11
+        - initial revision, generated by Catalyst
Index: /tags/2.00/LICENCES
===================================================================
--- /tags/2.00/LICENCES	(revision 478)
+++ /tags/2.00/LICENCES	(revision 478)
@@ -0,0 +1,11 @@
+Epoll is Free software, you can redistribute it and/or modify it under
+the terms of either:
+
+CeCILL (see CeCILL.txt)
+
+Perl License, so either:
+  - the GNU General Public License as published by the Free Software Foundation;
+    either version 1, or (at your option) any later version,
+  - the "Artistic License".
+
+
Index: /tags/2.00/MANIFEST
===================================================================
--- /tags/2.00/MANIFEST	(revision 478)
+++ /tags/2.00/MANIFEST	(revision 478)
@@ -0,0 +1,204 @@
+Authors
+CeCILL.txt
+Changes
+LICENCES
+MANIFEST
+Makefile.PL
+README
+epoll.spec.in
+epoll.yml.example
+lib/Epoll/Controller/Admin.pm
+lib/Epoll/Controller/Ajax.pm
+lib/Epoll/Controller/Ballot.pm
+lib/Epoll/Controller/Newpoll.pm
+lib/Epoll/Controller/Root.pm
+lib/Epoll/Controller/Vote.pm
+lib/Epoll/DB/Ballot.pm
+lib/Epoll/DB/Choice.pm
+lib/Epoll/DB/ImportV/Csv.pm
+lib/Epoll/DB/ImportV/Dummy.pm
+lib/Epoll/DB/ImportV/Ldap.pm
+lib/Epoll/DB/ImportV.pm
+lib/Epoll/DB/Poll/BSubmit.pm
+lib/Epoll/DB/Poll/Bdata.pm
+lib/Epoll/DB/Poll/Type/Binary.pm
+lib/Epoll/DB/Poll.pm
+lib/Epoll/DB/Voting.pm
+lib/Epoll/DB/common.pm
+lib/Epoll/DB.pm
+lib/Epoll/I18N/de.po
+lib/Epoll/I18N/fr.po
+lib/Epoll/I18N/it.po
+lib/Epoll/I18N/messages.pot
+lib/Epoll/I18N/nl.po
+lib/Epoll/Model/Vote.pm
+lib/Epoll/Template/Plugin/Mail.pm
+lib/Epoll/View/Ajax.pm
+lib/Epoll/View/Latex.pm
+lib/Epoll/View/Mail.pm
+lib/Epoll/View/TT.pm
+lib/Epoll.pm
+root/favicon.ico
+root/latex/includes/ballot.tt
+root/latex/includes/footer.tt
+root/latex/includes/header.tt
+root/latex/includes/info.tt
+root/latex/includes/voters.tt
+root/latex/poll_report.tt
+root/latex/poll_results.tt
+root/mail/ballot_confirm.tt
+root/mail/includes/loc.tt
+root/mail/poll_reminder_voting.tt
+root/mail/poll_request.tt
+root/mail/voting_passwd.tt
+root/static/dhtmlxCalendar/dhtmlxcalendar.css
+root/static/dhtmlxCalendar/dhtmlxcalendar.js
+root/static/dhtmlxCalendar/dhtmlxcommon.js
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Black/btns.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Black/cal_arrow_bwd.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Black/cal_arrow_fwd.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Black/cal_bg_single.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Black/cal_bg_single_maxi.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Black/cal_bg_single_mini.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Black/cell_select.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Blue/btns.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Blue/cal_bg_single.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Blue/cal_bg_single_maxi.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Blue/cal_bg_single_mini.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Classic/btns.GIF
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Classic/cal_bg_single.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleBlue/btns.GIF
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleBlue/cal_bg_single.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleBlue/cal_bg_single_maxi.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleBlue/cal_bg_single_mini.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleColorDark/btns.GIF
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleColorDark/cal_bg_single.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleColorSand/btns.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleColorSand/cal_bg_single.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleGrey/btns.GIF
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleGrey/cal_bg_single.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleGrey/cal_bg_single_maxi.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleGrey/cal_bg_single_mini.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_SimpleGrey/cell_select.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Skyblue/btns.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Skyblue/cal_bg_single.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Skyblue/cal_header_bg.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Skyblue/cell_select.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Vista/btns.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Vista/cal_bg_single.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Vista/cal_bg_single_mini.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Vista/cell_hover.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Vista/cell_select.png
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Yahoolike/btns.gif
+root/static/dhtmlxCalendar/imgs/__dhxCal_skin_Yahoolike/cal_bg_single.gif
+root/static/dhtmlxCalendar/imgs/btns.gif
+root/static/dhtmlxCalendar/imgs/cal_bg_double.gif
+root/static/dhtmlxCalendar/imgs/cal_bg_single.gif
+root/static/dhtmlxCalendar/imgs/cal_bg_single_long.gif
+root/static/dhtmlxCalendar/imgs/cal_bg_single_mini.gif
+root/static/dhtmlxCalendar/imgs/calendar.gif
+root/static/dhtmlxCalendar/imgs/calendar_dis.gif
+root/static/dhtmlxCalendar/imgs/icon_minicalendar.gif
+root/static/dhtmlxCalendar/imgs/tp_btnsIncDec.gif
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_classic.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_black.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_blue.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_skyblue.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simpleblue.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolordark.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolorsand.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplegrey.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_vista.css
+root/static/dhtmlxCalendar/skins/dhtmlxcalendar_yahoolike.css
+root/static/images/blue-h.png
+root/static/images/blue-v.png
+root/static/images/btn_120x50_built.png
+root/static/images/btn_120x50_built_shadow.png
+root/static/images/btn_120x50_powered.png
+root/static/images/btn_120x50_powered_shadow.png
+root/static/images/btn_88x31_built.png
+root/static/images/btn_88x31_built_shadow.png
+root/static/images/btn_88x31_powered.png
+root/static/images/btn_88x31_powered_shadow.png
+root/static/images/catalyst_logo.png
+root/static/images/green-h.png
+root/static/images/green-v.png
+root/static/images/red-h.png
+root/static/images/red-v.png
+root/static/images/yellow-h.png
+root/static/images/yellow-v.png
+root/static/js/prototype/controls.js
+root/static/js/prototype/dragdrop.js
+root/static/js/prototype/effects.js
+root/static/js/prototype/prototype.js
+root/static/vote.css
+root/templates/admin/ballot.tt
+root/templates/admin/date.tt
+root/templates/admin/default.tt
+root/templates/admin/delete.tt
+root/templates/admin/delete_ballot_confirm.tt
+root/templates/admin/delete_poll_confirm.tt
+root/templates/admin/denied.tt
+root/templates/admin/includes/ballot_decrypt.tt
+root/templates/admin/includes/ballot_validation.tt
+root/templates/admin/includes/poll_extra_settings.tt
+root/templates/admin/includes/poll_settings.tt
+root/templates/admin/index.tt
+root/templates/admin/login.tt
+root/templates/admin/validate.tt
+root/templates/admin/voters.tt
+root/templates/admin/votersimport.tt
+root/templates/ballot/closed.tt
+root/templates/ballot/default.tt
+root/templates/ballot/done.tt
+root/templates/ballot/index.tt
+root/templates/ballot/login.tt
+root/templates/ballot/signed.tt
+root/templates/default.tt
+root/templates/errors/mail.tt
+root/templates/importv/csv.tt
+root/templates/importv/dummy.tt
+root/templates/importv/ldap.tt
+root/templates/includes/admin_menu.tt
+root/templates/includes/ballot_form.tt
+root/templates/includes/ballot_settings.tt
+root/templates/includes/footer.tt
+root/templates/includes/header.tt
+root/templates/includes/loc.tt
+root/templates/includes/locale_select.tt
+root/templates/includes/locale_select_form.tt
+root/templates/includes/poll.tt
+root/templates/includes/poll_results.tt
+root/templates/includes/poll_running.tt
+root/templates/includes/signing_list.tt
+root/templates/newpoll/default.tt
+root/templates/newpoll/index.tt
+root/templates/newpoll/norequest.tt
+root/templates/newpoll/request.tt
+root/templates/pollinc/binary/ballot.tt
+root/templates/pollinc/binary/ballot_settings.tt
+root/templates/pollinc/binary/results.tt
+root/templates/vote/default.tt
+script/epoll_cgi.pl
+script/epoll_create.pl
+script/epoll_fastcgi.pl
+script/epoll_server.pl
+script/epoll_test.pl
+sql/postgres.dump
+t/01app.t
+t/02pod.t
+t/03podcoverage.t
+t/10Epoll_DB.t
+t/11Epoll_DB_crypted.t
+t/15ImportV.t
+t/20Epoll_Web.t
+t/controller_Admin.t
+t/controller_Ajax.t
+t/controller_Ballot.t
+t/controller_Epoll.t
+t/controller_Newpoll.t
+t/model_Epoll.t
+t/view_Ajax.t
+t/view_Latex.t
+t/view_Mail.t
+t/view_TT.t
Index: /tags/2.00/Makefile.PL
===================================================================
--- /tags/2.00/Makefile.PL	(revision 478)
+++ /tags/2.00/Makefile.PL	(revision 478)
@@ -0,0 +1,115 @@
+use inc::Module::Install;
+
+name 'Epoll';
+all_from 'lib/Epoll/DB.pm';
+
+requires 'Catalyst' => '5.7015';
+requires 'Catalyst::Plugin::ConfigLoader';
+requires 'Catalyst::Plugin::Static::Simple';
+requires 'Catalyst::Action::RenderView';
+requires 'Catalyst::Plugin::Session::State::Cookie';
+requires 'Catalyst::Plugin::Session::Store::DBI';
+requires 'Catalyst::Plugin::Static::Simple';
+requires 'Catalyst::Plugin::ConfigLoader';
+requires 'Catalyst::Plugin::Prototype';
+requires 'Catalyst::View::TT';
+requires 'Catalyst::Plugin::I18N';
+
+requires 'YAML'; # This should reflect the config file format you've chosen
+                 # See Catalyst::Plugin::ConfigLoader for supported formats
+
+requires 'Config::YAML';
+# out of catalyst
+requires 'XML::Simple';
+requires 'Crypt::CBC';
+requires 'Crypt::DES_EDE3';
+requires 'Crypt::RSA';
+requires 'DBI';
+requires 'DBD::Pg';
+requires 'MIME::Base64';
+requires 'Mail::Mailer';
+#requires 'LaTeX::Driver';
+requires 'Locale::Maketext::Lexicon';
+
+catalyst;
+
+install_script glob('script/*.pl');
+auto_install;
+WriteAll;
+
+package MY;
+
+sub distdir {
+    my $dist = shift->SUPER::distdir(@_);
+    $dist =~ s/^(create_distdir :.*)/$1 md5sum/m;
+    $dist
+}
+
+sub dist_core {
+    my $dist = shift->SUPER::dist_core(@_);
+    $dist =~ s/^(\S.* :.*)/$1 md5sum/mg;
+    $dist
+}
+
+sub postamble {
+    
+    # list availlable langages:
+    my @po =
+        map { m:lib/Epoll/I18N/([^\.]+)\.po$:; $1 }
+        glob('lib/Epoll/I18N/*.po');
+
+    my $makepo = join("\n\n", map {
+    "
+lib/Epoll/I18N/$_.po: lib/Epoll/I18N/messages.pot
+\t[ -f lib/Epoll/I18N/$_.po ] || msginit --no-translator --input=lib/Epoll/I18N/messages.pot --output= --locale=$_
+\tmsgmerge -U lib/Epoll/I18N/$_.po lib/Epoll/I18N/messages.pot
+
+"
+    } @po);
+
+    return 
+    'po: ' . join(' ', map { "lib/Epoll/I18N/$_.po" } @po) .
+    "
+
+pot: lib/Epoll/I18N/messages.pot
+
+lib/Epoll/I18N/messages.pot:
+\tcat MANIFEST | egrep '(.pm|.tt)' | xargs xgettext.pl -o lib/Epoll/I18N/messages.pot
+
+$makepo
+
+svnmanifest:
+\tsvn ls -R| grep -v '/\$\$'  > MANIFEST
+
+md5sum:
+\tcat MANIFEST | sed 's/\\t.*//' | grep -v control/md5sum | xargs md5sum > control/md5sum
+
+checkmd5:
+\tmd5sum -c control/md5sum
+
+.PHONY: md5sum checkmd5 svnmanifest pot lib/Epoll/I18N/messages.pot
+
+ChangeLog:
+\tsvn log > ChangeLog
+
+epoll.spec: epoll.spec.in Makefile
+\tsed -e 's/\@VERSION@/\$(VERSION)/' < \$< > \$@
+
+srpm: \$(DISTVNAME).tar.gz epoll.spec
+\trpmbuild -bs --clean\\
+\t --define \"_sourcedir `pwd`\" \\
+\t --define \"_specdir `pwd`\" \\
+\t --define \"_srcrpmdir `pwd`\" \\
+\t --define \"_rpmdir `pwd`\" \\
+\t epoll.spec
+
+rpm: \$(DISTVNAME).tar.gz epoll.spec
+\tmkdir ./noarch || :
+\trpmbuild -ba --clean\\
+\t --define \"_sourcedir `pwd`\" \\
+\t --define \"_specdir `pwd`\" \\
+\t --define \"_srcrpmdir `pwd`\" \\
+\t --define \"_rpmdir `pwd`\" \\
+\t epoll.spec
+"
+}
Index: /tags/2.00/README
===================================================================
--- /tags/2.00/README	(revision 478)
+++ /tags/2.00/README	(revision 478)
@@ -0,0 +1,61 @@
+* Requirements *
+
+- perl
+- Catalyst (http://www.catalystframework.org/)
+- postgresql (http://www.postgresql.org/)
+- a smtp server
+
+* Installation from source code *
+
+perl Makefile.PL
+make install
+
+On the database server:
+
+- You may want to create a specific user:
+  Directly in postgres as administrator:
+  
+    =# CREATE ROLE rolename WITH LOGIN PASSWORD 'rolepassword';
+  
+  Or using command line:
+    
+    # createuser 'rolename' --password
+
+- Create a database owned by this role:
+  Directly in postgres as administrator:
+    
+    =# CREATE DATABASE basename OWNER = rolename;
+  
+  Or using command line:
+  
+    # createdb basename -O rolename
+
+- Create the default tables with sql/postgres.dump, using the previously 
+defined rolename
+  
+   # psql -U rolename basename < sql/postgres.dump
+
+(Refer to postgresql documentation for more options)
+
+On the web server:
+
+- Copy the epoll.yml.example to /etc/epoll.yml then edit it:
+  - Change the db settings (and probably the smtp one)
+
+- Configure apache to use either the cgi or fast_cgi program or run
+  it as a standalone server.
+
+Enjoy !
+
+* WARNING *
+
+This application is provided as is, without any warranty.
+
+This file is just a quick installation guide to install the
+application, it does it best to respect basic rules of elections
+but do not provides information about security YOU should setup
+to avoid fraud.
+
+* Contact *
+
+Olivier Thauvin <olivier dot thauvin at latmos dot ipsl dot fr>
Index: /tags/2.00/epoll.spec.in
===================================================================
--- /tags/2.00/epoll.spec.in	(revision 478)
+++ /tags/2.00/epoll.spec.in	(revision 478)
@@ -0,0 +1,89 @@
+%define realname   Epoll
+%define version    @VERSION@
+%define release    %mkrel 1
+
+Name:       Epoll
+Version:    %{version}
+Release:    %{release}
+License:    GPL or Artistic
+Group:      Development/Perl
+Summary:    A web voting application
+Source:     %{realname}-%{version}.tar.gz
+Url:        http://forge.ipsl.jussieu.fr/epoll/
+BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-buildroot
+BuildArch:  noarch
+
+BuildRequires: perl(Catalyst::Plugin::Prototype)
+BuildRequires: perl(Catalyst::Plugin::I18N)
+BuildRequires: perl(Module::Install)
+BuildRequires: perl(Catalyst)
+BuildRequires: perl(Catalyst::Devel)
+BuildRequires: perl(Catalyst::Plugin::Session::State::Cookie)
+BuildRequires: perl(Catalyst::Plugin::Session)
+BuildRequires: perl(Catalyst::Plugin::Session::Store::DBI)
+BuildRequires: perl(Catalyst::Action::RenderView)
+BuildRequires: perl(Catalyst::View::TT)
+BuildRequires: perl(Catalyst::Plugin::ConfigLoader)
+BuildRequires: perl(Catalyst::Plugin::Static::Simple)
+BuildRequires: perl(Catalyst::Plugin::Prototype)
+BuildRequires: perl(Catalyst::Plugin::I18N)
+BuildRequires: perl(YAML)
+BuildRequires: perl(Config::YAML)
+BuildRequires: perl(XML::Simple)
+BuildRequires: perl(Crypt::CBC)
+buildRequires: perl(Crypt::DES_EDE3)
+BuildRequires: perl(Crypt::RSA)
+BuildRequires: perl(DBI)
+BuildRequires: perl(DBD::Pg)
+BuildRequires: perl(MIME::Base64)
+BuildRequires: perl(Mail::Mailer)
+
+Requires: perl(Catalyst::Plugin::Session::State::Cookie)
+Requires: perl(Catalyst::Plugin::Session)
+Requires: perl(Catalyst::Plugin::Session::Store::DBI)
+Requires: perl(Catalyst::Action::RenderView)
+Requires: perl(Catalyst::View::TT)
+Requires: perl(Catalyst::Plugin::ConfigLoader)
+Requires: perl(Catalyst::Plugin::Static::Simple)
+Requires: perl(Catalyst::Plugin::Prototype)
+Requires: perl(Catalyst::Plugin::I18N)
+Requires: perl(DBD::Pg)
+
+%description
+A web voting application, made with anonymity, vote protection and conviviality.
+
+%prep
+%setup -q -n %{realname}-%{version} 
+
+%build
+%{__perl} Makefile.PL INSTALLDIRS=vendor
+%make
+
+%if 0
+%check
+make test
+%endif
+
+%install
+rm -rf %buildroot
+%makeinstall_std
+
+mkdir -p %buildroot/etc
+install -m 700 epoll.yml.example %buildroot%_sysconfdir/epoll.yml
+mkdir -p %buildroot%_var/www/cgi-bin
+install -m 755 script/epoll_cgi.pl %buildroot%_var/www/cgi-bin/epoll_cgi.pl
+
+%clean
+rm -rf %buildroot
+
+%files
+%defattr(-,root,root)
+%doc Changes README
+%doc sql/postgres.dump
+%attr(0640,root,apache) %config(noreplace) %_sysconfdir/epoll.yml
+%_bindir/*
+%_var/www/cgi-bin/epoll_cgi.pl
+%{_mandir}/man3/*
+%{_mandir}/man1/*
+%perl_vendorlib/*
+
Index: /tags/2.00/epoll.yml.example
===================================================================
--- /tags/2.00/epoll.yml.example	(revision 478)
+++ /tags/2.00/epoll.yml.example	(revision 478)
@@ -0,0 +1,10 @@
+---
+name: Vote
+# db: connection, see libpq documentation
+# dbname=BASENAME;host=SERVER;user=USER;password=PASS
+db: dbname=vote
+# The smtp serveur to use, default is localhost
+smtp:
+# This change the poll creation behavior, instead ask want confirmation by mail
+# it ask for this password (in clear)
+# newpollpasswd:
Index: /tags/2.00/lib/Epoll.pm
===================================================================
--- /tags/2.00/lib/Epoll.pm	(revision 478)
+++ /tags/2.00/lib/Epoll.pm	(revision 478)
@@ -0,0 +1,93 @@
+package Epoll;
+
+use strict;
+use warnings;
+use Config::YAML;
+
+use Catalyst::Runtime '5.70';
+
+# Set flags and add plugins for the application
+#
+#         -Debug: activates the debug mode for very useful log messages
+#   ConfigLoader: will load the configuration from a YAML file in the
+#                 application's home directory
+# Static::Simple: will serve static files from the application's root 
+#                 directory
+
+use Catalyst qw/
+    ConfigLoader
+    Static::Simple
+    Session
+    Session::Store::DBI
+    Session::State::Cookie
+    Prototype
+    I18N
+    /;
+
+# Configure the application. 
+#
+# Note that settings in Vote.yml (or other external
+# configuration file that you set up manually) take precedence
+# over this when using ConfigLoader. Thus configuration
+# details given here can function as a default configuration,
+# with a external configuration file acting as an override for
+# local deployment.
+
+__PACKAGE__->config( name => 'Epoll' );
+
+# Config file, in tree, else should be in /etc
+
+__PACKAGE__->config(
+    'Plugin::ConfigLoader' => {
+        file => -f __PACKAGE__->path_to('epoll.yml')
+        ? __PACKAGE__->path_to('epoll.yml')
+        : '/etc/epoll.yml',
+    },
+    'Plugin::I18N' => {
+        maketext_options => {
+            Decode => 0
+        },
+    }
+);
+
+__PACKAGE__->config->{session} = {
+    expires   => 3600 * 24 * 60,
+    dbi_table => 'sessions',
+    dbi_dsn => 'noo',
+};
+
+
+# Start the application
+__PACKAGE__->setup;
+
+# This is after because db config is in config file
+__PACKAGE__->config->{session}{dbi_dsn} = 'dbi:Pg:' . __PACKAGE__->config->{db};
+
+=head1 NAME
+
+Vote - Catalyst based application
+
+=head1 SYNOPSIS
+
+    script/vote_server.pl
+
+=head1 DESCRIPTION
+
+[enter your description here]
+
+=head1 SEE ALSO
+
+L<Vote::Controller::Root>, L<Catalyst>
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/Controller/Admin.pm
===================================================================
--- /tags/2.00/lib/Epoll/Controller/Admin.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Controller/Admin.pm	(revision 478)
@@ -0,0 +1,395 @@
+package Epoll::Controller::Admin;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+=head1 NAME
+
+Epoll::Controller::Admin - Catalyst Controller
+
+=head1 DESCRIPTION
+
+Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+
+=head2 index 
+
+=cut
+
+sub index : Private {
+    my ( $self, $c ) = @_;
+
+    $c->res->redirect($c->uri_for('/'));
+}
+
+sub modify_poll : Private {
+    my ( $self, $c) = @_;
+    my $id = $c->stash->{voteid};
+
+    my $poll = $c->model('Vote')->poll($id);
+    for ($poll->status || '') {
+    /^BEFORE$/ and do {
+        if ($c->req->param('addch')) {
+            $poll->add_choice($c->req->param('addch'))
+                and $poll->commit;
+        } elsif ($c->req->param('delch')) {
+            $poll->delete_choice($c->req->param('delch'))
+                and $poll->commit;
+        } elsif ($c->req->param('polldate')) {
+            if ($c->req->param('dstart')) {
+                $c->req->param('start',
+                    $c->req->param('dstart') . ' ' . ($c->req->param('hstart') || '')
+                );
+            }
+            if ($c->req->param('dend')) {
+                $c->req->param('end',
+                    $c->req->param('dend') . ' ' . ($c->req->param('hend') || '')
+                );
+            }
+            if ($c->req->param('end') && $c->req->param('start')) {
+                if ($poll->check_date_max($c->req->param('start'))) {
+                    if (! $poll->check_date_max($c->req->param('end'), $c->req->param('start'))) {
+                        $c->stash->{dateerror} = $c->localize('The poll finish before starting');
+                        next;
+                    }
+                } else {
+                    $c->stash->{dateerror} = $c->('The start of the poll must be in the future');
+                    next;
+                }
+            } elsif ($c->req->param('end') || $c->req->param('start')) {
+                $c->stash->{dateerror} =  $c->localize('You must define a start and a end date');
+                next;
+            }
+            $poll->param(
+                map { $_ => ($c->req->param($_) || undef) }
+                grep { exists($c->req->params->{$_}) }
+                qw(start end)
+            ) and $poll->commit;
+        } elsif ($c->req->param('pollparam')) {
+            $poll->param(
+                map { $_ => ($c->req->param($_) || undef) }
+                qw(label description procedure
+                no_mail_confirm_vote no_ballot_id_voting no_mail_ballot_id
+                )
+            ) and $poll->commit;
+        } elsif ($c->req->param('pollballot')) {
+            $poll->param(
+                map { $_ => ($c->req->param($_) || undef) }
+                qw(choice_count free_choice elected_count elected_choice
+                )
+            ) and $poll->commit;
+        } elsif ($c->req->param('encrypted')) {
+            my $passphrase = $c->req->param('passphrase') ||
+                $c->session->{'vpass' . $c->stash->{voteid}};
+            $poll->gen_poll_keys($passphrase)
+                and $poll->commit;
+        } elsif ($c->req->param('notcrypted')) {
+            $poll->param(public_key => undef, private_key => undef)
+                and $poll->commit;
+        }
+    };
+
+    /^AFTER$/ and do {
+        if ($c->req->param('mapfrom')) {
+            $poll->map_value(
+                $c->req->param('mapfrom'),
+                $c->req->param('mapto') || undef,
+            );
+        }
+        foreach my $bid ($c->req->param('bsubvalid')) {
+            if (!$c->req->param($bid)) {
+                next;
+            } elsif($c->req->param($bid) eq 'invalid') {
+                $poll->ballot($bid)->mark_invalid(1);
+                $poll->commit;
+            } elsif($c->req->param($bid) eq 'valid') {
+                $poll->ballot($bid)->mark_invalid(0);
+                $poll->commit;
+            }
+        }
+        if ($c->req->param('decryptballot')) {
+            my $passphrase = $c->req->param('passphrase') ||
+                $c->session->{'vpass' . $c->stash->{voteid}};
+                $c->model('Vote')->poll($c->stash->{voteid})->decrypted_ballots(
+                    $passphrase
+                );
+        }
+        if ($c->req->param('publish')) {
+            $c->model('Vote')->poll($c->stash->{voteid})->compute_results;
+            $c->model('Vote')->commit;
+            $c->res->redirect($c->uri_for('/vote', $poll->uid));
+        }   
+    };
+    }
+}
+
+sub ballotfilter : Private {
+    my ($self, $c) = @_;
+
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+    $c->req->params->{ballotvalue} = 's:needvalid'
+        if (!$c->req->param('ballotvalue'));
+
+    for ($c->req->param('ballotvalue') || '') {
+        /^v:(.*)/ and $c->stash->{ballotfilter} =
+            [ $poll->ballot_by_value($1) ];
+        /^s:invalid$/ and $c->stash->{ballotfilter} =
+            [ $poll->list_ballot_invalid ];
+        /^s:valid$/ and $c->stash->{ballotfilter} =
+            [ $poll->list_ballot_valid ];
+        /^s:needvalid$/ and $c->stash->{ballotfilter} =
+            [ $poll->list_ballot_needvalid ];
+    }
+}
+
+sub auth : Private {
+    my ($self, $c) = @_;
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+    my $password = $c->session->{'vpass' . $poll->uid} ||
+        $c->req->param('vpass' . $poll->uid);
+
+    if (!$poll->auth_poll($password)) {
+        $c->stash->{page}{title} = $poll->info('label') .
+            ': ' . $c->localize('Administrator login');
+        $c->session->{'vpass' . $c->stash->{voteid}} = undef;
+        $c->stash->{template} = 'admin/login.tt';
+        return;
+    }
+    $c->session->{'vpass' . $poll->uid} = $password;
+    $c->session_expire_key( 'vpass' . $poll->uid => 1800 );
+    $c->session->{mypoll}{$poll->uid} = 1;
+    return 1;
+}
+
+sub default : Private {
+    my ( $self, $c, undef, $id ) = @_;
+    $c->stash->{voteid} = $id;
+    my $poll = $c->model('Vote')->poll($id);
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+
+    $c->forward('auth') or return;
+    $c->forward('modify_poll');
+    $c->stash->{page}{title} = $poll->info('label') . ': ' . $c->localize('Administration');
+}
+
+sub voters: LocalRegex('^(\w+)/voters$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $id = $c->stash->{voteid};
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+
+    $c->forward('auth') or return;
+    
+    for ($poll->status || '') {
+        /^(BEFORE|RUNNING)$/ and do {
+            if($c->req->param('delvoting')) {
+                $poll->delete_voting($c->req->param('delvoting'))
+                    and $poll->commit;
+            } elsif ($c->req->param('mail')) {
+                $poll->addupd_voting($c->req->param('mail'), $c->req->param('id'))
+                    and $poll->commit;
+            } elsif($c->req->param('mailpasswd')) {
+                # TODO
+                foreach my $vkey ($poll->list_voting_no_passwd) {
+                    my $voting = $poll->voting($vkey);
+                    my $pass = $voting->gen_passwd;
+                    $c->forward(
+                        q'Epoll::View::Mail', 'render',
+                        [ 'voting_passwd.tt', {
+                            From => $poll->info->{owner},
+                            To => $voting->info->{mail},
+                            Subject => $c->localize("Voting invitation"),
+                            mail => {
+                                voteid => $id,
+                                mail => $voting->info->{mail},
+                                passwd => $pass,
+                            }
+                        } ]
+                    );
+                }
+            }
+        };
+    }
+
+    $c->stash->{page}{title} = $poll->info('label') . ': ' . $c->localize('Administration') . ', ' . $c->localize('voters list');
+}
+
+sub votersimport: LocalRegex('^(\w+)/voters/import$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+
+    if ($c->req->param('importtype')) {
+        if (my $handle = $poll->import_handle($c->req->param('importtype'))) {
+            $c->stash->{import_handle} = $handle;
+            if ($c->req->param('add_import')) {
+                warn $c->session->{import_param};
+                $handle->load_xml_params($c->session->{import_param});
+                if ($poll->voting_from_import($handle,
+                        ext_auth => $c->req->param('ext_auth') || undef,
+                        desc => $c->req->param('desc') || undef,
+                    )) {
+                    $poll->commit;
+                    $c->res->redirect($c->uri_for($c->stash->{voteid},
+                            'voters'));
+                    return;
+                }
+            } else {
+                $handle->load_web_params($c);
+            }
+            $c->stash->{voters} = [ $handle->fetch_voters() ];
+            $c->{stash}->{importtt} = 'importv/' .
+                lc($c->req->param('importtype')) . '.tt';
+            warn $handle->xml_params;
+            $c->session->{import_param} = $handle->xml_params;
+        } else {
+            warn "Fail to load input handle";
+        }
+    }
+
+}
+
+sub ballot: LocalRegex('^(\w+)/ballot$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+
+    $c->forward('auth') or return;
+    $c->forward('modify_poll');
+    $c->stash->{page}{title} = $poll->info('label') . ': ' . $c->localize('Administration') . ', '. $c->localize('ballots');
+}
+
+sub date: LocalRegex('^(\w+)/date$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+
+    $c->forward('auth') or return;
+    $c->forward('modify_poll');
+    $c->stash->{page}{title} = $poll->info('label') . ': ' . $c->localize('Administration') . ', '. $c->localize('Date');
+}
+
+sub privatekey : LocalRegex('^(\w+)/privatekey$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+    $c->response->body($poll->info('private_key') || '');
+}
+
+sub validate: LocalRegex('^(\w+)/validate$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+
+    $c->forward('auth') or return;
+    $c->forward('modify_poll');
+    $c->stash->{page}{title} = $poll->info('label') . ': ' . $c->localize('Administration') . ', ' . $c->localize('Validation');
+
+    $c->forward('ballotfilter');
+}
+
+sub delete: LocalRegex('^(\w+)/delete$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $poll = $c->model('Vote')->results($c->stash->{voteid});
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+
+    $c->forward('auth') or return;
+
+    if ($c->req->param('delete_ballot')) {
+        $c->stash->{template} = 'admin/delete_ballot_confirm.tt';
+        return;
+    }
+    
+    if ($c->req->param('delete_poll')) {
+        $c->stash->{template} = 'admin/delete_poll_confirm.tt';
+        return;
+    }
+
+    if ($c->req->param('delete_ballot_confirm')) {
+        $poll->delete_ballots;
+        $c->response->redirect($c->uri_for($poll->uid));
+    }
+
+    if ($c->req->param('delete_poll_confirm')) {
+        $c->model('Vote')->delete_poll($poll->voteid);
+        $c->response->redirect($c->uri_for('/'));
+        $c->detach;
+    }
+}
+
+sub ajaxsettings: LocalRegex('^(\w+)/ajaxsettings$') {
+    my ($self, $c) = @_;
+    ($c->stash->{voteid}) = @{ $c->req->snippets || [] };
+    my $poll = $c->model('Vote')->poll($c->stash->{voteid});
+
+    $poll->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+
+    $c->forward('auth') or return;
+    $c->stash->{ajax} = 1;
+    $c->stash->{pollsettings} = $c->req->params;
+    $c->stash->{template} = 'admin/includes/poll_extra_settings.tt';
+}
+
+sub end : Private {
+    my ($self, $c) = @_;
+    if ($c->res->body) { return }
+    elsif ($c->stash->{latex}) { $c->forward(qw/Epoll::View::Latex/) }
+    elsif ($c->stash->{ajax}) { $c->forward(qw/Epoll::View::Ajax/) }
+    else { $c->forward(qw/Epoll::View::TT/) }
+    $c->model('Vote')->rollback;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/Controller/Ajax.pm
===================================================================
--- /tags/2.00/lib/Epoll/Controller/Ajax.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Controller/Ajax.pm	(revision 478)
@@ -0,0 +1,72 @@
+package Epoll::Controller::Ajax;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+=head1 NAME
+
+Epoll::Controller::Ajax - Catalyst Controller
+
+=head1 DESCRIPTION
+
+Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+
+=head2 index
+
+=cut
+
+sub index :Path :Args(0) {
+    my ( $self, $c ) = @_;
+
+    $c->response->body('Matched Epoll::Controller::Ajax in Ajax.');
+}
+
+sub datecheck :Path {
+    my ( $self, $c ) = @_;
+
+    my $poll = $c->model('Vote');
+    if ($c->req->param('dstart') && $c->req->param('dend')) {
+
+        my $start = $c->req->param('dstart') . ' ' . ($c->req->param('hstart') || '');
+        my $end = $c->req->param('dend') . ' ' . ($c->req->param('hend') || '');
+
+        if ($poll->check_date_max($start)) {
+            if ($poll->check_date_max($end, $start)) {
+                $c->response->body('<input type="submit" name="polldate" value="' . $c->localize('Save') . '">');
+            } else {
+
+                $c->response->body( $c->localize('The poll finish before starting'));
+            }
+        } else {
+            $c->response->body( $c->localize('The start of the poll must be in the future'));
+        }
+    } else {
+        $c->response->body( $c->localize('You must define a start and a end date'));
+    }
+}
+
+sub end : Private {
+    my ($self, $c) = @_;
+    if ($c->res->body) { return }
+    else { $c->forward(qw/Epoll::View::Ajax/) }
+}
+
+
+=head1 AUTHOR
+
+Olivier Thauvin
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/Controller/Ballot.pm
===================================================================
--- /tags/2.00/lib/Epoll/Controller/Ballot.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Controller/Ballot.pm	(revision 478)
@@ -0,0 +1,158 @@
+package Epoll::Controller::Ballot;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+=head1 NAME
+
+Epoll::Controller::Ballot - Catalyst Controller
+
+=head1 DESCRIPTION
+
+Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+
+=head2 index 
+
+=cut
+
+sub index : Private {
+    my ( $self, $c ) = @_;
+
+    $c->res->redirect($c->uri_for('/'));
+}
+
+sub default : Private {
+    my ( $self, $c, undef, $id ) = @_;
+
+    $c->stash->{voteid} = $id;
+    my $poll = $c->model('Vote')->poll($id);
+    my $puid = $poll->uid;
+
+    if ($poll->status ne 'RUNNING') {
+        $c->stash->{template} = 'ballot/closed.tt';
+        return;
+    }
+
+    my $mail = $c->session->{$puid}{mail} || $c->req->param('mail');
+    my $password = $c->session->{$puid}{password} || $c->req->param('password');
+
+    if (!$c->model('Vote')->poll($id)->auth_voting($mail, $password)) {
+        $c->stash->{page}{title} = $poll->info('label') . ': ' . $c->localize('Login');
+        $c->session->{$puid} = undef;
+        $c->stash->{template} = 'ballot/login.tt';
+        if (defined($c->req->param('password'))) {
+            # show login failure:
+            $c->stash->{login_failure} = 1;
+        }
+        return;
+    }
+
+    $c->session_expire_key( $puid => 600 );
+    $c->session->{$puid}{mail} = $mail;
+    $c->session->{$puid}{password} = $password;
+    $c->session->{mypoll}{$puid} ||= 0;
+
+    $c->stash->{page}{title} = $poll->info('label') . ': ' . $c->localize('Ballot');
+
+    # login succeed, but those this user has already voted
+    if (my $date = $poll->voting_has_sign($mail)) {
+        $c->stash->{mail} = $c->session->{$puid}{mail};
+        $c->stash->{template} = 'ballot/signed.tt';
+        $c->stash->{signed_date} = $date;
+        $c->session->{$puid} = undef;
+        return;
+    }
+
+    my $vote = $c->model('Vote');
+    my %choices;
+    foreach ($poll->choices_keys) {
+        $choices{$_} = $poll->choice($_)->info->{label};
+    }
+    $c->stash->{choices} = { %choices };
+    $c->stash->{sbal} = { map { $_ => 1 } $c->req->param('sbal') };
+    $c->stash->{fsbal} = [ grep { $_ } map {
+        s/^\s+//;
+        s/\s+$//;
+        s/\s+/ /g;
+        lc($_)
+    } ($c->req->param('fsbal')) ];
+    $c->stash->{esbal} = [ grep { $_ } $c->req->param('esbal') ];
+
+    $c->request->parameters->{fsbal} = $c->stash->{fsbal};
+
+    my @sbalval = grep { $_ } map { lc($choices{$_} || '') } $c->req->param('sbal');
+
+    my @ballot = grep { $_ } (
+        @sbalval,
+        @{$c->stash->{fsbal} || []},
+        @{$c->stash->{esbal} || []},
+    );
+    if (scalar(@ballot) > $poll->info('choice_count')) {
+        $c->req->parameters->{'ballot'} = '';
+        $c->stash->{vote_error} = $c->localize('Only ') .
+            $poll->info('choice_count') . ' ' . $c->localize('possible choices');
+        return;
+    }
+    {
+        my %uniq;
+        foreach(@ballot) {
+            $uniq{lc($_)} ||= 0; # avoid undef
+            $uniq{lc($_)}++;
+        }
+        my @twices = grep { $uniq{$_} > 1 } (sort keys %uniq);
+        if (scalar(@twices)) {
+            $c->req->parameters->{'ballot'} = '';
+            $c->stash->{vote_error} = $c->localize('One or more values are duplicated:') .
+                join(' ,', map { qq'"$_"' } @twices);
+            return;
+        }
+    }
+
+    if ($c->req->param('confirm')) {
+        $c->stash->{ballotid} = $poll->register_ballot(
+            $mail,
+            [ @ballot ],
+            $c->req->address,
+        ); # TODO trap error
+        $c->forward(
+            q'Epoll::View::Mail', 'render',
+            [ 'ballot_confirm.tt', {
+                From => $mail,
+                To => $mail,
+                Subject => $c->localize('Vote confirmation:') . $poll->info('label'),
+                mail => {
+                    ballotid => $c->stash->{ballotid},
+                    voteid => $id,
+                }
+            } ]
+        ) unless($poll->info->{no_mail_confirm_vote});
+
+        $c->stash->{template} = 'ballot/done.tt';
+    }
+}
+
+sub end : Private {
+    my ($self, $c) = @_;
+    if ($c->res->body) { return }
+    else { $c->forward(qw/Epoll::View::TT/) }
+    $c->model('Vote')->rollback;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/Controller/Newpoll.pm
===================================================================
--- /tags/2.00/lib/Epoll/Controller/Newpoll.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Controller/Newpoll.pm	(revision 478)
@@ -0,0 +1,112 @@
+package Epoll::Controller::Newpoll;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+=head1 NAME
+
+Epoll::Controller::Newpoll - Catalyst Controller
+
+=head1 DESCRIPTION
+
+Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+
+=head2 index 
+
+=cut
+
+sub index : Private {
+    my ( $self, $c ) = @_;
+
+    $c->stash->{page}{title} = $c->localize('Create a new poll');
+    if ($c->req->param('mail')) {
+        if ($c->config->{newpollpasswd}) {
+            if (($c->req->param('passwd') || '') eq $c->config->{newpollpasswd})
+                {
+                    if (my $pid = $c->model('Vote')->create_poll(
+                            $c->req->param('mail'),
+                            $c->req->param('label'),
+                            $c->req->param('vpasswd'),
+                        )
+                    ) {
+                        $c->session->{'vpass' . $pid} = $c->req->param('vpasswd'); # avoid auth on admin page
+                        $c->res->redirect($c->uri_for('/admin',
+                                $c->model('Vote')->poll_id_from_uid($pid))
+                        );
+                    }
+                } else {
+                    $c->stash->{passwderror} = 1;
+                }
+        } else {
+            my $reqid = $c->model('Vote')->create_poll_request(
+                mail => $c->req->param('mail'),
+                label => $c->req->param('label'),
+            );
+            $c->forward(
+                q'Epoll::View::Mail', 'render',
+                [ 'poll_request.tt', {
+                    To => $c->req->param('mail'),
+                    Subject => $c->localize("New poll request"),
+                    mail => {
+                        label => $c->req->param('label'),
+                        reqid => $reqid,
+                    }
+                } ]
+            );
+            if ($c->stash->{mail_error}) { 
+                $c->stash->{template} = 'errors/mail.tt';
+            } else { 
+                $c->stash->{template} = 'newpoll/request.tt';
+            }
+        }
+    }
+
+}
+
+sub default : LocalPath {
+    my ( $self, $c, undef, $id ) = @_;
+
+    $id eq 'confirm' and $id = $c->req->param('id') || '';
+    $c->stash->{reqid} = $id;
+
+    if (!$c->model('Vote')->poll_request_info($id)) {
+        $c->stash->{page}{title} = $c->localize("No poll creation request");
+        $c->stash->{template} = 'newpoll/norequest.tt';
+        return;
+    }
+
+    $c->stash->{page}{title} = $c->localize('Confirm new poll creation');
+    if ($c->req->param('passwd')) {
+        my $pid = $c->model('Vote')->poll_from_request($id, $c->req->param('passwd'));
+        my $uid = $c->model('Vote')->poll($pid)->uid;
+        $c->session->{'vpass' . $uid} = $c->req->param('passwd'); # avoid auth on admin page
+        $c->res->redirect($c->uri_for('/admin', $uid));
+    }
+}
+
+sub end : Private {
+    my ($self, $c) = @_;
+    if ($c->res->body) { return }
+    else { $c->forward(qw/Epoll::View::TT/) }
+    $c->model('Vote')->rollback;
+    $c->model('Vote')->clean_old_poll_request and $c->model('Vote')->commit;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/Controller/Root.pm
===================================================================
--- /tags/2.00/lib/Epoll/Controller/Root.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Controller/Root.pm	(revision 478)
@@ -0,0 +1,95 @@
+package Epoll::Controller::Root;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+#
+# Sets the actions in this controller to be registered with no prefix
+# so they function identically to actions created in MyApp.pm
+#
+__PACKAGE__->config->{namespace} = '';
+
+=head1 NAME
+
+Epoll::Controller::Root - Root Controller for Epoll
+
+=head1 DESCRIPTION
+
+[enter your description here]
+
+=head1 METHODS
+
+=cut
+
+=head2 default
+
+=cut
+
+sub begin : Private {
+    my ( $self, $c ) = @_;
+    $c->model('Vote')->rollback;
+
+    my ($locale) = split(';', $c->req->header('Accept-Language') || '');
+    if (my $plocale = ($c->req->param('locale')|| $c->session->{'locale'})) {
+        $c->session->{'locale'} = $locale = $plocale;
+    }
+    $c->languages($locale ? [ $locale ] : '');
+    $c->stash->{locale} = $locale;
+}
+
+sub default : Private {
+    my ( $self, $c ) = @_;
+    $c->stash->{page}{title} = 'Epoll ' . $Epoll::DB::VERSION;
+    if ($c->req->param('mailvoting')) {
+        my @polls_voting = $c->model('Vote')->find_poll_by_notyet_voting(
+            $c->req->param('mailvoting')
+        );
+        my @polls_owner = $c->model('Vote')->find_poll_by_owner(
+            $c->req->param('mailvoting')
+        );
+
+        if (scalar(@polls_voting) || scalar(@polls_owner)) {
+            $c->forward(
+                q'Epoll::View::Mail', 'render',
+                [ 'poll_reminder_voting.tt', {
+                    To => $c->req->param('mailvoting'),
+                    Subject => $c->localize('Poll request reminder'),
+                    mail => {
+                        label => $c->localize('Poll request reminder'),
+                        polls_owner => \@polls_owner,
+                        polls_voting => \@polls_voting,
+                    },
+                }]
+            );
+            $c->stash->{sendvoting} = $c->req->param('mailvoting');
+        } else {
+            $c->stash->{novoting} = $c->req->param('mailvoting');
+        }
+    }
+}
+
+=head2 end
+
+Attempt to render a view, if needed.
+
+=cut 
+
+sub end : Private {
+    my ($self, $c) = @_;
+    if ($c->res->body) { return }
+    else { $c->forward(qw/Epoll::View::TT/) }
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/Controller/Vote.pm
===================================================================
--- /tags/2.00/lib/Epoll/Controller/Vote.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Controller/Vote.pm	(revision 478)
@@ -0,0 +1,79 @@
+package Epoll::Controller::Vote;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+=head1 NAME
+
+Epoll::Controller::Vote - Catalyst Controller
+
+=head1 DESCRIPTION
+
+Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+
+=head2 index 
+
+=cut
+
+sub index : Private {
+    my ( $self, $c ) = @_;
+
+    $c->stash->{template} = 'default.tt';
+    $c->res->redirect($c->uri_for('/'));
+}
+
+sub default : LocalPath {
+    my ( $self, $c, undef, $id ) = @_;
+
+    $c->stash->{voteid} = $id;
+    $c->stash->{page}{title} = 'Epoll: ' . $c->model('Vote')->poll($id)->info('label');
+}
+
+sub report: LocalRegex('^(\w+)/(results|report).(\w+)$') {
+    my ($self, $c) = @_;
+    my $doc;
+    ($c->stash->{voteid}, $doc, $c->stash->{format}) = @{ $c->req->snippets || [] };
+    my $vote = $c->model('Vote');
+    $c->stash->{template} = 'default.tt';
+
+    $vote->poll($c->stash->{voteid})->info or do {
+        $c->res->redirect($c->uri_for('/'));
+        return;
+    };
+    # Ensure report is not availlable before end of poll
+    if ($vote->poll($c->stash->{voteid})->status ne 'AFTER') {
+        $c->res->redirect($c->uri_for('/vote', $vote->poll($c->stash->{voteid})->uid));
+        return;
+    };
+
+
+    $c->stash->{template} = "poll_$doc.tt";
+    $c->stash->{latex} = 1;
+}
+
+sub end : Private {
+    my ($self, $c) = @_;
+    if ($c->res->body) { return }
+    elsif ($c->stash->{latex}) { $c->forward(qw/Epoll::View::Latex/) }
+    else { $c->forward(qw/Epoll::View::TT/) }
+    $c->model('Vote')->rollback;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB.pm	(revision 478)
@@ -0,0 +1,314 @@
+package Epoll::DB;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::common';
+use Epoll::DB::Poll;
+
+our $VERSION = '2.00';
+
+=head1 NAME
+
+Epoll::Model::Vote - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub new {
+    my ($class, $dbstring) = @_;
+    
+    bless {
+        dbstring => $dbstring,
+        db => Epoll::DB::common::_newdb($dbstring),
+    }, $class;
+}
+
+sub list_coming_vote {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from poll where
+        (start > now() and "end" > now()) or
+        "end" is null or start is null
+        }
+    );
+
+    $sth->execute;
+    my @id;
+    while(my $res = $sth->fetchrow_hashref) {
+        push(@id, $res->{id});
+    }
+
+    @id
+}
+
+sub list_running_vote {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from poll where start < now() and "end" > now()
+        }
+    );
+
+    $sth->execute;
+    my @id;
+    while(my $res = $sth->fetchrow_hashref) {
+        push(@id, $res->{id});
+    }
+
+    @id
+}
+
+sub list_closed_vote {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from poll where
+        start < now() and "end" < now()
+        }
+    );
+
+    $sth->execute;
+    my @id;
+    while(my $res = $sth->fetchrow_hashref) {
+        push(@id, $res->{id});
+    }
+
+    @id
+}
+
+sub poll {
+    my ($self, $pollid) = @_;
+    Epoll::DB::Poll->new($self->{dbstring}, $self->poll_id_from_uid($pollid));
+}
+
+sub results {
+    my ($self, $pollid) = @_;
+    Epoll::DB::Poll->new($self->{dbstring}, $self->poll_id_from_uid($pollid));
+}
+
+# This part is keep to track error
+sub ballot {die "# ballot" . join(' ',caller());}
+sub vote_param { die "# vote_param" . join(' ',caller());}
+sub vote_status {die "# vote_status" . join(' ',caller());}
+sub vote_info {die "# vote_info" . join(' ',caller());}
+sub vote_set_settings {die "# old functions" . join(' ',caller());}
+sub vote_signing {die "# old functions" . join(' ',caller());}
+sub vote_voting {die "# old functions" . join(' ',caller());}
+sub voting_info {die "# old functions" . join(' ',caller());}
+sub vote_choices {die "# old functions" . join(' ',caller());}
+sub vote_add_choice {die "# old functions" . join(' ',caller());}
+sub choice_info {die "# old functions" . join(' ',caller());}
+sub delete_choice {die "# old functions" . join(' ',caller());}
+sub voting_info_id {die "# old functions" . join(' ',caller());}
+sub register_ballot {die "# old functions" . join(' ',caller());}
+sub vote_voting_count {die "# old functions" . join(' ',caller());}
+sub signing_count { vote_signing_count(@_) }
+sub vote_signing_count {die "# old functions" . join(' ',caller());}
+sub ballot_count { vote_ballot_count(@_) }
+sub vote_ballot_count {die "# old functions" . join(' ',caller());}
+sub ballot_count_nonull { vote_ballot_count_nonull(@_) }
+sub vote_ballot_count_nonull {die "# old functions" . join(' ',caller());}
+sub auth_voting {die "# old functions" . join(' ',caller());}
+sub auth_poll {die "# old functions" . join(' ',caller());}
+sub voting_has_sign {die "# old functions" . join(' ',caller());}
+sub vote_results_count {die "# old functions" . join(' ',caller());}
+sub vote_results_nonull {die "# old functions" . join(' ',caller());}
+sub list_vote_ballot {die "# old functions" . join(' ',caller());}
+sub list_vote_ballot_needvalid {die "# old functions" . join(' ',caller());}
+sub ballot_info {die "# vote_status" . join(' ',caller());}
+sub mark_ballot_invalid {die "# old functions" . join(' ',caller());}
+sub ballot_items {die "# old functions" . join(' ',caller());}
+sub vote_ballot_untrusted_values {die "# old functions" . join(' ',caller());}
+sub vote_ballot_values {die "# old functions" . join(' ',caller());}
+sub vote_map_value {die "# old functions" . join(' ',caller());}
+sub addupd_voting {die "# old functions" . join(' ',caller());}
+sub delete_voting {die "# old functions" . join(' ',caller());}
+sub voting_from_file {die "# old functions" . join(' ',caller());}
+
+sub clean_old_poll_request {
+    my ($self) = @_;
+    $self->db->do(q{delete from poll_request where "create" < now() - '30 days'::interval});
+}
+
+sub poll_request_info {
+    my ($self, $rid) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{select * from poll_request where id = ?}
+    );
+
+    $sth->execute($rid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res
+}
+
+sub poll_from_request {
+    my ($self, $rid, $passwd) = @_;
+    my $rinfo = $self->poll_request_info($rid) or return;
+
+    my $pollid = $self->_create_poll($rinfo->{mail}, $rinfo->{label}, $passwd);
+    
+    my $delreq = $self->db->prepare_cached(
+        q{delete from poll_request where id = ?}
+    );
+
+    $delreq->execute($rid);
+    $self->commit;
+    $pollid
+}
+
+sub create_poll {
+    my ($self, @args) = @_;
+    my $uid = $self->_create_poll(@args);
+    $self->commit;
+    $uid;
+}
+
+sub _create_poll {
+    my ($self, $mail, $label, $passwd) = @_;
+
+    my $encpasswd = $self->gen_enc_passwd($passwd);
+
+    my $getpollid = $self->db->prepare_cached(
+        q{select nextval('poll_id_seq')}
+    );
+    $getpollid->execute();
+    my $newpollid = $getpollid->fetchrow_hashref->{nextval};
+    $getpollid->finish;
+    
+    my $newpoll = $self->db->prepare_cached(
+        q{insert into poll (id, label, owner, password) values (?,?,?,?)}
+    );
+
+    $newpoll->execute($newpollid, $label, $mail, $encpasswd);
+    # set some default
+    $self->poll($newpollid)->setup() or do {
+        $self->rollback;
+        return;
+    };
+
+    $newpollid
+}
+
+
+sub create_poll_request {
+    my ($self, %info) = @_;
+
+    $info{mail} or return;
+    my $addreq = $self->db->prepare_cached(
+        q{insert into poll_request (id, label, mail) values (?,?,?)}
+    );
+
+    my $reqid = Epoll::DB::common::gen_uid();
+
+    $addreq->execute($reqid, $info{label}, $info{mail});
+    $self->commit;
+    $reqid;
+}
+
+sub find_poll_by_voting {
+    my ($self, $mail) = @_;
+    $mail or return;
+    my $finder = $self->db->prepare_cached(q{
+        select poll.id, date from poll join
+        subpoll on poll.id = subpoll.pollid
+        join voters on voters.poll = poll.id
+        left join signing on
+          signing.subpoll = subpoll.id and
+          signing.voters = voters.key
+        where mail = lower($1)
+        group by poll.id, date
+        order by date desc
+        }
+    );
+    $finder->execute($mail);
+    my @results;
+    while (my $res = $finder->fetchrow_hashref) {
+        push(@results, $res);
+    }
+    @results
+}
+
+sub find_poll_by_notyet_voting {
+    my ($self, $mail) = @_;
+    $mail or return;
+    my $finder = $self->db->prepare_cached(
+        q{select poll from voting where
+          key not in (select key from signing)
+            and
+          poll in (select id from poll where "end" > now())
+            and
+          mail = lower($1)
+        }
+    );
+    $finder->execute($mail);
+    my @results;
+    while (my $res = $finder->fetchrow_hashref) {
+        push(@results, $res);
+    }
+    @results
+}
+
+sub find_poll_by_owner {
+    my ($self, $mail) = @_;
+    $mail or return;
+    my $finder = $self->db->prepare_cached(
+        q{select id, "end" > now() as terminated from poll where owner = lower($1)
+          order by "end" desc}
+    );
+    $finder->execute($mail);
+    my @results;
+    while (my $res = $finder->fetchrow_hashref) {
+        push(@results, $res);
+    }
+    @results
+}
+
+sub delete_poll {
+    my ($self, $id) = @_;
+    {
+        my $poll = $self->poll($id);
+        $poll->_delete_ballot;
+    }
+
+    foreach (
+        q{delete from settings where poll = ?},
+        q{delete from signing where key in (select key from voting where poll = ?)},
+        q{delete from voting where poll = ?},
+        q{delete from choice where poll = ?},
+        q{delete from ballot_map where poll = ?},
+        q{delete from poll where id = ?},
+    ) {
+        my $req = $self->db->prepare($_);
+        $req->execute($id) or do {
+            $self->rollback;
+            return;
+        };
+    }
+
+    $self->commit;
+    return 1;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/Ballot.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/Ballot.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/Ballot.pm	(revision 478)
@@ -0,0 +1,95 @@
+package Epoll::DB::Ballot;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::common';
+use Epoll::DB::Poll;
+
+=head1 NAME
+
+Epoll::Model::Epoll - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub new {
+    my ($class, $dbstring, $id) = @_;
+    
+    bless {
+        id => $id,
+        dbstring => $dbstring,
+        db => Epoll::DB::common::_newdb($dbstring),
+    }, $class;
+}
+
+sub ballotid { $_[0]->{id} }
+
+sub poll {
+    my ($self) = @_;
+    Epoll::DB::Poll->new($self->{dbstring}, $self->info->{poll});
+}
+
+sub info {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{ select * from 
+           ballot left join 
+           ballot_enc on ballot.id = ballot_enc.id 
+           where ballot.id = ? }
+    );
+
+    $sth->execute($self->ballotid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res
+}
+
+sub mark_invalid {
+    my ($self, $invalid) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{update ballot set invalid = ? where id = ?}
+    );
+
+    $sth->execute($invalid ? 't' : 'f', $self->ballotid);
+}
+
+sub items {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select ballot_item.*, value as v,
+        ballot_map.to as corrected
+        from ballot_item join ballot on ballot.id = ballot_item.id
+        left join ballot_map on ballot_map.poll = ballot.poll and
+        ballot_map.from = ballot_item.value
+        where ballot.id = ?
+        }
+    );
+    $sth->execute($self->ballotid);
+    my @ids;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ids, $res);
+    }
+    \@ids
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/Choice.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/Choice.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/Choice.pm	(revision 478)
@@ -0,0 +1,63 @@
+package Epoll::DB::Choice;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::common';
+use Epoll::DB::Poll;
+
+=head1 NAME
+
+Epoll::Model::Epoll - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub new {
+    my ($class, $dbstring, $key) = @_;
+    
+    bless {
+        key => $key,
+        dbstring => $dbstring,
+        db => Epoll::DB::common::_newdb($dbstring),
+    }, $class;
+}
+
+sub choicekey { $_[0]->{key} }
+
+sub poll {
+    my ($self) = @_;
+    Epoll::DB::Poll->new($self->{dbstring}, $self->info->{poll});
+}
+
+sub info {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select * from choice where key = ?
+        }
+    );
+    $sth->execute($self->choicekey);
+
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/ImportV.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/ImportV.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/ImportV.pm	(revision 478)
@@ -0,0 +1,65 @@
+package Epoll::DB::ImportV;
+
+use strict;
+use warnings;
+use YAML;
+
+sub new {
+    my ($class, $type) = @_;
+
+    my $ctype = ucfirst(lc($type));
+    
+    eval "require Epoll::DB::ImportV::$ctype;";
+    if ($@) { return; }
+    else {
+        return bless({}, "Epoll::DB::ImportV::$ctype");
+    }
+}
+
+sub auth_type {
+    my ($self) = @_;
+    ((ref $self) =~ /::([^:]+)$/)[0];
+}
+
+sub load_web_params {
+    my ($self, $c) = @_;
+    $self->{params} = { %{ $c->req->params || {} } };
+} 
+
+sub xml_params { dump_params(@_) }
+
+sub dump_params {
+    my ($self) = @_;
+    YAML::Dump($self->{params});
+}
+
+sub load_xml_params { load_dump_params(@_) }
+
+sub load_dump_params {
+    my ($self, $data) = @_;
+    $self->{params} = YAML::Load($data);
+    1;
+}
+
+sub can_authenticate {
+    my ($self) = @_;
+    $self->can('authenticate');
+}
+
+=head2 fetch_voters
+
+Must return an array of arrayref with for each item:
+
+=over4
+
+=item Email of the voters
+
+=item Name of the voters
+
+=item The UID/login to use over the remote system
+
+=back
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/ImportV/Csv.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/ImportV/Csv.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/ImportV/Csv.pm	(revision 478)
@@ -0,0 +1,27 @@
+package Epoll::DB::ImportV::Csv;
+
+use base qw(Epoll::DB::ImportV);
+
+sub load_web_params {
+    my ($self, $c) = @_;
+    if (my ($upload) = $c->req->upload('votinglist')) {
+        $fh = $upload->fh;
+        while (my $line = <$fh>) {
+            chomp($line);
+            my ($mail, $name) = split(';', $line);
+            $mail or do {
+                $self->{params}{list} = undef;
+                return;
+            };
+            push(@{$self->{params}{list}}, { mail => $mail, name => $name || '' });
+        }
+    }
+}
+
+sub fetch_voters {
+    my ($self) = @_;
+
+    return map { [ $_->{mail}, $_->{name} ] } @{$self->{params}{list} || []};
+}
+
+1;
Index: /tags/2.00/lib/Epoll/DB/ImportV/Dummy.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/ImportV/Dummy.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/ImportV/Dummy.pm	(revision 478)
@@ -0,0 +1,19 @@
+package Epoll::DB::ImportV::Dummy;
+
+use base qw(Epoll::DB::ImportV);
+
+sub authenticate {
+    my ($self, $mail, $label, $password) = @_;
+    warn $mail;
+    return 1;
+}
+
+sub fetch_voters {
+    my ($self) = @_;
+
+    return (
+        [ $self->{params}{mail}, undef, undef, ]
+    );
+}
+
+1;
Index: /tags/2.00/lib/Epoll/DB/ImportV/Ldap.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/ImportV/Ldap.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/ImportV/Ldap.pm	(revision 478)
@@ -0,0 +1,103 @@
+package Epoll::DB::ImportV::Ldap;
+
+use strict;
+use warnings;
+use base qw(Epoll::DB::ImportV);
+use Net::LDAP;
+use Net::LDAP::Control::Paged;
+use Net::LDAP::Constant qw( LDAP_CONTROL_PAGED );
+
+sub _unlimited_search {
+    my $ldap = shift;
+    my @args = @_;
+
+    my ($page, $cookie) = (Net::LDAP::Control::Paged->new( size => 100 ));
+
+    while (1) {
+        my $search = $ldap->search(
+            @args,
+            control => [ $page ],
+        );
+        if ($search->code) {
+            return $search;
+        }
+
+        ### After foreach loops ends, client checks LDAP server reponse of how many search results total.
+        ### This is a control to end the infinite while loop if there are no search results to go through 
+        ### If there are search results, this control will always return the total number of results. It is
+        ### never decremented
+        my ($resp) = $search->control( LDAP_CONTROL_PAGED ) or last;
+
+
+        ### Obtaining the cookie from the search result. When no more results, cookie will be NULL
+        ### and infinite while loop will terminate.
+        $cookie = $resp->cookie or last;
+
+        ### Sets cookie so server knows the next search result to send 
+        $page->cookie($cookie);
+    }
+    ### This is a control to check for abnormal exit of the while loop.
+    ### If this occurs ### we need to tell the LDAP server that remaining
+    ### search results are no longer needed ### by sending a search request with a page size of 0
+    if ($cookie)    {
+        $page->cookie($cookie);
+        $page->size(0);
+        $ldap->search(@args, control => [ $page ]);
+    }
+    return 1;
+}
+
+sub fetch_voters {
+    my ($self) = @_;
+    $self->{params}{uri} or return;
+    my $ldap = Net::LDAP->new($self->{params}{uri}) or return;
+
+    {
+        my $msg = $ldap->bind($self->{params}{login},
+            ($self->{params}{login}
+              ? (password => $self->{params}{password})
+              : ()),
+        );
+
+        $msg->code and do {
+            warn $msg->error;
+            return;
+        };
+    }
+
+    my @list;
+    _unlimited_search(
+        $ldap,
+        base => $self->{params}{basedn},
+        scope => 'sub',
+        filter => $self->{params}{filter},
+        attrs => [ grep { $_ } map { $self->{params}{$_} } qw(mail uid displayname) ],
+        callback => sub {
+            my ($mesg, $entry) = @_;
+            $entry or return;
+            my @voters = map {
+                $self->{params}{$_}
+                ? ($self->{params}{$_} eq 'dn'
+                    ? $entry->dn
+                    : $entry->get_value($self->{params}{$_}) || undef)
+                : undef
+            } qw(mail displayname uid);
+            $voters[0] or return;
+
+            push(@list, \@voters);
+        },
+    );
+
+    @list
+}
+
+sub authenticate {
+    my ($self, $mail, $uid, $passwd) = @_;
+    my $ldap = Net::LDAP->new($self->{params}{uri}) or return;
+
+    my $msg = $ldap->bind($uid, password => $passwd);
+    $msg->code and return;
+    return 1;
+}
+
+1;
Index: /tags/2.00/lib/Epoll/DB/Poll.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/Poll.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/Poll.pm	(revision 478)
@@ -0,0 +1,1185 @@
+package Epoll::DB::Poll;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::common';
+use Crypt::RSA;
+use Crypt::RSA::Key::Public::SSH;
+use Crypt::RSA::Key::Private::SSH;
+use MIME::Base64;
+use Epoll::DB::Ballot;
+use Epoll::DB::Voting;
+use Epoll::DB::Choice;
+use Epoll::DB::Poll::Bdata;
+use Epoll::DB::Poll::BSubmit;
+use YAML;
+
+=head1 NAME
+
+Epoll::Model::Vote - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=head1 POLL PROPERTIES
+
+=head2 INLINES PROPERTIES
+
+=over 4
+
+=item id
+
+Unique identifier
+
+=item label
+
+The poll label
+
+=item start
+
+The timestamp when poll start
+
+=item end
+
+The timestamp when poll stop
+
+=item password
+
+The poll password encrypted using crypt()
+
+=item owner
+
+The mail of the owner
+
+=back
+
+=head2 EXTENDED PROPERTIES
+
+=over 4
+
+=item uid
+
+The anonyme uid of the poll (to use in url)
+
+=item choice_count
+
+The count of possible choice in ballot
+
+=item elected_choice
+
+Count of select from voting list
+
+=item free_choice 
+
+The count of free text input on ballot
+
+=item description
+
+The long description of the poll
+
+=item procedure
+
+A text about rules of the poll
+
+=item private_key
+
+The RSA private key of the poll (if any)
+
+=item public_key
+
+The RSA public key of the poll (if any)
+
+=item no_mail_confirm_vote
+
+Do not sent mail to voting to confirm vote
+
+=item no_mail_ballot_id
+
+Don't include ballot id in mail confirmation
+
+=item no_ballot_id_voting
+
+Do not give ballot's id to voting people on website
+
+=back
+
+=cut
+
+sub new {
+    my ($class, $dbstring, $voteid) = @_;
+    
+    $voteid && $voteid =~ /^\d+$/ or return;
+
+    my $poll = bless {
+        voteid => $voteid,
+        dbstring => $dbstring,
+        db => Epoll::DB::common::_newdb($dbstring),
+    }, $class;
+
+    my $type = $poll->type;
+
+    $type = ucfirst(lc($type));
+    eval "require Epoll::DB::Poll::Type::$type;";
+    if ($@) {
+        return;
+    } else {
+        return bless($poll, "Epoll::DB::Poll::Type::$type");
+    }
+}
+
+sub type { lc($_[0]->info('type') || 'binary') }
+
+sub voteid { $_[0]->{voteid} }
+
+sub uid {
+    my ($self) = @_;
+    # UID will come only with epoll 2.0, if no uid, using key
+    return $self->info('uid') || $self->voteid;
+}
+
+sub setup {
+    my ($self) = @_;
+    $self->param(
+        free_choice => 0,
+        choice_count => 1,
+        uid => Epoll::DB::common::random_string(),
+    );
+}
+
+sub _online_f { qw(label start end owner password) }
+
+sub param {
+    my ($self, %attr) = @_;
+
+    keys %attr or return;
+    my @online_f = _online_f();
+
+    $self->db->do(q{set DATESTYLE to 'DMY'});
+    if (grep { exists($attr{$_}) } @online_f) {
+        my $sth = $self->db->prepare_cached(
+            q{update poll set } .
+            join(',', map { qq("$_" = ?) } grep { exists $attr{$_} } @online_f) .
+            q{ where id = ?}
+        );
+        $sth->execute((map { $attr{$_} } grep { exists $attr{$_} } @online_f), $self->voteid)
+            or do {
+            $self->rollback;
+            return;
+        };
+    }
+
+    # vote settings in settings table
+    foreach my $var (keys %attr) {
+        grep { $var eq $_ } @online_f and next;
+        $self->set_settings($var, $attr{$var});
+    }
+    1
+}
+
+sub status {
+    my ($self) = @_;
+    
+    my $sth = $self->db->prepare_cached(
+        q{
+        select (start > now() or start is null) as before,
+               "end" < now() as after
+        from poll
+        where id = ?
+        }
+    );
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res or return;
+    if ($res->{before}) {
+        return 'BEFORE';
+    } elsif ($res->{after}) {
+        return 'AFTER';
+    } else {
+        return 'RUNNING';
+    }
+}
+
+sub _info {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select *,
+        to_char("start", 'DD/MM/YYYY') as dstart,
+        to_char("start", 'HH24:MI:SS') as hstart,
+        to_char("end", 'DD/MM/YYYY') as dend,
+        to_char("end", 'HH24:MI:SS') as hend
+        from poll where id = ?
+        }
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res
+}
+
+sub raw_info {
+    my ($self, $var) = @_;
+
+    if ($var) {
+        if (grep { $var eq $_ } (_online_f(), qw(dstart hstart dend hend))) {
+            return ( $self->_info || {} )->{$var};
+        } else {
+            my $sth = $self->db->prepare_cached(
+                q{select val from settings where poll = ? and var = ?}
+            );
+            $sth->execute($self->voteid, $var);
+            my $res = $sth->fetchrow_hashref;
+            $sth->finish;
+            return $res->{val}
+        }
+    }
+
+    if (my $res = $self->_info) {
+        my $get = $self->db->prepare_cached(
+            q{select var, val from settings where poll = ?}
+        );
+        $get->execute($self->voteid);
+        while (my $set = $get->fetchrow_hashref) {
+            $res->{$set->{var}} = $set->{val};
+        }
+        return $res
+    }
+    return;
+}
+
+sub info {
+    my ($self, $var) = @_;
+
+    my $default = {
+        free_choice => 0, # avoid undef in some case
+        elected_count => $self->raw_info('choice_count'),
+    };
+
+    if ($var) {
+        my $val = $self->raw_info($var);
+        return defined($val)
+            ? $val
+            : $default->{$var};
+    } elsif (my $res = $self->raw_info) {
+        foreach (keys %$default) {
+            $res->{$_} = $default->{$_} if (!defined($res->{$_}));
+        }
+        return $res
+    }
+    return;
+}
+
+sub set_settings {
+    my ($self, $var, $val) = @_;
+
+    $val = undef if(defined($val) && $val eq '');
+    my $upd = $self->db->prepare_cached(
+        q{update settings set val = ? where poll = ? and var = ?}
+    );
+
+    if ($upd->execute($val, $self->voteid, $var) == 0) {
+        my $add = $self->db->prepare_cached(
+            q{insert into settings (poll, var, val) values (?,?,?)}
+        );
+
+        $add->execute($self->voteid, $var, $val);
+    }
+}
+
+sub signing {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select *, voting.key as vkey from voting left join signing
+        on signing.key = voting.key
+        where poll = ? order by voting.mail
+        }
+    );
+    $sth->execute($self->voteid);
+    my @people;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@people, $res);
+    }
+    @people
+}
+
+sub voting {
+    my ($self, $votingkey) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select key from voting where poll = ? and key = ?
+        }
+    );
+
+    $sth->execute($self->voteid, $votingkey);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    return $res ? Epoll::DB::Voting->new($self->{dbstring}, $votingkey) : undef;
+}
+
+sub voting_from_mail {
+    my ($self, $mail) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select key from voting where poll = ? and mail = ?
+        }
+    );
+
+    $sth->execute($self->voteid, $mail);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    return $res ? Epoll::DB::Voting->new($self->{dbstring}, $res->{key}) : undef;
+}
+
+sub voting_keys {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select key from voting
+        where poll = ? order by voting.mail
+        }
+    );
+    $sth->execute($self->voteid);
+    my @people;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@people, $res->{key});
+    }
+    @people
+}
+
+sub voting_info {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select *, voting.key as vkey from voting left join signing
+        on signing.key = voting.key
+        where voting.key = ?
+        }
+    );
+    $sth->execute($self->voteid);
+
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res
+}
+
+sub choice {
+    my ($self, $chid) = @_;
+    
+    my $sth = $self->db->prepare_cached(
+        q{
+        select key from choice where poll = ? and key = ?
+        }
+    );
+    $sth->execute($self->voteid, $chid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    return $res ? Epoll::DB::Choice->new($self->{dbstring}, $chid) : undef;
+}
+
+sub choices_keys {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select key from choice where poll = ?
+        order by label
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ch;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ch, $res->{key});
+    }
+    @ch
+}
+
+# TODO: replaced, to kill
+sub choices {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select key from choice where poll = ?
+        order by label
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ch;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ch, $res->{key});
+    }
+    @ch
+}
+
+sub add_choice {
+    my ($self, $label) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{insert into choice (poll, label) values (?,?)}
+    );
+
+    $sth->execute($self->voteid, $label) or do {
+        $self->rollback;
+        return;
+    };
+
+    1
+}
+
+sub delete_choice {
+    my ($self, $chid) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{delete from choice where key = ?}
+    );
+
+    $sth->execute($chid);
+}
+
+sub _register_signing {
+    my ($self, $mail, $referal) = @_;
+
+    my $vinfo = $self->voting_info_id($mail) or return;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        insert into signing (key, referal) values (?,?)
+        }
+    );
+    $sth->execute($vinfo->{key}, $referal) or do {
+        $self->rollback;
+        return;
+    };
+
+    1;
+}
+
+sub find_choice_key {
+    my ($self, $value) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{select key from choice where lower(label) = ? and poll = ?}
+    );
+    $sth->execute(lc($value), $self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{key}
+}
+
+sub decrypted_ballots {
+    my ($self, $password) = @_;
+    my $privkey;
+    if ($self->is_crypted) {
+        $privkey = $self->private_key($password) or return;
+    }
+    my $fetch_data = $self->db->prepare_cached(
+        q{select * from ballot_enc where decrypted = false and poll = ?
+            order by id}
+    );
+    $fetch_data->execute($self->voteid);
+    while (my $res = $fetch_data->fetchrow_hashref) {
+        my $bdata = $self->bdata;
+        $bdata->decrypt_data($res->{id}, $res->{data}, $res->{enckey}, $privkey)
+            and return;
+    }
+    1
+}
+
+sub register_ballot {
+    my ($self, $vmail, $choice, $referal) = @_;
+    # TODO: warn, deprecated
+
+    my $bdata = $self->bsubmit;
+    if (!$choice) {
+    } elsif (ref $choice eq 'ARRAY') {
+        foreach (@{ $choice || []}) {
+            $bdata->add_item($_, 1);
+        }
+    } else {
+        foreach (keys %{ $choice || {}}) {
+            $bdata->add_item($_, $choice->{$_});
+        }
+    }
+    $bdata->set_voter($vmail, $referal);
+    return $bdata->submit($vmail, $referal);
+}
+
+sub is_crypted {
+    my ($self) = @_;
+    return $self->info->{public_key} ? 1 : 0;
+}
+
+sub voting_info_id {
+    my ($self, $mail) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select * from voting where mail = ? and poll = ?
+        }
+    );
+    $sth->execute($mail, $self->voteid);
+    my $res = $sth->fetchrow_hashref();
+    $sth->finish;
+    $res
+}
+
+sub auth_voting {
+    my ($self, $mail, $password) = @_;
+    if (my $voter = $self->voting_from_mail($mail)) {
+        return $voter->auth($password);
+    } else {
+        return;
+    }
+}
+
+sub auth_poll {
+    my ($self, $passwd) = @_;
+
+    my $vinfo = $self->info or return;
+
+    $vinfo->{password} or return;
+    $passwd or return;
+    if (crypt($passwd, $vinfo->{password} || '') eq $vinfo->{password}) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+sub voting_has_sign {
+    my ($self, $user) = @_;
+    $self->voting_from_mail($user)->has_sign;
+}
+
+# Requete de decompte des voix:
+
+sub can_show_result {
+    my ($self) = @_;
+
+    # If ballot are encrypted, no
+    if ($self->list_ballot_need_dec) {
+        return;
+    }
+
+    return 1;
+}
+
+sub bdata {
+    my ($self) = @_;
+    Epoll::DB::Poll::Bdata->new($self->{dbstring}, $self);
+}
+
+sub bsubmit {
+    my ($self) = @_;
+    Epoll::DB::Poll::BSubmit->new($self->{dbstring}, $self);
+}
+
+sub ballot {
+    my ($self, $id) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from ballot where poll = ? and id = ?
+        }
+    );
+
+    $sth->execute($self->voteid, $id);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    return $res ? Epoll::DB::Ballot->new($self->{dbstring}, $id) : undef;
+}
+
+# TODO kill this:
+sub list_ballot {
+    ballot_keys(@_);
+}
+
+sub ballot_keys {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from ballot where poll = ?
+        order by id
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ids;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ids, $res->{id});
+    }
+    @ids
+}
+
+sub list_ballot_enc {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from ballot_enc where poll = ?
+        order by id
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ids;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ids, $res->{id});
+    }
+    @ids
+}
+
+sub list_ballot_need_dec {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from ballot_enc where poll = ? and decrypted = 'false'
+        order by id
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ids;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ids, $res->{id});
+    }
+    @ids
+}
+
+sub list_ballot_needvalid {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from ballot where poll = ?
+        and invalid is null order by id
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ids;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ids, $res->{id});
+    }
+    @ids
+}
+
+sub list_ballot_valid {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from ballot where poll = ?
+        and invalid = false order by id
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ids;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ids, $res->{id});
+    }
+    @ids
+}
+
+sub list_ballot_invalid {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select id from ballot where poll = ?
+        and invalid = true order by id
+        }
+    );
+    $sth->execute($self->voteid);
+    my @ids;
+    while (my $res = $sth->fetchrow_hashref) {
+        push(@ids, $res->{id});
+    }
+    @ids
+}
+
+sub ballot_untrusted_values {
+    my ($self, $noinvalid) = @_;
+
+    my $getval = $self->db->prepare_cached(
+        q{
+        select value from ballot join ballot_item
+        on ballot.id = ballot_item.id
+        where poll = ? and fromlist = false
+        } . ($noinvalid
+            ? ' and (ballot.invalid = false or ballot.invalid is null) '
+            : ''
+        ) . q{
+        group by value order by value
+        }
+    );
+    $getval->execute($self->voteid);
+    my @vals;
+    while (my $res = $getval->fetchrow_hashref) {
+        push(@vals, $res->{value});
+    }
+    @vals
+}
+
+sub ballot_untrusted_ids {
+    my ($self) = @_;
+
+    my $getval = $self->db->prepare_cached(
+        q{
+        select ballot.id from ballot join ballot_item
+        on ballot.id = ballot_item.id
+        where poll = ? and fromlist = false
+        group by ballot.id order by id
+        }
+    );
+    $getval->execute($self->voteid);
+    my @vals;
+    while (my $res = $getval->fetchrow_hashref) {
+        push(@vals, $res->{id});
+    }
+    @vals
+}
+
+sub ballot_by_value {
+    my ($self, $value) = @_;
+
+    my $getval = $self->db->prepare_cached(
+        q{
+        select ballot.id from ballot join ballot_item on ballot.id =
+        ballot_item.id
+        where ballot.poll = ? and "value" = ?
+        group by ballot.id order by id
+        }
+    );
+    $getval->execute($self->voteid, $value);
+    my @vals;
+    while (my $res = $getval->fetchrow_hashref) {
+        push(@vals, $res->{id});
+    }
+    @vals
+}
+
+sub ballot_values {
+    my ($self, $noinvalid) = @_;
+
+    my $getval = $self->db->prepare_cached(
+        q{
+        select value as value from ballot join ballot_item
+        on ballot.id = ballot_item.id
+        where poll = ?
+        } . ($noinvalid
+            ? ' and (ballot.invalid = false or ballot.invalid is null) '
+            : ''
+        ) . q{
+        group by value order by value
+        }
+    );
+    $getval->execute($self->voteid);
+    my @vals;
+    while (my $res = $getval->fetchrow_hashref) {
+        push(@vals, $res->{value});
+    }
+    @vals
+}
+
+sub value_map_to {
+    my ($self, $from) = @_;
+    my $sth = $self->db->prepare_cached(
+        q{select "to" from ballot_map where poll = ? and "from" = ?}
+    );
+    $sth->execute($self->voteid, $from);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{to}
+}
+
+sub map_value {
+    my ($self, $from, $to) = @_;
+
+    if (!$to) {
+        my $sth = $self->db->prepare_cached(
+            q{delete from ballot_map where poll = ? and "from" = ?}
+        );
+        $sth->execute($self->voteid, $from);
+    } else {
+        my $sthup = $self->db->prepare_cached(
+            q{update ballot_map set "to" = ? where poll = ? and "from" = ?}
+        );
+        if ($sthup->execute($to, $self->voteid, $from) == 0) {
+            my $sth = $self->db->prepare_cached(
+                q{
+                insert into ballot_map (poll, "from", "to") values (?,?,?)
+                }
+            );
+
+            $sth->execute($self->voteid, $from, $to) or do {
+                $self->rollback;
+                return;
+            };
+        }
+    }
+    $self->commit;
+    return 1;
+}
+
+sub addupd_voting {
+    my ($self, $mail, $id, $extern_auth, $extern_uid) = @_;
+
+    $mail =~ s/\s*$//;
+    $mail =~ s/^\s*//;
+    $mail = lc($mail);
+    $id ||= '';
+    $id =~ s/\s*$//;
+    $id =~ s/^\s//;
+    my $upd = $self->db->prepare_cached(
+        q{
+        update voting set label = ?, extern_auth = ?, extern_uid = ? where mail = ? and poll = ?
+        }
+    );
+
+    if ($upd->execute($id, $extern_auth, $extern_uid, $mail, $self->voteid) == 0) {
+        my $add = $self->db->prepare_cached(q{
+            insert into voting (poll, label, mail, extern_auth, extern_uid)
+            values (?,?,?,?,?)
+        });
+
+        return $add->execute($self->voteid, $id || '', $mail, $extern_auth, $extern_uid);
+    } else {
+        return 1;
+    }
+}
+
+sub voting_from_file {
+    my ($self, $fh, $delete) = @_;
+
+    if ($delete) {
+        my $sth = $self->db->prepare(q{delete from voting where poll = ?});
+        $sth->execute($self->voteid);
+    }
+
+    my $handle = $self->import_handle('csv'); # std import
+    $handle->{handle} = $fh;
+    my @list = $handle->fetch_voters or do {
+            $self->rollback;
+            return;
+    };
+    foreach (@list) {
+        $self->addupd_voting($_->[0], $_->[1] || '');
+    }
+    1;
+}
+
+sub voting_from_import {
+    my ($self, $handle, %options) = @_;
+
+    my $ext_auth = $options{ext_auth} && $handle->can_authenticate;
+    my $authid;
+    if ($ext_auth || $options{save_param}) {
+        my $find_next_id = $self->db->prepare_cached(
+            q{select nextval('extern_auth_id_seq'::regclass)}
+        );
+        $find_next_id->execute();
+        $authid = $find_next_id->fetchrow_hashref->{nextval};
+        $find_next_id->finish;
+
+        my $add_auth = $self->db->prepare_cached(
+            q{insert into extern_auth (id, params, owner, auth_type, "desc") values
+            (?,?,?,?,?)}
+        );
+        $add_auth->execute($authid, $handle->xml_params, $self->info('owner'),
+            $handle->auth_type, $options{desc});
+    }
+
+    my @list = $handle->fetch_voters or do {
+        $self->rollback;
+        return;
+    };
+    foreach (@list) {
+        $self->addupd_voting(
+            $_->[0], $_->[1] || '', $authid, ($ext_auth ? $_->[2]: undef)
+        ) or do {
+            $self->db->rollback;
+            return;
+        };
+    }
+
+    return 1;
+}
+
+sub delete_voting {
+    my ($self, $key) = @_;
+    $self->voting($key)->has_sign and return;
+    my $sth = $self->db->prepare_cached(
+        q{delete from voting where key = ? and poll = ?}
+    );
+
+    $sth->execute($key, $self->voteid);
+}
+
+sub list_voting_no_passwd {
+    my ($self) = @_;
+
+    my $list_voting = $self->db->prepare_cached(
+        q{select key from voting where poll = ? and passwd is null or passwd = ''}
+    );
+
+    $list_voting->execute($self->voteid);
+    my @ids;
+    while (my $res = $list_voting->fetchrow_hashref) {
+        push(@ids, $res->{key});
+    }
+    @ids
+}
+
+sub mail_voting_passwd {
+    my ($self, $id, $mailinfo) = @_;
+    $self->voting($id)->mail_voting_passwd($mailinfo); 
+}
+
+# crypto part
+
+sub rsa {
+    my ($self) = @_;
+    $self->{rsa} ||= new Crypt::RSA ES => 'PKCS1v15';
+}
+
+sub gen_poll_keys {
+    my ($self, $password) = @_;
+    my ($public, $private) = $self->rsa->keygen (
+        Identity  => 'Epoll Vote ' . $self->voteid,
+        Size      => 768,
+        Password  => $password,
+        Verbosity => 0,
+        KF=>'SSH',
+    ) or die $self->rsa->errstr(); # TODO avoid die
+    $self->param(
+        public_key => $public->serialize,
+        private_key => encode_base64($private->serialize),
+    );
+}
+
+sub public_key {
+    my ($self) = @_;
+    my $serialize = $self->info->{public_key} or return;
+    my $pubkey = Crypt::RSA::Key::Public::SSH->new;
+    $pubkey->deserialize(String => [ $serialize ]);
+    $pubkey
+}
+
+sub private_key {
+    my ($self, $password) = @_;
+    my $serialize = $self->info->{private_key} or return;
+    my $privkey = Crypt::RSA::Key::Private::SSH->new;
+    $privkey->deserialize(String => [ decode_base64($serialize) ], Passphrase => $password);
+    $privkey
+}
+
+
+
+#########
+# Count #
+#########
+
+sub ballot_count {
+    ballots_count(@_);
+}
+
+sub ballots_count {
+    my ($self) = @_;
+    return $self->ballot_count_crypt;
+}
+
+sub ballot_count_clear {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{select count(*) from ballot where poll = ?}
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count} || 0
+}
+
+sub ballot_count_crypt {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{select count(*) from ballot_enc where poll = ?}
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count} || 0
+}
+
+sub voting_count { voters_count(@_) }
+
+sub voters_count {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select count(*) from voting
+        where poll = ?
+        }
+    );
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count}
+}
+
+sub signing_count {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select count(*) from signing join voting
+        on voting.key = signing.key where poll = ?
+        }
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count}
+}
+
+sub not_signing_count {
+    my ($self) = @_;
+    $self->voters_count - $self->signing_count;
+}
+
+sub valid_ballot_count {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select count(*) from ballot where poll = ?
+            and (invalid = 'f' or invalid is NULL)
+        }
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count}
+}
+
+sub invalid_ballot_count {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select count(*) from ballot where poll = ?
+        and invalid = 't'
+        }
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count} || 0
+}
+
+sub empty_ballot_count {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select count(*) from ballot where poll = ?
+        and id not in (select id from ballot_item)
+        and (invalid = 'false' or invalid is null)
+        }
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count}
+}
+
+sub not_empty_ballot_count {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select count(*) from ballot where poll = ?
+        and id in (select id from ballot_item)
+        and (invalid = 'false' or invalid is null)
+        }
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count} || 0
+}
+
+sub compute_results {
+    my ($self) = @_;
+    $self->param('static_results',
+        YAML::Dump($self->_compute_results));
+}
+
+sub results {
+    my ($self) = @_;
+    if (my $res = YAML::Load($self->info('static_results'))) {
+        return $res
+    } else {
+        return;
+    }
+}
+
+#################
+# CLEANING DATA #
+#################
+
+sub delete_ballots {
+    my ($self) = @_;
+
+    $self->store_results;
+    $self->_delete_ballot;
+    $self->commit;
+}
+
+sub _delete_ballot {
+    my ($self) = @_;
+
+    foreach (
+        q{delete from ballot_item where id in (select id from ballot where
+        ballot.poll = ?)},
+        q{delete from ballot where poll = ?},
+        q{delete from ballot_enc where poll = ?},) {
+        my $req = $self->db->prepare($_);
+        $req->execute($self->voteid) or return;
+    }
+
+    return 1;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/Poll/BSubmit.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/Poll/BSubmit.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/Poll/BSubmit.pm	(revision 478)
@@ -0,0 +1,68 @@
+package Epoll::DB::Poll::BSubmit;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::Poll::Bdata';
+
+=head1 NAME
+
+Epoll::Model::Vote - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub set_voter {
+    my ($self, $voter, $referal) = @_;
+    $self->{voter} = $voter;
+    $self->{referal} = $referal;
+}
+
+sub add_item {
+    my ($self, $value, $weight) = @_;
+    $value =~ s/^\s+//;
+    $value =~ s/\s+$//;
+    $value =~ s/\s+/ /g;
+    $value = lc($value);
+    $self->{data}{content}{$value} = $weight;
+}
+
+sub submit {
+    my ($self) = @_;
+    
+    for (0..2) { # 3 try
+        # First we register voting has voted
+        $self->poll->_register_signing($self->{voter}, $self->{referal}) or return; # TODO error ?
+
+        # registring choices
+        if ($self->_store_crypted()) {
+            last;
+        } else {
+            $self->rollback;
+            next;
+        }
+
+    }
+        # everything went fine, saving!
+    $self->commit;
+
+    $self->uid
+}
+
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/Poll/Bdata.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/Poll/Bdata.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/Poll/Bdata.pm	(revision 478)
@@ -0,0 +1,196 @@
+package Epoll::DB::Poll::Bdata;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::common';
+use Epoll::DB::Poll;
+use YAML ();
+use Crypt::CBC;
+use Crypt::DES_EDE3; # Called from CBC
+
+=head1 NAME
+
+Epoll::Model::Vote - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub new {
+    my ($class, $dbstring, $poll) = @_;
+    
+    bless {
+        poll => $poll,
+        dbstring => $dbstring,
+        db => Epoll::DB::common::_newdb($dbstring),
+        data => {},
+    }, $class;
+}
+
+sub voteid { $_[0]->poll->voteid }
+
+sub poll {
+    my ($self) = @_;
+    $self->{poll};
+}
+
+sub uid {
+    my ($self) = @_;
+    $self->{data}{id} ||= Epoll::DB::common::gen_uid();
+}
+
+sub xmlout {
+    my ($self) = @_;
+    $self->uid;
+    YAML::Dump($self->{data});
+}
+
+sub xmlin {
+    my ($self, $data) = @_;
+    $self->{data} = YAML::Load($data);
+}
+
+sub _store_clear {
+    my ($self) = @_;
+    my $addb = $self->db->prepare_cached(
+        q{
+        insert into ballot (id, poll, invalid) values (?,?,?)
+        }
+    );
+
+    my $needvalid = 'f';
+    my %items = ();
+    foreach(keys %{$self->{data}{content} || {}}) {
+        if ($self->poll->find_choice_key($_)) {
+            $items{$_} = 't';
+        } else {
+            $items{$_} = 'f';
+            $needvalid = undef;
+        }
+    }
+
+    $addb->execute($self->uid, $self->voteid, $needvalid) or do {
+        $self->rollback;
+        return;
+    };
+
+    my $addbc = $self->db->prepare_cached(
+        q{
+        insert into ballot_item (id, value, fromlist, weight) values (?,?,?,?)
+        }
+    );
+    foreach (keys %{$self->{data}{content} || {}}) {
+        $_ or next;
+        $addbc->execute($self->uid, $_, $items{$_}, $self->{data}{content}{$_}) or do {
+            $self->rollback;
+            return;
+        };
+    }
+
+    1;
+}
+
+sub _store_crypted {
+    my ($self) = @_;
+    
+    my $addenc = $self->db->prepare_cached(
+        q{insert into ballot_enc (id, data, enckey, poll) values (?,?,?,?)}
+    );
+    my $uid = Epoll::DB::common::gen_uid();
+    
+    if (my $pollkey = $self->poll->public_key) {
+        my $symkey = map{ chr(rand(256)) } (1 .. 24);
+        my $cipher = new Crypt::CBC($symkey, 'DES_EDE3');
+        my $encryptedballot = $cipher->encrypt_hex(
+            $self->xmlout()
+        );
+        my $encsymkey = $self->poll->rsa->encrypt (
+            Message    => $symkey,
+            Key        => $self->poll->public_key,
+            Armour     => 1,
+        ) || die $self->poll->rsa->errstr();
+        $addenc->execute($uid, $encryptedballot, $encsymkey, $self->voteid);
+    } else {
+        $addenc->execute($uid, $self->xmlout(), undef, $self->voteid);
+    }
+}
+
+sub _load_crypted {
+    my ($self, $ballotid, $privkey) = @_;
+    my $sth = $self->db->prepare_cached(
+        q{select * from ballot_enc where id = ? for update}
+    );
+    $sth->execute($ballotid);
+    my $ballot = $sth->fetchrow_hashref;
+    $sth->finish;
+    if ($ballot->{enckey}) {
+        $self->_load_crypted_data($ballot->{data}, $ballot->{enckey}, $privkey);
+    } else {
+        return $ballot->{data}
+    }
+}
+
+sub _load_crypted_data {
+    my ($self, $data, $encsymkey, $privkey) = @_;
+    if ($encsymkey) {
+        my $symkey = $self->poll->rsa->decrypt (
+            Cyphertext => $encsymkey,
+            Key        => $privkey,
+            Armour     => 1,
+        ) || die $self->poll->rsa->errstr();
+        my $cipher = new Crypt::CBC($symkey, 'DES_EDE3');
+        return $self->xmlin($cipher->decrypt_hex($data));
+    } else {
+        return $self->xmlin($data);
+    }
+}
+
+sub decrypt_data {
+    my ($self, $ballotid, $data, $encsymkey, $privkey) = @_;
+    if ($self->_load_crypted_data($data, $encsymkey, $privkey) &&
+        $self->_store_clear &&
+        $self->_set_decrypted($ballotid)) {
+        $self->commit;
+        return;
+    } else {
+        $self->rollback;
+        return 1;
+    }
+}
+
+sub _set_decrypted {
+    my ($self, $ballotid) = @_;
+    my $upd = $self->db->prepare_cached(q{update ballot_enc set decrypted = true where id = ?});
+    $upd->execute($ballotid)
+}
+
+sub decrypt {
+    my ($self, $ballotid, $privkey) = @_;
+    $self->_load_crypted($ballotid, $privkey);
+    $self->_store_clear or return;
+    if ($self->_set_decrypted($ballotid)) {
+        $self->commit;
+        return;
+    } else {
+        $self->rollback;
+        return 1;
+    }
+}
+
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/Poll/Type/Binary.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/Poll/Type/Binary.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/Poll/Type/Binary.pm	(revision 478)
@@ -0,0 +1,126 @@
+package Epoll::DB::Poll::Type::Binary;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::Poll';
+use YAML;
+
+=head1 NAME
+
+Epoll::DB::Poll::Results - Epoll computation module
+
+=head1 DESCRIPTION
+
+Epoll module
+
+=cut
+
+sub _check_ballot {
+    my ($self, $bdata) = @_;
+
+}
+
+sub _compute_results {
+    my ($self) = @_;
+    $self->_results(
+        $self->info('empty_ballot_has_voice')
+        ? 0
+        : 1
+    );
+}
+
+sub absolute_majority {
+    my ($self) = @_;
+    return int($self->_voices_ballot_count / 2) + 1;
+}    
+
+sub ___abstention {
+    my ($self) = @_;
+    
+    my $sth = $self->db->prepare_cached(
+        q{
+        select count(*) from ballot where poll = ?
+        and id not in (select id from ballot_item) and
+        (invalid = 'false' or invalid is null)
+        }
+    );
+
+    $sth->execute($self->voteid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{count}
+}
+
+sub voices_ballot_count { _voices_ballot_count(@_) }
+
+sub _voices_ballot_count {
+    my ($self) = @_;
+    return $self->info('empty_ballot_has_voice')
+        ? $self->valid_ballot_count
+        : $self->not_empty_ballot_count;
+}
+
+sub _results {
+    my ($self, $nonull) = @_;
+
+    my $sth = $self->db->prepare(
+        q{
+        select count(ballot.id), value from
+        (
+        select NULL as id, lower(label) as value from choice where poll = $1
+        union
+        select ballot.id, coalesce(ballot_map.to, value) as "value" from ballot
+        } . ($nonull ? '' : ' left ') . q{ join ballot_item
+        on ballot.id = ballot_item.id 
+        left join ballot_map on ballot_map.from = ballot_item.value and
+        ballot_map.poll = ballot.poll
+        where ballot.poll = $1 and (invalid = 'false' or invalid is null
+        )
+        group by ballot.id, coalesce(ballot_map.to, value)) as ballot
+        group by value
+        order by count desc, value
+        }
+    );
+    $sth->execute($self->voteid);
+    my @results;
+    my $abs_maj = $self->absolute_majority;
+    my $wanted_count = $self->info('elected_count');
+    my $voice_count = $self->_voices_ballot_count;
+    while (my $res = $sth->fetchrow_hashref) {
+        if ($res->{count} >= $abs_maj) {
+            $res->{abs_maj} = 1;
+        }
+        if (scalar(@results) < $wanted_count) {
+            $res->{elected} = 1 if ($res->{count});
+        } elsif (scalar(@results)) {
+            $res->{elected} = $results[-1]->{elected}
+                if($res->{count} == $results[-1]->{count});
+        }
+        if (scalar(@results)) {
+            $res->{order} = ($res->{count} == $results[-1]->{count}
+                ? $results[-1]->{order}
+                : scalar(@results) + 1);
+        } else { $res->{order} = 1 }
+        $res->{voices_percent} = $res->{count} / $voice_count * 100
+            if($voice_count); # avoid divide by 0
+
+        push(@results, $res);
+    }
+    \@results;
+}
+
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/Voting.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/Voting.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/Voting.pm	(revision 478)
@@ -0,0 +1,123 @@
+package Epoll::DB::Voting;
+
+# $Id$
+
+use strict;
+use warnings;
+use base 'Epoll::DB::common';
+use Epoll::DB::Poll;
+
+=head1 NAME
+
+Epoll::DB::Voting - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub new {
+    my ($class, $dbstring, $key) = @_;
+    
+    bless {
+        key => $key,
+        dbstring => $dbstring,
+        db => Epoll::DB::common::_newdb($dbstring),
+    }, $class;
+}
+
+sub votingkey { $_[0]->{key} }
+
+sub poll {
+    my ($self) = @_;
+    Epoll::DB::Poll->new($self->{dbstring}, $self->info->{poll});
+}
+
+sub info {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select *, voting.key as vkey from voting left join signing
+        on signing.key = voting.key
+        left join extern_auth on voting.extern_auth = extern_auth.id
+        where voting.key = ?
+        }
+    );
+    $sth->execute($self->votingkey);
+
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res
+}
+
+sub auth {
+    my ($self, $password) = @_;
+    my $userinfo = $self->info or return;
+
+        warn "ee";
+    if ($userinfo->{extern_uid}) {
+        warn "rr";
+        my $handle = $self->stored_import_handle($userinfo->{extern_auth})
+            or return;
+        return $handle->authenticate($userinfo->{mail}, $userinfo->{extern_uid}, $password);
+    } else {
+        $userinfo->{passwd} or return;
+        if (crypt($password, $userinfo->{passwd} || '') eq $userinfo->{passwd}) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+}
+
+sub has_sign {
+    my ($self) = @_;
+
+    my $sth = $self->db->prepare_cached(
+        q{
+        select date from signing join voting
+        on voting.key = signing.key
+        where voting.key = ?
+        }
+    );
+
+    $sth->execute($self->votingkey);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    return $res->{date}
+}
+
+sub gen_passwd {
+    my ($self) = @_;
+    my $info = $self->info;
+    my $passwd;
+    my $upd_voting = $self->db->prepare_cached(
+        q{update voting set passwd = ? where key = ?}
+    );
+    if ($info->{extern_auth}) {
+        $upd_voting->execute('EXTERN_AUTH', $self->votingkey);
+        $passwd = $info->{desc} || $info->{auth_type};
+    } else {
+        $passwd = Epoll::DB::common::random_string(8);
+        my $encpasswd = $self->gen_enc_passwd($passwd);
+
+        $upd_voting->execute($encpasswd, $self->votingkey);
+    }
+    $self->commit;
+    $passwd
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/DB/common.pm
===================================================================
--- /tags/2.00/lib/Epoll/DB/common.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/DB/common.pm	(revision 478)
@@ -0,0 +1,171 @@
+package Epoll::DB::common;
+
+# $Id$
+
+use strict;
+use warnings;
+use DBI;
+use vars qw(@EXPORT);
+use base 'Exporter';
+@EXPORT = qw(gen_uid);
+use Epoll::DB::ImportV;
+
+=head1 NAME
+
+Epoll::Model::Vote - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub _newdb {
+    my ($dbstring) = @_;
+    my $db = DBI->connect_cached(
+        'dbi:Pg:' . $dbstring,
+        undef, undef,
+        {
+            RaiseError => 0,
+            AutoCommit => 0,
+            PrintWarn => 0,
+            PrintError => 1,
+        }
+    ) or return;
+    $db->do(q{set DATESTYLE to 'DMY'});
+    return $db;
+}
+
+sub db {
+    my ($self) = @_;
+    return $_[0]->{db} && $_[0]->{db}->ping
+        ? $_[0]->{db}
+        : ($self->{db} = _newdb($self->{dbstring}));
+}
+
+sub commit {
+    my ($self) = @_;
+    $self->{db} or return;
+    # If EPOLL_NO_COMMIT is true, we never commit, use for test
+    if ($ENV{EPOLL_NO_COMMIT}) { return 1 }
+    $self->{db}->commit;
+}
+
+sub rollback {
+    my ($self) = @_;
+    $self->{db} or return;
+    if ($ENV{EPOLL_NO_COMMIT}) { return 1 }
+    $self->{db}->rollback;
+}
+
+sub mail_header {
+    return(
+        'Content-Type' => 'text/plain; charset=UTF-8; format=flowed',
+        'Content-Transfer-Encoding' => '8bit',
+        'X-Epoll-version' => $Epoll::VERSION,
+    );
+}
+
+sub random_string {
+    my $lenght = $_[-1] || 8;
+
+    return join('', map { ('a'..'z', 'A'..'Z', 0..9)[rand 62] } (1..$lenght));
+}
+
+sub gen_enc_passwd {
+    my ($self, $passwd) = @_;
+
+    $passwd ||= random_string(8);
+    return(crypt($passwd, '$1$' . random_string(8) . '$'));
+}
+
+sub dbtime {
+    my ($self) = @_;
+    my $sth = $self->db->prepare(
+        q{select to_char(now(), 'DD/MM/YYYY HH24:MI:SS') as d}
+    );
+
+    $sth->execute();
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{d};
+}
+
+sub valid_date {
+    my ($self, $date) = @_;
+    $self->db->do(q{set DATESTYLE to 'DMY'});
+    my $res = $self->db->do(
+        sprintf(
+            q{ select %s::timestamp },
+            $self->db->quote($date),
+        )
+    );
+    $res or $self->rollback;
+}
+
+sub check_date_max {
+    my ($self, $maxdate, $mindate) = @_;
+    $self->db->do(q{set DATESTYLE to 'DMY'});
+    my $sth = $self->db->prepare(
+        sprintf(
+            q{ select %s::timestamp > %s::timestamp as res },
+            $self->db->quote($maxdate),
+            $mindate ? $self->db->quote($mindate) : 'now()',
+        )
+    );
+    $sth->execute or do {
+        $self->rollback;
+        return;
+    };
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    $res->{res}
+}
+
+sub poll_id_from_uid {
+    my ($self, $uid) = @_;
+    my $sth = $self->db->prepare_cached(
+        q{ select poll from settings where var = 'uid' and val = ?
+            order by poll }
+    );
+    $sth->execute($uid);
+    my $res = $sth->fetchrow_hashref;
+    $sth->finish;
+    return $res->{poll} || $uid;
+}
+
+sub gen_uid {
+    unpack("H*", join("", map { chr(rand(256)) } (0..15)))
+}
+
+sub import_handle {
+    my  ($self, $type) = @_;
+    return Epoll::DB::ImportV->new($type);
+}
+
+sub stored_import_handle {
+    my ($self, $id) = @_;
+    my $fetch = $self->db->prepare_cached(
+        q{select * from extern_auth where id = ?}
+    );
+    $fetch->execute($id);
+    my $res = $fetch->fetchrow_hashref;
+    $fetch->finish;
+    $res or return;
+    my $handle = $self->import_handle($res->{auth_type}) or return;
+    $handle->load_xml_params($res->{params});
+    $handle;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/I18N/de.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/de.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/de.po	(revision 478)
@@ -0,0 +1,1195 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Oliver Burger <oliver.bgr@googlemail.com>, 2010.
+# Sigrid Carrera <sigrid.carrera@googlemail.com>, 2010.
+# Gerhard Proess <gp@vol.lu>, 2010.
+# Thorsten van Lil <i18n@mandrivauser.de>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2010-10-09 22:10+0200\n"
+"Last-Translator: Oliver Burger <oliver.bgr@googlemail.com>\n"
+"Language-Team: German <mageia-i18n@mageia.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"S\", \"M\", \"D\", \"M\", \"D\", \"F\", \"S\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 Stimmzettel fÃŒr diese Abstimmung zu entschlÃŒsseln"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "%1 AuswahlmÃ¶glichkeiten mÃŒssen gewÃ€hlt werden"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 AuswahlmÃ¶glichkeiten"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Eine zusammenfassende E-Mail wurde verschickt"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "Ãber diese Abstimmung"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "Absolute Mehrheit"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "Zugang zur Abstimmungsverwaltung:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "HinzufÃŒgen"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Eine AuswahlmÃ¶glichkeit hinzufÃŒgen"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "Eine Stimme hinzufÃŒgen"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Verwalten"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "Verwaltung"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Administrator-Login"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Eine E-Mail wurde an %1 verschickt."
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Eine E-Mail wurde an %1 verschickt, folgen Sie den Anweisungen, um die\n"
+"Abstimmungserstellung abzuschlieÃen"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "Apr"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "April"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "Unter der Adresse"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "Aug"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "August"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "Stimmzettel"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Stimmzettel"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "Anzahl der Stimmzettel"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Stimmzettel-Liste:"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Stimmzettel:"
+
+# Was bedeutet DN?
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Basis-DN"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "CSV-Datei"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr ""
+"Eine laufende oder schon beendete Abstimmung kann nicht verÃ€ndert werden."
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "Die E-Mail kann nicht verschickt werden:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Sprache Ã€ndern"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "SchlieÃen"
+
+# KÃ¶nnte auch was anderes heiÃen. Zum Beispiel "...die Abgabe einer Stimme..." -obgr_seneca
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "BestÃ€tigen Sie die Erstellung einer neuen Abstimmung"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "BestÃ€tigen Sie Ihre Wahl"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "Die zusammenfassende E-Mail konnte nicht verschickt werden:"
+
+# "neue" eingefÃŒgt, gp-
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "Eine neue Abstimmung erstellen"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "TT/MM/JJJJ HH:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "Datum"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Das Datumsformat ist"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Daten"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "Dez"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "Dezember"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "Stimmzettel entschlÃŒsseln"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "LÃ¶schen"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Stimmzettel lÃ¶schen"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Diese Abstimmung lÃ¶schen"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Beschreibung:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Namens-Attribute anzeigen:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Den Stimmzettel nicht verschlÃŒsseln"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "Keine BestÃ€tigung per E-Mail versenden"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Die Stimmzettel-ID nach der Abstimmung nicht anzeigen"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Den privaten SchlÃŒssel herunterladen"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Dummy"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "GewÃ€hlt"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "E-Mail"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "E-Mail-Adresse:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "E-Mail-Attribute:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "Die E-Mail enthÃ€lt die Stimmzettel-ID"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "E-Mail-Sprache"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "Leerer Stimmzettel"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "Leerer Stimmzettel"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "Die Abstimmung verschlÃŒsseln"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Hier einen Passwort-Hinweis eingeben"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Das Administrator-Passwort fÃŒr diese Abstimmung eingeben"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "Geben Sie den AbstimmungsschlÃŒssel hier ein:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "Geben Sie das Abstimmungspasswort ein: "
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "Geben Sie die Anfrage-ID ein, die Sie per E-Mail erhalten haben"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr ""
+"Geben Sie Ihre E-Mail-Adresse ein, um eine Liste Ihrer Abstimmungen zu "
+"erhalten"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Fehler:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Feb"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Februar"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Freie Auswahl"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "Freitag"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "Aus der Liste der WÃ€hler"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Hallo,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "ID"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "Die WÃ€hler-Liste importieren..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Diese Liste importieren"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"Login oder Passwort ungÃŒltig. Sind sie sicher,\n"
+"dass Sie an dieser Abstimmung teilnehmen dÃŒrfen?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "UngÃŒltiges Passwort fÃŒr die Webseite:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Jan"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "Januar"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "Jul"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "Juli"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "Jun"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "Juni"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"Bewahren Sie diese Information sicher auf, sie kann Ihnen nicht erneut "
+"zugeschickt werden."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Legende:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "Zeilen-Nr."
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Liste der WÃ€hler"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Login"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "E-Mail:"
+
+# so stehen lassen? -obgr_seneca
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Mail@domain;Name"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "Mrz"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "MÃ€rz"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "Mai"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "Minimieren"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Meine Wahl verÃ€ndern"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "Montag"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "Meine Abstimmungen:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Name:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Neue Abstimmungsanfrage"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "Es wurden keine AuswahlmÃ¶glichkeiten gewÃ€hlt"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "Keine Anfrage zur Abstimmungserzeugung"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Momentan laufen keine Abstimmungen"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "Keine Ergebnisse"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Keine eingeschriebenen WÃ€hler"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "Keine passende Anfrage gefunden"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "Keine WÃ€hler anzuzeigen"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "Nicht gewÃ€hlt"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "Nov"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "November"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "Nummer"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "Anzahl der zurÃŒckzuhaltenden WahlmÃ¶glichkeiten:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "Anzahl der leeren Stimmzettel"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "Anzahl der freien Eingabefelder:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "Anzahl der ungÃŒltigen Stimmzettel"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "Anzahl der zu wÃ€hlenden Personen, aus der Liste der WÃ€hler entnommen"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "Anzahl der AuswahlmÃ¶glichkeiten:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "Anzahl der Stimmen"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "Okt"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "Oktober"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "Einer oder mehrere Werte treten mehrfach auf:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Nur "
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "Seite erstellt am %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "Teilgenommen"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Teilnahme"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "Passwort"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "Passwort fÃŒr diese Abstimmung:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "Passwort:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "Bitte melden Sie sich an, um an der Abstimmung teilzunehmen"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "Bitte verstÃ€ndigen Sie Ihren Systemadministrator"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "Bitte bestÃ€tigen Sie das LÃ¶schen des Stimmzettels"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "Bitte bestÃ€tigen Sie das LÃ¶schen der Abstimmung %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "Der Abstimmungsadministrator muss einige Stimmzettel bestÃ€tigen."
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+"Das Abstimmungsdatum muss angegeben werden, bevor die Abstimmung den WÃ€hlern "
+"bekannt gegeben wird"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "Abstimmungsende:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "Die Abstimmung wird momentan durchgefÃŒhrt"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Abstimmungsname:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "Die Abstimmung lÃ€uft von"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Abstimmungsanfragen-Erinnerung"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "Abstimmungsbeginn:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "MÃ¶gliche Anzahl der zu wÃ€hlenden Personen"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "Vorschau des Stimmzettels"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "GrÃŒÃe"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "Bericht als PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Ergebnis als PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Die Ergebnisse wurden noch nicht verÃ¶ffentlicht."
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Die Ergebnisse werden verfÃŒgbar sein"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Die Ergebnisse werden hier verfÃŒgbar sein"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Ergebnisse:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Regeln:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "Samstag"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Speichern"
+
+#: root/templates/pollinc/binary/results.tt:7
+#, fuzzy
+msgid "Score:"
+msgstr "Wert:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Bis bald!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Passwort senden"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "Den WÃ€hlern das Passwort senden"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Sep"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "September"
+
+# Can't tell what it means exactly - obgr_seneca
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "Zeichen / Unterschrift"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "Webseiten-Passwort:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "Einige Stimmzettel mÃŒssen bestÃ€tigt werden"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Status"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "VorlÃ€ufige Ergebnisse"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "Danke"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr ""
+"Die Anzahl der Stimmzettel stimmt nicht mit der Anzahl der WÃ€hler ÃŒberein"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "Die Abstimmung endet, bevor sie beginnt"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "Der Beginn der Abstimmung muss in der Zukunft liegen"
+
+# besser?: rÃŒckgÃ€ngig gemacht werden
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Diese Aktion kann nicht rÃŒckgÃ€ngig gemacht werden"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "Diese Abstimmung endet"
+
+# Unterschied zwischen String 160 und 161? obgr_seneca
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Diese Abstimmung hat noch nicht begonnen"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "Diese Abstimmung ist abgeschlossen, die Ergebnisse sind verfÃŒgbar"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"Dies wird alle Daten zu dieser Abstimmung (Konfiguration,\n"
+"WÃ€hlerliste, Stimmzettel) lÃ¶schen."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"Dies lÃ¶scht sensible Daten aus der Datenbank, Ergebnisse werden endgÃŒltig "
+"berechnet.\n"
+"Die WÃ€hler kÃ¶nnen ihre abgegebenen Stimmen nicht mehr ÃŒberprÃŒfen"
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Zur BestÃ€tigung der Anfrage gehen Sie bitte auf"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "Heute"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "UID-Attribute:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "URI:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Externe Autentifizierung verwenden"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "BestÃ€tigen"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "BestÃ€tigung"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "Abstimmen"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "Abstimmungs-BestÃ€tigung:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "WÃ€hler"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "WÃ€hler"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Einladung zur Abstimmung"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Internet-Abstimmungssystem"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Willkommen"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr ""
+"Schreiben Sie es auf, wenn Sie es am Ende der Abstimmung noch einmal "
+"ÃŒberprÃŒfen mÃ¶chten"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Ja, diese Abstimmung lÃ¶schen"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"Sie sind %1, Ihre IP-Adresse (%2) wird aufgezeichnet\n"
+"(unabhÃ€ngig vom Stimmzettel)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "Sie sind eingeladen, an dieser Abstimmung teilzunehmen"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "Sie sind als WÃ€hler in dieser Abstimmung aufgelistet"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "Sie sind Administrator dieser Abstimmungen"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "Sie kÃ¶nnen"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr ""
+"Sie kÃ¶nnen eine Passphrase (Passwort-Satz) zum Schutz des SchlÃŒssels wÃ€hlen:"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "Sie kÃ¶nnen den Anfrage-Code hier eingeben"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Sie besitzen keine Abstimmungen"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "Sie haben soeben an der folgenden Abstimmung teilgenommen:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "Sie mÃŒssen ein Anfangs- und ein End-Datum angeben"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Sie mÃŒssen %1 AuswahlmÃ¶glichkeiten wÃ€hlen"
+
+# Etwas hakelige Ãbersetzung
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "Es wird Ihnen mÃ¶glich sein, Ihre Stimme abzugeben von"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr ""
+"Sie haben um eine Erinnerung an die Abstimmung(en) gebeten, an denen Sie "
+"teilnehmen"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "Sie haben soeben Ihren Stimmzettel abgegeben"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "Sie haben die Erstellung einer neuen Abstimmung beantragt"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Ihre Stimmzettel-ID"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Ihre E-Mail-Adresse:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Ihr Login ist"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Ihr Passwort ist"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Ihre Abstimmung:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Ihre Anfrage-ID ist"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Ihre Stimme kann nach der BestÃ€tigung nicht mehr verÃ€ndert werden"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Ihre Stimme wird erst nach der BestÃ€tigung gezÃ€hlt"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "verwalten"
+
+# Ich habe das mal als Datum interpretiert obgr_seneca
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "Sie haben an dieser Abstimmung bereits am %1 teilgenommen"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "Der Stimmzettel beinhaltet:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "Stimmzettel"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "Gefundene Stimmzettel"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "Kalender"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "Auswahl"
+
+# Bemerkung, anmerken, bemerken, kommentieren?
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "Bemerkung"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "Datum (=> anzeigen als)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "Datum:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "lÃ¶schen"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "den Stimmzettel lÃ¶schen"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "fÃŒr %1 gewÃ€hlt"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "Format:"
+
+# Sorry, der Original-String ist unklar
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "hat abgestimmt"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "hier"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "Wenn Sie fÃŒr mehr als eine Person stimmen wollen"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "importieren..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "Eingabewert"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "ungÃŒltig"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "ist gÃŒltig"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "ist nicht gÃŒltig"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "Stimmzettel auflisten:"
+
+# hm, da bin ich mir jetzt auch nicht sicher, ob ich das richtig interpretiert habe...
+#: root/templates/admin/validate.tt:75
+#, fuzzy
+msgid "map ballot value"
+msgstr "Abstimmungswerte anzeigen"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "muss gesehen werden als"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "muss bestÃ€tigt werden"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "BestÃ€tigung benÃ¶tigt"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "nicht aus der Liste"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "Nummer"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "Passwort gesendet"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "AuswahlmÃ¶glichkeiten"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "Ergebnisse verÃ¶ffentlichen"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "lÃ€uft"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "auswÃ€hlen"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "beendet"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "Zeit:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "bis"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr ""
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "gÃŒltig"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "hier abstimmen"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "WÃ€hler-Liste"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "Die ID Ihres Stimmzettels ist:"
+
+#~ msgid "%1 choice(s) has/have to be done"
+#~ msgstr "%1 AuswahlmÃ¶glichkeit(en) muss/mÃŒssen gewÃ€hlt werden"
+
+#~ msgid "%1 possible choices"
+#~ msgstr "%1 AuswahlmÃ¶glichkeiten"
+
+#~ msgid "This poll is not open for voting yet"
+#~ msgstr "In dieser Abstimmung kann noch nicht gewÃ€hlt werden"
+
+#~ msgid "Valid"
+#~ msgstr "GÃŒltig"
+
+#~ msgid "Delete the list of voters"
+#~ msgstr "Die Liste der WÃ€hler lÃ¶schen"
+
+#~ msgid "search..."
+#~ msgstr "suchen..."
+
+# "sign" kann viel heiÃen, von "Zeichen" bis "sign a contract", was mit "unterschreiben" ÃŒbersetzt werden mÃŒsste.
+# Sigrid
+#, fuzzy
+#~ msgid "sign"
+#~ msgstr "Zeichen / Unterschrift"
+
+#~ msgid "voting"
+#~ msgstr "Abstimmen"
+
+#~ msgid "choices"
+#~ msgstr "AuswahlmÃ¶glichkeiten"
+
+#~ msgid "elected"
+#~ msgstr "gewÃ€hlt"
+
+# nicht ganz eindeutig obgr_seneca
+#~ msgid "for"
+#~ msgstr "fÃŒr"
+
+#~ msgid "save"
+#~ msgstr "speichern"
+
+#, fuzzy
+#~ msgid ": Administrator login"
+#~ msgstr "verwalten"
+
+#~ msgid "Destroy"
+#~ msgstr "ZerstÃ¶ren"
+
+#~ msgid "Poll open from <b>%1 %2</b> to <b>%3 %4</b>"
+#~ msgstr "Die Abstimmung ist von <b>%1 %2</b> bis <b>%3 %4</b> geÃ¶ffnet"
Index: /tags/2.00/lib/Epoll/I18N/el.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/el.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/el.po	(revision 478)
@@ -0,0 +1,1282 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Dimitrios Glentadakis <dglent@gmail.com>, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2011-01-02 13:02+0100\n"
+"Last-Translator: Dimitrios Glentadakis <dglent@gmail.com>\n"
+"Language-Team: Greek <mageia_gr@list.mageia.org.uk>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "Â«ÎÂ», Â«ÎÂ», Â«Î€Â», Â«Î€Â», Â«Î Â», Â«Î Â», Â«Î£Â»"
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î± ÏÏÎ¿Ï Î±ÏÎ¿ÎºÏÏ
+ÏÏÎ¿Î³ÏÎ¬ÏÎ·ÏÎ· Ï' Î±Ï
+ÏÎ® ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î³Î¯ÎœÎ¿Ï
+Îœ %1 ÎµÏÎ¹Î»Î¿Î³Î­Ï"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 ÏÎ¹ÎžÎ±ÎœÎ­Ï ÎµÏÎ¹Î»Î¿Î³Î­Ï"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Î£ÏÎ¬Î»ÎžÎ·ÎºÎµ Î­ÎœÎ± ÎŒÎ®ÎœÏ
+ÎŒÎ± Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+ ÎŒÎµ ÏÎ· ÏÏÎœÎ¿ÏÎ·"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "Î£ÏÎµÏÎ¹ÎºÎ¬ ÎŒÎµ Î±Ï
+ÏÎ® ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "ÎÏÏÎ»Ï
+ÏÎ· ÏÎ»ÎµÎ¹Î¿ÏÎ·ÏÎ¯Î±"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "Î ÏÏÏÎ²Î±ÏÎ· ÏÏÎ· ÎŽÎ¹Î±ÏÎµÎ¯ÏÎ¹ÏÎ· ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "Î ÏÎ¿ÏÎžÎ®ÎºÎ·"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Î ÏÎ¿ÏÎžÎ®ÎºÎ· ÎµÏÎ¹Î»Î¿Î³Î®Ï"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "Î ÏÎ¿ÏÎžÎ®ÎºÎ· ÎµÎœÏÏ ÏÎ·ÏÎ¿ÏÏÏÎ¿Ï
+"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "ÎÎ¹Î±ÏÎµÎ¯ÏÎ¹ÏÎ·"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "ÎÎ¹Î±ÏÎµÎ¯ÏÎ¹ÏÎ·"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Î£ÏÎœÎŽÎµÏÎ· ÎŽÎ¹Î±ÏÎµÎ¹ÏÎ¹ÏÏÎ®"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Î£ÏÎ¬Î»ÎžÎ·ÎºÎµ Î­ÎœÎ± ÎŒÎ®ÎœÏ
+ÎŒÎ± Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+ ÏÏÎ¿ %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Î£ÏÎ¬Î»ÎžÎ·ÎºÎµ Î­ÎœÎ± ÎŒÎ®ÎœÏ
+ÎŒÎ± Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+ ÏÏÎ¿ %1, Î±ÎºÎ¿Î»Î¿Ï
+ÎžÎ®ÏÏÎµ ÏÎ¹Ï Î¿ÎŽÎ·Î³Î¯ÎµÏ Î³Î¹Î± "
+"ÏÎ·Îœ\n"
+"Î¿Î»Î¿ÎºÎ»Î®ÏÏÏÎ· ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï  "
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "ÎÏÏ"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "ÎÏÏÎ¯Î»Î¹Î¿Ï"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "Î£ÏÎ¿ URL"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "ÎÏÎ³"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "ÎÏÎ³Î¿Ï
+ÏÏÎ¿Ï"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "ÎšÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î¿"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "ÎšÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î±"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "ÎÎ±ÏÎ±ÎŒÎ­ÏÏÎ·ÏÎ· ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯ÏÎœ"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "ÎÎ¯ÏÏÎ± ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯ÏÎœ"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "ÎšÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î±:"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "ÎÎ¬ÏÎ· DN:"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "ÎÏÏÎµÎ¯Î¿ CSV"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "ÎÎŽÏÎœÎ±ÏÎ· Î· ÏÏÎ¿ÏÎ¿ÏÎ¿Î¯Î·ÏÎ· ÎŒÎ¹Î±Ï ÏÏÎ­ÏÎ¿Ï
+ÏÎ±Ï Î® Î¿Î»Î¿ÎºÎ»Î·ÏÏÎŒÎ­ÎœÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "ÎÎŽÏ
+ÎœÎ±ÎŒÎ¯Î± Î±ÏÎ¿ÏÏÎ¿Î»Î®Ï ÏÎ¿Ï
+ ÎŒÎ·ÎœÏÎŒÎ±ÏÎ¿Ï Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "ÎÎ»Î»Î±Î³Î® Î³Î»ÏÏÏÎ±Ï"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "ÎÎ»ÎµÎ¯ÏÎ¹ÎŒÎ¿"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "ÎÏÎ¹Î²ÎµÎ²Î±Î¯ÏÏÎ· ÎŽÎ·ÎŒÎ¹Î¿Ï
+ÏÎ³Î¯Î±Ï ÎœÎ­Î±Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "ÎÏÎ¹Î²ÎµÎ²Î±Î¹ÏÏÏÎµ ÏÎ·Îœ ÏÎ®ÏÎ¿ ÏÎ±Ï"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "ÎÎŽÏÎœÎ±ÏÎ· Î· Î±ÏÎ¿ÏÏÎ¿Î»Î® ÏÎ¿Ï
+ ÎŒÎ·ÎœÏÎŒÎ±ÏÎ¿Ï Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+ ÎŒÎµ ÏÎ·Îœ ÏÏÎœÎ¿ÏÎ·:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "ÎÎ·ÎŒÎ¹Î¿Ï
+ÏÎ³Î¯Î± ÎœÎ­Î±Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "ÎÎ/ÎÎ/Î§Î§Î§Î§ Î©Î©:ÎÎ:ÎÎ"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "ÎÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î±"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Î ÎŒÎ¿ÏÏÎ® ÏÎ·Ï Î·ÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î±Ï ÎµÎ¯ÎœÎ±Î¹"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "ÎÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯ÎµÏ"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "ÎÎµÎº"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "ÎÎµÎºÎ­ÎŒÎ²ÏÎ¹Î¿Ï"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "ÎÏÎ¿ÎºÏÏ
+ÏÏÎ¿Î³ÏÎ¬ÏÎ·ÏÎ· ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯ÏÎœ"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "ÎÎ¹Î±Î³ÏÎ±ÏÎ®"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "ÎÎ¹Î±Î³ÏÎ±ÏÎ® ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯ÏÎœ"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "ÎÎ¹Î±Î³ÏÎ±ÏÎ® ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Î ÎµÏÎ¹Î³ÏÎ±ÏÎ®:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "ÎÎŽÎ¹ÏÏÎ·ÏÎµÏ ÎµÎŒÏÎ±ÎœÎ¹Î¶ÏÎŒÎµÎœÎ¿Ï
+ Î¿ÎœÏÎŒÎ±ÏÎ¿Ï:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "ÎÎ± ÎŒÎ·Îœ Î³Î¯ÎœÎµÎ¹ ÎºÏÏ
+ÏÏÎ¿Î³ÏÎ¬ÏÎ·ÏÎ· ÏÎ¿Ï
+ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr ""
+"ÎÎ± ÎŒÎ·Îœ Î³Î¯ÎœÎµÎ¹ Î±ÏÎ¿ÏÏÎ¿Î»Î® ÎµÎ¹ÎŽÎ¿ÏÎ¿Î¯Î·ÏÎ·Ï ÏÎ±ÏÎ¬ÎŽÎ¿ÏÎ·Ï ÎŒÎ·ÎœÏÎŒÎ±ÏÎ¿Ï ÎŒÎ­ÏÏ Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "ÎÎ± ÎŒÎ·Îœ ÎµÎŒÏÎ±ÎœÎ¹ÏÏÎµÎ¯ Î· ÏÎ±Ï
+ÏÏÏÎ·ÏÎ± ÏÎ¿Ï
+ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+ ÎŒÎµÏÎ¬ ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "ÎÎ®ÏÎ· Î¹ÎŽÎ¹ÏÏÎ¹ÎºÎ¿Ï ÎºÎ»ÎµÎ¹ÎŽÎ¹Î¿Ï"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "ÎÎ¿ÎºÎ¹ÎŒÎ±ÏÏÎ¹ÎºÏ"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "ÎÎºÎ»ÎµÎ³ÎŒÎ­ÎœÎ¿Ï"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "ÎÎ».ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "ÎÎ¹ÎµÏÎžÏ
+ÎœÏÎ· Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "ÎÎŽÎ¹ÏÏÎ·ÏÎµÏ Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr ""
+"Î€Î¿ ÎŒÎ®ÎœÏ
+ÎŒÎ± Î·Î». Î±Î»Î»Î·Î»Î¿Î³ÏÎ±ÏÎ¯Î±Ï ÏÏ
+ÎŒÏÎµÏÎ¹Î»Î±ÎŒÎ²Î¬ÎœÎµÎ¹ ÏÎ·Îœ ÏÎ±Ï
+ÏÏÏÎ·ÏÎ± ÏÎ¿Ï
+ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "ÎÎ»ÏÏÏÎ± ÏÎ¿Ï
+ Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "ÎÎµÏ
+ÎºÏ ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î¿"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "ÎÎµÏ
+ÎºÏ ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î¿"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "ÎÏÏ
+ÏÏÎ¿Î³ÏÎ¬ÏÎ·ÏÎ· ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÎŒÎ¹Î± Î²Î¿Î®ÎžÎµÎ¹Î± Î³Î¹Î± ÏÎ¿Îœ ÎºÏÎŽÎ¹ÎºÏ ÏÏÏÏÎ²Î±ÏÎ·Ï ÎµÎŽÏ"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ¿Îœ ÎºÏÎŽÎ¹ÎºÏ ÏÏÏÏÎ²Î±ÏÎ·Ï Î³Î¹Î± ÏÎ·Îœ ÎŽÎ¹Î±ÏÎµÎ¯ÏÎ¹ÏÎ· Î±Ï
+ÏÎ®Ï ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ¿ ÎºÎ»ÎµÎ¹ÎŽÎ¯ ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï ÎµÎŽÏ:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ¿Îœ ÎºÏÎŽÎ¹ÎºÏ ÏÏÏÏÎ²Î±ÏÎ·Ï ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï:"
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ¿ ID ÏÎ·Ï Î±Î¯ÏÎ·ÏÎ·Ï ÏÎ¿Ï
+ Î»Î¬Î²Î±ÏÎµ ÎŒÎ­ÏÏ Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+ "
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr ""
+"ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ·Îœ ÎŽÎ¹ÎµÏÎžÏ
+ÎœÏÎ· ÏÎ¿Ï
+ Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+ ÏÎ±Ï Î³Î¹Î± ÎœÎ± Î»Î¬Î²ÎµÏÎµ ÎŒÎ¹Î± Î»Î¯ÏÏÎ± ÎŒÎµ "
+"ÏÎ¹Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯ÎµÏ ÏÎ±Ï"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Î£ÏÎ¬Î»ÎŒÎ±:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "ÎŠÎµÎ²"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "ÎŠÎµÎ²ÏÎ¿Ï
+Î¬ÏÎ¹Î¿Ï"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "ÎÎ»ÎµÏÎžÎµÏÎ· ÎµÏÎ¹Î»Î¿Î³Î®"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "Î Î±ÏÎ±ÏÎºÎµÏ
+Î®"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "ÎÏÏ ÏÎ·Îœ Î»Î¯ÏÏÎ± ÏÏÎœ ÏÎ·ÏÎ¿ÏÏÏÏÎœ"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "ÎÎµÎ¹Î± ÏÎ¿Ï
+,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "Id"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "ÎÎ¹ÏÎ±Î³ÏÎ³Î® ÏÎ·Ï Î»Î¯ÏÏÎ±Ï ÏÏÎœ ÏÎ·ÏÎ¿ÏÏÏÏÎœ..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "ÎÎ¹ÏÎ±Î³ÏÎ³Î® Î±Ï
+ÏÎ®Ï ÏÎ·Ï Î»Î¯ÏÏÎ±Ï"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"ÎÎ· Î­Î³ÎºÏ
+ÏÎ¿ ÏÎœÎ¿ÎŒÎ± ÏÏÎœÎŽÎµÏÎ·Ï/ÎºÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï,\n"
+"ÎµÎ¯ÏÏÎµ ÏÎ¯Î³Î¿Ï
+ÏÎ¿Ï ÏÏÎ¹ Î­ÏÎµÏÎµ ÎŽÎ¹ÎºÎ±Î¯ÏÎŒÎ± ÏÏ
+ÎŒÎŒÎµÏÎ¿ÏÎ®Ï ÏÎµ Î±Ï
+ÏÎ® ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±;"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "ÎÎ· Î­Î³ÎºÏ
+ÏÎ¿Ï ÎºÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï ÏÏÎ·Îœ Î¹ÏÏÎ¿ÏÎµÎ»Î¯ÎŽÎ±:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "ÎÎ±Îœ"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "ÎÎ±ÎœÎ¿Ï
+Î¬ÏÎ¹Î¿Ï"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "ÎÎ¿ÏÎ»"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "ÎÎ¿ÏÎ»Î¹Î¿Ï"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "ÎÎ¿ÏÎœ"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "ÎÎ¿ÏÎœÎ¹Î¿Ï"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"ÎÏÎ±ÏÎ®ÏÏÎµ Î±Ï
+ÏÎ® ÏÎ·Îœ ÏÎ»Î·ÏÎ¿ÏÎ¿ÏÎ¯Î± ÏÎµ Î±ÏÏÎ±Î»Î­Ï ÎŒÎ­ÏÎ¿Ï, ÎŽÎµÎœ ÎžÎ± ÏÎ±Ï ÏÏÎ±Î»ÎžÎµÎ¯ ÎŸÎ±ÎœÎ¬."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Î¥ÏÏÎŒÎœÎ·ÎŒÎ±:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "ÎÏÎ±ÎŒÎŒÎ® ÎÂ°"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "ÎÎ¯ÏÏÎ± ÏÏÎœ ÏÎ·ÏÎ¿ÏÏÏÏÎœ"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Î£ÏÎœÎŽÎµÏÎ·"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "ÎÎ»Î»Î·Î»Î¿Î³ÏÎ±ÏÎ¯Î±:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "ÎÎ»Î»Î·Î»Î¿Î³ÏÎ±ÏÎ¯Î±@ÏÎ¿ÎŒÎ­Î±Ï;ÎÎœÎ¿ÎŒÎ±"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "ÎÎ¬Ï"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "ÎÎ¬ÏÏÎ¹Î¿Ï"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "ÎÎ¬Î¹Î¿Ï"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "ÎÎ»Î±ÏÎ¹ÏÏÎ¿ÏÎ¿Î¯Î·ÏÎ·"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Î€ÏÎ¿ÏÎ¿ÏÎ¿Î¯Î·ÏÎ· ÏÎ·Ï ÏÎ®ÏÎ¿Ï
+ ÎŒÎ¿Ï
+"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "ÎÎµÏ
+ÏÎ­ÏÎ±"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "ÎÎ¹ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯ÎµÏ ÎŒÎ¿Ï
+:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "ÎÎœÎ¿ÎŒÎ±:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "ÎÎ¯ÏÎ·ÏÎ· ÎœÎ­Î±Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "ÎÎµÎœ Î­ÏÎµÎ¹ ÏÏÎ¿ÏÏÎµÎžÎµÎ¯ ÎºÎ±ÎŒÎ¯Î± ÎµÏÎ¹Î»Î¿Î³Î®"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "ÎÎµÎœ Î­Î³Î¹ÎœÎµ Î±Î¯ÏÎ·ÏÎ· ÎŽÎ·ÎŒÎ¹Î¿Ï
+ÏÎ³Î¯Î±Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "ÎÎ±ÎŒÎ¹Î¬ ÏÏÎ­ÏÎ¿Ï
+ÏÎ± ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "ÎÎ±ÎœÎ­ÎœÎ± Î±ÏÎ¿ÏÎ­Î»ÎµÏÎŒÎ±"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "ÎÎ±ÎœÎ­ÎœÎ±Ï ÎµÎ³Î³ÎµÎ³ÏÎ±ÎŒÎŒÎ­ÎœÎ¿Ï ÏÎ·ÏÎ¿ÏÏÏÎ¿Ï"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "ÎÎµÎœ Î²ÏÎ­ÎžÎ·ÎºÎµ ÎºÎ±ÎŒÎ¯Î± Î±Î¯ÏÎ·ÏÎ·"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "ÎÎ±ÎœÎ­ÎœÎ±Ï ÏÎ·ÏÎ¿ÏÏÏÎ¿Ï ÏÏÎ¿Ï ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ·"
+
+#: root/templates/pollinc/binary/results.tt:12
+#, fuzzy
+msgid "Not elected"
+msgstr "ÎÎ· ÎµÎºÎ»ÎµÎ³ÎŒÎ­ÎœÎ¿Ï"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "ÎÎ¿Î­"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "ÎÎ¿Î­ÎŒÎ²ÏÎ¹Î¿Ï"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ ÎµÏÎ¹Î»Î¿Î³ÏÎœ ÏÏÎ¿Ï ÎŽÎ¹Î±ÏÎ®ÏÎ·ÏÎ·:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ Î»ÎµÏ
+ÎºÏÎœ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯ÏÎœ"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ ÎºÎµÎœÏÎœ ÏÎµÎŽÎ¯ÏÎœ ÎµÎ¹ÏÏÎŽÎ¿Ï
+:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ ÎŒÎ·ÎŽÎµÎœÎ¹ÎºÏÎœ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯ÏÎœ"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ Î±ÎœÎžÏÏÏÏÎœ ÏÏÎ¿Ï ÎµÎºÎ»Î¿Î³Î®, Î±ÏÏ ÏÎ· Î»Î¯ÏÏÎ± ÏÎ·ÏÎ¿ÏÏÏÏÎœ"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ ÏÎ¹ÎžÎ±ÎœÏÎœ ÎµÏÎ¹Î»Î¿Î³ÏÎœ"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "ÎÏÎ¹ÎžÎŒÏÏ ÏÎ®ÏÏÎœ"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "ÎÎºÏ"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "ÎÎºÏÏÎ²ÏÎ¹Î¿Ï"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "ÎÎ¹Î± Î® ÏÎµÏÎ¹ÏÏÏÏÎµÏÎµÏ ÏÎ¹ÎŒÎ­Ï ÎµÎ¯ÎœÎ±Î¹ ÎŽÎ¹ÏÎ»Î­Ï:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "ÎÏÎœÎ¿"
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "Î ÏÎµÎ»Î¯ÎŽÎ± ÎŽÎ·ÎŒÎ¹Î¿Ï
+ÏÎ³Î®ÎžÎ·ÎºÎµ ÏÏÎ¹Ï %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "Î£Ï
+ÎŒÎŒÎµÏÎ­ÏÎ¿ÎœÏÎµÏ"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Î£Ï
+ÎŒÎŒÎµÏÎ¿ÏÎ®"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "ÎÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "ÎÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "ÎÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "Î Î±ÏÎ±ÎºÎ±Î»Ï ÏÏ
+ÎœÎŽÎµÎžÎµÎ¯ÏÎµ Î³Î¹Î± ÎœÎ± ÏÏ
+ÎŒÎŒÎµÏÎ¬ÏÏÎµÏÎµ ÏÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "Î Î±ÏÎ±ÎºÎ±Î»Ï ÎµÏÎ¹ÎºÎ¿Î¹ÎœÏÎœÎ®ÏÏÎµ ÎŒÎµ ÏÎ¿ ÎŽÎ¹Î±ÏÎµÎ¹ÏÎ¹ÏÏÎ® ÏÎ¿Ï
+ ÏÏ
+ÏÏÎ®ÎŒÎ±ÏÏÏ ÏÎ±Ï"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "Î Î±ÏÎ±ÎºÎ±Î»Ï, ÎµÏÎ¹Î²ÎµÎ²Î±Î¹ÏÏÏÎµ ÏÎ·Îœ ÎŽÎ¹Î±Î³ÏÎ±ÏÎ® ÏÎ®ÏÏÎœ"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "Î Î±ÏÎ±ÎºÎ±Î»Ï, ÎµÏÎ¹Î²ÎµÎ²Î±Î¹ÏÏÏÎµ ÏÎ·Îœ ÎŽÎ¹Î±Î³ÏÎ±ÏÎ® ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "Î ÎŽÎ¹Î±ÏÎµÎ¹ÏÎ¹ÏÏÎ®Ï ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÏÎ¹ÎºÏ
+ÏÏÏÎµÎ¹ ÎŒÎµÏÎ¹ÎºÎ¬ ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î±"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+"Î Î·ÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î± ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î¿ÏÎ¹ÏÏÎµÎ¯ ÏÏÎ¹Îœ ÏÎ·Îœ Î±ÎœÎ±ÎºÎ¿Î¯ÎœÏÏÎ® ÏÎ·Ï ÏÏÎ¿Ï
+Ï "
+"ÏÎ·ÏÎ¿ÏÏÏÎ¿Ï
+Ï"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "Î€Î­Î»Î¿Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "Î ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± ÎµÎ¯ÎœÎ±Î¹ ÏÎµ ÎµÎŸÎ­Î»Î¹ÎŸÎ·"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "ÎÎœÎ¿ÎŒÎ± ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "Î ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± Î±ÎœÎ¿Î¯ÏÏÎ·ÎºÎµ Î±ÏÏ"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Î¥ÏÎµÎœÎžÏÎŒÎ¹ÏÎ· Î±Î¯ÏÎ·ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "ÎÎºÎºÎ¯ÎœÎ·ÏÎ· ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "Î Î¹ÎžÎ±ÎœÏÏ Î±ÏÎ¹ÎžÎŒÏÏ Î±ÎœÎžÏÏÏÏÎœ ÏÏÎ¿Ï ÎµÎºÎ»Î¿Î³Î®"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "Î ÏÎ¿ÎµÏÎ¹ÏÎºÏÏÎ·ÏÎ· ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+"
+
+# Î£ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
+ email ÏÏÏÏÎºÎ»Î·ÏÎ·Ï
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "ÎÏ
+ÏÎ±ÏÎ¹ÏÏÎ¿ÏÎŒÎµ"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "ÎÎœÎ±ÏÎ¿ÏÎ¬ ÏÎµ PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "ÎÏÎ¿ÏÎ­Î»ÎµÏÎŒÎ± ÏÎµ PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Î€Î± Î±ÏÎ¿ÏÎµÎ»Î­ÏÎŒÎ±ÏÎ± ÎŽÎµÎœ Î­ÏÎ¿Ï
+Îœ ÎŽÎ·ÎŒÎ¿ÏÎ¹ÎµÏ
+ÏÎµÎ¯ Î±ÎºÏÎŒÎ±."
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Î€Î± Î±ÏÎ¿ÏÎµÎ»Î­ÏÎŒÎ±ÏÎ± ÎžÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŽÎ¹Î±ÎžÎ­ÏÎ¹ÎŒÎ±"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Î€Î± Î±ÏÎ¿ÏÎµÎ»Î­ÏÎŒÎ±ÏÎ± ÎžÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŽÎ¹Î±ÎžÎ­ÏÎ¹ÎŒÎ± ÎµÎŽÏ "
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "ÎÏÎ¿ÏÎµÎ»Î­ÏÎŒÎ±ÏÎ±:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "ÎÎ±ÎœÏÎœÎµÏ:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "Î£Î¬Î²Î²Î±ÏÎ¿"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "ÎÏÎ¿ÎžÎ®ÎºÎµÏ
+ÏÎ·"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "ÎÎ±ÎžÎŒÎ¿Î»Î¿Î³Î¯Î±:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Î€Î± Î»Î­ÎŒÎµ ÏÏÎœÏÎ¿ÎŒÎ± !"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "ÎÏÎ¿ÏÏÎ¿Î»Î® ÎºÏÎŽÎ¹ÎºÎ¿Ï ÏÏÏÏÎ²Î±ÏÎ·Ï"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "ÎÏÎ¿ÏÏÎ¿Î»Î® ÎºÏÎŽÎ¹ÎºÎ¿Ï ÏÏÏÏÎ²Î±ÏÎ·Ï ÏÏÎ¿Ï
+Ï ÏÎ·ÏÎ¿ÏÏÏÎ¿Ï
+Ï"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Î£ÎµÏ"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "Î£ÎµÏÏÎ­ÎŒÎ²ÏÎ¹Î¿Ï"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "Î¥ÏÎ¿Î³ÏÎ±ÏÎ®"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "ÎÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "ÎÎµÏÎ¹ÎºÎ¬ ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î± ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÏÎ¹ÎºÏ
+ÏÏÎžÎ¿ÏÎœ"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "ÎÏ
+ÏÎ¹Î±ÎºÎ®"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "Î ÏÎ¿ÏÏÏÎ¹ÎœÎ¬ Î±ÏÎ¿ÏÎµÎ»Î­ÏÎŒÎ±ÏÎ±"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "ÎÏ
+ÏÎ±ÏÎ¹ÏÏÎ¿ÏÎŒÎµ"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "Î Î±ÏÎ¹ÎžÎŒÏÏ ÏÏÎœ ÏÎ®ÏÏÎœ ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÎŒÎµ ÏÎ¿Îœ Î±ÏÎ¹ÎžÎŒÏ ÏÏÎœ ÏÎ·ÏÎ¿ÏÏÏÏÎœ"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "Î ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± ÏÎµÎ»ÎµÎ¯ÏÏÎµ ÏÏÎ¹Îœ ÎŸÎµÎºÎ¹ÎœÎ®ÏÎµÎ¹"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "Î Î±ÏÏÎ® ÏÎ·Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÎ¿ ÎŒÎ­Î»Î»Î¿Îœ"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Î ÎµÎœÎ­ÏÎ³ÎµÎ¹Î± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎ· Î±ÎœÎ±ÏÏÏÎ­ÏÎ¹ÎŒÎ·"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "ÎÏ
+ÏÎ® Î· ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± ÏÎµÎ»ÎµÎ¹ÏÎœÎµÎ¹"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Î ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î±ÎºÏÎŒÎ± Î±ÎœÎ¿Î¹ÏÏÎ®"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "Î ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± Î­ÏÎµÎ¹ ÏÎµÎ»ÎµÎ¹ÏÏÎµÎ¹, ÏÎ± Î±ÏÎ¿ÏÎµÎ»Î­ÏÎŒÎ±ÏÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÎ± ÎŽÎ¹Î±ÎžÎ­ÏÎ¹ÎŒÎ±"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"ÎÏ
+ÏÏ ÎžÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÎ¹ ÏÎ»Î± ÏÎ± ÎŽÎµÎŽÎ¿ÎŒÎ­ÎœÎ± ÏÏÎµÏÎ¹ÎºÎ¬ ÎŒÎµ Î±Ï
+ÏÎ® ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± (ÏÏ
+ÎžÎŒÎ¯ÏÎµÎ¹Ï,\n"
+"Î»Î¯ÏÏÎ± ÏÎ·ÏÎ¿ÏÏÏÏÎœ, ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î±)."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"ÎÏ
+ÏÏ ÎžÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÎ¹ ÎµÏ
+Î±Î¯ÏÎžÎ·ÏÎ± ÎŽÎµÎŽÎ¿ÎŒÎ­ÎœÎ± Î±ÏÏ ÏÎ·Îœ Î²Î¬ÏÎ· ÎŽÎµÎŽÎ¿ÎŒÎ­ÎœÏÎœ ÎºÎ±Î¹ ÎžÎ± Î³Î¯ÎœÎµÎ¹\n"
+"ÏÎµÎ»Î¹ÎºÏÏ Ï
+ÏÎ¿Î»Î¿Î³Î¹ÏÎŒÏÏ ÏÏÎœ Î±ÏÎ¿ÏÎµÎ»ÎµÏÎŒÎ¬ÏÏÎœ. Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÏÏÎ¹ Î¿Î¹ ÏÎ·ÏÎ¿ÏÏÏÎ¿Î¹ ÎŽÎµÎœ ÎžÎ± "
+"ÎŒÏÎ¿ÏÎ¿ÏÎœ ÏÎ¹Î± ÎœÎ± ÎµÎ»Î­Î³ÎŸÎ¿Ï
+Îœ ÏÎ± ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î¬ ÏÎ¿Ï
+Ï"
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "Î Î­ÎŒÏÏÎ·"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "ÎÎ¹Î± ÏÎ·Îœ ÎµÏÎ¹ÎºÏÏÏÏÎ· ÏÎ·Ï Î±Î¯ÏÎ·ÏÎ·Ï ÏÎ±ÏÎ±ÎºÎ±Î»Ï ÎŒÎµÏÎ±Î²ÎµÎ¯ÏÎµ ÏÏÎ¿"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "Î£Î®ÎŒÎµÏÎ±"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "Î€ÏÎ¯ÏÎ·"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "ÎÎŽÎ¹ÏÏÎ·ÏÎµÏ UID:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "Uri:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Î§ÏÎ®ÏÎ· ÎµÎŸÏÏÎµÏÎ¹ÎºÎ®Ï ÏÎ±Ï
+ÏÎ¿ÏÎ¿Î¯Î·ÏÎ·Ï"
+
+# ÎÎ¿Ï
+ÎŒÏÎ¯ ÎµÏÎ¹ÎºÏ
+ÏÏÏÎ·Ï ÏÎ·Ï ÏÎ®ÏÎ¿Ï
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "ÎÏÎ¹ÎºÏÏÏÏÎ·"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "ÎÏÎ¹ÎºÏÏÏÏÎ·"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "ÎšÎ®ÏÎ¿Ï"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "ÎÏÎ¹Î²ÎµÎ²Î±Î¯ÏÏÎ· ÏÎ®ÏÎ¿Ï
+:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "ÎšÎ·ÏÎ¯ÏÏÎµ"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "ÎšÎ·ÏÎ¿ÏÏÏÎ¿Î¹"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Î ÏÏÏÎºÎ»Î·ÏÎ· ÏÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Î£ÏÏÏÎ·ÎŒÎ± ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï Î¹ÏÏÎ¿Ï"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "Î€ÎµÏÎ¬ÏÏÎ·"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "ÎÎ±Î»ÏÏ Î®ÏÎžÎ±ÏÎµ"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr ""
+"ÎÏÎ¬ÏÏÎµ ÏÎ¿ ÎºÎ¬ÏÏ Î±Îœ ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÎµÎ¯ÏÏÎµ ÏÎµ ÎžÎ­ÏÎ· ÎœÎ± ÏÎ¿ ÎµÎ»Î­Î³ÎŸÎµÏÎµ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï "
+"ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "ÎÎ±Î¹, ÎŽÎ¹Î­Î³ÏÎ±ÏÎµ Î±Ï
+ÏÎ® ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"ÎÎ¯ÏÏÎµ Î¿ %1, Î· ÎŽÎ¹ÎµÏÎžÏ
+ÎœÏÎ· IP ÏÎ±Ï (%2) ÎžÎ± ÎºÎ±ÏÎ±Î³ÏÎ±ÏÎµÎ¯ ÎµÏÎ¯ÏÎ·Ï\n"
+"(Î±ÎœÎµÎŸÎ¬ÏÏÎ·ÏÎ± Î±ÏÏ ÏÎ·Îœ ÏÎ®ÏÎ¿)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "Î ÏÎ¿ÏÎºÎ±Î»ÎµÎ¯ÏÏÎµ ÎœÎ± ÏÏ
+ÎŒÎŒÎµÏÎ¬ÏÏÎµÏÎµ Ï' Î±Ï
+ÏÎ®Îœ ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "ÎÎŒÏÎ±ÎœÎ¯Î¶ÎµÏÏÎµ ÏÏ ÏÎ·ÏÎ¿ÏÏÏÎ¿Ï ÏÎµ Î±Ï
+ÏÎ® ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "ÎÎ¯ÏÎ±ÏÏÎµ Î¿ ÎŽÎ¹Î±ÏÎµÎ¹ÏÎ¹ÏÏÎ®Ï Î±Ï
+ÏÏÎœ ÏÏÎœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¹ÏÎœ"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "ÎÏÎ¿ÏÎµÎ¯ÏÎµ"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "ÎÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± ÎµÏÎ¹Î»Î­ÎŸÎµÏÎµ Î­ÎœÎ± ÏÏ
+ÎœÎžÎ·ÎŒÎ±ÏÎ¹ÎºÏ Î³Î¹Î± ÏÎ·Îœ ÏÏÎ¿ÏÏÎ±ÏÎ¯Î± ÏÎ¿Ï
+ ÎºÎ»ÎµÎ¹ÎŽÎ¹Î¿Ï:"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "ÎÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ¿Îœ ÎºÏÎŽÎ¹ÎºÏ Î±Î¯ÏÎ·ÏÎ·Ï ÎµÎŽÏ"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "ÎÎµÎœ ÎµÎ¯ÏÏÎµ Î¹ÎŽÎ¹Î¿ÎºÏÎ®ÏÎ·Ï ÎºÎ±ÎŒÎ¹Î¬Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "ÎÏÎµÏÎµ Î±ÏÎ»Î¬ ÏÏ
+ÎŒÎŒÎµÏÎ¬ÏÏÎµÎ¹ ÏÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "Î ÏÎ­ÏÎµÎ¹ ÎœÎ± ÎºÎ±ÎžÎ¿ÏÎ¯ÏÎµÏÎµ ÏÎ·Îœ Î·ÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î± Î­ÎœÎ±ÏÎŸÎ·Ï ÎºÎ±Î¹ ÏÎµÏÎŒÎ±ÏÎ¹ÏÎŒÎ¿Ï"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Î ÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÏÎ¹Î»Î­ÎŸÏÎµ %1 ÎµÏÎ¹Î»Î¿Î³Î­Ï"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "ÎÎ± ÎŒÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± ÏÏÎµÎ¯Î»ÎµÏÎµ ÏÎ·Îœ ÏÎ®ÏÎ¿ ÏÎ±Ï Î±ÏÏ ÏÎ¹Ï"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr "ÎÎ·ÏÎ®ÏÎ±ÏÎµ ÏÎ·Îœ Î»Î¯ÏÏÎ± ÎŒÎµ ÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±(ÎµÏ) ÏÎ¿Ï
+ ÏÏ
+ÎŒÎŒÎµÏÎ­ÏÎµÏÎµ"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "ÎÏÎ»Î¹Ï ÏÏÎµÎ¯Î»Î±ÏÎµ ÏÎ¿ ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Ï ÏÎ±Ï"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "ÎÎ·ÏÎ®ÏÎ±ÏÎµ ÏÎ·Îœ ÎŽÎ·ÎŒÎ¹Î¿Ï
+ÏÎ³Î¯Î± ÎŒÎ¹Î±Ï ÎœÎ­Î±Ï ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î±Ï"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Î€Î¿ Î±ÎœÎ±Î³ÎœÏÏÎ¹ÏÏÎ¹ÎºÏ ÏÎ¿Ï
+ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+ ÏÎ±Ï"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Î ÎŽÎ¹ÎµÏÎžÏ
+ÎœÏÎ· ÏÎ¿Ï
+ Î·Î». ÏÎ±ÏÏ
+ÎŽÏÎ¿ÎŒÎµÎ¯Î¿Ï
+ ÏÎ±Ï:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Î€Î¿ ÏÎœÎ¿ÎŒÎ± ÏÎ·Ï ÏÏÎœÎŽÎµÏÎ®Ï ÏÎ±Ï ÎµÎ¯ÎœÎ±Î¹"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Î ÎºÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï ÏÎ±Ï ÎµÎ¯ÎœÎ±Î¹"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Î ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± ÏÎ±Ï:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Î€Î¿ ID ÏÎ·Ï Î±Î¯ÏÎ·ÏÎ·Ï ÏÎ±Ï ÎµÎ¯ÎœÎ±Î¹"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Î ÏÎ®ÏÎ¿Ï ÏÎ±Ï ÎžÎ± ÎºÎ±ÏÎ¿ÏÏ
+ÏÏÎžÎµÎ¯ Î¿ÏÎ¹ÏÏÎ¹ÎºÎ¬ ÎŒÎµÏÎ¬ Î±ÏÏ ÏÎ·Îœ ÎµÏÎ¹Î²ÎµÎ²Î±Î¯ÏÏÎ·"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Î ÏÎ®ÏÎ¿Ï ÏÎ±Ï ÎžÎ± ÎºÎ±ÏÎ¿ÏÏ
+ÏÏÎžÎµÎ¯ ÎŒÏÎœÎ¿ ÎŒÎµÏÎ¬ Î±ÏÏ ÎµÏÎ¹Î²ÎµÎ²Î±Î¯ÏÏÎ·"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "ÎŽÎ¹Î±ÏÎµÎ¯ÏÎ¹ÏÎ·"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "Î­ÏÎµÎ¹ ÏÏ
+ÎŒÎŒÎµÏÎ¬ÏÏÎµÎ¹ Î®ÎŽÎ· ÏÏÎ·Îœ ÏÎ·ÏÎ¿ÏÎ¿ÏÎ¯Î± ÏÎ·Îœ %1"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "ÏÎ± ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î± ÏÎµÏÎ¹Î­ÏÎ¿Ï
+Îœ:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î±"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "ÏÎ·ÏÎ¿ÎŽÎ­Î»ÏÎ¹Î± ÏÎ¿Ï
+ Î²ÏÎ­ÎžÎ·ÎºÎ±Îœ"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "Î·ÎŒÎµÏÎ¿Î»ÏÎ³Î¹Î¿"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "ÎµÏÎ¹Î»Î¿Î³Î®"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "ÏÏÏÎ»Î¹Î¿"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "Î·ÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î± (=> ÏÏÎ¿Î²Î¿Î»Î® ÏÏ)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "Î·ÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î±:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "ÎŽÎ¹Î±Î³ÏÎ±ÏÎ® ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+#, fuzzy
+msgid "for %1 elected"
+msgstr "Î³Î¹Î± %1 ÎµÎºÎ»ÎµÎ³ÎŒÎ­ÎœÎ¿Ï
+Ï"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "ÎŒÎ¿ÏÏÎ®:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "Î­ÏÎµÎ¹ ÏÎ·ÏÎ¯ÏÎµÎ¹"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "ÎµÎŽÏ"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "Î±Îœ ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÏÎ·ÏÎ¯ÏÎµÏÎµ ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ± Î±ÏÏ Î­ÎœÎ± Î¬ÏÎ¿ÎŒÎ±"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "ÎµÎ¹ÏÎ±Î³ÏÎ³Î®..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "ÏÎ¹ÎŒÎ® ÎµÎ¹ÏÏÎŽÎ¿Ï
+"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "Î¬ÎºÏ
+ÏÎ¿"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "Î»Î¯ÏÏÎ± ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯ÏÎœ:"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "ÏÏ
+ÏÏÎ­ÏÎ¹ÏÎ· ÏÎ·Ï ÏÎ¹ÎŒÎ®Ï ÏÎ¿Ï
+ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏ"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "ÏÏÎ­ÏÎµÎ¹  ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎµÏÎ¹ÎºÏ
+ÏÏÎŒÎ­ÎœÎ¿Î¹"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "ÏÏÎµÎ¹Î¬Î¶ÎµÏÎ±Î¹ ÎµÏÎ¹Î²ÎµÎ²Î±Î¯ÏÏÎ·"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "ÏÏÎ¹ Î±ÏÏ ÏÎ· Î»Î¯ÏÏÎ±"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "Î±ÏÎ¹ÎžÎŒÏÏ"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "Î¿ ÎºÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï ÏÏÎ¬Î»ÎžÎ·ÎºÎµ"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "ÏÎ¹ÎžÎ±ÎœÎ­Ï ÎµÏÎ¹Î»Î¿Î³Î­Ï"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "ÎŽÎ·ÎŒÎ¿ÏÎ¯ÎµÏ
+ÏÎ· Î±ÏÎ¿ÏÎµÎ»ÎµÏÎŒÎ¬ÏÏÎœ"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "ÏÎµ ÎµÎŸÎ­Î»Î¹ÎŸÎ·"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "ÎµÏÎ¹Î»Î¿Î³Î®"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "Î¿Î»Î¿ÎºÎ»Î·ÏÏÎžÎ·ÎºÎµ"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "ÏÏÎ±:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "Î­ÏÏ"
+
+#: root/mail/poll_reminder_voting.tt:25
+#, fuzzy
+msgid "to come"
+msgstr "ÎµÏÎµÏÏÏÎŒÎµÎœÎ·"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "Î­Î³ÎºÏ
+ÏÎ¿"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "ÏÎ·ÏÎ¯ÏÏÎµ ÎµÎŽÏ"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "Î»Î¯ÏÏÎ± ÏÎ·ÏÎ¿ÏÏÏÏÎœ"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "ÏÎ¿ Î±ÎœÎ±Î³ÎœÏÏÎ¹ÏÏÎ¹ÎºÏ ÏÎ¿Ï
+ ÏÎ·ÏÎ¿ÎŽÎµÎ»ÏÎ¯Î¿Ï
+ ÏÎ±Ï ÎµÎ¯ÎœÎ±Î¹:"
Index: /tags/2.00/lib/Epoll/I18N/es.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/es.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/es.po	(revision 478)
@@ -0,0 +1,1118 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2011-01-24 16:36-0300\n"
+"Last-Translator: Diego Bello <dbello@gmail.com>\n"
+"Language-Team: Spanish <mageia-i18n@mageia.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"D\", \"L\", \"M\", \"M\", \"J\", \"V\", \"S\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "el 1% de los votos que se describen en esta encuesta"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "Tiene que hacerse el 1% de la elecciÃ³n"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "el 1% de posibles elecciones"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Un resumen se ha enviado por correo"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "Acerca de esta encuesta"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "MayorÃ­a absoluta"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "Acceso a la administraciÃ³n de la encuesta:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "AÃ±adir"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "AÃ±adir una opciÃ³n"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "AÃ±adir un votante"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Administrar"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "AdministraciÃ³n"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Administrador de entradas"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Un correo electrÃ³nico se ha enviado al 1%"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Un correo electrÃ³nico se ha enviado al 1%, siga las instrucciones \n"
+"para completar la creaciÃ³n de la encuesta"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "Abril"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "Abril"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "En la URL"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "Agosto"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "Agosto"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "VotaciÃ³n"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Votos"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "Recuento de votos"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Listado de votos:"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Votos:"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Base DN:"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "Archivo CSV"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "No se puede modificar una encuesta en marcha o terminada"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "No se puede enviar un correo electrÃ³nico:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Cambiar idioma"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Cerrado"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "Confirmar la creaciÃ³n de una nueva encuesta"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "Confirme su voto"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "No se pudo enviar el resultado por correo:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "Crear una nueva encuesta"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "DD/MM/YYYY HH:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "Fecha"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "El formato de la fecha es"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Fechas"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "Diciembre"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "Diciembre"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "Desencriptar los votos"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Anular"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Anular los votos"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Anular este voto"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "DescripciÃ³n:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Nombre para mostrar los atributos:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "No encriptar el voto"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "No enviar el recibo por correo electrÃ³nico"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "No mostrar la identidad del voto tras la encuesta"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Descargar la clave privada"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Dummy"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "Elegido"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "Correo electrÃ³nico"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "DirecciÃ³n de correo electrÃ³nico:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "Atributos del correo electrÃ³nico:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "El correo electrÃ³nico incluye la identificaciÃ³n del voto"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "Lenguaje del correo electrÃ³nico"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "Voto en blanco"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "Voto en blanco"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "Encuesta encriptada"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Introduzca aquÃ­ la contraseÃ±a"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Introduzca aquÃ­ la contraseÃ±a del administrador"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "Introduzca la clave de la encuesta aqui:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "Escriba la contraseÃ±a de la encuesta"
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "Introduzca el ID de la solicitud recibida por correo electrÃ³nico "
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr ""
+"Ingrese su direcciÃ³n de correo electrÃ³nico para recibir un listado de sus "
+"encuestas"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Error:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Febrero"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Febrero"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Libre elecciÃ³n"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "Viernes"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "Desde la lista de votantes"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Hola,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "Id"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "Importar la lista de votantes..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Importar la lista"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"Usuario/contraseÃ±a no vÃ¡lidos, Â¿EstÃ¡ seguro\n"
+"de que puede participar en esta encuesta?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "ContraseÃ±a no vÃ¡lida para este sitio web:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Enero"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "Enero"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "Julio"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "Julio"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "Junio"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "Junio"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr "Guarde esta informaciÃ³n en un lugar seguro, no se le reenviarÃ¡"
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Leyenda:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "LÃ­nea nÂ°"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Lista de votantes"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Entrada"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "Correo:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Correo@dominio;nombre"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "Marzo"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "Marzo"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "Mayo"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "Minimizar"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Modifique mi voto"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "Lunes"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "Mis votos:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Nombre:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Nueva solicitud de encuesta"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "No se realizaron elecciones"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "No hay solicitud para la creaciÃ³n de la encuesta"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "No hay encuestas ejecutÃ¡ndose"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "No hay resultados"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "No se suscribieron votantes"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "No se ha encontrado ninguna solicitud"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "No mostrar los votantes"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "No estÃ¡n elegidos"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "Noviembre"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "Noviembre"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "NÃºmero"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "NÃºmero de opciones para guardar:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "NÃºmero de votos en blanco"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "NÃºmero de campos de entrada libre:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "NÃºmero de votos nulos"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "NÃºmero de personas, que se eligieron de la lista de votantes"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "NÃºmero de posibles opciones"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "NÃºmero de votos"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "Octubre"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "Octubre"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "Uno o mÃ¡s valores se duplicaron:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Solo"
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "PÃ¡gina que se generÃ³ al 1%"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "Participad"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "ParticipaciÃ³n"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "ContraseÃ±a"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "ContraseÃ±a de este voto:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "ContraseÃ±a:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "Por favor, identifÃ­quese para participar en esta encuesta"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "PÃ³ngase en contacto con el administrador del sistema"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "Por favor, confirme la anulaciÃ³n del voto"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "Por favor, confirme la eliminaciÃ³n del 1% de la encuesta "
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "El Administrador de la encuesta debe confirmar algunos votos"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+"La fecha de la encuesta se debe establecer antes de comunicÃ¡rsela a los "
+"votantes"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "Fin de la encuesta:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "La encuesta se estÃ¡ ejecutando"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Nombre de la encuesta:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "La encuesta estÃ¡ abierta"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Recordatorio de peticiÃ³n de la encuesta"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "Comienza la encuesta:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "NÃºmero posible de personas que se eligen"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "Vista previa a la votaciÃ³n"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "Saludos"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "Informe en formato PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Resultado en formato PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Los resultados no se publicaron todavÃ­a"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Los resultados estarÃ¡n disponibles"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Los resultados estarÃ¡n disponibles aquÃ­"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Resultados:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Reglas:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "SÃ¡bado"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Guardar"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "PuntuaciÃ³n:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Nos vemos pronto!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Enviar contraseÃ±a"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "Enviar contraseÃ±a a los votantes"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Septiembre"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "Septiembre"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "RegÃ­strese"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "ContraseÃ±a del sitio web:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "Algunos votos se necesitan confirmar"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Estado"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "Domingo"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "Resultados provisionales"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "Gracias"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "El nÃºmero de votos no coincide con el nÃºmero de votantes"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "La encuesta finaliza antes de empezar"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "El inicio de la encuesta se aplaza"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Esta acciÃ³n no se puede revertir"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "Finaliza la encuesta"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Esta encuesta aÃºn no estÃ¡ abierta"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "La encuesta ya estÃ¡ finalizada,los resultados estÃ¡n disponibles"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"Esto eliminarÃ¡ por completo todos los datos de esta encuesta\n"
+"(configuraciÃ³n, lista de electores, papeletas)."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"Esto va a eliminar los datos dudosos de la base de datos y los resultados "
+"finalmente\n"
+" se calcularÃ¡n. Tenga en cuenta que los votantes no podrÃ¡n ver mÃ¡s su voto"
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "Jueves"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Para confirmar la solicitud, por favor vaya a"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "Hoy"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "Martes"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "Atributos UID:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "Uri:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Utilizar la autenticidad externa"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "comprobar"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "ComprobaciÃ³n"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "Voto"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "La confirmaciÃ³n del voto:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "Votante"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "Votantes"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "InvitaciÃ³n para votar"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Sistema de votaciÃ³n por web"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "MiÃ©rcoles"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Bienvenido"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr "Anotese si desea comprobar esto al final de la encuesta"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Si, anule este voto"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"Usted es el 1%, su direcciÃ³n IP (2%) se registrÃ³ tambiÃ©n\n"
+"(independientemente de la votaciÃ³n)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "EstÃ¡ invitado a participar en esta encuesta"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "Usted estÃ¡ en la lista como votante en estas encuestas"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "Es el administrador de estas encuestas"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "Puede"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "Puede elegir una contraseÃ±a para proteger la clave:"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "Puede introducir aquÃ­ el cÃ³digo de solicitud"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Ya no tiene mÃ¡s encuestas"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "Ha participado en la encuesta:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "Debe de indicar una fecha de inicio y de finalizaciÃ³n"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Es preciso seleccionar el 1% de las opciones"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr ""
+"Ha pedido que se le recuerde la encuesta (s)en la que estÃ¡ participando "
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "Acaba de entregar su voto"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "Ha solicitado la creaciÃ³n de una nueva encuesta"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Su voto ID"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Su direccion de correo electrÃ³nico:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Su entrada es"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Su contraseÃ±a es"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Su voto:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Su nÃºmero de solicitud es"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "No podrÃ¡ cambiar su voto despuÃ©s de validarlo"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Su voto sÃ³lo se registrarÃ¡ despuÃ©s de la validaciÃ³n"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "administrar"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "En esta encuesta ya ha participado el 1%"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "Papeletas que contienen:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "papeletas"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "papeletas que se encontraron"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "calendario"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "elegir"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "comentario"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "fecha (=> ver como)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "fecha:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "anular"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "anular la papeleta"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "para el 1% de los elegidos"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "formato:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "ha votado"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "aquÃ­"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "Si quieres votar por mÃ¡s de una persona"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "importar..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "valor de entrada"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "invalida"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "es vÃ¡lida"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "no es vÃ¡lida"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "lista de votos:"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "mapa de valoraciÃ³n de votos"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "debe de verse como"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "Se debe de validar"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "Se necesita una validaciÃ³n"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "no desde la lista"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "nÃºmero"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "enviar contraseÃ±a"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "posibilidad de escoger"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "publicaciÃ³n de resultados"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "funcionando"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "selecciÃ³n"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "finalizado"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "tiempo:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "a"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "Llegar"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "vÃ¡lido"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "vote aquÃ­"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "Lista de votantes"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "su id de voto es:"
Index: /tags/2.00/lib/Epoll/I18N/et.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/et.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/et.po	(revision 478)
@@ -0,0 +1,1115 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Marek Laane <bald@smail.ee>, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2011-01-01 19:39+0200\n"
+"Last-Translator: Marek Laane <bald@smail.ee>\n"
+"Language-Team: Estonian <kde-et@linux.ee>\n"
+"Language: etX-Generator: Lokalize 1.2\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.2\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "Selles hÃ€Ã€letuses on lahti krÃŒptida %1 hÃ€Ã€lt"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "%1 valikut tuleb teha"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 vÃµimalikku valikut"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "KokkuvÃµttekiri on teele saadetud"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "Teave hÃ€Ã€letuse kohta"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "Absoluutne enamus"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "LigipÃ€Ã€s hÃ€Ã€letuse haldamisele:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "Lisa"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Valiku lisamine"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "HÃ€Ã€letaja lisamine"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Haldus"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "Haldamine"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Halduri sisselogimine"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Kiri saadeti aadressile %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Kiri saadeti aadressile %1. Palun jÃ€rgige selle juhiseid,\n"
+"kuidas luua hÃ€Ã€letus"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "Apr."
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "Aprill"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "URL"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "Aug."
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "August"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "HÃ€Ã€letamine"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "HÃ€Ã€led"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "HÃ€Ã€lte arv"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "HÃ€Ã€lte loend:"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "HÃ€Ã€led:"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Baas DN:"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "CSV-fail"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "KÃ€imasolevat vÃµi lÃµpetatud hÃ€Ã€letust ei saa muuta"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "E-kirja saatmine nurjus:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Muuda keelt"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Sulge"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "Uue hÃ€Ã€letuse loomise kinnitamine"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "Oma hÃ€Ã€le kinnitamine"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "KokkuvÃµttekirja saatmine nurjus:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "Uue hÃ€Ã€letuse loomine"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "DD.MM.YYYY HH:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "KuupÃ€ev"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "KuupÃ€eva vorming on"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "KuupÃ€evad"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "Dets."
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "Detsember"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "KrÃŒpti hÃ€Ã€led lahti"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Kustuta"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "HÃ€Ã€lte kustutamine"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "HÃ€Ã€letuse kustutamine"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Kirjeldus:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Eraldusnime atribuudid:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Ãra krÃŒpti hÃ€Ã€li"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "Kirjalikku kutset ei saadeta"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Antud hÃ€Ã€le ID-d pÃ€rast hÃ€Ã€letust ei nÃ€idata"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Laadi alla privaatvÃµti"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Fiktiivne"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "Valitud"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "E-post"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "E-posti aadress:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "E-kirja atribuudid:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "Kiri sisaldab antud hÃ€Ã€le ID-d"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "E-kirja keel"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "TÃŒhi hÃ€Ã€l"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "TÃŒhi hÃ€Ã€l"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "KrÃŒpti hÃ€Ã€letus"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Sisestage siia parooli vihje"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Sisestage hÃ€Ã€letuse haldamise parool"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "HÃ€Ã€letuse vÃµti:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "HÃ€Ã€letuse parool: "
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "Sisestage kirja teel saadud soovi ID"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr "Sisestage e-posti aadress, kuhu saadetakse teie hÃ€Ã€letuste nimekiri"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Viga:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Veebr."
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Veebruar"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Vaba valik"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "Reede"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "HÃ€Ã€letajate nimekirjast"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Tere,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "ID"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "HÃ€Ã€letajate nimekirja import..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Impordi see nimekiri"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"Vigane kasutajatunnus vÃµi parool. Kas olete\n"
+"kindel, et vÃµite ikka sel hÃ€Ã€letusel osaleda?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "Vigane saidi parool:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Jaan."
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "Jaanuar"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "Juuli"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "Juuli"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "Juuni"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "Juuni"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr "SÃ€ilitage see teave turvalises kohas, seda ei saadeta teile rohkem."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Legend:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "Rida nÂ°"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "HÃ€Ã€letajate loend"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Sisselogimine"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "E-post:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "e-post@domeen;nimi"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "MÃ€rts"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "MÃ€rts"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "Mai"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "Minimeeri"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Muuda antud hÃ€Ã€lt"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "EsmaspÃ€ev"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "Minu hÃ€Ã€letused:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Nimi:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Uue hÃ€Ã€letuse soov"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "Ãhtegi valikut ei ole tehtud"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "HÃ€Ã€letuse loomise soov puudub"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Praegu ei kÃ€i ÃŒkski hÃ€Ã€letus"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "Tulemusi pole"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Registreeritud hÃ€Ã€letajaid pole"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "Sellist soovi ei leitud"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "Pole ÃŒhtegi hÃ€Ã€letajat nÃ€idata"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "Ei valitud"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "Nov."
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "November"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "Arv"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "Arvestatavate valikute arv:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "TÃŒhjade hÃ€Ã€lte arv"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "Vaba sisestuse vÃ€ljade arv:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "Nullitud hÃ€Ã€lte arv"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "HÃ€Ã€letajate loendist vÃµetavate valitavate inimeste arv"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "VÃµimalike valikute arv"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "HÃ€Ã€lte arv"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "Okt."
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "Oktoober"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "VÃ€hemalt ÃŒks vÃ€Ã€rtus on topelt:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Ainult "
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "LehekÃŒlg loodi %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "Osales"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Osalemine"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "Parool"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "HÃ€Ã€letuse parool:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "Parool:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "Palun autentige ennast hÃ€Ã€letusel osalemiseks"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "Palun vÃµtke ÃŒhendust sÃŒsteemiadministraatoriga"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "Palun kinnitage hÃ€Ã€letuse kustutamine"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "Palun kinnitage hÃ€Ã€letuse %1 kustutamine"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "HÃ€Ã€letuse haldur peab valideerima mÃµned hÃ€Ã€led"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+"Enne kui teatada hÃ€Ã€letajatele hÃ€Ã€letusest, peab olema mÃ€Ã€ratud selle kuupÃ€ev"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "HÃ€Ã€letuse lÃµpp:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "HÃ€Ã€letamine kÃ€ib praegu"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "HÃ€Ã€letuse nimi:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "HÃ€Ã€letamine on avatud alates"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "HÃ€Ã€letuse soovi meeldetuletus"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "HÃ€Ã€letuse algus:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "VÃµimalike valitavate inimeste arv"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "HÃ€Ã€letuse eelvaade"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "TÃ€name"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "Aruanne PDF-ina"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Tulemused PDF-ina"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Tulemusi ei ole veel avaldatud"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Tulemused tehakse avalikuks"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Tulemused tehakse avalikuks siin"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Tulemused:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Reeglid:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "LaupÃ€ev"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Salvesta"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "Tulemus:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Kohtume peagi!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Saada parool"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "Parooli saatmine hÃ€Ã€letajatele"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Sept."
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "September"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "MÃ€rge"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "Saidi parool:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "MÃµned hÃ€Ã€led tuleb valideerida"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Olek"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "PÃŒhapÃ€ev"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "Esialgsed tulemused"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "TÃ€name teid"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "Antud hÃ€Ã€lte arv ei vasta hÃ€Ã€letajate arvule"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "HÃ€Ã€letuse lÃµpp on enne algust"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "HÃ€Ã€letuse algus peab olema tulevikus"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Seda toimingut ei saa tagasi vÃµtta"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "See hÃ€Ã€letus lÃµpeb"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "HÃ€Ã€letus pole veel alanud"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "HÃ€Ã€letus on lÃ€bi, tulemused on nÃŒÃŒd saadaval"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"See kustutab tÃ€ielikult kÃµik hÃ€Ã€letuse andmed (seadistus,\n"
+"hÃ€Ã€letajate loend, antud hÃ€Ã€led)"
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"See kustutab andmebaasist tundlikud andmed, mille jÃ€rel arvutatakse\n"
+"vÃ€lja lÃµplikud tulemused. Pange tÃ€hele, et hÃ€Ã€letajad ei saa enam\n"
+"kontrollida enda antud hÃ€Ã€li"
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "NeljapÃ€ev"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Soovi valideerimiseks minge palun aadressile"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "TÃ€na"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "TeisipÃ€ev"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "UID atribuudid:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "URI:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "VÃ€lise autentimise kasutamine"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "Valideeri"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "Valideerimine"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "HÃ€Ã€leta"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "HÃ€Ã€letamise kinnitus:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "HÃ€Ã€letaja"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "HÃ€Ã€letajad"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Kutse hÃ€Ã€letusele"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "VeebihÃ€Ã€letussÃŒsteem"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "KolmapÃ€ev"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Tere tulemast"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr "Kirjutage see ÃŒles, kui soovite seda hÃ€Ã€letuse lÃµppedes kontrollida"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Jah, kustuta see hÃ€Ã€letus"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"Te olete %1, teie IP aadress (%2) salvestatakse samuti\n"
+"(eraldi antud hÃ€Ã€lest)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "Olete kutsutud osalema hÃ€Ã€letusel"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "Te olete hÃ€Ã€letajana kirjas jÃ€rgmistel hÃ€Ã€letustel"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "Olete nende hÃ€Ã€letuste haldur"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "Te vÃµite"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "VÃµite valida paroolifraasi vÃµtme kaitsmiseks:"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "VÃµite sisestada siia oma soovi koodi"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Teie nimel pole ÃŒhtegi hÃ€Ã€letust"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "Te osalesite Ã€sja hÃ€Ã€letusel:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "MÃ€Ã€rata tuleb alguse ja lÃµpu kuupÃ€ev"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Teil tuleb valida %1 valikut"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "Te saate oma hÃ€Ã€le anda ajavahemikus"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr "Soovisite meeldetuletust hÃ€Ã€letuste kohta, millel osalete"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "Andsite Ã€sja oma hÃ€Ã€le"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "Soovisite luua uue hÃ€Ã€letuse"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Teie antud hÃ€Ã€le ID"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Teie e-posti aadress:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Teie kasutajatunnus on"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Teie parool on"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Teie hÃ€Ã€letus:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Teie soovi ID on"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Teie hÃ€Ã€l loetakse lÃµplikuks pÃ€rast valideerimist"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Teie hÃ€Ã€l registreeritakse alles pÃ€rast valideerimist"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "Haldus"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "juba osales sel hÃ€Ã€letusel %1"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "antud hÃ€Ã€l sisaldab:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "hÃ€Ã€led"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "leitud"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "kalender"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "Valik"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "Kommentaar"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "Kandidaat (=> kÃ€sitleti kui)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "KuupÃ€ev:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "Kustuta"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "kustuta hÃ€Ã€l"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "%1 valimiseks"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "Vorming:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "HÃ€Ã€letanud"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "siin"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "kui soovite hÃ€Ã€letada rohkem kui ÃŒhe inimese poolt"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "Impordi..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "SisendvÃ€Ã€rtus"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "pole kehtiv"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "on kehtiv"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "pole kehtiv"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "hÃ€Ã€lte loend:"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "HÃ€Ã€lte vÃ€Ã€rtuse seostamine"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "KÃ€sitletakse kui"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "tuleb valideerida"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "vajab valideerimist"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "nimekirjavÃ€line"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "Number"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "Parool saadetud"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "vÃµimalikud valikud"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "Avalda tulemused"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "kÃ€ib"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "Vali"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "lÃ€bi"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "Kellaaeg:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "kuni"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "seisab ees"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "kehtiv"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "hÃ€Ã€letada siin"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "hÃ€Ã€letajate loend"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "teie antud hÃ€Ã€le ID on:"
Index: /tags/2.00/lib/Epoll/I18N/fr.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/fr.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/fr.po	(revision 478)
@@ -0,0 +1,1117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Jean Peyratout <jean.peyratout@abul.org>, 2011.
+# Olivier Thauvin <nanardon@zarb.org>, 2010.
+# Michael Scherer <misc@zarb.org>, 2010.
+# Marianne Lombard <jehane@tuxette.fr>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2011-01-02 19:15+0100\n"
+"Last-Translator: Jean Peyratout <jean.peyratout@abul.org>\n"
+"Language-Team: French <mageia-i18n@mageia.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"D\", \"L\", \"M\", \"M\", \"J\", \"V\", \"S\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 bulletins Ã  dÃ©chiffrer dans ce scrutin"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "%1 choix doit(vent) Ãªtre fait(s)"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 choix possibles"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Un courriel de rÃ©sumÃ© a Ã©tÃ© envoyÃ©"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "Ã propos de ce scrutin"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "MajoritÃ© absolue"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "AccÃšs Ã  l'administration du scrutin : "
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "Ajouter"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Ajouter un choix"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "Ajouter un votant"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Administrer"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "Administration"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Login administrateur"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Un courriel a Ã©tÃ© envoyÃ© Ã  %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Un courriel a Ã©tÃ© envoyÃ© Ã  %1, suivre les instructions pour\n"
+"achever la crÃ©ation du scrutin"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "avr"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "avril"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "Ã  l'adresse"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "aou"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "aoÃ»t"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "Bulletin"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Bulletins"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "DÃ©compte des bulletins"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Liste des bulletins :"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Bulletins :"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Base DN :"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "fichier CSV"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "Impossible de modifier un scrutin en cours ou terminÃ©"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "Impossible d'envoyer un courriel :"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Modifier la langue"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Fermer"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "Confirmer la crÃ©ation d'un nouveau scrutin"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "Confirmer votre vote"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "Impossible d'envoyer le courriel de rÃ©sumÃ© :"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "CrÃ©er un nouveau scrutin"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "JJ/MM/AAAA HH:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "Date"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Le format de date est"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Dates"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "dÃ©c"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "dÃ©cembre"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "DÃ©chiffrer bulletins"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Effacer"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Effacer les bulletins"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Effacer ce scrutin"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Description :"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Afficher les attributs du nom :"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Ne pas chiffrer les bulletins"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "Ne pas envoyer d'accusÃ© de rÃ©ception par courriel"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Ne pas montrer l'identifiant du bulletin aprÃšs le vote"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "TÃ©lÃ©charger la clÃ© privÃ©e"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Simple"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "Ãlu(e)"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "Courriel"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "Adresse courriel"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "Attributs du courriel :"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "Le courriel inclut l'identifiant de bulletin"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "Langue du courriel"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "Bulletin vide"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "Bulletin vide"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "Chiffrer le scrutin"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Saisissez ici une aide pour le mot de passe"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Entrer le mot de passe d'administration pour ce scrutin"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "Entrer ici la clÃ© du scrutin :"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "Entrer le mot de passe du scrutin : "
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "Entrer l'identifiant que vous avez reÃ§u par courriel"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr "Votre adresse courriel pour recevoir une liste de vos scrutins"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Erreur :"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "fÃ©v"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "fÃ©vrier"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Choix libre"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "vendredi"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "De la liste des votants"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Bonjour,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "Identifiant"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "Importer la liste des votants..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Importer cette liste"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"Login ou mot de passe invalide. Ãtes-vous sÃ»r(e)\n"
+"d'Ãªtre autorisÃ©(e) Ã  participer Ã  ce scrutin ?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "Mot de passe invalide :"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "jan"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "janvier"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "jul"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "juillet"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "jun"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "juin"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr "Conservez cette information en lieu sÃ»r, elle ne sera pas rÃ©expÃ©diÃ©e."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "LÃ©gende :"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "Ligne nÂ°"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Liste des votants"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Login"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "Courriel :"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Courriel@domaine;Nom"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "mar"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "mars"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "mai"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "RÃ©duire"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Modifier mon vote"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "lundi"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "mes scrutins :"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Nom :"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Demande de nouveau scrutin"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "Aucun choix n'est fait"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "Pas de demande de crÃ©ation de scrutin"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Pas de scrutin en cours"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "Pas de rÃ©sultats"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Pas de votants inscrits"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "RequÃªte non trouvÃ©e"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "Pas de votants Ã  afficher"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "Non Ã©lu(e)"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "nov"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "novembre"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "NumÃ©ro"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "Nombre de choix Ã  conserver :"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "Nombre de bulletins vides"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "Nombre de champ de saisie libre :"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "Nombre de bulletins nuls"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "Nombre de personnes Ã  Ã©lire, issues de la liste des votants"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "Nombre de choix possibles"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "Nombre de votes"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "oct"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "octobre"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "Une ou plusieurs valeurs dupliquÃ©es"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Seulement"
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "Page gÃ©nÃ©rÃ©e le %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "ont participÃ©"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Participation"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "Mot de passe"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "Mot de passe de ce scrutin :"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "S'il vous plaÃ®t, authentifiez-vous pour participer Ã  ce scrutin"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "S'il vous plaÃ®t, contacter votre administrateur systÃšme"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "S'il vous plaÃ®t, confirmer l'effacement du bulletin"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "S'il vous plaÃ®t, confirmer l'effacement du scrutin %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "L'administrateur du scrutin doit valider certains bulletins"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr "La date du scrutin doit Ãªtre fixÃ©e avant son annonce aux votants"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "Fin du vote :"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "Vote en cours"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Nom du scrutin :"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "Vote ouvert de"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Rappel de demande de vote"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "DÃ©but du vote :"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "Nombre possible de personnes Ã  Ã©lire"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "PrÃ©visualisation du bulletin"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "Cordialement,"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "Rapport au format PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "RÃ©sultat au format PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Les rÃ©sultats n'ont pas encore Ã©tÃ© publiÃ©s"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Les rÃ©sultats seront disponibles"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Les rÃ©sultats seront disponibles ici"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "RÃ©sultats :"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "RÃšglement :"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "samedi"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Enregistrer"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "Score :"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Ã bientÃŽt !"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Envoyer le mot de passe"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "Envoyer le mot de passe aux votants"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "sep"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "septembre"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "Ãmargement"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "Mot de passe :"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "Quelques bulletins doivent Ãªtre validÃ©s"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Statut"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "dimanche"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "RÃ©sultats temporaires"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "Merci"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "Le nombre de bulletins et le nombre de votants ne correspondent pas"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "Le scrutin se termine avant de commencer"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "Le dÃ©but du scrutin doit Ãªtre choisi dans le futur"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Cette action est irrÃ©versible"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "Ce scrutin est terminÃ©"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Ce scrutin n'est pas encore commencÃ©"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "Ce scrutin est terminÃ©, les rÃ©sultats sont disponibles"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"Toutes les donnÃ©es concernant ce scrutin seront effacÃ©es\n"
+"(configuration, liste des votants, bulletins)."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"Des donnÃ©es sensibles relatives au vote vont Ãªtre effacÃ©es de la base\n"
+"de donnÃ©es et les rÃ©sultats seront calculÃ©s dÃ©finitivement. Notez que\n"
+"les votants ne seront plus alors en mesure de vÃ©rifier leurs bulletins."
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "jeudi"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Pour valider la requÃªte, aller Ã "
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "mardi"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "attributs UID :"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "Uri:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Utiliser une authentification externe"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "Valider"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "Validation"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "Vote"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "Confirmation du vote :"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "Votant"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "Votants"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Invitation Ã  voter"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "SystÃšme de vote en ligne"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "mercredi"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Bienvenue"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr "Notez-le si vous voulez pouvoir vÃ©rifier aprÃšs le scrutin"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Oui, effacer ce scrutin"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"Vous Ãªtes %1, votre adresse IP (%2) sera aussi enregistrÃ©e\n"
+"(indÃ©pendamment du bulletin de vote)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "Vous Ãªtes invitÃ©(e) Ã  participer Ã  ce scrutin"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "Vous Ãªtes votant(e) pour ces scrutins"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "Vous Ãªtes l'administrateur de ces scrutins"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "Vous pouvez"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "Vous pouvez choisir une passphrase pour protÃ©ger la clÃ© :"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "Vous pouvez entrer ici le code de requÃªte"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Vous n'avez pas de scrutin"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "Vous avez dÃ©jÃ  participÃ© Ã  ce scrutin :"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "Vous devez dÃ©finr une date de dÃ©but et de fin"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Vous devez sÃ©lectionner %1 choix"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "Vous pourrez voter depuis"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr ""
+"Vous avez demandÃ© un rappel concernant les votes auxquels vous participez"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "Vous avez soumis votre bulletin"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "Vous avez demandÃ© la crÃ©ation d'un nouveau scrutin"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "L'identifiant de votre bulletin"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Votre adresse courriel :"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Votre login est"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Votre mot de passe est "
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Votre scrutin :"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "L'identifiant de votre requÃªte est "
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Votre vote sera dÃ©finitif aprÃšs validation"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Votre vote ne sera enregistrÃ© qu'aprÃšs validation"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "administrer"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "a dÃ©jÃ  participÃ© au vote le %1"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "bulletin contenant :"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "bulletins"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "bulletins trouvÃ©s"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "calendrier"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "choix"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "commentaire"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "date (=> vu comme)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "date :"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "effacer"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "effacer bulletin"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "pour %1 Ã©lu(e)(s)"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "format :"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "a votÃ©"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "ici"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "si vous voulez voter pour plus d'une personne"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "importer..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "valeur saisie"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "invalide"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "est valide"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "n'est pas valide"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "liste des bulletins :"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "cartographier la valeur des bulletins"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "doit Ãªtre considÃ©rÃ© comme"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "doit Ãªtre validÃ©"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "doit Ãªtre validÃ©"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "pas dans la liste"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "nombre"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "mot de passe envoyÃ©"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "choix possibles"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "publier les rÃ©sultats"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "en cours"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "choisir"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "terminÃ©"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "heure :"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "jusqu'Ã "
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "Ã  venir"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "valide"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "voter ici"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "liste des votants"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "l'identifiant de votre bulletin est :"
Index: /tags/2.00/lib/Epoll/I18N/it.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/it.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/it.po	(revision 478)
@@ -0,0 +1,1127 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Marcello Anni <marcello.anni@alice.it>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2010-10-15 17:24+0200\n"
+"Last-Translator: Marcello Anni <marcello.anni@alice.it>\n"
+"Language-Team: Italian <mageia-i18n@mageia.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"D\", \"L\", \"M\", \"M\", \"G\", \"V\", \"S\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 voti da decifrare in questo sondaggio"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "dev'essere fatta %1 scelta"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 scelte possibili"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Ã stata inviata un'email riassuntiva"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "A proposito di questo sondaggio"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "PrioritÃ  assoluta"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "Accedi all'amministrazione del sondaggio:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "Aggiungi"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Aggiungi una scelta"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "Aggiungi un votante"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Amministra"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "Amministrazione"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Login amministratore"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Ã stata inviata un'email a %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Ã stata inviata un'email a %1, segui le istruzioni per completare\n"
+"la creazione del sondaggio"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "Apr"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "Aprile"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "All'URL"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "Ago"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "Agosto"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "Voto"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Voti"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "Conteggio voti"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Lista dei voti:"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Voti:"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Base DN:"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "File CSV"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "Impossibile modificare un sondaggio aperto o finito"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "Impossibile inviare un'email:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Cambia lingua"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Chiudi"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "Conferma la creazione di un nuovo sondaggio"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "Conferma il tuo voto"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "Impossibile inviare la mail riassuntiva:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "Crea un nuovo sondaggio"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "GG/MM/AAAA HH:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "Data"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Il formato della data Ãš"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Date"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "Dic"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "Dicembre"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "Decifra voti"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Cancella"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Cancella voti"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Cancella questo sondaggio"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Descrizione:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Mostra attributi del Nome:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Non cifrare il voto"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "Non inviare e-mail dopo il voto"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Non mostrare id del voto dopo il sondaggio"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Scarica chiave privata"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Prova"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "Eletto"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "E-mail"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "Indirizzo e-mail:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "Attributi dell'e-mail:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "L'e-mail include l'id del voto"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "Lingua e-mail"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "Voto bianco"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "Voto bianco"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "Cifra sondaggio"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Inserisci qua un suggerimento per la password"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Inserisci la password di amministrazione per questo sondaggio"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "Inserisci la password del sondaggio qua:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "Inserisci la password del sondaggio: "
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "Inserisci l'ID richiesto che hai ricevuto per e-mail"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr ""
+"Inserisci il tuo indirizzo e-mail per ricevere una lista dei tuo sondaggi"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Errore:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Feb"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Febbraio"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Scelta libera"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "VenerdÃ¬"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "Dalla lista dei votanti"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Ciao,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "Id"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "Importa la lista dei votanti..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Importa questa lista"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"Login/password non valida, sei sicuro che puoi\n"
+"partecipare a questo sondaggio?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "Password del sito non valida:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Gen"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "Gennaio"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "Lug"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "Luglio"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "Giu"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "Giugno"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"Tieni questa informazione in un posto sicuro, non ti verrÃ  inviata "
+"nuovamente."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Legenda:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "Riga nÂ°"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Lista dei votanti"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Accedi"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "E-mail:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "e-mail@dominio;Nome"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "Mar"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "Marzo"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "Maggio"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "Minimizza"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Modifica il mio voto"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "LunedÃ¬"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "I miei sondaggi:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Nome:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Nuova richiesta di sondaggio"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "Non Ãš stata fatta alcuna scelta"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "Nessuna richiesta di creazione di un sondaggio"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Nessun sondaggio attualmente attivo"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "Nessun risultato"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Nessun votante iscritto"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "Non Ãš stata trovata la richiesta di questo tipo"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "Nessun votante da mostrare"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "Non eletto"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "Nov"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "Novembre"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "Numero"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "Numero di scelte da ricordare:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "Numero di voti bianchi"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "Numero dei campi di input lasciati vuoti:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "Numero di voti nulli"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "Numero delle persone da eleggere, prese dalla lista dei votanti"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "Numero delle scelte possibili"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "Numero dei voti"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "Ott"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "Ottobre"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "no o piÃ¹ valori sono uguali:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Solo "
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "Pagina generata il %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "Partecipanti"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Partecipazione"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "Pssword"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "Password di questo sondaggio:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "Password:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "Autenticati per partecipare a questo sondaggio"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "Contatta il tuo amministratore di sistema"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "Conferma la cancellazione del tuo voto"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "Conferma la cancellazione del sondaggio %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "L'amministratore del sondaggio deve convalidare alcuni voti"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+"La data del sondaggio dev'essere impostata prima dell'annuncio del sondaggio "
+"ai votanti"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "Fine del sondaggio:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "Il sondaggio Ãš attualmente attivo"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Nome del sondaggio"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "Sondaggio aperto dal"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Promemoria richiesta del sondaggio"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "Inizio sondaggio:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "Numero possibile delle persone da eleggere"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "Anteprima voto"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "Saluti"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "Riporta in PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Risultati in PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "I risultati non sono ancora stati pubblicati"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "I risultati saranno disponibili"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "I risultati saranno disponibili qua"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Risultati:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Regole:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "Sabato"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Salva"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "Punteggio:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "A presto!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Invia password"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "Invia password ai votanti"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Set"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "Settembre"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "Accedi"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "Password del sito:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "Alcuni voti devono essere convalidati"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Stato"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "Domenica"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "Risultati temporanei"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "Grazie"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "Il numero dei voti non corrisponde al numero dei votanti"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "Il sondaggio finisce prima di iniziare"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "L'inizio del sondaggio dev'essere nel futuro"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Questa azione non puÃ² essere annullata"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "Questo sondaggio finisce"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Questo sondaggio non Ãš ancora aperto"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "Questo sondaggio Ãš finito, i risultati sono adesso disponibili"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"Questo farÃ  cancellare completamente tutti i dati relativi a questo "
+"sondaggio (configurazione,\n"
+"lista dei votanti, voti)."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"Questo farÃ  cancellare i dati sensibili dal database e i risultati verranno\n"
+"finalmente calcolati. Ricorda che i votanti non saranno piÃ¹ in grado di "
+"controllare i loro voti"
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "GiovedÃ¬"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Per convalidare la richiesta vai a"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "Oggi"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "MartedÃ¬"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "Attributi UID:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "Uri:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Usa autenticazione esterna"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "Convalida"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "Convalida"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "Vota"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "Conferma del voto:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "Votante"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "Votanti"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Invito al voto"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Sistema di voto sul web"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "MercoledÃ¬"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Benvenuto"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr "Scrivi se vuoi essere in grado di controllarlo alla fine del sondaggio"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Si, cancella questo sondaggio"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"Sei %1, verrÃ  registrato anche il tuo indirizzo IP (%2)\n"
+"(indipendentemente dal voto)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "Sei invitato a partecipare a questo sondaggio"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "Risulti come votante nella lista di questi sondaggi"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "Sei l'amministratore di questi sondaggi"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "Puoi"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "Puoi scegliere una chiave di cifratura per proteggere la password:"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "Puoi inserire il codice richiesto qua"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Non sei il creatore di nessun sondaggio"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "Hai appena partecipato al sondaggio:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "Devi definire una data di inizio e di fine"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Devi selezionare %1 scelte"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "Sarai in grado di inviare il tuo voto da"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr ""
+"Hai chiesto un promemoria relativo al sondaggio(i) a cui stai partecipando"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "Hai appena aggiunto il tuo voto"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "Hai richiesto di creare un nuovo sondaggio"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Il tuo ID del voto"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Il tuo indirizzo e-mail:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Il tuo login Ãš"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "La tua password Ãš"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Il tuo sondaggio:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Il tuo ID richiesto Ãš"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Il tuo voto diventerÃ  finale dopo la convalida"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Il tuo voto verrÃ  registrato solo dopo la convalida"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "Amministra"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "%1 ha giÃ  partecipato a questo sondaggio"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "Voto contenente:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "Voti"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "Voti trovati"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "Calendario"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "Scelta"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "Commento"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "Data (=> vedi come)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "Data:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "Cancella"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "Cancella voto"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "Eletto per %1"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "Formato:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "ha votato"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "Qua"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "Se vuoi votare per piÃ¹ di una persona"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "Importa..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "Valore di input"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "Invalido"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "Ã valido"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "Non Ãš valido"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "Mostra voti:"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "Associa un valore al voto"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "Deve essere visto come"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "Deve essere convalidato"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "Ha bisogno della convalida"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "Non della lista"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "Numero"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "Password inviata"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "Scelte possibili"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "Pubblica risultati"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "Attivo"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "Seleziona"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "Terminato"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "Ora:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr " a"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "A breve"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "Valido"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "votare qua"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "Lista dei votanti"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "Il tuo id di voto Ãš:"
+
+#~ msgid "%1 choice(s) has/have to be done"
+#~ msgstr "deve(devono) essere fatta(e) %1 scelta(e)"
+
+#~ msgid "%1 possible choices"
+#~ msgstr "%1 scelte possibili"
Index: /tags/2.00/lib/Epoll/I18N/messages.pot
===================================================================
--- /tags/2.00/lib/Epoll/I18N/messages.pot	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/messages.pot	(revision 478)
@@ -0,0 +1,1085 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr ""
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr ""
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr ""
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr ""
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr ""
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr ""
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr ""
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr ""
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr ""
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228 lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293 lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr ""
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr ""
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr ""
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr ""
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr ""
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr ""
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr ""
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr ""
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr ""
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:13 root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr ""
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr ""
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr ""
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr ""
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr ""
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr ""
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr ""
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr ""
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28 root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr ""
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr ""
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr ""
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr ""
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr ""
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr ""
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr ""
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15 root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57 root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr ""
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr ""
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr ""
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr ""
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr ""
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:10 root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr ""
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr ""
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr ""
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr ""
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr ""
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr ""
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:72
+msgid "Empty ballots"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr ""
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr ""
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr ""
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr ""
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr ""
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr ""
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr ""
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr ""
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr ""
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr ""
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr ""
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr ""
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr ""
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr ""
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr ""
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr ""
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr ""
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:16 root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr ""
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr ""
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr ""
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr ""
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr ""
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr ""
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr ""
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr ""
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr ""
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr ""
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr ""
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:8 root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr ""
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr ""
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr ""
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr ""
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr ""
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr ""
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr ""
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr ""
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr ""
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr ""
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr ""
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr ""
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr ""
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr ""
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr ""
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr ""
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr ""
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr ""
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr ""
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr ""
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr ""
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr ""
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr ""
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr ""
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr ""
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr ""
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr ""
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr ""
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr ""
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr ""
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33 root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr ""
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr ""
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr ""
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr ""
+
+#: lib/Epoll/Controller/Ajax.pm:41 root/templates/admin/includes/poll_settings.tt:25 root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr ""
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr ""
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr ""
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr ""
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr ""
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr ""
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr ""
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr ""
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr ""
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr ""
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr ""
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr ""
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr ""
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr ""
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr ""
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr ""
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr ""
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr ""
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr ""
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr ""
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr ""
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr ""
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr ""
+
+#: root/templates/ballot/default.tt:43 root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr ""
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr ""
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr ""
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr ""
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr ""
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr ""
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr ""
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr ""
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr ""
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr ""
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr ""
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr ""
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr ""
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr ""
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr ""
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr ""
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr ""
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr ""
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr ""
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr ""
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr ""
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr ""
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr ""
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr ""
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr ""
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr ""
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr ""
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr ""
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr ""
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr ""
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr ""
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr ""
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr ""
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16 root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr ""
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr ""
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr ""
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17 root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr ""
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr ""
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr ""
+
+#: root/templates/admin/validate.tt:16 root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr ""
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr ""
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr ""
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr ""
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr ""
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr ""
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr ""
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr ""
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr ""
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr ""
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr ""
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr ""
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr ""
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr ""
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr ""
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr ""
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr ""
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr ""
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr ""
Index: /tags/2.00/lib/Epoll/I18N/nl.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/nl.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/nl.po	(revision 478)
@@ -0,0 +1,1129 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2010-10-17 10:33+0100\n"
+"Last-Translator: Remco Rijnders <remco@webconquest.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"Z\", \"M\", \"D\", \"W\", \"D\", \"V\", \"Z\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 stembiljetten om te ontsleutelen in deze verkiezing"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "%1 keuzes moeten gemaakt worden"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 mogelijke keuzes"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Een samenvattende e-mail is verstuurd"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "A propos de ce vote"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "Absolute Meerderheid"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "Toegang tot het beheren van de verkiezing:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "Voeg toe"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Voeg een keuze toe"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "Voeg een stemmer toe"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Administreren"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "Beheer"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Beheerder login"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Een e-mail is verstuurd aan %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Een e-mail is verstuurd aan %1. Volg de instructies in die e-mail om\n"
+"het opzetten van de verkiezing te completeren."
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "apr"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "april"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "Op URL"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "aug"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "augustus"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "Stembiljet"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Stembiljetten"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "Aantal stembiljetten"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Lijst met stembiljetten:"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Stembiljetten:"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Basis DN:"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "CSV bestand"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "Een lopende of afgesloten verkiezing kan niet aangepast worden"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "Kan geen e-mail versturen:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Verander taal"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Afsluiten"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "Bevestig nieuwe verkiezing"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "Bevestig uw stem"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "Kon geen samenvattende e-mail sturen:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "Maak een nieuwe verkiezing aan"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "DD/MM/JJJJ UU:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "Datum"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Het datumformaat is"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Datums"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "dec"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "december"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "Ontsleutel de stembiljetten"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Verwijder"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Verwijder stembiljetten"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Verwijder deze verkiezing"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Omschrijving:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr ""
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Versleutel de stembiljetten niet"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "Stuur geen bevestiging via e-mail"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Toon geen stembiljet-id na de verkiezing"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Download private sleutel"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "dummy"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "Verkozen"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "E-mail"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "E-mailadres:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "E-mail attributen:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "E-mail bevat stembiljet-id"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "E-mail taal"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "Blanco stembiljet"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "Blanco stembiljet"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "Versleutel verkiezing"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Geef hier een hint om het paswoord te onthouden"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Geef het beheerderspaswoord voor deze verkiezing"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "Geef hier de sleutel van de verkiezing:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "Geef hier het paswoord van de verkiezing:"
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "Geef het aanvraag-id dat u via e-mail ontvangen heeft"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr "Geef uw e-mailadres om een lijst met uw verkiezingen te ontvangen"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Fout:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "feb"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "februari"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Vrije keuze"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "vrijdag"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "Van de lijst met kiezers"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Hallo,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "Id"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "Importeer de lijst met kiezers..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Importeer deze lijst"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"Ongeldige login- en paswoordcombinatie. Weet u zeker\n"
+"dat u aan deze verkiezing kan deelnemen?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "Ongeldig paswoord voor de site:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "jan"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "januari"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "jul"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "juli"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "jun"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "juni"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"Bewaar deze informatie op een veilige plaats; Het zal niet nogmaals "
+"verstuurd worden."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Legenda:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "Regel"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Lijst met stemmers"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Inloggen"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "E-mail:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Mail@domein;Naam"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "maa"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "maart"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "mei"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "Minimaliseer"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Verander mijn stem"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "maandag"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "Mijn verkiezingen:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Naam:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Nieuwe verkiezing"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "Er is geen keuze gemaakt"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "Geen aanvraag voor het aanmaken van een verkiezing"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Er zijn op dit moment geen lopende verkiezingen"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "Geen resultaten"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Geen aangemelde kiezers"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "Geen dergelijke aanvraag gevonden"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "Geen kiezers om te tonen"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "Niet verkozen"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "nov"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "november"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "Aantal"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "Aantal te behouden keuzes:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "Aantal blanco stembiljetten:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "Aantal \"vrije tekst\"-invoervelden:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "Aantal blanco stemmen"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr ""
+"Het antal mensen dat verkozen kan worden wordt bepaald door de lijst met "
+"kiezers."
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "Aantal mogelijke keuzes"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "Aantal stemmen"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "okt"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "oktober"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "Een of meerdere waarden zijn duplicaten:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Alleen"
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "Pagina gegenereerd op %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "Meegedaan"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Deelname"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "Paswoord"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "Paswoord voor deze verkiezing:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "Paswoord:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "Authenticeert u zich alstublieft om aan deze verkiezing deel te nemen"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "Neemt u contact op met uw systeembeheerder"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "Bevestigt u alstublieft het verwijderen van dit stembiljet"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "Bevestigt u alstublieft het verwijderen van verkiezing %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "De beheerder van de verkiezing moet een aantal stembiljetten valideren"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+"U moet een verkiezingsdatum kiezen voordat de verkiezing aan de stemmers "
+"bekend kan worden gemaakt"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "Verkiezing eindigt:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "De verkiezing loopt op dit moment"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Naam van de verkiezing:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "Verkiezing start op"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Verkiezingsherinnering"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "Verkiezing start:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "Aantal personen dat gekozen kan worden"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "Bekijk stembiljet"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "Met vriendelijke groet"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "PDF-rapport"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Resultaten als PDF-bestand"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Uitslagen zijn nog niet gepubliceerd"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Uitslagen worden bekend gemaakt"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Uitslagen worden hier bekend gemaakt"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Uitslagen:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Regels:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "zaterdag"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Bewaar"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "Score:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Tot ziens!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Stuur paswoord"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "Stuur paswoord naar de kiezers"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "sep"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "september"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "Teken"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "Paswoord voor de site:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "Een aantal stembiljetten moeten gevalideerd worden"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Status"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "zondag"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "Voorlopige uitslagen"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "Bedankt"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "Het aantal uitgebrachte stemmen is niet gelijk aan het aantal kiezers"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "De einddatum van de verkiezing ligt voor de startdatum"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "De startdatum moet in de toekomst liggen"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Deze aktie kan niet ongedaan worden gemaakt"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "Deze verkiezing eindigt"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Deze verkiezing is nog niet gestart"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "Deze verkiezing is voorbij, de uitslagen zijn beschikbaar"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"Dit zal all data van deze verkiezing (configuratie, lijst met stemmers,\n"
+"stembiljetten) volledig verwijderen."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"Dit zal gevoelige informatie uit de database verwijderen en de resultaten\n"
+"zullen berekend worden. Let er op dat stemmers niet meer in staat zullen\n"
+"zijn om hun stembiljetten te controleren."
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "donderdag"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Om uw aanvraag te bevestigen, gaat u alstublieft naar"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "vandaag"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "dinsdag"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "UID attributen:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "URI:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Gebruik externe authenticatie"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "Bevestig"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "Validatie"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "Stem"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "Stembevestiging:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "Kiezer"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "Kiezers"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Stemuitnodiging"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Web-verkiezingssysteem"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "woensdag"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Welkom"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr ""
+"Schrijf het op indien u na afloop van de verkiezing de uitslag wenst te "
+"kunnen controleren"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Ja, verwijder deze verkiezing"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"U bent %1, uw IP-adres (%2) wordt ook geregistreerd\n"
+"(niet gezamenlijk met uw stembiljet)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "U bent uitgenodigd om aan deze verkiezing deel te nemen"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "U bent bekend als deelnemer aan deze verkiezingen"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "U bent de beheerder van deze verkiezingen"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "U kunt"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "U kunt een paswoord of zin kiezen om uw sleutel mee te beveiligen:"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "U kunt hier uw aanvraagcode geven"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "U bent niet de eigenaar van enige verkiezing(en)"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "U heeft zojuist meegedaan in de verkiezing:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "U moet een start- en einddatum opgeven"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "U moet %1 keuzes maken"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "U kunt uw stem indienen vanaf"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr ""
+"U heeft gevraagd om herinnerd te worden aan de verkiezing(en) waaraan u "
+"deelneemt"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "U heeft zojuist uw stembiljet ingediend"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "U heeft verzorgd een nieuwe verkiezing aan te maken"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Uw stembiljet-ID"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Uw e-mail adres:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Uw login is"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Uw paswoord is"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Uw verkiezing:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Uw verzoek-ID is"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Na bevestiging kan uw keuze niet meer veranderd worden"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Uw stem zal pas na bevestiging geregistreerd worden"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "beheer"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "u heeft al meegedaan in deze verkiezing op %1"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "stembiljet bevat:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "stembiljetten"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "gevonden stembiljetten"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "kalender"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "keuze"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "opmerking"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "datum (=> tonen als)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "datum:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "verwijder"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "verwijder stembiljet"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "voor %1 verkozen"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "formaat:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "heeft gestemd"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "hier"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "als u voor meer dan een persoon wilt kiezen"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "importeer..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "invoerwaarde"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "ongeldig"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "is geldig"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "is niet geldig"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "toon stembiljetten:"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr ""
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "moet gezien worden als"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "moet bevestigd worden"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "moet bevestigd worden"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "niet op de lijst"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "nummer"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "paswoord verstuurd"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "mogelijke keuzes"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "publiceer uitslagen"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "loopt"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "kies"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "afgebroken"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "tijd:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "tot"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "volgt"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "geldig"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "stem hier"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "kiezerslijst"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "uw stembiljet id is:"
+
+#~ msgid "%1 choice(s) has/have to be done"
+#~ msgstr "%1 keuze(s) moeten gemaakt worden"
+
+#~ msgid "%1 possible choices"
+#~ msgstr "%1 mogelijke keuzes"
Index: /tags/2.00/lib/Epoll/I18N/pl.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/pl.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/pl.po	(revision 478)
@@ -0,0 +1,1175 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Jerzy Trzeciak <artusek@wp.pl>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2010-12-26 23:25+0100\n"
+"Last-Translator: Jerzy Trzeciak <artusek@wp.pl>\n"
+"Language-Team: Polish <mageia-i18n@mageia.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.1\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"N\", \"P\", \"W\", \"Å\", \"C\", \"P\", \"S\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+# plural form required
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 kart do gÅosowania do odszyfrowania w tym gÅosowaniu"
+
+# plural form required
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "NaleÅŒy dokonaÄ %1 wyborÃ³w"
+
+# plural form required
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 moÅŒliwych wyborÃ³w"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "E-mail z pdsumowaniem zostaÅ wysÅany"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "O tym gÅosowaniu"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "WiÄkszoÅÄ absolutna"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "DostÄp do zarzÄ
+dzania gÅosowaniem:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "Dodaj"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Dodaj wybÃ³r"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "Dodaj gÅosujÄ
+cego"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "ZarzÄ
+dzaj"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "Administracja"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Login administratora"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Do %1 zostaÅ wysÅany e-mail"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Do %1 zostaÅ wysÅany e-mail z instrukcjami, jak dokoÅczyÄ utworzenie nowego "
+"glosowania"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "Kw"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "KwiecieÅ"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "Po adresem URL"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "Sie"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "SierpieÅ"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "Karta do gÅosowania"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Karty do gÅosowania"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "IloÅÄ kart do gÅosowania"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Lista kart do gÅosowania:"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Karty do gÅosowania:"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Podstawowy DN:"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "plik CSV"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "Nie moÅŒna modyfikowaÄ trwajÄ
+cego lub zakoÅczonego gÅosowania"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "E-mail nie moÅŒe zostaÄ wysÅany:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "ZmieÅ jÄzyk"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Zamknij"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "PotwierdÅº utworzenie nowego gÅosowania"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "PotwierdÅº swÃ³j gÅos"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "Nie moÅŒna wysÅaÄ wiadomoÅci z podsumowaniem:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "UtwÃ³rz nowe gÅosowanie"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "DD/MM/RRRR GG:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "Data"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Format daty"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Daty"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "Gru"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "GrudzieÅ"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "Odszyfruj karty do gÅosowania"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "UsuÅ"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "UsuÅ karty do gÅosowania"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "UsuÅ to gÅosowanie"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Opis:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "WyÅwietl atrybuty nazwy:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Nie szyfruj kart do gÅosowania"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "Nie wysyÅaj potwierdzenia przez e-mail"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Nie pokazuj identyfikatora karty do gÅosowania po gÅosowaniu"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Pobierz klucz prywatny"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Fikcyjny"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "Wybrany"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "E-mail"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "Adres e-mail:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "WÅaÅciwoÅci wiadomoÅci e-mail:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "E-mail zawiera identyfikator karty do gÅosowania"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "JÄzyk wiadomoÅci e-mail"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "Pusta karta do gÅosowania"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "Pusta karta do gÅosowania"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "Szyfruj gÅosowanie"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Podaj tutaj podpowiedÅº do hasÅa"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Podaj hasÅo administratora dla tego gÅosowania"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "Wstaw tutaj klucz do gÅosowania:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "Podaj hasÅo do gÅosowania: "
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "Podaj identyfikator ÅŒÄ
+dania otrzymany w wiadomoÅci e-mail"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr "Podaj swÃ³j adres e-mail w celu otrzymania listy swoich gÅosowaÅ "
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "BÅÄ
+d:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Lut"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Luty"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Wolny wybÃ³r"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "PiÄ
+tek"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "Z listy gÅosujÄ
+cych"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Witaj,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "Identyfikator"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "Importuj listÄ gÅosujÄ
+cych..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Importuj tÄ
+ listÄ"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"NieprawidÅowy login/hasÅo\n"
+"Czy na pewno moÅŒesz braÄ udziaÅ w tym gÅosowaniu?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "Niepoprawne hasÅo strony:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Sty"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "StyczeÅ"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "Lip"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "Lipiec"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "Cze"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "Czerwiec"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"Zachowaj tÄ
+ informacjÄ w bezpiecznym miejscu. Nie bÄdzie ona ponownie "
+"przesÅana."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Opis:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "Numer linii"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Lista gÅosujÄ
+cych"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Login"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "E-mail:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Mail@domena;Nazwa"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "Mar"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "Marzec"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "Maj"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "Minimalizuj"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Modyfikuj mÃ³j gÅos"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "PoniedziaÅek"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "Moje gÅosowania:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Å»Ä
+danie utworzenia nowego gÅosowania"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "Nie dokonano ÅŒadnego wyboru"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "Brak ÅŒÄ
+daÅ utworzenia nowych gÅosowaÅ"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Å»adne gÅosowanie nie jest aktualnie aktywne"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "Brak wynikÃ³w"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Brak zgÅoszonych gÅosujÄ
+cych"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "Å»Ä
+danie nie zostaÅo odnalezione"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "Brak gÅosujÄ
+cych do pokazania"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "Nie wybrano"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "Lis"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "Listopad"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "Liczba"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "Liczba wyborÃ³w do utrzymania:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "Liczba pustych kart do gÅosowania"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "Liczba pustych pÃ³Å wprowadzania:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "Liczba niewaÅŒnych kart do gÅosowania"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "Liczba wybieranych osÃ³b, pobrana z listy gÅosujÄ
+cych"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "Liczba mozliwych wyborÃ³w"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "Liczba gÅosÃ³w"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "Paz"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "PaÅºdziernik"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "Jedna lub wiÄcej wartoÅci zostaÅo powtÃ³rzonych:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Tylko "
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "Strona utworzona %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "UczestniczyÅ"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Uczestnictwo"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "HasÅo"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "HasÅo dla tego gÅosowania:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "HasÅo:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "ProszÄ dokonaÄ uwierzytelnienia w celu uczestniczenia w tym gÅosowaniu"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "ProszÄ skontaktowaÄ siÄ z administratorem systemu"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "ProszÄ potwierdziÄ usuniÄcie karty do gÅosowania"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "ProszÄ potwierdziÄ usuniÄcie gÅosowania %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "Administrator gÅosowania musi zatwierdziÄ niektÃ³re karty do gÅosowania"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr "DatÄ gÅosowania naleÅŒy okreÅliÄ przed powiadomieniem gÅosujÄ
+cych"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "ZakoÅczenie gÅosowania:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "GÅosowanie aktualnie trwa"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Nazwa gÅosowania:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "GÅosowanie rozpoczÄte od"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Przypomienie ÅŒÄ
+dania gÅosowania"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "PoczÄ
+tek gÅosowania:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "MoÅŒliwa liczba wybieranych osÃ³b"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "PodglÄ
+d karty do gÅosowania"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "Pozdrawiamy"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "Raport w PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Wyniki w PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Wyniki nie zostaÅy jeszcze opublikowane"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Wyniki bÄdÄ
+ dostÄpne"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Wyniki bÄdÄ
+ tutaj dostÄpne"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Wyniki:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Zasady:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "Sobota"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Zapisz"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "Wynik:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Do zobaczenia wkrÃ³tce!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "WyÅlij hasÅo"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "WyÅlij hasÅo do gÅosujÄ
+cych"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Wrz"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "WrzesieÅ"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "Podpis"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "HasÅo strony:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "NiektÃ³re karty do gÅosowania wymagajÄ
+ potwierdzenia"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Stan"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "Niedziela"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "Wyniki tymczasowe"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "DziÄkujemy"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "Liczba kart do gÅosowania nie jest zgodna z liczbÄ
+ gÅosujacych"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "Data zakoÅczenia jest wczeÅniejsz niÅŒ data rozpoczÄcia"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "RozpocÅŒecie glosowania musi byÄ okreÅlone z wyprzedzeniem"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Tej operacji nie moÅŒna cofnÄ
+Ä"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "To gÅosowanie koÅczy siÄ"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "To gÅosowanie jeszcze siÄ nie rozpoczÄÅo"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "To gÅosowanie jest zakonczone, wyniki sÄ
+ juÅŒ dostÄpne"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"ZostanÄ
+ usuniÄte wszystkie dane dotyczÄ
+ce tego gÅosowania (konfiguracja,\n"
+"lista gÅosujÄ
+cych, karty do gÅosowania)."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"ZostanÄ
+ usuniÄte istotne dane z bazy danych i wyniki zostanÄ
+ ostatecznie\n"
+"przetworzone. ZwrÃ³Ä uwagÄ, ÅŒe gÅosujÄ
+cy nie bedÄ
+ mogli juÅŒ sprawdziÄ swoich "
+"kart do gÅosowania"
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "Czwartek"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "W celu potwierdzenia ÅŒÄ
+dania przejdÅº do"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "Dzisiaj"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "Wtorek"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "Atrybuty UID:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "URI:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Zastosuj zewnÄtrzne uwierzytelnianie"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "PotwierdÅº"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "Potwierdzenie"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "GÅosuj"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "Potwierdzenie gÅosowania:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "GÅosujÄ
+cy"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "GÅosujÄ
+cy"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Zaproszenie do gÅosowania"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Internetowy system gÅosowania"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "Åroda"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Witamy"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr ""
+"Zapisz to, jeÅli chcesz mieÄ moÅŒliwoÅÄ sprawdzenia na koniec gÅosowania"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Tak, usun to gÅosowanie"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"%1, twÃ³j adres IP (%2) zostanie rÃ³wnieÅŒ zapisany\n"
+"(niezaleÅŒnie od karty do gÅosowania)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "OtrzymaÅeÅ zaproszenie do wziÄcia udziaÅu w tym gÅosowaniu"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "JesteÅ na liÅcie gÅosujÄ
+cych w tych gÅosowaniach"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "JesteÅ administratorem tych gÅosowaÅ"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "MoÅŒesz"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "MoÅŒesz wybraÄ hasÅo ochrony klucza:"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "Wstaw tutaj kod ÅŒÄ
+dania utworzenia gÅosowania"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Nie posiadasz ÅŒadnych swoich gÅosowaÅ"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "JuÅŒ uczestniczyÅeÅ (-aÅ) w gÅosowaniu:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "NaleÅŒy okreÅliÄ datÄ rozpoczÄcia i zakoÅczenia"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Musisz wybraÄ %1 razy"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "BÄdziesz mÃ³gÅ zgÅosiÄ swÃ³j gÅos z"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr ""
+"PoprosiÅeÅ o przesÅamie przypmnienia o gÅosowaniu (-ach), w ktÃ³rych "
+"uczestniczysz"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "ZgÅosiÅeÅ juÅŒ swojÄ
+ kartÄ do gÅosowania"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "ZaÅŒÄ
+daÅeÅ utworzenia nowego gÅosowania"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Identyfikator twojej karty do gÅosowania"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "TwÃ³j adres e-mail:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Twoja nazwa uÅŒytkownika"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Twoje hasÅo"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Twoje gÅosowanie:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "TwÃ³j identyfikator ÅŒÄ
+dania to"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "TwÃ³j gÅos bÄdzie waÅŒny po potwierdzeniu"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "TwÃ³j gÅos zostanie zarejestrowany wyÅÄ
+cznie po potwierdzeniu"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "zarzÄ
+dzaj"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "juÅŒ uczestniczyÅ w gÅosowaniu %1"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "karta do gÅosowania zawierajÄ
+ca:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "karty do gÅosowania"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "znalezione karty do gÅosowania"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "kalendarz"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "wybÃ³r"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "komentarz"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "data (=> widok jako)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "data:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "usuÅ"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "usuÅ kartÄ do gÅosowania"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "dla %1 wybranych"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "format:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "gÅosowaÅ"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "tutaj"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "jeÅŒeli chcesz gÅosowaÄ na wiÄcej niÅŒ jednÄ
+ osobÄ"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "importuj..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "wstaw wartoÅÄ"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "niepoprawny"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "jest poprawny"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "nie jest poprawny"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "listuj karty do gÅosowania:"
+
+#: root/templates/admin/validate.tt:75
+#, fuzzy
+msgid "map ballot value"
+msgstr "map ballot value"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "musi byÄ widoczny jako"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "musi byÄ potwierdzony"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "wymaga potwierdzenia"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "spoza listy"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "liczba"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "hasÅo wysÅano"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "moÅŒliwe wybory"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "opublikuj wyniki"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "trwajÄ
+cy"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "wybierz"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "zakoÅczony"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "godzina:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "do"
+
+#: root/mail/poll_reminder_voting.tt:25
+#, fuzzy
+msgid "to come"
+msgstr "to come"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "waÅŒny"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "gÅosuj tutaj"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "lista gÅosujÄ
+cych"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "identyfikator twoje karty do gÅosowania:"
Index: /tags/2.00/lib/Epoll/I18N/ro.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/ro.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/ro.po	(revision 478)
@@ -0,0 +1,1233 @@
+# Translation of Epoll to Romanian
+# Copyright (c) 2010-2011 Mageia.org
+#
+# VÄ rugÄm sÄ nu actualizaÈi fiÈierul, cu excepÈia cazului Ã®n care sÃ®nteÈi
+# sigur de calitatea traducerii dumneavoastrÄ, de gramaticÄ Èi de ortografie.
+# Acestea din urmÄ sÃ®nt de prea multe ori aproximative.
+# Corectarea lor ulterioarÄ nu are nici un alt rezultat decÃ®t acela de
+# pierdere de timp pentru toata lumea.
+#
+# VÄ RUGÄM SÄ RESPECTAÈI SEMNELE DE PUNCTUAÈIE ALE LIMBII ROMÃNE!
+#
+# Nu suprimaÈi spaÈiul care urmeazÄ unui semn de punctuaÈie de sfÃ®rÈit de
+# frazÄ; trebuie respectatÄ versiunea originalÄ. Ãn acest caz, este foarte
+# probabil ca programul sÄ afiÈeze un mesaj la sfÃ®rÈit. SuprimÃ®nd acel spaÈiu,
+# cele douÄ cuvintele vor fi afiÈate legat.
+#
+# TraduceÈi de manierÄ INTELIGENTÄ (de ce nu Èi prin comparaÈie cu alte
+# traduceri ale acestui fiÈier Ã®n alte limbi) Èi nu cuvÃ®nt cu cuvÃ®nt. Unele
+# astfel de traduceri nu au nici un sens Ã®n limba romÃ®nÄ.
+#
+# ATENÈIE LA FONTURILE UTILIZATE! Pentru a reda corect diacriticele folosiÈi
+# disponerea tastaturii romÃ®neascÄ standard, codarea de caractere UTF-8 Èi
+# asiguraÈi-vÄ cÄ fonturile utilizate sÃ®nt cu virguliÈe, NU CU SEDILE!
+# Exemplu:
+#          font incorect (cu sedile): ÅÅ Å£Å¢
+#          font corect (cu virgule): ÈÈ ÈÈ
+#
+# Pentru a vÄ asigura cÄ folosiÈi fonturile corecte, vizitaÈi:
+#          http://i18n.ro/Fonturi_romanesti/testare
+#
+# VÄ mulÈumim pentru Ã®nÈelegere.
+#                                                       Echipa de traducÄtori,
+#                                                       www.Mageia.org/ro
+#
+# TraducÄtori de-a lungul timpului:
+# Florin CÄtÄlin RUSSEN <cfrussen@yahoo.co.uk>, 2010, 2011.
+# Dan-Marian, JoiÈa <djmarian4u@hotmail.com>, 2010, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Epoll\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2011-01-07 14:14+0100\n"
+"Last-Translator: Dan-Marian JoiÈa <djmarian4u@hotmail.com>\n"
+"Language-Team: Romanian <mageia-i18n@mageia.org>\n"
+"Language: Ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3;plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
+"2:1))\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"D\", \"L\", \"M\", \"M\", \"J\", \"V\", \"S\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 buletine de decriptat pentru acest scrutin"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "%1 alegeri trebuiesc fÄcute"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 opÈiuni posibile"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Un mesaj cu rezumatul a fost trimis"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "Despre acest scrutin"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "Majoritate absolutÄ"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "Acces la administrarea scrutinului: "
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "AdaugÄ"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "AdaugÄ o opÈiune"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "AdaugÄ un alegÄtor"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Administrare"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "AdministraÈie"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "Cont administrator"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Un mesaj a fost trimis la %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Un mesaj a fost trimis la %1, continuaÈi procedura pentru a Ã®ncheia\n"
+"crearea scrutinului"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "Apr"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "Arilie"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "La URL"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "Aug"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "August"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "Buletin"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Buletine"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "NumÄrarea voturilor"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Lista buletinelor: "
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Buletine: "
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "DN de bazÄ: "
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "fiÈier CSV"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "Nu se poate modifica un scrutin Ã®n curs de desfÄÈurare sau terminat"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "Nu s-a putut trimite mesajul: "
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "SchimbaÈi limba"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Ãnchide"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "ConfirmaÈi crearea unui scrutin nou"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "ConfirmaÈi votul"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "Nu s-a putut trimite mesajul cu rezumatul: "
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "CreaÈi un scrutin nou"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "ZZ/LL/AAAA OO:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "DatÄ"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Formatul datei este"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Date"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "Dec"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "Decembrie"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "DecripteazÄ buletinele"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Èterge"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Èterge buletinele"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Èterge acest scrutin"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "Descriere: "
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Atributele numelui afiÈat: "
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Nu decripta buletinele"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "Nu trimite mesajul rezumat"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Nu afiÈa identificatorul buletinului dupÄ scrutin"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "DescarcÄ cheia privatÄ"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Simplu"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "Ales"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "M@il"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "AdresÄ de m@il: "
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "Atribute m@il: "
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "Mesajul include identificatorul buletinului"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "Limba mesajului"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "Buletin gol"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "Buletin gol"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "CripteazÄ scrutinul"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "IntroduceÈi aici un indiciu pentru parolÄ"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "IntroduceÈi parola de administrare pentru acest scrutin"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "IntroduceÈi aici cheia scrutinului: "
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "IntroduceÈi parola scrutinului: "
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "IntroduceÈi identificatorul primit pe m@il"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr ""
+"IntroduceÈi adresa voastrÄ de m@il ca sÄ primiÈi lista scrutinurilor voastre"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Eroare: "
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Feb"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Februarie"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Alegere liberÄ"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "Vineri"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "Din lista de alegÄtori"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "BunÄ ziua, "
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "Identificator"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "ImportÄ lista de alegÄtori... "
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "ImportÄ aceastÄ listÄ"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"Cont/parolÄ invalidÄ, sigur sÃ®nteÈi autorizat sÄ\n"
+"participaÈi la acest scrutin? "
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "ParolÄ invalidÄ: "
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Ian"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "Ianuarie"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "Iul"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "Iulie"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "Iun"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "Iunie"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"PÄstraÈi aceste informaÈii Ã®ntr-un loc sigur, nu vÄ vor fi retransmise. "
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "LegendÄ: "
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "NumÄrul liniei"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Lista alegÄtorilor"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "Autentificare"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "M@il: "
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "cont@domeniu;Nume"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "Mar"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "Martie"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "Mai"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "MinimizeazÄ"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "ModificÄ votul meu"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "Luni"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "Scrutinele mele: "
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Nume: "
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Cerere de scrutin nou"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "Nu s-a fÄcut nici o alegere"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "Nici o cerere de creare de scrutin"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Nici un scrutin Ã®n curs"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "Nici un rezultat"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Nici un alegÄtor Ã®nscris"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "Nici o cerere gÄsitÄ"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "Nici un alegÄtor"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "Neales"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "Noi"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "Noiembrie"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "NumÄr"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "NumÄrul opÈiunilor de pÄstrat: "
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "NumÄrul buletinelor vide"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "NumÄrul cÃ®mpurilor libere: "
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "NumÄrul buletinelor nule "
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "NumÄrul persoanelor de ales de pe lista de alegÄtori"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "NumÄrul opÈiunilor posibile"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "NumÄrul voturilor"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "Oct"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "Octombrie"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "Una sau mai multe valori sÃ®nt duplicate: "
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Numai "
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "PaginÄ generatÄ pe %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "A participat"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "ParticipaÈie"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "ParolÄ"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "Parola pentru acest scrutin: "
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "ParolÄ: "
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "AutentificaÈi-vÄ pentru a participa la acest scrutin"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "ContactaÈi administratorul vostru de sistem"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "ConfirmaÈi vÄ rog Ètergerea buletinului"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "ConfirmaÈi vÄ rog Ètergerea scrutinului %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "Administratorul scrutinului trebuie sÄ valideze cÃ®teva buletine"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr "Data scrutinului trebuie definitÄ Ã®nainte de a-l anunÈa alegÄtorilor"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "SfÃ®rÈitul scrutinului: "
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "Scrutinul este Ã®n curs de desfÄÈurare"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Numele scrutinului: "
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "Scrutin deschis din"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Rapel de participare la vot"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "Ãnceputul scrutinului: "
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "NumÄrul maxim al persoanelor de ales"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "PrevizualizeazÄ buletinul"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "Cordial,"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "Raport Ã®n format PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Rezultat Ã®n format PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Rezultatele n-au fost Ã®ncÄ publicate"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Rezultatele vor fi disponibile"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Rezultatele vor fi disponibile aici"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Rezultate: "
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Regulament: "
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "SÃ®mbÄtÄ"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "SalveazÄ"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "Scor: "
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "Pe curÃ®nd! "
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Trimite parola"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "Trimite parolele alegÄtorilor"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Sep"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "Septembrie"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "SemnÄturÄ"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "Parola sitului: "
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "CÃ®teva buletine trebuiesc validate"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Stare"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "DuminicÄ"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "Rezultate temporare"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "VÄ mulÈumim"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "NumÄrul buletinelor nu corespunde numÄrului de alegÄtori"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "Scrutinul s-a terminat Ã®nainte sÄ Ã®nceapÄ"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "Ãnceputul scrutinului trebuie sÄ fie undeva Ã®n viitor"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "AceastÄ acÈiune este ireversibilÄ"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "Acest scrutin s-a Ã®ncheiat"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Acest scrutin nu a fost Ã®ncÄ deschis"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "Acest scrutin s-a Ã®ncheiat, rezultatele sÃ®nt acum disponibile"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"AceastÄ acÈiune va Èterge totul despre scrutin (configuraÈie, \n"
+"lista cu alegÄtorii, buletinele). "
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"AceastÄ acÈiune va Èterge date sensibile din baza de date Èi rezultatele\n"
+"vor fi Ã®n sfÃ®rÈit evaluate. NotaÈi cÄ alegÄtorii nu-Èi vor mai putea "
+"verifica voturile. "
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "Joi"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Pentru a valida cererea vÄ rugÄm sa mergeÈi la"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "AstÄzi"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "MarÈi"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "Atribute UID: "
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "Uri: "
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "UtilizeazÄ o autentificarea externÄ"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "ValideazÄ"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "Validare"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "Vot"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "Confirmarea votului: "
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "AlegÄtor"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "AlegÄtori"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "InvitaÈie la vot"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Sistem de vot online"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "Miercuri"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "Bun venit"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr ""
+"NotaÈi-vÄ informaÈiile dacÄ doriÈi sÄ le puteÈi verifica la sfÃ®rÈitul "
+"scrutinului"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Da, Èterge acest scrutin"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"SÃ®nteÈi %1, adresa voastrÄ de IP (%2) va fi Ã®nregistratÄ\n"
+"(independent de buletin)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "SÃ®nteÈi invitat sÄ participaÈi la acest scrutin"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "ApÄreÈi pe lista de alegÄtori ale acestor scrutine"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "SÃ®nteÈi administratorul acestor scrutine"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "PuteÈi"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+#, fuzzy
+msgid "You can choose a passphrase to protect the key:"
+msgstr "PuteÈi alege o frazÄ de securitate pentru a proteja cheia: "
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "PuteÈi introduce codul cererii aici"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Nu deÈineÈi nici un scrutin"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "AÈi participat deja la acest scrutin: "
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "Trebuie sÄ definiÈi o datÄ de Ã®nceput Èi una de sfÃ®rÈit"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "Trebuie sÄ selectaÈi %1 opÈiuni"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "VeÈi putea trimite votul de la"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr "AÈi cerut sÄ vi se reaminteascÄ despre scrutinele la care participaÈi"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "V-aÈi trimis buletinul"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "AÈi cerut crearea unui nou scrutin"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Identificatorul buletinului vostru"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "Adresa voastrÄ de m@il: "
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "Contul vostru este"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "Parola voastrÄ este"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Scrutinul vostru: "
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Identificatorul cererii voastre este"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Votul vostru va fi definitiv dupÄ validare"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Votul vostru va fi Ã®nregistrat doar Ã®n urma validÄrii"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "administrare"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "a participat la acest scrutin pe %1"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "buletine ce conÈin: "
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "buletine"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "buletine gÄsite"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "calendar"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "alegere"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "commentariu"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "datÄ (=> afiÈatÄ ca)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "datÄ: "
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "Èterge"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "Èterge buletinul"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "pentru %1 aleÈi"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "format: "
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "a votat"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "aici"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "dacÄ doriÈi sÄ votaÈi pentru mai multe persoane"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "import..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "valoare introdusÄ"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "invalid"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "este valid"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "nu este valid"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "lista buletinelor: "
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "cartografizaÄ valoarea buletinelor"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "trebuie considerat ca"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "trebuie validat"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "necesitÄ validare"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "nu este Ã®n listÄ"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "numÄr"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "parolÄ trimisÄ"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "opÈiuni posibile"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "publicÄ rezultatele"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "Ã®n curs de desfÄÈurare"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "alege"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "terminat"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "timp: "
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "pÃ®nÄ la"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "va urmea"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "valid"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "voteazÄ aici"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "lista de alegÄtori"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "identificatorul buletinului vostru este: "
+
+#~ msgid "%1 choice(s) has/have to be done"
+#~ msgstr "%1 choix doivent Ãªtre fait"
+
+#~ msgid "%1 possible choices"
+#~ msgstr "%1 choix possibles"
+
+#~ msgid "This poll is not open for voting yet"
+#~ msgstr "Ce vote n'est pas encore ouvert"
+
+#~ msgid "Valid"
+#~ msgstr "valide"
+
+#~ msgid "Delete the list of voters"
+#~ msgstr "Effacer la liste des votants"
+
+#~ msgid "search..."
+#~ msgstr "chercher ..."
+
+#~ msgid "sign"
+#~ msgstr "Ã©margement"
+
+#~ msgid "voting"
+#~ msgstr "votant"
+
+#~ msgid "choices"
+#~ msgstr "choix"
+
+#~ msgid "elected"
+#~ msgstr "Ã©lu"
+
+#~ msgid "for"
+#~ msgstr "pour"
+
+#~ msgid "Create a new vote"
+#~ msgstr "CrÃ©er un nouveau vote"
+
+#~ msgid "save"
+#~ msgstr "enregistrer"
+
+#, fuzzy
+#~ msgid ": Administrator login"
+#~ msgstr "administrer"
+
+#~ msgid "Destroy"
+#~ msgstr "DÃ©truire"
+
+#~ msgid "Poll open from <b>%1 %2</b> to <b>%3 %4</b>"
+#~ msgstr "Vote ouvert de <b>%1 %2</b> Ã  <b>%3 %4</b>"
+
+#~ msgid "From voting list"
+#~ msgstr "Depuis la liste des votants"
+
+#, fuzzy
+#~ msgid "Number of voice"
+#~ msgstr "Nombre de choix possibles:"
+
+#~ msgid "Your ballot is identified by ID"
+#~ msgstr "Votre bulletin a l'identifiant:"
+
+#, fuzzy
+#~ msgid "and"
+#~ msgstr "Jan"
+
+#~ msgid "if different of number of choice"
+#~ msgstr "si diffÃ©rent du nombre de choix"
+
+#, fuzzy
+#~ msgid "invalided"
+#~ msgstr "invalide"
+
+#, fuzzy
+#~ msgid "Ballot Number"
+#~ msgstr "Bulletins"
+
+#~ msgid "From a csv file"
+#~ msgstr "Depuis un fichier CSV"
+
+#~ msgid "Voting"
+#~ msgstr "Votant"
Index: /tags/2.00/lib/Epoll/I18N/ru.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/ru.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/ru.po	(revision 478)
@@ -0,0 +1,1151 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Epoll\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2010-12-13 20:13+0500\n"
+"Last-Translator: Eugeny Rozhkov <mai.hime.ost@gmail.ru>\n"
+"Language-Team: Mageia-ru <mai.hime.ost@gmail.com>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Russian\n"
+"X-Poedit-Country: RUSSIAN FEDERATION\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "%1 Ð³ÐŸÐ»ÐŸÑ(ÐŸÐ²) Ðº ÑÐ°ÑÑÐžÑÑÐŸÐ²ÐºÐµ Ð² ÑÑÐŸÐŒ ÐŸÐ¿ÑÐŸÑÐµ"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "%1 Ð²ÑÐ±ÐŸÑ(ÐŸÐ²)"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 ÐŽÐŸÑÑÑÐ¿ÐœÑÑ
+ Ð²Ð°ÑÐžÐ°ÐœÑÐŸÐ²"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Ð¡Ð²ÐŸÐŽÐºÐ° Ð²ÑÑÐ»Ð°ÐœÐ° ÑÐ»ÐµÐºÑÑÐŸÐœÐœÐŸÐ¹ Ð¿ÐŸÑÑÐŸÐ¹"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "ÐÑÐŸ ÐŽÐ°ÐœÐœÑÐ¹ ÐŸÐ¿ÑÐŸÑ"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "ÐÐ±ÑÐŸÐ»ÑÑÐœÐŸÐµ Ð±ÐŸÐ»ÑÑÐžÐœÑÑÐ²ÐŸ"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "ÐÐŸÑÑÑÐ¿ Ðº Ð°ÐŽÐŒÐžÐœÐžÑÑÑÐžÑÐŸÐ²Ð°ÐœÐžÑ ÐŸÐ¿ÑÐŸÑÐ°"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "ÐÐŸÐ±Ð°Ð²ÐžÑÑ "
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð²Ð°ÑÐžÐ°ÐœÑ"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»Ñ"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "Ð£Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐµ"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "ÐÐŽÐŒÐžÐœÐžÑÑÑÐžÑÐŸÐ²Ð°ÐœÐžÐµ"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "ÐÑ
+ÐŸÐŽ Ð°ÐŽÐŒÐžÐœÐžÑÑÑÐ°ÑÐŸÑÐ°"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "Ð­Ð»ÐµÐºÑÑÐŸÐœÐœÐŸÐµ ÑÐŸÐŸÐ±ÑÐµÐœÐžÐµ ÐŸÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐŸ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»Ñ %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"Ð­Ð»ÐµÐºÑÑÐŸÐœÐœÐŸÐµ ÑÐŸÐŸÐ±ÑÐµÐœÐžÐµ ÐŸÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐŸ ÐœÐ° Ð°ÐŽÑÐµÑ %1, ÑÐ»ÐµÐŽÑÐ¹ÑÐµ ÐžÐœÑÑÑÑÐºÑÐžÑÐŒ\n"
+"ÐŽÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ ÑÐŸÐ·ÐŽÐ°ÐœÐžÑ ÐŸÐ¿ÑÐŸÑÐ°."
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "ÐÐ¿Ñ"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "ÐÐ¿ÑÐµÐ»Ñ"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "ÐÐŸ Ð°ÐŽÑÐµÑÑ"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "ÐÐ²Ð³"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "ÐÐ²Ð³ÑÑÑ"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "ÐÐ°ÐœÐŽÐžÐŽÐ°Ñ"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "ÐÐ°ÐœÐŽÐžÐŽÐ°ÑÑ"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ ÐºÐ°ÐœÐŽÐžÐŽÐ°ÑÐŸÐ²"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Ð¡Ð¿ÐžÑÐŸÐº ÐºÐ°ÐœÐŽÐžÐŽÐ°ÑÐŸÐ²"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "ÐÐ°ÐœÐŽÐžÐŽÐ°ÑÑ:"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "ÐÐ°Ð·ÐŸÐ²ÑÐ¹ DN"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "Ð€Ð°Ð¹Ð» CSV"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐžÐ·ÐŒÐµÐœÐžÑÑ Ð·Ð°Ð¿ÑÑÐµÐœÐœÑÐ¹ ÐžÐ»Ðž Ð·Ð°Ð²ÐµÑÑÑÐœÐœÑÐ¹ ÐŸÐ¿ÑÐŸÑ"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐŸÑÐ¿ÑÐ°Ð²ÐžÑÑ ÑÐŸÐŸÐ±ÑÐµÐœÐžÐµ:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Ð¡ÐŒÐµÐœÐžÑÑ ÑÐ·ÑÐº"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "ÐÐ°ÐºÑÑÑÑ"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "ÐÐŸÐŽÑÐ²ÐµÑÐŽÐžÑÐµ ÑÐŸÐ·ÐŽÐ°ÐœÐžÐµ ÐŸÐ¿ÑÐŸÑÐ°"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "ÐÐŸÐŽÑÐ²ÐµÑÐŽÐžÑÐµ Ð²Ð°Ñ Ð³ÐŸÐ»ÐŸÑ"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐŸÑÐ¿ÑÐ°Ð²ÐžÑÑ ÑÐ²ÐŸÐŽÐºÑ:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "Ð¡ÐŸÐ·ÐŽÐ°ÑÑ ÐœÐŸÐ²ÑÐ¹ ÐŸÐ¿ÑÐŸÑ"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "ÐÐ/ÐÐ/ÐÐÐÐ Ð§Ð§:ÐÐ:Ð¡Ð¡"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "ÐÐ°ÑÐ°"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Ð€ÐŸÑÐŒÐ°Ñ ÐŽÐ°ÑÑ"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "ÐÐ°ÑÑ"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "ÐÐµÐº"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "ÐÐµÐºÐ°Ð±ÑÑ"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "Ð Ð°ÑÑÐžÑÑÐŸÐ²Ð°ÑÑ Ð±ÑÐ»Ð»ÐµÑÐµÐœÐž"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Ð£ÐŽÐ°Ð»ÐžÑÑ"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Ð£ÐŽÐ°Ð»ÐžÑÑ Ð±ÑÐ»Ð»ÐµÑÐµÐœÐž"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÑÐŸÑ ÐŸÐ¿ÑÐŸÑ"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "ÐÐ¿ÐžÑÐ°ÐœÐžÐµ:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Ð¡Ð²ÐŸÐ¹ÑÑÐ²Ð° ÐŸÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÐŒÐŸÐ³ÐŸ ÐžÐŒÐµÐœÐž:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "ÐÐµ ÑÐžÑÑÐŸÐ²Ð°ÑÑ Ð±ÑÐ»Ð»ÐµÑÐµÐœÐž"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "ÐÐµ ÐŸÑÐ¿ÑÐ°Ð²Ð»ÑÑÑ ÑÐ°ÑÐ¿ÐžÑÐºÑ"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "ÐÐµ Ð¿ÐŸÐºÐ°Ð·ÑÐ²Ð°ÑÑ id Ð³ÐŸÐ»ÐŸÑÐŸÐ²Ð°ÐœÐžÑ Ð¿ÐŸÑÐ»Ðµ ÐŸÐ¿ÑÐŸÑÐ°"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Ð¡ÐºÐ°ÑÐ°ÑÑ Ð¿ÑÐžÐ²Ð°ÑÐœÑÐ¹ ÐºÐ»ÑÑ"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "ÐÑÑÑÑÑÐºÐ°"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "ÐÑÐ±ÑÐ°Ðœ"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "Email"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "ÐÐŽÑÐµÑ Email:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "Ð¡Ð²ÐŸÐ¹ÑÑÐ²Ð° Email:"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "Email ÑÐŸÐŽÐµÑÐ¶ÐžÑ id Ð³ÐŸÐ»ÐŸÑÐŸÐ²Ð°ÐœÐžÑ"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "Ð¯Ð·ÑÐº Email"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "ÐÑÑÑÐŸÐ¹ Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "ÐÑÑÑÐŸÐ¹ Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "ÐšÐžÑÑÐŸÐ²Ð°ÑÑ ÐŸÐ¿ÑÐŸÑ"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "ÐÐ²ÐµÐŽÐžÑÐµ Ð¿ÐŸÐŽÑÐºÐ°Ð·ÐºÑ ÐŽÐ»Ñ Ð¿Ð°ÑÐŸÐ»Ñ"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "ÐÐ²ÐµÐŽÐžÑÐµ Ð°ÐŽÐŒÐžÐœÐžÑÑÑÐ°ÑÐžÐ²ÐœÑÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ ÐŽÐ»Ñ ÐŸÐ¿ÑÐŸÑÐ°"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "ÐÐ²ÐµÐŽÐžÑÐµ ÐºÐ»ÑÑ ÐŸÐ¿ÑÐŸÑÐ°:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "ÐÐ²ÐµÐŽÐžÑÐµ Ð¿Ð°ÑÐŸÐ»Ñ ÐŸÐ¿ÑÐŸÑÐ°:"
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "ÐÐ²ÐµÐŽÐžÑÐµ Ð¿ÐŸÐ»ÑÑÐµÐœÐœÑÐ¹ Ð¿ÐŸ email ID Ð·ÐŽÐµÑÑ"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr "ÐÐ²ÐµÐŽÐžÑÐµ Ð°ÐŽÑÐµÑ email ÐŽÐ»Ñ Ð¿ÐŸÐ»ÑÑÐµÐœÐžÑ ÑÐ¿ÐžÑÐºÐ° Ð²Ð°ÑÐžÐ³ ÐŸÐ¿ÑÐŸÑÐŸÐ²"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "ÐÑÐžÐ±ÐºÐ°:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Ð€ÐµÐ²"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Ð€ÐµÐ²ÑÐ°Ð»Ñ"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Ð¡Ð²ÐŸÐ±ÐŸÐŽÐœÑÐ¹ Ð²ÑÐ±ÐŸÑ"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "ÐÑÑÐœÐžÑÐ°"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "ÐÐ· ÑÐ¿ÐžÑÐºÐ° ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "ÐÐŽÑÐ°Ð²ÑÑÐ²ÑÐ¹ÑÐµ,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "ID"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "ÐÐŒÐ¿ÐŸÑÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐ¿ÐžÑÐŸÐº ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "ÐÐŒÐ¿ÐŸÑÑÐžÑÐŸÐ²Ð°ÑÑ ÑÑÐŸÑ ÑÐ¿ÐžÑÐŸÐº"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"ÐÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÑÐ¹ Ð»ÐŸÐ³ÐžÐœ/Ð¿Ð°ÑÐŸÐ»Ñ, Ð²Ñ ÑÐ²ÐµÑÐµÐœÑ,\n"
+"ÑÑÐŸ Ð²Ð°ÐŒ ÑÐ°Ð·ÑÐµÑÐµÐœÐŸ ÑÑÐ°ÑÑÐ²ÐŸÐ²Ð°ÑÑ Ð² ÐŸÐ¿ÑÐŸÑÐµ?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "ÐÐµÐ²ÐµÑÐœÑÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Ð¯ÐœÐ²"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "Ð¯ÐœÐ²Ð°ÑÑ"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "ÐÑÐ»"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "ÐÑÐ»Ñ"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "ÐÑÐœ"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "ÐÑÐœÑ"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"Ð¡ÐŸÑ
+ÑÐ°ÐœÐžÑÐµ ÑÑÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ Ð² ÐœÐ°ÐŽÐµÐ¶ÐœÐŸÐŒ ÐŒÐµÑÑÐµ, Ð¿ÐŸÐ²ÑÐŸÑÐœÐŸ ÐŸÐœÐ° Ð²ÑÑÐ»Ð°ÐœÐ° Ð²Ð°ÐŒ ÐœÐµ Ð±ÑÐŽÐµÑ."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "ÐÐµÐ³ÐµÐœÐŽÐ°:"
+
+#: root/templates/pollinc/binary/results.tt:15
+#, fuzzy
+msgid "Line nÂ°"
+msgstr "Line nÃÂ°"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "Ð¡Ð¿ÐžÑÐŸÐº ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "ÐÐŸÐ³ÐžÐœ"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "ÐÐŸÑÑÐ°:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Mail@domain;Name"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "ÐÐ°Ñ"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "ÐÐ°ÑÑ"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "ÐÐ°Ð¹"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "Ð¡Ð²ÐµÑÐœÑÑÑ"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "ÐÐ·ÐŒÐµÐœÐžÑÑ ÐŒÐŸÐ¹ Ð²ÑÐ±ÐŸÑ"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "ÐÐŸÐœÐµÐŽÐµÐ»ÑÐœÐžÐº"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "ÐÐŸÐž ÐŸÐ¿ÑÐŸÑÑ:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "ÐÐŒÑ:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "ÐÐ°Ð¿ÑÐŸÑÐžÑÑ ÐœÐŸÐ²ÑÐ¹ ÐŸÐ¿ÑÐŸÑ"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "ÐÑÐ±ÐŸÑ ÐœÐµ Ð±ÑÐ» ÑÐŽÐµÐ»Ð°Ðœ"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "ÐÐµÑ Ð·Ð°Ð¿ÑÐŸÑÐŸÐ² ÐœÐ° ÑÐŸÐ·ÐŽÐ°ÐœÐžÐµ Ð³ÐŸÐ»ÐŸÑÐŸÐ²Ð°ÐœÐžÑ"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "ÐÐµÑ Ð·Ð°Ð¿ÑÑÐµÐœÐœÑÑ
+ Ð³ÐŸÐ»ÐŸÑÐŸÐ²Ð°ÐœÐžÐ¹"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "ÐÐµÑ ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÐŸÐ²"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "ÐÐµÑ Ð¿ÐŸÐŽÐ¿ÐžÑÐ°ÐœÐœÑÑ
+ ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "ÐÐµ ÐœÐ°Ð¹ÐŽÐµÐœ Ð·Ð°Ð¿ÑÐŸÑ"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "ÐÐµÑ ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "ÐÐµ ÐžÐ·Ð±ÑÐ°Ðœ"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "ÐÐŸÑ"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "ÐÐŸÑÐ±ÑÑ"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ Ð²Ð°ÑÐžÐ°ÐœÑÐŸÐ² ÐŽÐ»Ñ ÑÐŸÑ
+ÑÐ°ÐœÐµÐœÐžÑ:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ Ð¿ÑÑÑÑÑ
+ Ð±ÑÐ»Ð»ÐµÑÐµÐœÐµÐ¹"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ Ð¿ÐŸÐ»ÐµÐ¹ ÐŽÐ»Ñ ÑÐ²ÐŸÐ±ÐŸÐŽÐœÐŸÐ³ÐŸ Ð²Ð²ÐŸÐŽÐ°:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ Ð¿ÑÑÑÑÑ
+ Ð±ÑÐ»Ð»ÐµÑÐµÐœÐµÐ¹"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "Ð§ÐžÑÐ»ÐŸ ÐºÐ°ÐœÐŽÐžÐŽÐ°ÑÐŸÐ² ÐžÐ· ÑÐ¿ÐžÑÐºÐ° ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "Ð§ÐžÑÐ»ÐŸ ÐŽÐŸÑÑÑÐ¿ÐœÑÑ
+ Ð²Ð°ÑÐžÐ°ÐœÑÐŸÐ²"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ Ð³ÐŸÐ»ÐŸÑÐŸÐ²"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "ÐÐºÑ"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "ÐÐºÑÑÐ±ÑÑ"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "ÐÐŽÐœÐŸ ÐžÐ»Ðž ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ»ÐµÐŽÑÑÑÐžÑ
+ Ð·ÐœÐ°ÑÐµÐœÐžÐ¹ Ð¿ÐŸÐ²ÑÐŸÑÑÐµÑÑÑ:"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Ð¢ÐŸÐ»ÑÐºÐŸ"
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "Ð¡ÑÑÐ°ÐœÐžÑÐ° ÑÐŸÐ·ÐŽÐ°ÐœÐ° Ð·Ð° %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "ÐÑÐŸÐ³ÐŸÐ»ÐŸÑÐŸÐ²Ð°Ð»ÐŸ"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "Ð£ÑÐ°ÑÑÐžÐµ"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "ÐÐ°ÑÐŸÐ»Ñ"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "ÐÐ°ÑÐŸÐ»Ñ Ðº ÑÑÐŸÐŒÑ ÐŸÐ¿ÑÐŸÑÑ:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "ÐÐ°ÑÐŸÐ»Ñ:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "ÐÐŸÐ¶Ð°Ð»ÑÐ¹ÑÑÐ°, Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÐµ Ð²Ñ
+ÐŸÐŽ ÐŽÐ»Ñ ÑÑÐ°ÑÑÐžÑ Ð² ÐŸÐ¿ÑÐŸÑÐµ"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "ÐÐŸÐ¶Ð°Ð»ÑÐ¹ÑÑÐ°, ÑÐ²ÑÐ¶ÐžÑÐµÑÑ Ñ Ð°ÐŽÐŒÐžÐœÐžÑÑÑÐ°ÑÐŸÑÐŸÐŒ."
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "ÐÐŸÐ¶Ð°Ð»ÑÐ¹ÑÑÐ°, Ð¿ÐŸÐŽÑÐ²ÐµÑÐŽÐžÑÐµ ÑÐŽÐ°Ð»ÐµÐœÐžÐµ ÐºÐ°ÐœÐŽÐžÐŽÐ°ÑÐ°"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "ÐÐŸÐ¶Ð°Ð»ÑÐ¹ÑÑÐ°, Ð¿ÐŸÐŽÑÐ²ÐµÑÐŽÐžÑÐµ ÑÐŽÐ°Ð»ÐµÐœÐžÐµ ÐŸÐ¿ÑÐŸÑÐ° %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "ÐÐŽÐŒÐžÐœÐžÑÑÑÐ°ÑÐŸÑ ÐŸÐ¿ÑÐŸÑÐ° ÐŽÐŸÐ»Ð¶ÐµÐœ Ð¿ÑÐŸÐ²ÐµÑÐžÑÑ ÐºÐ°ÐœÐŽÐžÐŽÐ°ÑÐŸÐ²"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr "ÐÐµÐŸÐ±Ñ
+ÐŸÐŽÐžÐŒÐŸ ÑÑÑÐ°ÐœÐŸÐ²ÐžÑÑ ÐŽÐ°ÑÑ ÐŸÐ¿ÑÐŸÑÐ° Ð¿ÐµÑÐµÐŽ ÑÐ²ÐµÐŽÐŸÐŒÐ»ÐµÐœÐžÐµÐŒ ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "ÐÐ°ÑÐ° ÐºÐŸÐœÑÐ° ÐŸÐ¿ÑÐŸÑÐ°:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "ÐÐ¿ÑÐŸÑ Ð·Ð°Ð¿ÑÑÐµÐœ"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "ÐÐ°Ð·Ð²Ð°ÐœÐžÐµ ÐŸÐ¿ÑÐŸÑÐ°:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "ÐÐ¿ÑÐŸÑ ÐŸÑÐºÑÑÑ Ñ"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+#, fuzzy
+msgid "Poll request reminder"
+msgstr "ÐÐ¿ÑÐŸÑ Ð·Ð°Ð¿ÑÐŸÑÐžÐ» ÐœÐ°Ð¿ÐŸÐŒÐžÐœÐ°ÐœÐžÐµ"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "ÐÐ°ÑÐ° ÐœÐ°ÑÐ°Ð»Ð° ÐŸÐ¿ÑÐŸÑÐ°:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "Ð§ÐžÑÐ»ÐŸ ÐºÐ°ÐœÐŽÐžÐŽÐ°ÑÐŸÐ²"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "ÐÑÐŸÑÐŒÐŸÑÑÐµÑÑ Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+#, fuzzy
+msgid "Regards"
+msgstr "ÐÐ»Ð°Ð³ÐŸÐŽÐ°ÑÐœÐŸÑÑÐž"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "ÐÑÑÑÑ Ð² PDF"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "Ð ÐµÐ·ÑÐ»ÑÑÐ°Ñ Ð² PDF"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "Ð ÐµÐ·ÑÐ»ÑÑÐ°ÑÑ ÐµÑÑ ÐœÐµ ÐŸÐ¿ÑÐ±Ð»ÐžÐºÐŸÐ²Ð°ÐœÑ"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "Ð ÐµÐ·ÑÐ»ÑÑÐ°ÑÑ Ð±ÑÐŽÑÑ ÐŽÐŸÑÑÑÐ¿ÐœÑ"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "Ð ÐµÐ·ÑÐ»ÑÑÐ°ÑÑ Ð±ÑÐŽÑÑ ÐŽÐŸÑÑÑÐ¿ÐœÑ Ð·ÐŽÐµÑÑ"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "Ð ÐµÐ·ÑÐ»ÑÑÐ°ÑÑ:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "ÐÑÐ°Ð²ÐžÐ»Ð°:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "Ð¡ÑÐ±Ð±ÐŸÑÐ°"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Ð¡ÐŸÑ
+ÑÐ°ÐœÐžÑÑ"
+
+#: root/templates/pollinc/binary/results.tt:7
+#, fuzzy
+msgid "Score:"
+msgstr "Score:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "ÐÐŸ ÑÐºÐŸÑÐŸÐ¹ Ð²ÑÑÑÐµÑÐž!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "ÐÑÐ¿ÑÐ°Ð²ÐžÑÑ Ð¿Ð°ÑÐŸÐ»Ñ"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "ÐÑÐ¿ÑÐ°Ð²ÐžÑÑ Ð¿Ð°ÑÐŸÐ»Ðž ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÑÐŒ"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Ð¡ÐµÐœ"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "Ð¡ÐµÐœÑÑÐ±ÑÑ"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "ÐÐŸÐŽÐ¿ÐžÑÑ"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "ÐÐ°ÑÐŸÐ»Ñ ÑÐ°Ð¹ÑÐ°:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "ÐÐµÐºÐŸÑÐŸÑÑÐµ Ð±ÑÐ»Ð»ÐµÑÐµÐœÐž ÑÑÐµÐ±ÑÑÑ Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÑ"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Ð¡Ð°ÑÑÑÑ"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "ÐÐŸÑÐºÑÐµÑÐµÐœÑÐµ"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "ÐÑÐµÐŒÐµÐœÐœÑÐµ ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÑ"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "Ð¡Ð¿Ð°ÑÐžÐ±ÐŸ"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ Ð±ÑÐ»Ð»ÐµÑÐµÐœÐµÐ¹ ÐœÐµ ÑÐŸÐ²Ð¿Ð°ÐŽÐ°ÐµÑ Ñ ÐºÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸÐŒ ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "ÐÐ¿ÑÐŸÑ Ð·Ð°ÐºÐ°ÐœÑÐžÐ²Ð°ÐµÑÑÑ, ÐœÐµ ÑÑÐ¿ÐµÐ² ÐœÐ°ÑÐ°ÑÑÑÑ"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "ÐÐ°ÑÐ°Ð»ÐŸ ÐŸÐ¿ÑÐŸÑÐ° ÐŽÐŸÐ»Ð¶ÐœÐŸ ÐœÐ°Ñ
+ÐŸÐŽÐžÑÑÑÑ Ð² Ð±ÑÐŽÑÑÐµÐŒ"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Ð­ÑÐŸ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ ÐœÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐŸÑÐŒÐµÐœÐžÑÑ"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "ÐÐ¿ÑÐŸÑ ÐºÐŸÐœÑÐ°ÐµÑÑÑ"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "ÐÐ¿ÑÐŸÑ ÐµÑÑ ÐœÐµ ÐŸÑÐºÑÑÑ"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "ÐÐ¿ÑÐŸÑ Ð·Ð°ÐºÐŸÐœÑÐµÐœ, ÐŽÐŸÑÑÑÐ¿ÐœÑÐ¹ ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÑ"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"Ð­ÑÐŸ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ ÑÐŽÐ°Ð»ÐžÑ Ð²ÑÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ (ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž, \n"
+"ÑÐ¿ÐžÑÐŸÐº ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹, ÐºÐ°ÐœÐŽÐžÐŽÐ°ÑÐŸÐ²)."
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"Ð­ÑÐŸ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ ÑÐŽÐ°Ð»ÐžÑ ÐŽÐ°ÐœÐœÑÐµ ÐžÐ· Ð±Ð°Ð·Ñ, Ðž ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÑ Ð±ÑÐŽÑÑ\n"
+"ÑÐ°ÑÑÑÐžÑÐ°ÐœÑ ÐŸÐºÐŸÐœÑÐ°ÑÐµÐ»ÑÐœÐŸ. ÐÐ·Ð±ÐžÑÐ°ÑÐµÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ ÐœÐµ ÑÐŒÐŸÐ³ÑÑ\n"
+"ÐžÐ·ÐŒÐµÐœÐžÑÑ ÑÐ²ÐŸÐž Ð±ÑÐ»Ð»ÐµÑÐµÐœÐž."
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "Ð§ÐµÑÐ²ÐµÑÐ³"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Ð§ÑÐŸÐ±Ñ Ð¿ÐŸÐŽÑÐ²ÐµÑÐŽÐžÑÑ ÐºÐŸÐŽ, Ð¿ÑÐŸÐ¹ÐŽÐžÑÐµ Ð¿ÐŸ ÑÑÑÐ»ÐºÐµ:"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "Ð¡ÐµÐ³ÐŸÐŽÐœÑ"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "ÐÑÐŸÑÐœÐžÐº"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "Ð¡Ð²ÐŸÐ¹ÑÑÐ²Ð° UID:"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "Uri:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "ÐÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ Ð²ÐœÐµÑÐœÐµÐµ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÐµ"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "ÐÐŸÐŽÑÐ²ÐµÑÐŽÐžÑÑ"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "ÐÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÐµ"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "ÐÐ¿ÑÐŸÑ"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "ÐÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÐµ ÐŸÐ¿ÑÐŸÑÐ°:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "ÐÐ·Ð±ÐžÑÐ°ÑÐµÐ»Ñ"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "ÐÐ·Ð±ÐžÑÐ°ÑÐµÐ»Ðž"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "ÐÑÐžÐ³Ð»Ð°ÑÐµÐœÐžÐµ ÐœÐ° ÐŸÐ¿ÑÐŸÑ"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Ð¡ÐžÑÑÐµÐŒÐ° ÐŸÐœÐ»Ð°Ð¹Ðœ-Ð³ÐŸÐ»ÐŸÑÐŸÐ²Ð°ÐœÐžÐ¹"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "ÐÐŸÐœÐµÐŽÐµÐ»ÑÐœÐžÐº"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "ÐÐŸÐ±ÑÐŸ Ð¿ÐŸÐ¶Ð°Ð»ÐŸÐ²Ð°ÑÑ"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr "ÐÐ°Ð¿ÐžÑÐžÑÐµ ÐµÐ³ÐŸ, ÐµÑÐ»Ðž Ð²Ñ Ñ
+ÐŸÑÐžÑÐµ Ð¿ÑÐŸÐ²ÐµÑÐžÑÑ ÐµÐ³ÐŸ Ð² ÐºÐŸÐœÑÐµ ÐŸÐ¿ÑÐŸÑÐ°"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "ÐÐ°, ÑÐŽÐ°Ð»ÐžÑÑ ÐŸÐ¿ÑÐŸÑ"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"ÐÑ 1%, Ð²Ð°Ñ IP Ð°ÐŽÑÐµÑ (%2) ÑÐ°ÐºÐ¶Ðµ Ð±ÑÐŽÐµÑ Ð·Ð°Ð¿ÐžÑÐ°Ðœ\n"
+"(ÐœÐµÐ·Ð°Ð²ÐžÑÐžÐŒÐŸ ÐŸÑ ÑÐŸÐŽÐµÑÐ¶Ð°ÐœÐžÐµ Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "ÐÑ Ð¿ÑÐžÐ³Ð»Ð°ÑÐµÐœÑ Ð¿ÐŸÑÑÐ°ÑÑÐ²ÐŸÐ²Ð°ÑÑ Ð² ÑÑÐŸÐŒ ÐŸÐ¿ÑÐŸÑÐµ"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "ÐÑ Ð²ÐœÐµÑÐµÐœÑ Ð² ÑÐ¿ÐžÑÐºÐž ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹ ÐŽÐ»Ñ ÑÑÐžÑ
+ ÐŸÐ¿ÑÐŸÑÐŸÐ²"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "ÐÑ ÑÐ²Ð»ÑÐµÑÐµÑÑ Ð°ÐŽÐŒÐžÐœÐžÑÑÑÐ°ÑÐŸÑÐŸÐŒ ÑÑÐžÑ
+ ÐŸÐ¿ÑÐŸÑÐŸÐ²"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "ÐÑ ÐŒÐŸÐ¶ÐµÑÐµ"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "ÐÑ ÐŒÐŸÐ¶ÐµÑÐµ Ð²ÑÐ±ÑÐ°ÑÑ Ð¿Ð°ÑÐŸÐ»ÑÐœÑÑ ÑÑÐ°Ð·Ñ, ÑÑÐŸÐ±Ñ Ð·Ð°ÑÐžÑÐžÑÑ ÐºÐ»ÑÑ."
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "ÐÑ ÐŒÐŸÐ¶ÐµÑÐµ Ð²Ð²ÐµÑÑÐž ÐºÐŸÐŽ Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÑ Ð·ÐŽÐµÑÑ"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "ÐÑ ÐœÐµ Ð·Ð°Ð¿ÑÑÐºÐ°Ð»Ðž ÐŸÐ¿ÑÐŸÑÐŸÐ²."
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "ÐÑ Ð¿ÑÐžÐœÑÐ»Ðž ÑÑÐ°ÑÑÐžÐµ Ð² ÐŸÐ¿ÑÐŸÑÐµ:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ ÑÐºÐ°Ð·Ð°ÑÑ ÐŽÐ°ÑÑ ÐºÐŸÐœÑÐ° Ðž ÐœÐ°ÑÐ°Ð»Ð°"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "ÐÐ°ÐŒ ÐœÑÐ¶ÐœÐŸ Ð²ÑÐ±ÑÐ°ÑÑ %1 Ð²Ð°ÑÐžÐ°ÐœÑ(ÐŸÐ²)"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "ÐÑ ÑÐŒÐŸÐ¶ÐµÑÐµ Ð¿ÑÐŸÐ³ÐŸÐ»ÐŸÑÐŸÐ²Ð°ÑÑ Ñ"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr "ÐÑ Ð·Ð°Ð¿ÑÐŸÑÐžÐ»Ðž ÐœÐ°Ð¿ÐŸÐŒÐžÐœÐ°ÐœÐžÐµ Ð¿ÑÐŸ ÐŸÐ¿ÑÐŸÑ(Ñ), Ð² ÐºÐŸÑÐŸÑÑÑ
+ Ð²Ñ ÑÑÐ°ÑÑÐ²ÑÐµÑÐµ "
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "ÐÑ ÑÐŸÐ»ÑÐºÐŸ ÑÑÐŸ ÐŸÑÐ¿ÑÐ°Ð²ÐžÐ»Ðž Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "ÐÑ Ð¿ÐŸÐŽÐ°Ð»Ðž Ð·Ð°ÑÐ²ÐºÑ ÐœÐ° ÑÐŸÐ·ÐŽÐ°ÐœÐžÐµ ÐœÐŸÐ²ÐŸÐ³ÐŸ ÐŸÐ¿ÑÐŸÑÐ°"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "ID Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "ÐÐ°Ñ Ð°ÐŽÑÐµÑ email:"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "ÐÐ°Ñ Ð»ÐŸÐ³ÐžÐœ"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "ÐÐ°Ñ Ð¿Ð°ÑÐŸÐ»Ñ"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "ÐÐ°Ñ ÐŸÐ¿ÑÐŸÑ:"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "ÐÐ°Ñ ÐºÐŸÐŽ Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÑ"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "ÐÐ°Ñ Ð³ÐŸÐ»ÐŸÑ Ð±ÑÐŽÐµÑ Ð¿ÑÐžÐœÑÑ Ð¿ÐŸÑÐ»Ðµ Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÑ"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "ÐÐ°Ñ Ð³ÐŸÐ»ÐŸÑ Ð±ÑÐŽÐµÑ Ð·Ð°ÑÐµÐ³ÐžÑÑÑÐžÑÐŸÐ²Ð°Ðœ ÑÐŸÐ»ÑÐºÐŸ Ð¿ÐŸÑÐ»Ðµ Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÑ"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÐµ"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+#, fuzzy
+msgid "already participated in this poll the %1"
+msgstr "ÑÐ¶Ðµ Ð¿ÑÐžÐœÑÐ»ÐŸ ÑÑÐ°ÑÑÐžÐµ Ð² ÑÑÐŸÐŒ ÐŸÐ¿ÑÐŸÑÐµ 1%"
+
+#: root/templates/admin/validate.tt:21
+#, fuzzy
+msgid "ballot containing:"
+msgstr "Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ ÑÐŸÐŽÐµÑÐ¶ÐžÑ:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+#, fuzzy
+msgid "ballots"
+msgstr "Ð±ÑÐ»Ð»ÐµÑÐµÐœÐž"
+
+#: root/templates/admin/validate.tt:34
+#, fuzzy
+msgid "ballots found"
+msgstr "ÐœÐ°Ð¹ÐŽÐµÐœ Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "ÐºÐ°Ð»ÐµÐœÐŽÐ°ÑÑ"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "Ð³ÐŸÐ»ÐŸÑ"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "ÐºÐŸÐŒÐŒÐµÐœÑÐ°ÑÐžÐ¹"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "ÐŽÐ°ÑÐ° (=> view as)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "ÐŽÐ°ÑÐ°:"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "ÑÐŽÐ°Ð»ÐžÑÑ"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "ÑÐŽÐ°Ð»ÐžÑÑ Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+#, fuzzy
+msgid "for %1 elected"
+msgstr "Ð²ÑÐ±ÑÐ°ÐœÐŸ 1%"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "ÑÐŸÑÐŒÐ°Ñ:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "Ð¿ÑÐŸÐ³ÐŸÐ»ÐŸÑÐŸÐ²Ð°Ð»ÐŸ"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "Ð·ÐŽÐµÑÑ"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr ""
+"ÐµÑÐ»Ðž Ð²Ñ Ð¶ÐµÐ»Ð°ÐµÑÐµ, ÑÑÐŸÐ±Ñ Ð±Ð°Ð»Ð»ÐŸÑÐžÑÐŸÐ²Ð°Ð»ÐŸÑÑ\n"
+"Ð±ÐŸÐ»ÐµÐµ ÐŸÐŽÐœÐŸÐ³ÐŸ ÑÐµÐ»ÐŸÐ²ÐµÐºÐ°"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "ÐžÐŒÐ¿ÐŸÑÑ..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "Ð²Ð²ÐµÑÑÐž Ð·ÐœÐ°ÑÐµÐœÐžÐµ"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+#, fuzzy
+msgid "invalid"
+msgstr "ÐœÐµÐ²ÐµÑÐœÐŸÐµ"
+
+#: root/templates/admin/validate.tt:56
+#, fuzzy
+msgid "is valid"
+msgstr "Ð²ÐµÑÐœÐŸÐµ"
+
+#: root/templates/admin/validate.tt:58
+#, fuzzy
+msgid "isn't valid"
+msgstr "ÐœÐµÐ²ÐµÑÐœÐŸÐµ"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "ÑÐ¿ÐžÑÐŸÐº Ð±ÑÐ»Ð»ÐµÑÐµÐœÐµÐ¹:"
+
+#: root/templates/admin/validate.tt:75
+#, fuzzy
+msgid "map ballot value"
+msgstr "map ballot value"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "ÐŽÐŸÐ»Ð¶ÐµÐœ Ð±ÑÑÑ Ð¿ÑÐŸÑÐŒÐŸÑÑÐµÐœ"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "ÐŽÐŸÐ»Ð¶ÐµÐœ Ð±ÑÑÑ Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÑÐœ"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "ÑÑÐµÐ±ÑÐµÑÑÑ Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÐµ"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "ÐœÐµ ÐžÐ· ÑÐ¿ÐžÑÐºÐ°"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "ÐœÐŸÐŒÐµÑ"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "Ð¿Ð°ÑÐŸÐ»Ñ ÐŸÑÐ¿ÑÐ°Ð²Ð»ÐµÐœ"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "ÐŽÐŸÑÑÑÐ¿ÐœÑÐµ Ð²Ð°ÑÐžÐ°ÐœÑÑ"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "ÐŸÐ¿ÑÐ±Ð»ÐžÐºÐŸÐ²Ð°ÑÑ ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÑ"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "Ð·Ð°Ð¿ÑÑÐµÐœ"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "Ð²ÑÐ±ÑÐ°ÑÑ"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "Ð·Ð°Ð²ÐµÑÑÑÐœ"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "Ð²ÑÐµÐŒÑ:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+#, fuzzy
+msgid "to"
+msgstr "to"
+
+#: root/mail/poll_reminder_voting.tt:25
+#, fuzzy
+msgid "to come"
+msgstr "to come"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "Ð²ÐµÑÐœÐŸ"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "Ð³ÐŸÐ»ÐŸÑÑÐ¹ÑÐµ Ð·ÐŽÐµÑÑ"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "ÑÐ¿ÐžÑÐŸÐº ÐžÐ·Ð±ÐžÑÐ°ÑÐµÐ»ÐµÐ¹"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "id Ð²Ð°ÑÐµÐ³ÐŸ Ð±ÑÐ»Ð»ÐµÑÐµÐœÑ:"
Index: /tags/2.00/lib/Epoll/I18N/tr.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/tr.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/tr.po	(revision 478)
@@ -0,0 +1,1123 @@
+# Turkish translations for PACKAGE package
+# PACKAGE paketi iÃ§in TÃŒrkÃ§e Ã§eviriler.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Numan DemirdÃ¶Äen <numand46@gmail.com>, 2010.
+# Alev Erzurumlu <aleverzurumlu@gmail.com>, 2010
+# Can KaÃ§an <cankacan.47@gmail.com>, 2010 
+# Ufuk AnÄ±l Uyalhas <ufuk01_uyalhas@hotmail.com>, 2010
+# Cem AltÄ±parmak <cmltprmk@gmail.com>, 2010
+# Murat ÃAKIR <muratcakir13@gmail.com>, 2010
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2010-12-26 21:21+0200\n"
+"Last-Translator: if <numand46@gmail.com>\n"
+"Language-Team: Turkish\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"Pz\", \"Pt\", \"Sa\", \"Ãa\", \"Pe\", \"C\", \"Ct\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "Bu ankette bulunan %1 oy pusulalarÄ±nÄ±n Åifresi Ã§Ã¶zÃŒlecek"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "%1 tercihinin yapÄ±lmasÄ± gerek"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 muhtemel tercihler"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "Bir Ã¶zet e-postasÄ± gÃ¶nderildi"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "Anket hakkÄ±nda"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "Salt Ã§oÄunluk"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "Anket yÃ¶netimine eriÅim:"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "Ekle"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "Tercih ekle"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "SeÃ§men ekle"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "YÃ¶net"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "YÃ¶netim"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "YÃ¶netici giriÅi"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "%1 hesabÄ±na bir e-posta gÃ¶nderildi"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr ""
+"%1 hesabÄ±na bir e-posta gÃ¶nderildi, talimatlarÄ± izleyerek anketi\n"
+"tamamlayÄ±nÄ±z"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "Nis"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "Nisan"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "URL ye"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "AÄu"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "AÄustos"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "Oy pusulasÄ±"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "Oy pusulalarÄ±"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "Oy pusulalarÄ± sayÄ±sÄ±"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "Oy pusulalarÄ± listesi"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "Oy pusulalarÄ±"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "Ana DN"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "CSV dosyasÄ±"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "Devam eden ya da bitmiÅ bir anketi deÄiÅtiremezsiniz"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "E-posta gÃ¶nderemezsiniz:"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "Lisan seÃ§in"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "Kapat"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "Yeni anket oluÅturmayÄ± onaylayÄ±nÄ±z"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "Oyunuzu onaylayÄ±nÄ±z"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "Ãzet e-postasÄ± gÃ¶nderilemedi:"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "Yeni bir anket oluÅtur"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "GG/AA/YYYY SS:DD:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "Tarih"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "Tarih biÃ§imi"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "Tarihler"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "Ara"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "AralÄ±k"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "Oy pusulalarÄ±nÄ± aÃ§"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "Sil"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "Oy pusulalarÄ±nÄ± sil"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "Bu anketi sil"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "AÃ§Ä±klama:"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "Ad Ã¶zelliklerini gÃ¶rÃŒntÃŒle:"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "Oy pusulasÄ±nÄ± Åifreleme"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "AlÄ±ndÄ±yÄ± e-posta olarak gÃ¶nderme"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "Anketten sonra oy pusulasÄ± kimliÄini gÃ¶sterme"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "Ãzel anahtarÄ± indir"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "Sahte"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "SeÃ§ildi"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "E-posta"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "E-posta adresi:"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "E-posta Ã¶zellikleri"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "E-posta oy pusulasÄ± kimliÄini iÃ§ersin"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "E-posta dili"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "BoÅ oy pusulasÄ±"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "BoÅ oy pusulasÄ±"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "Anketi Åifrele"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "Parola iÃ§in buraya bir ipucu girin"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "Bu anket iÃ§in bir yÃ¶netici parolasÄ± girin"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "Anket anahtarÄ±nÄ± buraya girin:"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "Anket parolasÄ±nÄ± girin:"
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "E-posta yoluyla aldÄ±ÄÄ±nÄ±z yeni anket talep kimlik numarasÄ±nÄ± giriniz"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr ""
+"Oylamaya katÄ±ldÄ±ÄÄ±nÄ±z anketlerin listesini edinmek iÃ§in e-posta adresinizi "
+"giriniz"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "Hata:"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "Åub"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "Åubat"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "Serbest tercih"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "Cuma"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "SeÃ§men listesinden"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "Merhaba,"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "ID"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "SeÃ§men listesini iÃ§e aktar..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "Bu listeyi iÃ§e aktar"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"GeÃ§ersiz giriÅ/parola, bu ankete katÄ±labileceÄinizden\n"
+"emin misiniz?"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "GeÃ§ersiz site parolasÄ±:"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "Oca"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "Ocak"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "Tem"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "Temmuz"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "Haz"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "Haziran"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr ""
+"Bu bilgiyi gÃŒvenli bir yerde muhafaza ediniz, bir daha size "
+"gÃ¶nderilmeyecektir."
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "Lejant:"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "nÂ°. satÄ±r"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "SeÃ§menlerin listesi"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "GiriÅ"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "E-posta:"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Mail@domain:Ä°sim"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "Mar"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "Mart"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "May"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "KÄ±salt"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "Oyumu deÄiÅtir"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "Pazartesi"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "Anketlerim:"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "Ä°sim:"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "Yeni anket talebi"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "HiÃ§bir tercih yapÄ±lmadÄ±"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "HiÃ§bir anket oluÅturma talebi yok"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "Åu anda oylanan hiÃ§bir anket yok"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "SonuÃ§ yok"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "Abone olmuÅ seÃ§men yok"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "BÃ¶yle bir taleb bulunamadÄ±"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "GÃ¶sterilecek seÃ§men yok"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "SeÃ§ilmedi"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "Kas"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "KasÄ±m"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "Adet"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "AlÄ±konulacak tercih adeti:"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "BoÅ oy pusulayÄ± adeti"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "Serbest giriÅ alanlarÄ± adeti:"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "GeÃ§ersiz oy pusulasÄ± adeti"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "SeÃ§men listesinden alÄ±nan seÃ§ilecek kiÅi adeti"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "Muhtemel tercihlerin adeti"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "SeÃ§menlerin adeti"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "Eki"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "Ekim"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "Bir ya da daha fazla girdi mÃŒtekerrir"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "Sadece "
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "%1 oluÅturulan sayfa"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "Ä°Åtirak olunmuÅ"
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "KatÄ±lÄ±m"
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "Parola"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "Anketin parolasÄ±:"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "Parola:"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "LÃŒtfen, ankete katÄ±lmak iÃ§in kimlik doÄrulamasÄ± yapÄ±nÄ±z"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "LÃŒtfen, sistem yÃ¶neticinizle irtibat kurunuz"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "LÃŒtfen, oy pusulasÄ± silimini onaylayÄ±nÄ±z"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "LÃŒtfen %1 anketinin silimini onaylayÄ±nÄ±z"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "Anket yÃ¶neticisinin bazÄ± oylarÄ± onaylamasÄ± gerek"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr ""
+"Anket tarihinin anketin seÃ§menlere duyurulmadan Ã¶nce belirlenmesi gerek"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "Anketin bitiÅ tarihi:"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "Åu an devam eden anket"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "Anket ismi:"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "Buradan anket aÃ§"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "Anket talebi hatÄ±rlatÄ±cÄ±sÄ±"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "Anketin baÅlama tarihi:"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "Oy verecek muhtemel seÃ§men adeti"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "Bir Ã¶nceki anket"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "HÃŒrmetler"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "PDF olarak raporla"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "SonuÃ§larÄ± PDF biÃ§iminde gÃ¶ster"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "SonuÃ§lar henÃŒz yayÄ±nlanmadÄ±"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "SonuÃ§lar yakÄ±nda duyurulacak"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "SonuÃ§lar burada duyurulacak"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "SonuÃ§lar:"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "Kurallar:"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "Cumartesi"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "Kaydet"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "Durum:"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "GÃ¶rÃŒÅmek ÃŒzere!"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "Parola gÃ¶nder"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "SeÃ§menlere parola gÃ¶nder"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "Eyl"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "EylÃŒl"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "Ä°Åaretle"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "Site parolasÄ±:"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "BazÄ± oy pusulalarÄ±nÄ±n onaylanmasÄ± gerek"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "Durum"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "Pazar"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "GeÃ§ici sonuÃ§lar"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "TeÅekkÃŒr ederiz"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "SeÃ§men adetiyle oy adeti denk deÄil"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "Anket baÅlamadan biter"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "Anketin baÅlangÄ±cÄ± ileri bir tarihte olmalÄ±"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "Bu eylem geri alÄ±namaz"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "Bu anket sona erdi"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "Bu anket henÃŒz oylamaya aÃ§Ä±lmadÄ±"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "Bu anketin oylamasÄ± bitti, sonuÃ§larÄ± gÃ¶rebilirsiniz "
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr ""
+"Bu anketle alakalÄ± bÃŒtÃŒn bilgiler (yapÄ±landÄ±rma, seÃ§men listesi, \n"
+"oy pusulalarÄ±) silinecek"
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"Veri tabanÄ±ndan Ã¶nemli veriler silinecek ve sonuÃ§lar hesaplanacak.\n"
+"UnutmayÄ±n seÃ§menlerin oy pusulalarÄ±nÄ± kontrol etmeleri mÃŒmkÃŒn olmayacak."
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "PerÅembe"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "Litfen isteÄinizi onaylatmak iÃ§in tÄ±klayÄ±nÄ±z"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "BugÃŒn"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "SalÄ±"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "UID Ã¶zellikleri"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "URI:"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "Harici kimlik doÄrulamayÄ± kullanÄ±nÄ±z"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "OnaylayÄ±nÄ±z"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "Onaylama"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "Oy veriniz"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "Oylama onayÄ±:"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "SeÃ§men"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "SeÃ§menler"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "Oylama daveti"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "Web oylama sistemi"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "ÃarÅamba"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "HoÅgeldiniz"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr "Anket sonunda anketi kontrol edebilmek istiyorsanÄ±z aÅaÄÄ±ya yazÄ±nÄ±z"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "Evet, bu anketi sil"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr ""
+"Siz %1 kullanÄ±cÄ±sÄ±sÄ±nÄ±z, IP adresiniz (%2) kaydedilecek\n"
+"(oy pusulasÄ±ndan baÄÄ±msÄ±z olarak)"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "Bu ankete katÄ±lmaya davet edildiniz"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "Bu anketlerde seÃ§men olarak kaydedildiniz"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "Bu anketlerin yÃ¶neticisisiniz"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "Yapabilirsiniz"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "AnahtarÄ± korumak iÃ§in bir parola seÃ§ebilirsiniz"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "Ä°stek kodunu buraya girebilirsiniz"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "Herhangi bir anketiniz yok"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "Bu ankete katÄ±ldÄ±nÄ±z:"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "Bir baÅlangÄ±Ã§ ve bitiÅ tarihi girmelisiniz"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "%1 tercihlerini seÃ§meniz gerekiyor"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "Oyunuzu aÅaÄÄ±daki baÄlantÄ±dan gÃ¶nderebileceksiniz"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr "KatÄ±ldÄ±ÄÄ±nÄ±z anket(ler) hakkÄ±nda hatÄ±rlatma istediniz"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "Oy pusulanÄ±zÄ± gÃ¶nderdiniz"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "Yeni bir anket aÃ§mak istediniz"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "Oy pusulanÄ±zÄ±n ID'si"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "E-posta adresiniz"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "GiriÅ bilgileriniz"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "ParolanÄ±z"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "Anketiniz"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "Ä°stek ID'niz"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "Oyunuz onaylamadan sonra tamamlanacak"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "Oyunuz ancak onaylamadan sonra kayde geÃ§irilecek"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "yÃ¶net"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "%1 ÃŒzerindeki ankete katÄ±lmÄ±Å bulunuyorsunuz"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "Oy pusulasÄ± iÃ§eriÄi:"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "oy pusulalarÄ±"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "oy pusulalarÄ± bulundu"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "takvim"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "seÃ§im"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "yorum"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "tarih (=> olarak gÃ¶ster)"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "tarih"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "sil"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "oy pusulasÄ±nÄ± sil"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "%1 iÃ§in seÃ§ildi"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "biÃ§im:"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "oy verdi"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "giriÅ yapmÄ±Å"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "bir kiÅiden daha fazlasÄ±na oy vermek istiyorsanÄ±z"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "iÃ§e aktar..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "girdi deÄeri"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "geÃ§ersiz"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "geÃ§erli"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "geÃ§ersiz"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "oy pusulalarÄ±nÄ± listele"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "oy pusula deÄerini planla"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "olarak gÃ¶rÃŒnmeli"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "onaylanmalÄ±"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "onay gerektiriyor"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "listeden deÄil"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "adet"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "parola gÃ¶nderildi"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "muhtemel tercihler"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "sonuÃ§larÄ± yayÄ±nla"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "devam ediyor"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "seÃ§"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "sona eren"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "zaman:"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "Åu kiÅiye"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "Ã¶zet"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "geÃ§erli"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "buraya oy ver"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "seÃ§men listesi"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "oy pusulasÄ± id niz"
Index: /tags/2.00/lib/Epoll/I18N/zh_TW.po
===================================================================
--- /tags/2.00/lib/Epoll/I18N/zh_TW.po	(revision 478)
+++ /tags/2.00/lib/Epoll/I18N/zh_TW.po	(revision 478)
@@ -0,0 +1,1169 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Epoll\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2011-01-03 11:08+0800\n"
+"Last-Translator: Franklin Weng <franklin@goodhorse.idv.tw>\n"
+"Language-Team: Traditional Chinese <zh-l10n@linux.org.tw>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: root/templates/admin/date.tt:51
+msgid "\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\""
+msgstr "\"æ¥\"ïŒ\"äž\"ïŒ\"äº\"ïŒ\"äž\"ïŒ\"å\"ïŒ\"äº\"ïŒ\"å
+­\""
+
+#: root/templates/pollinc/binary/results.tt:16
+msgid "%"
+msgstr "%"
+
+#. (poll.list_ballot_need_dec.size)
+#: root/templates/admin/includes/ballot_decrypt.tt:5
+msgid "%1 ballots to decrypt in this poll"
+msgstr "æ­€æç¥šéèŠ %1 åŒµéžç¥šæèœè§£å¯"
+
+#. (poll.info("choice_count"))
+#: root/templates/includes/poll.tt:13
+msgid "%1 choice have to be done"
+msgstr "è³å°èŠå %1 åéžæ"
+
+#. (poll.info("choice_count"))
+#: root/templates/ballot/default.tt:18
+msgid "%1 possibles choices"
+msgstr "%1 åéžé 
+"
+
+#: root/templates/ballot/done.tt:21
+msgid "A summary mail has been sent"
+msgstr "å·²éåºæèŠéµä»¶"
+
+#: root/mail/voting_passwd.tt:18
+msgid "About this poll"
+msgstr "éæŒæ­€æç¥š"
+
+#: root/templates/pollinc/binary/results.tt:10
+msgid "Absolute Majority"
+msgstr "çµå°å€æž"
+
+#: root/templates/admin/login.tt:6
+msgid "Access to administration of poll:"
+msgstr "å·è¡æ­€æç¥šçç®¡çïŒ"
+
+#: root/templates/admin/ballot.tt:26 root/templates/admin/voters.tt:19
+msgid "Add"
+msgstr "æ°å¢"
+
+#: root/templates/admin/ballot.tt:24
+msgid "Add a choice"
+msgstr "æ°å¢éžé 
+"
+
+#: root/templates/admin/voters.tt:8
+msgid "Add a voter"
+msgstr "æ°å¢æç¥šäºº"
+
+#: root/templates/vote/default.tt:4
+msgid "Administrate"
+msgstr "ç®¡ç"
+
+#: lib/Epoll/Controller/Admin.pm:181 lib/Epoll/Controller/Admin.pm:228
+#: lib/Epoll/Controller/Admin.pm:278 lib/Epoll/Controller/Admin.pm:293
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Administration"
+msgstr "ç®¡ç"
+
+#: lib/Epoll/Controller/Admin.pm:158
+msgid "Administrator login"
+msgstr "ç®¡çè
+ç»å
+¥"
+
+#. (sendvoting)
+#: root/templates/default.tt:10
+msgid "An email has been sent to %1"
+msgstr "é»å­éµä»¶å·²å³éå° %1"
+
+#. (c.req.param("mail"))
+#: root/templates/newpoll/request.tt:4
+msgid ""
+"An email has been sent to %1, follow the instructions to complete poll\n"
+"creation"
+msgstr "é»å­éµä»¶å·²å³éå° %1ïŒè«äŸåŸªæç€ºå®æå»ºç«æç¥š"
+
+#: root/templates/admin/date.tt:34
+msgid "Apr"
+msgstr "åæ"
+
+#: root/templates/admin/date.tt:20
+msgid "April"
+msgstr "åæ"
+
+#: root/mail/voting_passwd.tt:7
+msgid "At URL"
+msgstr "æŒç¶²å"
+
+#: root/templates/admin/date.tt:38
+msgid "Aug"
+msgstr "å
+«æ"
+
+#: root/templates/admin/date.tt:24
+msgid "August"
+msgstr "å
+«æ"
+
+#: lib/Epoll/Controller/Ballot.pm:61
+msgid "Ballot"
+msgstr "éžç¥š"
+
+#: root/templates/includes/admin_menu.tt:7
+msgid "Ballots"
+msgstr "éžç¥š"
+
+#: root/templates/includes/poll_results.tt:28
+msgid "Ballots count"
+msgstr "éžç¥šæž"
+
+#: root/templates/includes/poll_results.tt:49
+msgid "Ballots list:"
+msgstr "éžç¥šæž
+å®ïŒ"
+
+#: root/templates/includes/poll.tt:23 root/templates/includes/poll.tt:33
+msgid "Ballots:"
+msgstr "éžç¥šïŒ"
+
+#: root/templates/importv/ldap.tt:2
+msgid "Base DN:"
+msgstr "åºç€ DNïŒ"
+
+#: root/templates/admin/votersimport.tt:13
+#: root/templates/admin/votersimport.tt:14
+msgid "CSV file"
+msgstr "CSV æª"
+
+#: root/templates/admin/denied.tt:4
+msgid "Cannot modify a running or a finished poll"
+msgstr "ç¡æ³è®æŽå·è¡äž­æå·²å®æçæç¥š"
+
+#: root/templates/errors/mail.tt:1
+msgid "Cannot send email:"
+msgstr "ç¡æ³å³éé»å­éµä»¶ïŒ"
+
+#: root/templates/includes/locale_select_form.tt:4
+msgid "Change language"
+msgstr "è®æŽèªèš"
+
+#: root/templates/admin/date.tt:54
+msgid "Close"
+msgstr "éé"
+
+#: lib/Epoll/Controller/Newpoll.pm:84
+msgid "Confirm new poll creation"
+msgstr "ç¢ºèªå»ºç«æ°æç¥š"
+
+#: root/templates/ballot/default.tt:14
+msgid "Confirm your vote"
+msgstr "ç¢ºèªæšçæç¥š"
+
+#: root/templates/ballot/done.tt:23
+msgid "Could not send the summary mail:"
+msgstr "ç¡æ³å³éæèŠéµä»¶ïŒ"
+
+#: lib/Epoll/Controller/Newpoll.pm:27 root/templates/includes/header.tt:28
+#: root/templates/newpoll/index.tt:3
+msgid "Create a new poll"
+msgstr "å»ºç«æ°æç¥š"
+
+#: root/templates/admin/date.tt:112
+msgid "DD/MM/YYYY HH:MM:SS"
+msgstr "DD/MM/YYYY HH:MM:SS"
+
+#: lib/Epoll/Controller/Admin.pm:293
+msgid "Date"
+msgstr "æ¥æ"
+
+#: root/templates/admin/date.tt:112
+msgid "Date format is"
+msgstr "æ¥ææ ŒåŒçº"
+
+#: root/templates/includes/admin_menu.tt:11
+msgid "Dates"
+msgstr "æ¥æ"
+
+#: root/templates/admin/date.tt:42
+msgid "Dec"
+msgstr "åäºæ"
+
+#: root/templates/admin/date.tt:28
+msgid "December"
+msgstr "åäºæ"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:11
+msgid "Decrypt ballots"
+msgstr "è§£å¯éžç¥š"
+
+#: root/templates/admin/ballot.tt:18 root/templates/admin/delete.tt:15
+#: root/templates/admin/delete.tt:28 root/templates/admin/voters.tt:57
+#: root/templates/includes/admin_menu.tt:19
+msgid "Delete"
+msgstr "åªé€"
+
+#: root/templates/admin/delete.tt:8
+msgid "Delete ballots"
+msgstr "åªé€éžç¥š"
+
+#: root/templates/admin/delete.tt:22
+msgid "Delete this poll"
+msgstr "åªé€æ­€æç¥š"
+
+#: root/templates/admin/includes/poll_settings.tt:10
+msgid "Description:"
+msgstr "æè¿°ïŒ"
+
+#: root/templates/importv/ldap.tt:9
+msgid "Display Name attributes:"
+msgstr "é¡¯ç€ºåçš±å±¬æ§ïŒ"
+
+#: root/templates/admin/includes/poll_settings.tt:43
+msgid "Don't encrypt ballot"
+msgstr "äžèŠå å¯éžç¥š"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:4
+msgid "Don't send receipt by email"
+msgstr "äžèŠçšé»å­éµä»¶å³éåæ¢"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:16
+msgid "Don't show ballot id after poll"
+msgstr "æç¥šåŸäžèŠé¡¯ç€ºéžç¥šä»£ç¢Œ"
+
+#: root/templates/admin/includes/poll_settings.tt:40
+msgid "Download private key"
+msgstr "äžèŒç§å¯éé°"
+
+#: root/templates/admin/votersimport.tt:10
+#: root/templates/admin/votersimport.tt:11
+msgid "Dummy"
+msgstr "å»¢ç¥š"
+
+#: root/templates/pollinc/binary/results.tt:11
+msgid "Elected"
+msgstr "å·²æç¥š"
+
+#: root/templates/admin/voters.tt:55
+msgid "Email"
+msgstr "é»å­éµä»¶"
+
+#: root/templates/admin/voters.tt:15
+msgid "Email address:"
+msgstr "é»å­éµä»¶å°åïŒ"
+
+#: root/templates/importv/ldap.tt:7
+msgid "Email attributes:"
+msgstr "é»å­éµä»¶å±¬æ§ïŒ"
+
+#: root/templates/admin/includes/poll_extra_settings.tt:9
+msgid "Email includes ballot id"
+msgstr "å
+å«éžç¥šä»£ç¢Œçé»å­éµä»¶"
+
+#: root/templates/admin/voters.tt:34
+msgid "Email language"
+msgstr "é»å­éµä»¶èªèš"
+
+#: root/templates/includes/ballot_form.tt:22
+msgid "Empty ballot"
+msgstr "ç©ºçœéžç¥š"
+
+#: root/templates/includes/poll_results.tt:72
+#, fuzzy
+msgid "Empty ballots"
+msgstr "ç©ºçœéžç¥š"
+
+#: root/templates/admin/includes/poll_settings.tt:49
+msgid "Encrypt poll"
+msgstr "å å¯æç¥š"
+
+#: root/templates/admin/votersimport.tt:48
+msgid "Enter a hint for the password here"
+msgstr "åšæ­€èŒžå
+¥å¯ç¢Œæç€º"
+
+#: root/templates/newpoll/default.tt:5
+msgid "Enter administration password for this poll"
+msgstr "èŒžå
+¥æ­€æç¥šçç®¡çå¯ç¢Œ"
+
+#: root/templates/admin/includes/ballot_decrypt.tt:8
+msgid "Enter poll key here:"
+msgstr "åšæ­€èŒžå
+¥æç¥šéé°ïŒ"
+
+#: root/templates/admin/login.tt:7
+msgid "Enter poll password: "
+msgstr "èŒžå
+¥æç¥šå¯ç¢ŒïŒ"
+
+#: root/templates/newpoll/norequest.tt:6
+msgid "Enter the request ID you received by email"
+msgstr "èŒžå
+¥æšæ¶å°çé»å­éµä»¶äž­çè«æ±ä»£ç¢Œ"
+
+#: root/templates/default.tt:13
+msgid "Enter your email address to receive a list of your polls"
+msgstr "èŒžå
+¥æšçé»å­éµä»¶å°åä»¥äŸ¿æ¥æ¶æšçæç¥šæž
+å®"
+
+#: root/templates/ballot/default.tt:16
+msgid "Error:"
+msgstr "é¯èª€ïŒ"
+
+#: root/templates/admin/date.tt:32
+msgid "Feb"
+msgstr "äºæ"
+
+#: root/templates/admin/date.tt:18
+msgid "February"
+msgstr "äºæ"
+
+#: root/templates/pollinc/binary/ballot.tt:39
+msgid "Free choice"
+msgstr "èªç±éžæ"
+
+#: root/templates/admin/date.tt:49
+msgid "Friday"
+msgstr "é±äº"
+
+#: root/templates/pollinc/binary/ballot.tt:19
+msgid "From the list of voters"
+msgstr "åŸæç¥šäººæž
+å®äž­"
+
+#: root/mail/poll_reminder_voting.tt:1
+msgid "Hello,"
+msgstr "ååïŒ"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "Id"
+msgstr "ä»£ç¢Œ"
+
+#: root/templates/admin/voters.tt:25
+msgid "Import the list of voters..."
+msgstr "å¯å
+¥æç¥šäººæž
+å®..."
+
+#: root/templates/admin/votersimport.tt:51
+msgid "Import this list"
+msgstr "å¯å
+¥æ­€æž
+å®"
+
+#: root/templates/ballot/login.tt:6
+msgid ""
+"Invalid login/password, are you sure you can\n"
+"participate to this poll ?"
+msgstr ""
+"äžåæ³çäœ¿çšè
+åž³èæå¯ç¢Œãæšç¢ºå®æšå¯ä»¥\n"
+"åå æ­€æç¥šåïŒ"
+
+#: root/templates/newpoll/index.tt:21
+msgid "Invalid site password:"
+msgstr "äžåæ³çç«å°å¯ç¢ŒïŒ"
+
+#: root/templates/admin/date.tt:31
+msgid "Jan"
+msgstr "äžæ"
+
+#: root/templates/admin/date.tt:17
+msgid "January"
+msgstr "äžæ"
+
+#: root/templates/admin/date.tt:37
+msgid "Jul"
+msgstr "äžæ"
+
+#: root/templates/admin/date.tt:23
+msgid "July"
+msgstr "äžæ"
+
+#: root/templates/admin/date.tt:36
+msgid "Jun"
+msgstr "å
+­æ"
+
+#: root/templates/admin/date.tt:22
+msgid "June"
+msgstr "å
+­æ"
+
+#: root/mail/voting_passwd.tt:16
+msgid "Keep this information in a safe place, it won't be sent to you again."
+msgstr "è«ä¿ææ­€è³èšåšäžåå®å
+šçå°æ¹ïŒå®äžæåæ¬¡å³éçµŠäœ ã"
+
+#: root/templates/admin/votersimport.tt:16
+#: root/templates/admin/votersimport.tt:17
+msgid "LDAP"
+msgstr "LDAP"
+
+#: root/templates/pollinc/binary/results.tt:9
+msgid "Legend:"
+msgstr "åäŸïŒ"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Line nÂ°"
+msgstr "ç·æ¢ nÂ°"
+
+#: root/templates/includes/signing_list.tt:11
+msgid "List of voters"
+msgstr "æç¥šè
+æž
+å®"
+
+#: lib/Epoll/Controller/Ballot.pm:46
+msgid "Login"
+msgstr "ç»å
+¥"
+
+#: root/templates/ballot/login.tt:13
+msgid "Mail:"
+msgstr "éµä»¶ïŒ"
+
+#: root/templates/importv/csv.tt:1
+msgid "Mail@domain;Name"
+msgstr "Mail@domain;åçš±"
+
+#: root/templates/admin/date.tt:33
+msgid "Mar"
+msgstr "äžæ"
+
+#: root/templates/admin/date.tt:19
+msgid "March"
+msgstr "äžæ"
+
+#: root/templates/admin/date.tt:21 root/templates/admin/date.tt:35
+msgid "May"
+msgstr "äºæ"
+
+#: root/templates/admin/date.tt:55
+msgid "Minimize"
+msgstr "æå°å"
+
+#: root/templates/ballot/default.tt:44
+msgid "Modify my vote"
+msgstr "è®æŽæçæç¥š"
+
+#: root/templates/admin/date.tt:45
+msgid "Monday"
+msgstr "é±äž"
+
+#: root/templates/default.tt:23
+msgid "My polls:"
+msgstr "æçæç¥šïŒ"
+
+#: root/templates/admin/includes/poll_settings.tt:8
+#: root/templates/admin/voters.tt:12
+msgid "Name:"
+msgstr "åçš±ïŒ"
+
+#: lib/Epoll/Controller/Newpoll.pm:55
+msgid "New poll request"
+msgstr "æ°çæç¥šèŠæ±"
+
+#: root/templates/admin/ballot.tt:11
+msgid "No choices were made"
+msgstr "æ²ææäžä»»äœéžé 
+"
+
+#: lib/Epoll/Controller/Newpoll.pm:79
+msgid "No poll creation request"
+msgstr "æ²æå»ºç«æç¥šèŠæ±"
+
+#: root/templates/ballot/index.tt:15
+msgid "No polls currently running"
+msgstr "æ²æä»»äœæç¥šå·è¡äž­"
+
+#: root/templates/pollinc/binary/results.tt:42
+msgid "No results"
+msgstr "æ²æçµæ"
+
+#: root/templates/admin/voters.tt:47
+msgid "No subscribed voters"
+msgstr "æ²æå·²èšé±çæç¥šäºº"
+
+#: root/templates/newpoll/norequest.tt:4
+msgid "No such request found"
+msgstr "æŸäžå°è©²èŠæ±"
+
+#: root/templates/pollinc/binary/ballot.tt:33
+msgid "No voters to show"
+msgstr "æ²ææç¥šäººå¯é¡¯ç€º"
+
+#: root/templates/pollinc/binary/results.tt:12
+msgid "Not elected"
+msgstr "å°æªéžæ"
+
+#: root/templates/admin/date.tt:41
+msgid "Nov"
+msgstr "åäžæ"
+
+#: root/templates/admin/date.tt:27
+msgid "November"
+msgstr "åäžæ"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Number"
+msgstr "ç·šè"
+
+#: root/templates/includes/poll_results.tt:19
+msgid "Number of choices to retain:"
+msgstr "æå€å¯éžïŒ"
+
+#: root/templates/includes/poll_results.tt:32
+msgid "Number of empty ballots"
+msgstr "ç©ºçœéžç¥šæžïŒ"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:18
+msgid "Number of free input fields:"
+msgstr "èªç±èŒžå
+¥æ¬äœæžïŒ"
+
+#: root/templates/includes/poll_results.tt:37
+msgid "Number of null ballots"
+msgstr "äœå»¢éžç¥šæž"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:23
+msgid "Number of people to elect, taken from the list of voters"
+msgstr "åéžäººæžïŒåŸæç¥šè
+æž
+å®äž­ååº"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:6
+msgid "Number of possible choices"
+msgstr "å¯éžææž"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "Number of votes"
+msgstr "æç¥šæž"
+
+#: root/templates/admin/date.tt:40
+msgid "Oct"
+msgstr "åæ"
+
+#: root/templates/admin/date.tt:26
+msgid "October"
+msgstr "åæ"
+
+#: lib/Epoll/Controller/Ballot.pm:111
+msgid "One or more values are duplicated:"
+msgstr "äžåä»¥äžçæžåŒåºçŸéè€ïŒ"
+
+#: lib/Epoll/Controller/Ballot.pm:98
+msgid "Only "
+msgstr "åªæ"
+
+#. (c.model("Vote").dbtime)
+#: root/templates/includes/footer.tt:3
+msgid "Page generated the %1"
+msgstr "é é¢ç¢ç %1"
+
+#: root/templates/includes/poll.tt:22
+msgid "Participated"
+msgstr "å·²åå "
+
+#: root/templates/includes/poll_results.tt:23
+msgid "Participation"
+msgstr "åå "
+
+#: root/templates/newpoll/index.tt:27
+msgid "Password"
+msgstr "å¯ç¢Œ"
+
+#: root/templates/newpoll/index.tt:16
+msgid "Password of this poll:"
+msgstr "æ­€æç¥šå¯ç¢ŒïŒ"
+
+#: root/templates/ballot/login.tt:17
+msgid "Password:"
+msgstr "å¯ç¢ŒïŒ"
+
+#: root/templates/ballot/login.tt:9
+msgid "Please authenticate to participate to this poll"
+msgstr "è«å
+èªè­æèœåå æ­€æç¥š"
+
+#: root/templates/ballot/done.tt:25 root/templates/errors/mail.tt:3
+msgid "Please contact your system administrator"
+msgstr "è«è¯ç¹«æšçç³»çµ±ç®¡çå¡"
+
+#: root/templates/admin/delete_ballot_confirm.tt:6
+msgid "Please, confirm ballot deletion"
+msgstr "è«ç¢ºèªæ¯åŠåªé€éžç¥š"
+
+#. (poll.info("label"))
+#: root/templates/admin/delete_poll_confirm.tt:6
+msgid "Please, confirm the deletion of poll %1"
+msgstr "è«ç¢ºèªæ¯åŠåªé€æç¥š %1"
+
+#: root/templates/includes/poll_results.tt:15
+msgid "Poll administrator must validate some ballots"
+msgstr "æç¥šç®¡çè
+å¿
+é ç¢ºèªæäºéžç¥š"
+
+#: root/templates/admin/voters.tt:38
+msgid "Poll date must be set before announcing poll to voters"
+msgstr "æç¥šæ¥æå¿
+é èš­å®åšå°æç¥šè
+å®£åä¹å"
+
+#: root/templates/admin/date.tt:125
+msgid "Poll end:"
+msgstr "æç¥šçµæïŒ"
+
+#: root/templates/includes/poll_running.tt:3
+msgid "Poll is currently running"
+msgstr "æç¥šå·²ç¶åšé²è¡äž­"
+
+#: root/templates/newpoll/index.tt:12
+msgid "Poll name:"
+msgstr "æç¥šåçš±ïŒ"
+
+#: root/templates/includes/poll.tt:18
+msgid "Poll open from"
+msgstr "æç¥šéåæŒïŒ"
+
+#: lib/Epoll/Controller/Root.pm:57 lib/Epoll/Controller/Root.pm:59
+msgid "Poll request reminder"
+msgstr "æç¥šèŠæ±æé"
+
+#: root/templates/admin/date.tt:115
+msgid "Poll start:"
+msgstr "æç¥šéå§ïŒ"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:11
+msgid "Possible number of people to elect"
+msgstr "æéžäººæž"
+
+#: root/templates/admin/ballot.tt:31
+msgid "Preview ballot"
+msgstr "é èŠœéžç¥š"
+
+#: root/mail/ballot_confirm.tt:16 root/mail/poll_reminder_voting.tt:33
+#: root/mail/voting_passwd.tt:30
+msgid "Regards"
+msgstr "éæŒ"
+
+#: root/templates/includes/poll_results.tt:10
+msgid "Report in PDF"
+msgstr "ä»¥ PDF æ ŒåŒç¢çå ±å"
+
+#: root/templates/includes/poll_results.tt:9
+msgid "Result in PDF"
+msgstr "ä»¥ PDF æ ŒåŒç¢ççµæ"
+
+#: root/templates/includes/poll_results.tt:92
+msgid "Results haven't been published yet"
+msgstr "å°æªçŒåžççµæ"
+
+#: root/templates/ballot/done.tt:16 root/templates/ballot/signed.tt:6
+msgid "Results will be available"
+msgstr "çµæå·²å¯çŒåž"
+
+#: root/mail/ballot_confirm.tt:13
+msgid "Results will be available here"
+msgstr "çµæå°åšæ­€çŒåž"
+
+#: root/templates/includes/poll_results.tt:17
+msgid "Results:"
+msgstr "çµæïŒ"
+
+#: root/templates/admin/includes/poll_settings.tt:13
+msgid "Rules:"
+msgstr "èŠåïŒ"
+
+#: root/templates/admin/date.tt:50
+msgid "Saturday"
+msgstr "é±å
+­"
+
+#: lib/Epoll/Controller/Ajax.pm:41
+#: root/templates/admin/includes/poll_settings.tt:25
+#: root/templates/includes/ballot_settings.tt:10
+msgid "Save"
+msgstr "å²å­"
+
+#: root/templates/pollinc/binary/results.tt:7
+msgid "Score:"
+msgstr "åæžïŒ"
+
+#: root/mail/poll_request.tt:11
+msgid "See you soon !"
+msgstr "åžæåŸå¿«åèŠå°æšïŒ"
+
+#: root/templates/admin/voters.tt:35
+msgid "Send password"
+msgstr "å³éå¯ç¢Œ"
+
+#: root/templates/admin/voters.tt:31
+msgid "Send password to voters"
+msgstr "å³éå¯ç¢ŒçµŠæç¥šè
+"
+
+#: root/templates/admin/date.tt:39
+msgid "Sep"
+msgstr "ä¹æ"
+
+#: root/templates/admin/date.tt:25
+msgid "September"
+msgstr "ä¹æ"
+
+#: root/templates/includes/signing_list.tt:14
+msgid "Sign"
+msgstr "ç°œçœ²"
+
+#: root/templates/newpoll/index.tt:24
+msgid "Site password:"
+msgstr "ç«å°å¯ç¢ŒïŒ"
+
+#: root/templates/admin/includes/ballot_validation.tt:8
+msgid "Some ballots need to be validated"
+msgstr "æäºéžç¥šéèŠç¢ºèª"
+
+#: root/templates/admin/voters.tt:56
+msgid "Status"
+msgstr "çæ
+"
+
+#: root/templates/admin/date.tt:44
+msgid "Sunday"
+msgstr "é±æ¥"
+
+#: root/templates/includes/poll_results.tt:14
+msgid "Temporary results"
+msgstr "æ«æçµæ"
+
+#: root/templates/newpoll/request.tt:7
+msgid "Thank you"
+msgstr "æè¬æš"
+
+#: root/templates/includes/poll.tt:26
+msgid "The number of ballots doesn't match the number of voters"
+msgstr "éžç¥šæžèæç¥šäººæžäžç¬Š"
+
+#: lib/Epoll/Controller/Admin.pm:57 lib/Epoll/Controller/Ajax.pm:44
+msgid "The poll finish before starting"
+msgstr "æç¥šçµææéèš­åšéå§å"
+
+#: lib/Epoll/Controller/Ajax.pm:47
+msgid "The start of the poll must be in the future"
+msgstr "æç¥šéå§æéå¿
+é åšæªäŸ"
+
+#: root/templates/admin/delete_poll_confirm.tt:8
+msgid "This action cannot be reverted"
+msgstr "æ­€åäœç¡æ³ååŸ©"
+
+#: root/mail/poll_reminder_voting.tt:14
+msgid "This poll end"
+msgstr "æç¥šçµæ"
+
+#: root/templates/ballot/closed.tt:8 root/templates/vote/default.tt:16
+msgid "This poll is not yet open"
+msgstr "æç¥šå°æªéå"
+
+#: root/templates/ballot/closed.tt:10
+msgid "This poll is over, results are now available"
+msgstr "æç¥šå·²çµæïŒçµæå·²çŒåž"
+
+#: root/templates/admin/delete.tt:24
+msgid ""
+"This will completely delete all data about this poll (configuration,\n"
+"list of voters, ballots)."
+msgstr "éæš£æå°æ­€æç¥šçææè³ææŽååªé€ïŒå
+å«èš­å®ãæç¥šè
+æž
+å®èéžç¥šç­ïŒã"
+
+#: root/templates/admin/delete.tt:10
+msgid ""
+"This will delete sensitive data from database and results will be finally\n"
+"computed. Note that voters won't be able to check their ballots anymore"
+msgstr ""
+"éæš£æåŸè³æåº«äž­åªé€ææè³æïŒçµææçµæè¢«èšç®ãæ³šæåŸæ­€æç¥šè
+å°ç¡æ³åæª¢æ¥ä»"
+"åçéžç¥š"
+
+#: root/templates/admin/date.tt:48
+msgid "Thursday"
+msgstr "é±å"
+
+#: root/mail/poll_request.tt:8
+msgid "To validate the request please go to"
+msgstr "èŠç¢ºèªèŠæ±ïŒè«ååŸ"
+
+#: root/templates/admin/date.tt:56
+msgid "Today"
+msgstr "ä»å€©"
+
+#: root/templates/admin/date.tt:46
+msgid "Tuesday"
+msgstr "é±å"
+
+#: root/templates/importv/ldap.tt:5
+msgid "UID attributes:"
+msgstr "UID å±¬æ§ïŒ"
+
+#: root/templates/importv/ldap.tt:1
+msgid "Uri:"
+msgstr "URIïŒ"
+
+#: root/templates/admin/votersimport.tt:47
+msgid "Use external authentication"
+msgstr "äœ¿çšå€éšèªè­"
+
+#: root/templates/ballot/default.tt:43
+#: root/templates/includes/admin_menu.tt:15
+msgid "Validate"
+msgstr "ç¢ºèª"
+
+#: lib/Epoll/Controller/Admin.pm:320
+msgid "Validation"
+msgstr "ç¢ºèª"
+
+#: root/templates/includes/ballot_form.tt:18
+msgid "Vote"
+msgstr "æç¥š"
+
+#: lib/Epoll/Controller/Ballot.pm:128
+msgid "Vote confirmation:"
+msgstr "æç¥šç¢ºèªïŒ"
+
+#: root/templates/includes/signing_list.tt:13
+msgid "Voter"
+msgstr "æç¥šè
+"
+
+#: root/templates/includes/admin_menu.tt:9
+msgid "Voters"
+msgstr "æç¥šè
+"
+
+#: lib/Epoll/Controller/Admin.pm:215
+msgid "Voting invitation"
+msgstr "æç¥šéè«"
+
+#: root/templates/includes/header.tt:23
+msgid "Web voting system"
+msgstr "ç¶²é æç¥šç³»çµ±"
+
+#: root/templates/admin/date.tt:47
+msgid "Wednesday"
+msgstr "é±äž"
+
+#: root/templates/includes/header.tt:27
+msgid "Welcome"
+msgstr "æ­¡è¿"
+
+#: root/templates/ballot/done.tt:13
+msgid "Write it down if you want to be able to check it at the end of the poll"
+msgstr "è¥æšèŠèœåšæç¥šçµæææª¢æ¥ïŒè«å°å®å¯«äžäŸ"
+
+#: root/templates/admin/delete_poll_confirm.tt:11
+msgid "Yes, delete this poll"
+msgstr "æ¯çïŒè«åªé€æ­€æç¥š"
+
+#. ([ c.session.mail, c.req.address ])
+#: root/templates/ballot/default.tt:5
+msgid ""
+"You are %1, your IP address (%2) will be also recorded\n"
+"(independantly from the ballot)"
+msgstr "æšæ¯ %1ïŒæšç IP äœåïŒ%2ïŒå°æè¢«çŽéïŒäœäžæèšåšéžç¥šäž­ïŒ"
+
+#: root/mail/voting_passwd.tt:2
+msgid "You are invited to participate in this poll"
+msgstr "æšè¢«éè«åèæ­€æ¬¡æç¥š"
+
+#: root/mail/poll_reminder_voting.tt:9
+msgid "You are listed as a voter on these polls"
+msgstr "æšè¢«åçºéäºæç¥šçæç¥šäºº"
+
+#: root/mail/poll_reminder_voting.tt:20
+msgid "You are the administrator for these polls"
+msgstr "æšæ¯éäºæç¥šçç®¡çè
+"
+
+#: root/templates/includes/poll_running.tt:4
+msgid "You can"
+msgstr "æšå¯ä»¥"
+
+#: root/templates/admin/includes/poll_settings.tt:47
+msgid "You can choose a passphrase to protect the key:"
+msgstr "æšå¯ä»¥èŒžå
+¥ä¿è­·ééé°çå¯ç¢ŒçèªïŒ"
+
+#: root/templates/newpoll/request.tt:9
+msgid "You can enter the request code here"
+msgstr "æšå¯ä»¥åšæ­€èŒžå
+¥èŠæ±ç¢Œ"
+
+#: root/templates/default.tt:7
+msgid "You don't own any polls"
+msgstr "æšæªææä»»äœæç¥š"
+
+#: root/mail/ballot_confirm.tt:2
+msgid "You have just participated in the poll:"
+msgstr "æšååå äºæ­€æç¥šïŒ"
+
+#: lib/Epoll/Controller/Admin.pm:65 lib/Epoll/Controller/Ajax.pm:50
+msgid "You must define a start and a end date"
+msgstr "æšå¿
+é å®çŸ©éå§èçµææ¥æ"
+
+#. (poll.info("choice_count"))
+#: root/templates/pollinc/binary/ballot.tt:4
+msgid "You need to select %1 choices"
+msgstr "æšéèŠéžæ %1 åéžé 
+"
+
+#: root/mail/voting_passwd.tt:12
+msgid "You will be able to submit your vote from"
+msgstr "æšå¯ä»¥æäº€æšçéžç¥šïŒåŸ"
+
+#: root/mail/poll_reminder_voting.tt:4
+msgid "You've asked for a reminder about the poll(s) you're participating in"
+msgstr "æšå·²èŠæ±ç³»çµ±æéæšåèæç¥š"
+
+#: root/templates/ballot/done.tt:7
+msgid "You've just submitted your ballot"
+msgstr "æšå·²æäº€äºæšçéžç¥š"
+
+#: root/mail/poll_request.tt:1
+msgid "You've requested to create a new poll"
+msgstr "æšå·²èŠæ±å»ºç«æ°æç¥š"
+
+#: root/mail/ballot_confirm.tt:9
+msgid "Your ballot ID"
+msgstr "æšçéžç¥šä»£ç¢Œ"
+
+#: root/templates/newpoll/index.tt:9
+msgid "Your email address:"
+msgstr "æšçé»å­éµä»¶å°åïŒ"
+
+#: root/mail/voting_passwd.tt:8
+msgid "Your login is"
+msgstr "æšçäœ¿çšè
+åçš±çº"
+
+#: root/mail/voting_passwd.tt:9
+msgid "Your password is"
+msgstr "æšçå¯ç¢Œçº"
+
+#: root/templates/includes/header.tt:31
+msgid "Your poll:"
+msgstr "æšçæç¥šïŒ"
+
+#: root/mail/poll_request.tt:4
+msgid "Your request ID is"
+msgstr "æšçèŠæ±ä»£ç¢Œçº"
+
+#: root/templates/ballot/default.tt:42
+msgid "Your vote will be final after validation"
+msgstr "æšçéžç¥šå°æåšç®¡çå¡ç¢ºèªåŸçæ"
+
+#: root/templates/ballot/default.tt:55
+msgid "Your vote will be registered only after validation"
+msgstr "æšçéžç¥šå¿
+é åšç¢ºèªåŸæèœçæ"
+
+#: root/templates/default.tt:28
+msgid "administrate"
+msgstr "ç®¡ç"
+
+#. (signed_date)
+#: root/templates/ballot/signed.tt:5
+msgid "already participated in this poll the %1"
+msgstr "å·²åå äºæ­€æç¥šæŒ %1"
+
+#: root/templates/admin/validate.tt:21
+msgid "ballot containing:"
+msgstr "éžç¥šå
+å«ïŒ"
+
+#: lib/Epoll/Controller/Admin.pm:278
+msgid "ballots"
+msgstr "éžç¥š"
+
+#: root/templates/admin/validate.tt:34
+msgid "ballots found"
+msgstr "å·²æŸå°éžç¥š"
+
+#: root/templates/admin/date.tt:120 root/templates/admin/date.tt:130
+msgid "calendar"
+msgstr "æ¥æ"
+
+#: root/templates/pollinc/binary/results.tt:15
+msgid "choice"
+msgstr "éžé 
+"
+
+#: root/templates/includes/poll_results.tt:56
+msgid "comment"
+msgstr "æèŠ"
+
+#: root/templates/includes/poll_results.tt:52
+msgid "date (=> view as)"
+msgstr "æ¥æïŒ=> è¢«èŠçºïŒ"
+
+#: root/templates/admin/date.tt:116 root/templates/admin/date.tt:126
+msgid "date:"
+msgstr "æ¥æïŒ"
+
+#: root/templates/admin/voters.tt:71
+msgid "delete"
+msgstr "åªé€"
+
+#: root/templates/admin/delete_ballot_confirm.tt:9
+msgid "delete ballot"
+msgstr "åªé€éžç¥š"
+
+#. (poll.info("elected_count"))
+#: root/templates/includes/poll.tt:16
+#: root/templates/pollinc/binary/ballot.tt:6
+msgid "for %1 elected"
+msgstr "%1 åå·²éžå"
+
+#: root/templates/importv/csv.tt:1
+msgid "format:"
+msgstr "æ ŒåŒïŒ"
+
+#: root/templates/includes/signing_list.tt:23
+msgid "has voted"
+msgstr "å·²æç¥š"
+
+#: root/templates/ballot/closed.tt:11 root/templates/ballot/done.tt:17
+#: root/templates/ballot/signed.tt:7
+msgid "here"
+msgstr "åšæ­€"
+
+#: root/templates/pollinc/binary/ballot_settings.tt:12
+msgid "if you want to vote for more than one person"
+msgstr "è¥æšèŠæäžåä»¥äžçäºº"
+
+#: root/templates/admin/votersimport.tt:33
+msgid "import..."
+msgstr "å¯å
+¥..."
+
+#: root/templates/admin/validate.tt:77
+msgid "input value"
+msgstr "èŒžå
+¥æžåŒ"
+
+#: root/templates/admin/validate.tt:16
+#: root/templates/includes/poll_results.tt:78
+msgid "invalid"
+msgstr "äžåæ³"
+
+#: root/templates/admin/validate.tt:56
+msgid "is valid"
+msgstr "çºåæ³"
+
+#: root/templates/admin/validate.tt:58
+msgid "isn't valid"
+msgstr "äžåæ³"
+
+#: root/templates/admin/validate.tt:10
+msgid "list ballots:"
+msgstr "ååºéžç¥šïŒ"
+
+#: root/templates/admin/validate.tt:75
+msgid "map ballot value"
+msgstr "æ å°éžç¥šæžåŒ"
+
+#: root/templates/admin/validate.tt:77
+msgid "must be seen as"
+msgstr "å¿
+é è¢«èŠçº"
+
+#: root/templates/includes/poll_results.tt:80
+msgid "must be validated"
+msgstr "å¿
+é è¢«ç¢ºèª"
+
+#: root/templates/admin/validate.tt:14
+msgid "need validation"
+msgstr "éèŠç¢ºèª"
+
+#: root/templates/includes/poll_results.tt:54
+msgid "not from list"
+msgstr "äžæ¯åŸæž
+å®äž­"
+
+#: root/templates/includes/poll_results.tt:51
+msgid "number"
+msgstr "æžé"
+
+#: root/templates/admin/voters.tt:64
+msgid "password sent"
+msgstr "å¯ç¢Œå·²å³é"
+
+#: lib/Epoll/Controller/Ballot.pm:99
+msgid "possible choices"
+msgstr "å¯èœçéžæ"
+
+#: root/templates/admin/validate.tt:105
+msgid "publish results"
+msgstr "çŒåžçµæ"
+
+#: root/mail/poll_reminder_voting.tt:26
+msgid "running"
+msgstr "å·è¡äž­"
+
+#: root/templates/admin/votersimport.tt:20
+msgid "select"
+msgstr "éžæ"
+
+#: root/mail/poll_reminder_voting.tt:27
+msgid "terminated"
+msgstr "å·²çµçµ"
+
+#: root/templates/admin/date.tt:123 root/templates/admin/date.tt:133
+msgid "time:"
+msgstr "æéïŒ"
+
+#: root/mail/voting_passwd.tt:13 root/templates/includes/poll.tt:20
+msgid "to"
+msgstr "å°"
+
+#: root/mail/poll_reminder_voting.tt:25
+msgid "to come"
+msgstr "äŸ"
+
+#: root/templates/admin/validate.tt:18
+msgid "valid"
+msgstr "åæ³"
+
+#: root/templates/includes/poll_running.tt:5
+msgid "vote here"
+msgstr "åšæ­€æç¥š"
+
+#: lib/Epoll/Controller/Admin.pm:228
+msgid "voters list"
+msgstr "æç¥šè
+æž
+å®"
+
+#: root/templates/ballot/done.tt:9
+msgid "your ballot id is:"
+msgstr "æšçéžç¥šä»£ç¢ŒçºïŒ"
Index: /tags/2.00/lib/Epoll/Model/Vote.pm
===================================================================
--- /tags/2.00/lib/Epoll/Model/Vote.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Model/Vote.pm	(revision 478)
@@ -0,0 +1,35 @@
+package Epoll::Model::Vote;
+
+use strict;
+use warnings;
+use base 'Catalyst::Model';
+use base 'Epoll::DB';
+
+=head1 NAME
+
+Epoll::Model::Vote - Catalyst Model
+
+=head1 DESCRIPTION
+
+Catalyst Model.
+
+=cut
+
+sub new {
+    my ($class) = @_;
+    
+    bless Epoll::DB->new(Epoll->config->{db}), $class;
+}
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/Template/Plugin/Mail.pm
===================================================================
--- /tags/2.00/lib/Epoll/Template/Plugin/Mail.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/Template/Plugin/Mail.pm	(revision 478)
@@ -0,0 +1,50 @@
+# $Id$
+
+package Epoll::Template::Plugin::Mail;
+
+=head1 NAME
+
+Vote::Template::Plugin::Mail - Template Filter for email
+
+=head1 DESCRIPTION
+
+This filter replace '.' by 'dot' and '@' by 'at' to make email
+harder to find by spam bot.
+
+=cut
+
+use strict;
+use warnings;
+
+use base qw( Template::Plugin::Filter );
+
+sub init {
+    my $self = shift;
+    my $name = $self->{ _ARGS }->[0] || 'mail';
+    $self->install_filter($name);
+    return $self;
+}
+
+sub filter {
+    my ($self, $text) = @_;
+
+    $text ||= '';
+
+    $text =~ s/\@/ at /g;
+    $text =~ s/\./ dot /g;
+
+    $text
+}
+
+=head1 AUTHORS
+
+Olivier Thauvin
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/View/Ajax.pm
===================================================================
--- /tags/2.00/lib/Epoll/View/Ajax.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/View/Ajax.pm	(revision 478)
@@ -0,0 +1,35 @@
+package Epoll::View::Ajax;
+
+use strict;
+use warnings;
+use base 'Catalyst::View::TT';
+
+use Epoll;
+
+__PACKAGE__->config(
+    TEMPLATE_EXTENSION => '.tt',
+    INCLUDE_PATH => Epoll->path_to( 'root', 'templates' ),
+    PLUGIN_BASE => 'Epoll::Template::Plugin',
+    PRE_PROCESS => [ 'includes/loc.tt', ],
+);
+
+=head1 NAME
+
+Epoll::View::Ajax - Catalyst View
+
+=head1 DESCRIPTION
+
+Catalyst View.
+
+=head1 AUTHOR
+
+Olivier Thauvin
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/View/Latex.pm
===================================================================
--- /tags/2.00/lib/Epoll/View/Latex.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/View/Latex.pm	(revision 478)
@@ -0,0 +1,102 @@
+package Epoll::View::Latex;
+
+use strict;
+use base 'Epoll::View::TT';
+use File::Temp;
+
+my $enable = 0;
+
+sub BEGIN {
+    eval "use LaTeX::Driver";
+    if (!$@) {
+        $__PACKAGE__::enable = 1;
+    }
+}
+
+__PACKAGE__->config(
+    TEMPLATE_EXTENSION => '.tt',
+    INCLUDE_PATH => Epoll->path_to( 'root', 'latex' ),
+    PRE_PROCESS => 'includes/header.tt',
+    POST_PROCESS => 'includes/footer.tt',
+    PLUGIN_BASE => 'Epoll::Template::Plugin',
+    POST_CHOMP => 1,
+    PRE_CHOMP => 1,
+);
+
+=head1 NAME
+
+Epoll::View::Latex - Latex View for Epoll
+
+=head1 DESCRIPTION
+
+TT View for Epoll. 
+
+=cut
+
+sub enabled {
+    $__PACKAGE__::enable;
+}
+
+sub process {
+    my ($self, $c) = @_;
+
+    $c->stash->{format} ||= 'pdf';
+    my $output = $self->render(
+        $c, $c->stash->{template}
+    );
+    
+    if ($c->stash->{format} eq 'tex') {
+        $c->res->body($output);
+        return;
+    }
+
+    my ($fh, $filename) = File::Temp::tempfile(
+        SUFFIX => ('.' . $c->stash->{format}),
+    );
+    close($fh);
+
+    LaTeX::Driver::hack->new(
+        source  => \$output,
+        output  => $filename,
+        format  => $c->stash->{format},
+    )->run;
+    open($fh, '<', $filename);
+    unlink($filename);
+    binmode($fh);
+    $c->res->body(join('', <$fh>));
+    close($fh);
+}
+
+# This is just a hack
+# Don't ask me why, but system() return -1 instead 0
+# under catalyst...
+# This is just an ugly workaround
+
+package LaTeX::Driver::hack;
+use base qw(LaTeX::Driver);
+
+sub run_command {
+    my ($self, @args) = @_;
+    for (0 .. 2) {
+        my $res = $self->SUPER::run_command(@args);
+        if ($res > 0) { return $res }
+    }
+    0; # is ok
+} 
+
+=head1 SEE ALSO
+
+L<Epoll>
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/View/Mail.pm
===================================================================
--- /tags/2.00/lib/Epoll/View/Mail.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/View/Mail.pm	(revision 478)
@@ -0,0 +1,69 @@
+package Epoll::View::Mail;
+
+use strict;
+use base 'Catalyst::View::TT';
+use Mail::Mailer;
+use Epoll;
+use Epoll::DB;
+
+__PACKAGE__->config(
+    TEMPLATE_EXTENSION => '.tt',
+    INCLUDE_PATH => Epoll->path_to( 'root', 'mail' ),
+    PLUGIN_BASE => 'Epoll::Template::Plugin',
+    PRE_PROCESS => [ 'includes/loc.tt', ],
+);
+
+=head1 NAME
+
+Epoll::View::TT - TT View for Epoll
+
+=head1 DESCRIPTION
+
+TT View for Epoll. 
+
+=cut
+
+sub render {
+    my ($self, $c, $template, $args) = @_;
+
+    # Backup locale, change it for mail
+    my $prev_language = $c->languages;
+    $c->languages([ $c->req->param('mail_locale') ])
+        if($c->req->param('mail_locale'));
+
+    $ENV{MAILADDRESS} = $args->{From};
+    my $mailer = new Mail::Mailer 'smtp', Server => (Epoll->config->{smtp} || 'localhost');
+    eval { 
+        $mailer->open({
+            (map { $_ => $args->{$_} } grep { $_ !~ /^(mail)$/ } keys %{ $args || {}}),
+            'Content-Type' => 'text/plain; charset=UTF-8; format=flowed',
+            'Content-Transfer-Encoding' => '8bit',
+            'X-Epoll-version' => $Epoll::DB::VERSION,
+        });
+        print $mailer
+        Catalyst::View::TT::render($self, $c, $template, { %{ $args->{mail} || {} }, c => $c });
+        $mailer->close;
+    };
+    if ($@) {
+        $c->stash->{mail_error} = $@;
+    }
+    # restore locale
+    $c->languages($prev_language);
+}
+
+=head1 SEE ALSO
+
+L<Epoll>
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/lib/Epoll/View/TT.pm
===================================================================
--- /tags/2.00/lib/Epoll/View/TT.pm	(revision 478)
+++ /tags/2.00/lib/Epoll/View/TT.pm	(revision 478)
@@ -0,0 +1,50 @@
+package Epoll::View::TT;
+
+use strict;
+use base 'Catalyst::View::TT';
+use Epoll;
+use Epoll::DB;
+
+__PACKAGE__->config(
+    TEMPLATE_EXTENSION => '.tt',
+    INCLUDE_PATH => Epoll->path_to( 'root', 'templates' ),
+    PRE_PROCESS => [ 'includes/loc.tt', 'includes/header.tt', ],
+    POST_PROCESS => 'includes/footer.tt',
+    PLUGIN_BASE => 'Epoll::Template::Plugin',
+    POST_CHOMP => 1,
+    PRE_CHOMP => 1,
+);
+
+=head1 NAME
+
+Epoll::View::TT - TT View for Epoll
+
+=head1 DESCRIPTION
+
+TT View for Epoll. 
+
+=cut
+
+sub process {
+    my ($self, $c) = @_;
+
+    $c->stash->{Epoll}{VERSION} = $Epoll::DB::VERSION;
+    Catalyst::View::TT::process($self, $c);
+}
+
+=head1 SEE ALSO
+
+L<Epoll>
+
+=head1 AUTHOR
+
+Thauvin Olivier
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself or CeCILL.
+
+=cut
+
+1;
Index: /tags/2.00/root/latex/includes/ballot.tt
===================================================================
--- /tags/2.00/root/latex/includes/ballot.tt	(revision 478)
+++ /tags/2.00/root/latex/includes/ballot.tt	(revision 478)
@@ -0,0 +1,23 @@
+[%- poll = c.model('Vote').results(voteid) %]
+%% $Id$
+
+\subsection{Liste des bulletins}
+
+[% FOREACH id = poll.ballot_keys %]
+[%- ballot = poll.ballot(id) -%]
+[% invalid = '#' _ ballot.info.invalid %]
+[% IF loop.first %]
+\begin{enumerate}
+[% END %]
+\item \verb+[% id %]+ [% "\textbf{invalidÃ©}" IF invalid == '#1' %] 
+
+[%- FOREACH item = ballot.items -%]
+[% '\begin{enumerate}' IF loop.first %]
+\item [% item.v %] [% '(' _ item.corrected _ ')' IF item.corrected -%]
+
+[% '\end{enumerate}' IF loop.last -%]
+[% END %]
+[% IF loop.last %]
+\end{enumerate}
+[% END %]
+[% END %]
Index: /tags/2.00/root/latex/includes/footer.tt
===================================================================
--- /tags/2.00/root/latex/includes/footer.tt	(revision 478)
+++ /tags/2.00/root/latex/includes/footer.tt	(revision 478)
@@ -0,0 +1,2 @@
+%% $Id$
+\end{document}
Index: /tags/2.00/root/latex/includes/header.tt
===================================================================
--- /tags/2.00/root/latex/includes/header.tt	(revision 478)
+++ /tags/2.00/root/latex/includes/header.tt	(revision 478)
@@ -0,0 +1,11 @@
+\documentclass[a4paper,10pt]{article}
+\usepackage{lmodern} %% lmodern vectoriel font
+\usepackage[frenchb]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+
+%% $Id$
+
+\title{[% c.model('Vote').poll(voteid).info.label %]}
+
+\begin{document}
Index: /tags/2.00/root/latex/includes/info.tt
===================================================================
--- /tags/2.00/root/latex/includes/info.tt	(revision 478)
+++ /tags/2.00/root/latex/includes/info.tt	(revision 478)
@@ -0,0 +1,89 @@
+[% USE Mail %]
+[%- poll = c.model('Vote').results(voteid) %]
+%% $Id$
+
+\section{Description du vote}
+
+[% IF poll.info('description') -%]
+\paragraph{Description:}
+
+[% poll.info('description') %]
+[%- END -%]
+
+[% IF poll.info('procedure') -%]
+\paragraph{RÃšglement:}
+
+[% poll.info('procedure') %]
+[%- END -%]
+
+[% poll.info('choice_count') %] choix Ã  faire
+[%- IF poll.info('choice_count') != poll.info('elected_count') -%]
+pour [% poll.info('elected_count') %] Ã©lu(s)[%- END -%].
+
+Etait candidats:
+
+[%- FOREACH chk = poll.choices -%]
+[% ch = poll.choice(chk) -%]
+[%- IF loop.first -%]
+\begin{enumerate}[% END -%]
+\item [% ch.info.label %]
+
+[%- IF loop.last -%]
+
+\end{enumerate}
+[%- END -%]
+[%- END -%]
+
+
+Nombre d'Ã©lecteurs: [% poll.voting_count %].
+
+\section{RÃ©sultats}
+
+\subsection{Participation}
+
+\begin{tabular}{|l|c|c|}
+\hline
+Participation&[% poll.signing_count %]&[% poll.signing_count / poll.voting_count * 100 | format('%.2f \%%') IF poll.voting_count %]\\
+\hline
+Nombre de bulltetins&[% poll.ballot_count %]&\\
+\hline
+Nombre de bulltetins blanc&[% poll.empty_ballot_count %]&[% poll.empty_ballot_count / poll.ballot_count * 100 | format('%.2f \%%') IF poll.ballot_count %]\\
+\hline
+Nombre de bulltetins nuls&[% poll.invalid_ballot_count %]&[% poll.invalid_ballot_count / poll.ballot_count * 100 | format('%.2f \%%') IF poll.ballot_count %]\\
+\hline
+Nombre de voix exprimÃ©es&[% poll.voices_ballot_count %]&[% poll.voices_ballot_count / poll.ballot_count * 100 | format('%.2f \%%') IF poll.ballot_count %]\\
+\hline
+\end{tabular}
+
+\subsection{Scores}
+
+[%- IF poll.ballot_count_nonull -%]
+[%- FOREACH res = poll.results -%]
+
+[% IF res.elected %]
+[% IF res.abs_maj %]
+[%- comment = 'Elu, majoritÃ© absolue' -%]
+[%- ELSE -%]
+[%- comment = 'Elu' -%]
+[%- END -%]
+[%- ELSE -%]
+[%- comment = '' -%]
+[%- END -%]
+
+[%- IF loop.first -%]
+\begin{tabular}{|r|l|r|c|l|}
+\hline
+ordre&choix&nb de voix&\%&commentaire\\
+\hline
+\hline
+[% END %]
+[% res.order %]& [% res.value %]& [% res.count %]& [% res.count * 100 / poll.ballot_count_nonull | format('%.2f') %]& [% comment %]\\
+\hline
+
+[%- IF loop.last -%]
+\end{tabular}
+[%- END %]
+[%- END -%]
+[%- ELSE -%]
+[%- END -%]
+
Index: /tags/2.00/root/latex/includes/voters.tt
===================================================================
--- /tags/2.00/root/latex/includes/voters.tt	(revision 478)
+++ /tags/2.00/root/latex/includes/voters.tt	(revision 478)
@@ -0,0 +1,14 @@
+[% USE Mail %]
+[%- poll = c.model('Vote').results(voteid) %]
+%% $Id$
+
+\subsection{Liste d'Ã©margement}
+
+[% FOREACH vkey = poll.voting_keys %]
+[% voting = poll.voting(vkey) %]
+[% '\begin{enumerate}' IF loop.first %]
+\item [% voting.info.id _ ' ' IF voting.info.id %]\verb+[% voting.info.mail | mail %]+
+[% "\nA votÃ©\n" IF voting.info.date %]
+[% '\end{enumerate}' IF loop.last -%]
+[% END %]
+
Index: /tags/2.00/root/latex/poll_report.tt
===================================================================
--- /tags/2.00/root/latex/poll_report.tt	(revision 478)
+++ /tags/2.00/root/latex/poll_report.tt	(revision 478)
@@ -0,0 +1,16 @@
+[% USE Mail %]
+[%- poll = c.model('Vote').results(voteid) %]
+%% $Id$
+
+\maketitle
+
+\tableofcontents{}
+
+[% INCLUDE 'includes/info.tt' %]
+
+\section{DonnÃ©es du vote}
+
+[% INCLUDE 'includes/voters.tt' %]
+
+[% INCLUDE 'includes/ballot.tt' %]
+
Index: /tags/2.00/root/latex/poll_results.tt
===================================================================
--- /tags/2.00/root/latex/poll_results.tt	(revision 478)
+++ /tags/2.00/root/latex/poll_results.tt	(revision 478)
@@ -0,0 +1,9 @@
+[% USE Mail %]
+[%- poll = c.model('Vote').results(voteid) %]
+%% $Id$
+
+\maketitle
+
+\tableofcontents{}
+
+[% INCLUDE 'includes/info.tt' %]
Index: /tags/2.00/root/mail/ballot_confirm.tt
===================================================================
--- /tags/2.00/root/mail/ballot_confirm.tt	(revision 478)
+++ /tags/2.00/root/mail/ballot_confirm.tt	(revision 478)
@@ -0,0 +1,16 @@
+[% poll = c.model('Vote').poll(voteid) %]
+[% l('You have just participated in the poll:') %]
+
+--------
+[% poll.info.label %]
+--------
+
+[% IF NOT poll.info.no_mail_ballot_id %]
+[% l('Your ballot ID') %]:
+[% ballotid %]
+[% END %]
+
+[% l('Results will be available here') %]:
+[% c.uri_for('/vote', poll.uid) %]
+
+[% l('Regards') %].
Index: /tags/2.00/root/mail/includes/loc.tt
===================================================================
--- /tags/2.00/root/mail/includes/loc.tt	(revision 478)
+++ /tags/2.00/root/mail/includes/loc.tt	(revision 478)
@@ -0,0 +1,4 @@
+[% MACRO l(text, args) BLOCK;
+    c.localize(text, args);
+END; %]
+
Index: /tags/2.00/root/mail/poll_reminder_voting.tt
===================================================================
--- /tags/2.00/root/mail/poll_reminder_voting.tt	(revision 478)
+++ /tags/2.00/root/mail/poll_reminder_voting.tt	(revision 478)
@@ -0,0 +1,33 @@
+[% l('Hello,') %]
+[%- vote = c.model('Vote') -%]
+
+[% l('You\'ve asked for a reminder about the poll(s) you\'re participating in') %]
+
+
+[%- FOREACH p = polls_voting -%]
+[% IF loop.first %]
+[% l('You are listed as a voter on these polls') %]:
+[% END %]
+[%- poll = vote.poll(p.poll) -%]
+[% c.uri_for('/', 'ballot', poll.uid) %]
+[% poll.info('label') %]
+[% l('This poll end') %]: [% poll.info.dend %] [% poll.info.hend %].
+
+[% END %]
+
+[%- FOREACH p = polls_owner -%]
+[% IF loop.first %]
+[% l('You are the administrator for these polls') %]:
+[% END %]
+[%- poll = vote.poll(p.id) -%]
+[% c.uri_for('/', 'admin', poll.uid) %]
+[%- status = poll.status -%]
+[%- IF status == 'BEFORE' %] ([% l('to come') %])[% END -%]
+[%- IF status == 'RUNNING' %] ([% l('running') %])[% END -%]
+[%- IF status == 'AFTER' %] ([% l('terminated') %])[% END -%]
+
+[% poll.info('label') %]
+
+[% END %]
+
+[% l('Regards') %].
Index: /tags/2.00/root/mail/poll_request.tt
===================================================================
--- /tags/2.00/root/mail/poll_request.tt	(revision 478)
+++ /tags/2.00/root/mail/poll_request.tt	(revision 478)
@@ -0,0 +1,11 @@
+[% l('You\'ve requested to create a new poll') %]:
+[% label %]
+
+[% l('Your request ID is') %]:
+
+[% reqid %]
+
+[% l('To validate the request please go to') %]
+[% c.uri_for('/newpoll', reqid) %]
+
+[% l('See you soon !') %]
Index: /tags/2.00/root/mail/voting_passwd.tt
===================================================================
--- /tags/2.00/root/mail/voting_passwd.tt	(revision 478)
+++ /tags/2.00/root/mail/voting_passwd.tt	(revision 478)
@@ -0,0 +1,30 @@
+[% poll = c.model('Vote').poll(voteid) %]
+[% l('You are invited to participate in this poll') %]
+
+[% poll.info.label %]
+
+--
+[% l('At URL') %]: [% c.uri_for('/ballot', poll.uid) %]
+[% l('Your login is') %]: [% mail %]
+[% l('Your password is') %]: [% passwd %]
+
+[% IF poll.info.dstart && poll.info.dstart -%]
+[% l('You will be able to submit your vote from') %] [% poll.info.dstart %] [% poll.info.hstart %]
+[% l('to') %] [% poll.info.dend %] [% poll.info.hend %]
+[%- END %]
+
+[% l('Keep this information in a safe place, it won\'t be sent to you again.') %]
+
+[% l('About this poll') %]:
+
+[% IF poll.info('description') %]
+[% poll.info('description') %]
+--------
+[%- END %]
+[% IF poll.info('procedure') %]
+[% poll.info('procedure') %]
+--------
+[%- END %]
+
+
+[% l('Regards') %].
Index: /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcalendar.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcalendar.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcalendar.css	(revision 478)
@@ -0,0 +1,482 @@
+/*SilverLight skin. default*/
+/* Appearance calendar standart view */
+.dhtmlxcalendar{
+	background: url(imgs/cal_bg_single.gif) no-repeat;
+	border: 0px solid green;
+	font-family: Arial;
+	z-index:99;
+	height:146px;
+	width:146px;
+  padding:16px;
+}
+/* Style for iframe (must have same values as real dimensions of calendar) */
+.dhtmlxcalendar_ifr,
+.dhtmlxcalendar_mini_ifr,
+.dhtmlxcalendar_maxi_ifr,
+.dhtmlxcalendar_long_ifr {
+  height:173px;
+  width:178px;
+}
+                                                                                                                                                                     
+.dhtmlxcalendar_maxi_ifr {
+  height: 176px;
+}
+/* Appearance for calendar with time */
+.dhtmlxcalendar_long {
+  background: url(imgs/cal_bg_single_long.gif) no-repeat;
+  height: 190px;
+}
+.dhtmlxcalendar_long_ifr{
+  height: 190px;
+}
+/* Appearance minimized maximized */
+.dhtmlxcalendar_mini{
+	background: url(imgs/cal_bg_single_mini.gif) no-repeat;
+	height:25px;
+	width:146px;
+}
+.dhtmlxcalendar_mini_ifr{
+  height: 25px;
+}
+/* Appearance header of calendar in minimized view */
+.dhtmlxcalendar_mini .winHeader{
+  margin-top:0px;
+  -moz-user-select:none;
+}
+/* Appearance header of calendar in standard view */
+.dhtmlxcalendar .winHeader {
+	height: 13px;
+	width:146px;
+  -moz-user-select:none;
+  border: 0;
+  margin-top:-11px;
+  margin-bottom: 12px;
+}
+/* Appearance header title */
+.dhtmlxcalendar .winTitle {
+	color:black;
+	font-size:11px;
+	float:left;
+	cursor: move;	
+	width: 100px;
+}
+/* Common appearance headers buttons */
+.dhtmlxcalendar .btn_maxi, 
+.dhtmlxcalendar .btn_mini,
+.dhtmlxcalendar .btn_close,
+.dhtmlxcalendar .btn_today,
+.dhtmlxcalendar .btn_clear {
+  background: url(imgs/btns.gif);
+  float:right;
+  height:12px;
+  width:12px;	
+  margin-left: 1px;
+  font-size: 0;
+}
+/* Button close*/
+.dhtmlxcalendar .btn_close {
+  background-position: 0 0;
+}
+/* Button today */
+.dhtmlxcalendar .btn_today {
+  background-position: -12px 0;
+}
+/* Button clear */
+.dhtmlxcalendar .btn_clear {
+  background-position: -24px 0;
+}
+/* Button mini in minimized view */
+.dhtmlxcalendar .btn_maxi {
+  background-position: -36px 0;
+}
+/* Button mini */
+.dhtmlxcalendar .btn_mini {
+  background-position: -48px 0;
+}
+/* Calendar body */
+.dhtmlxcalendar .entbox{
+	width:145px;
+	clear:both;
+}
+/* Common style for each cell of calendar */
+.dhtmlxcalendar td {
+	font-size: 10px;
+	font-family: Tahoma;
+	text-align:center;
+}
+
+/* Month left button */
+.dhtmlxcalendar .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar .dxcalmonth td.month_btn_right {
+	background: url(imgs/btns.gif) no-repeat;
+	background-position:-60px;
+	width:8px;
+}
+/* Month right button */
+.dhtmlxcalendar .dxcalmonth td.month_btn_right {
+	background-position:-68px;
+}
+
+.dhtmlxcalendar .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar .dxcalmonth table {
+  margin: auto;
+}
+/* Appearance months shorts labels */
+.dhtmlxcalendar .dxcaldlabel {
+	border-bottom: 1px solid #7e7e7e;
+	color:#7e7e7e;
+	border-top: 0px;
+	padding-left:2px;
+
+}
+/* Common styles for months and days labels */
+.dhtmlxcalendar .dxcaldlabel td,
+.dhtmlxcalendar .dxcaldays td,
+.dhtmlxcalendar .dxcaldays_ie td{
+	font-size: 10px;
+	font-family: Tahoma;
+	text-align: center;
+	vertical-align: middle;
+	width: 18px;
+	height: 18px;
+	color: #7e7e7e;
+}
+
+/* Appearance days */
+.dhtmlxcalendar .dxcaldays td,
+.dhtmlxcalendar .dxcaldays_ie td{
+	border: 0px;
+	cursor: pointer;
+}
+/* Appearance days for IE */
+.dhtmlxcalendar .dxcaldays_ie td{
+	height:16px;
+}
+/* Comma between month and year */
+.dhtmlxcalendar td.comma{
+	visibility:visible;
+}
+/* Common style for month and year labels */
+.dhtmlxcalendar div.planeMonth,
+.dhtmlxcalendar div.planeYear {
+	height: auto;
+	overflow: hidden;
+}
+/* Appearance year */
+div.dhtmlxcalendar div.planeYear{
+	display:inline;
+	width:28px;
+}
+
+/* begin: days colors */
+/* Days of this month */
+.dhtmlxcalendar td.thismonth{
+	color:black;
+	padding:1px;
+}
+/* Days of other months */
+.dhtmlxcalendar td.othermonth{
+	visibility:hidden;
+	
+}
+/* Weekend */
+.dhtmlxcalendar td.weekend{
+	color:#a70000;
+	padding:1px;
+}
+/* Insensitive days*/
+.dhtmlxcalendar td.insensitive{
+	color:#b5b5b5;
+	cursor: default;
+	padding:1px;
+}
+/* Selected day */
+.dhtmlxcalendar td.selected{
+	background-color: #36b1df;
+	color:white !important;
+}
+/* Current day */
+.dhtmlxcalendar td.current{
+	font-weight:bold  !important;
+	color:black;
+}
+/* Hovered day */
+.dhtmlxcalendar td.hover{
+	border:1px solid #b5b5b5;
+	color: #000000;
+	padding:0px;
+}
+/* Holidays */
+.dhtmlxcalendar td.holiday{ 
+	font-weight:bold;
+	color:#a70000;
+}
+
+/* end: silverlight */
+
+/* begin: dhtmlxDblCalendarObject */
+.dhtmlxdblcalendar {
+	background: url(imgs/cal_bg_double.gif) no-repeat;
+  z-index:100;
+	padding: 0px;
+}
+.dhtmlxdblcalendar .dhtmlxcalendar {
+	background-image: url(imgs/blank.gif);
+}
+/* end: dhtmlxDblCalendarObject */
+
+/* begin: dhtmlxRichSelector */
+.dhtmlxcalendar div.dhtmlxRichSelector {
+	position: relative;
+	background-color:#ffffff;
+	display: block;
+	width: 1px;
+	height: 1px;
+}
+.dhtmlxcalendar textarea.dhtmlxRichSelector,
+.dhtmlxcalendar select.dhtmlxRichSelector {
+	font-family: Tahoma;
+	position: absolute;
+	font-size: 10px;
+	overflow: hidden;
+	border-width: 0px;
+	z-index:100;
+	left: 0px;
+	top: 0px;
+}
+.dhtmlxcalendar select.dhtmlxRichSelector {
+	border: 1px solid #555555;
+}
+/* end: dhtmlxRichSelector */
+
+.dhtmlxcalendar_yahoolike {
+	background: url(../imgs/__dhxCal_skin_Yahoolike/cal_bg_single.gif) no-repeat;
+	border: 1px solid gray;
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:small;
+	background-color: #f7f9fb;
+	width:178px;
+	height:166px;
+	padding:5px;
+	z-index:99;
+}
+
+.dhtmlxcalendar_yahoolike_mini {
+  background-color: #f7f9fb;
+  height:13px;
+}
+
+.dhtmlxcalendar_yahoolike_maxi {
+  height:178px;
+}
+
+.dhtmlxcalendar_yahoolike_ifr,
+.dhtmlxcalendar_yahoolike_mini_ifr,
+.dhtmlxcalendar_yahoolike_maxi_ifr {
+  height:184px;
+  width:188px
+}
+
+.dhtmlxcalendar_yahoolike_maxi_ifr {
+  height:195px;
+}
+
+.dhtmlxcalendar_yahoolike_mini_ifr {
+  height:26px;
+}
+
+.dhtmlxcalendar_yahoolike_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_yahoolike .winHeader {
+  height: 16px;
+
+  margin-bottom: 3px;
+  width:178px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_yahoolike .winTitle {
+  color:#575757;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 100px;
+  margin-top: -1px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_yahoolike .btn_mini,
+.dhtmlxcalendar_yahoolike .btn_maxi,
+.dhtmlxcalendar_yahoolike .btn_close,
+.dhtmlxcalendar_yahoolike .btn_today,
+.dhtmlxcalendar_yahoolike .btn_clear {
+  background: url(../imgs/__dhxCal_skin_Yahoolike/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left: 1px;
+}
+
+.dhtmlxcalendar_yahoolike .btn_close {
+    background-position: 0 0;
+}
+
+.dhtmlxcalendar_yahoolike .btn_today {
+    background-position: -12px 0;
+}
+
+.dhtmlxcalendar_yahoolike .btn_clear {
+    background-position: -24px 0;
+}
+.dhtmlxcalendar_yahoolike .btn_maxi {
+    background-position: -36px 0;
+}
+
+.dhtmlxcalendar_yahoolike .btn_mini {
+    background-position: -48px 0;
+}
+.dhtmlxcalendar_yahoolike .entbox{
+	margin:3px 3px 3px 3px;
+	width:172px;
+}
+
+.dhtmlxcalendar_yahoolike td {
+	font-size: 9px;
+	font-family: Arial, Helvetica, sans-serif;
+}
+
+.dhtmlxcalendar_yahoolike .dxcalmonth {
+	background-color: #f7f9fb;
+	border: 0px solid #e0e0e0;
+  height: 16px;
+}
+
+.dhtmlxcalendar_yahoolike .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_yahoolike .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_Yahoolike/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 9px;
+}
+.dhtmlxcalendar_yahoolike .dxcalmonth td.month_btn_right {
+  background-position: -69px 0;
+}
+
+.dhtmlxcalendar_yahoolike .dxcaldlabel {
+	border-width: 0px;
+}
+.dhtmlxcalendar_yahoolike .dxcaldlabel td,
+.dhtmlxcalendar_yahoolike .dxcaldays td,
+.dhtmlxcalendar_yahoolike .dxcaldays_ie td{
+	font-size: 10pt;
+	text-align: left;
+	vertical-align: middle;
+	width: 20px;
+	height: 17px;
+	color: #666;
+  padding: 1px;
+}
+.dhtmlxcalendar_yahoolike .dxcaldays_ie td{
+	height: 18px;
+}
+.dhtmlxcalendar_yahoolike .dxcaldays td,
+.dhtmlxcalendar_yahoolike .dxcaldays_ie td{
+	border: 1px solid #e0e0e0;
+	background-color: #fff;
+	text-align: center;
+	cursor: pointer;
+}
+
+
+.dhtmlxcalendar_yahoolike td.comma{
+	visibility:hidden;
+}
+
+.dhtmlxcalendar_yahoolike .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_yahoolike div.planeMonth,
+.dhtmlxcalendar_yahoolike div.planeYear {
+	height: auto;
+	overflow: auto;
+	font-size:12px;
+	font-weight: bold;
+}
+/* begin: days colors */
+.dhtmlxcalendar_yahoolike td.thismonth{
+	color:#003db8;
+}
+
+.dhtmlxcalendar_yahoolike td.othermonth{
+	color:#999;
+	background-color:#eee;
+	visibility: visible;
+}
+
+.dhtmlxcalendar_yahoolike td.weekend{
+	color:#003db8;
+}
+
+.dhtmlxcalendar_yahoolike td.insensitive{
+	color:#ccc;
+	font-style:italic;
+	cursor: default;
+}
+
+.dhtmlxcalendar_yahoolike td.selected{
+	border:1px solid white;
+	background-color: lightblue;
+	color: #ffffff;
+}
+
+
+.dhtmlxcalendar_yahoolike td.current{
+	color: #00c;
+	font-weight:bold !important;
+}
+
+.dhtmlxcalendar_yahoolike td.hover{
+	border:1px solid #426FD9;
+	background-color: #426FD9;
+	color: white;
+}
+
+.dhtmlxcalendar_yahoolike td.holiday{ 
+	font-weight:bold;
+	color:#00c;
+	text-decoration:underline;
+}
+
+/* end: days colors */
+
+/* begin: dhtmlxRichSelector */
+.dhtmlxcalendar_yahoolike div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_yahoolike textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_yahoolike select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+
+.dhtmlxcalendar_yahoolike select.dhtmlxRichSelector {
+	border: 1px solid #7b9ebd;
+}
+/* end: dhtmlxRichSelector */
Index: /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcalendar.js
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcalendar.js	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcalendar.js	(revision 478)
@@ -0,0 +1,251 @@
+//v.2.5 build 91111
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+
+function dhtmlxDblCalendarObject(contId, isAutoDraw, options){this.scriptName = 'dhtmlxcalendar.js';this.entObj = document.createElement("DIV");this.winHeader = null
+ this.style = "dhtmlxdblcalendar";this.uid = 'sc&dblCal'+Math.round(1000000*Math.random());this.numLoaded = 2;this.options = {isWinHeader: false,
+ headerText: 'dhtmlxDblCalendarObject',
+ headerButtons: '', 
+ 
+ 
+ 
+ isWinDrag: false,
+ msgClose: "Close",
+ msgMinimize: "Minimize",
+ msgToday: "Today",
+ msgClear: "Clear"
+ };if (options)for (x in options)this.options[x] = options[x];this.entBox = document.createElement("TABLE");this.entBox.cellPadding = "0px";this.entBox.cellSpacing = "0px";this.entBox.className = this.style;this.entObj.appendChild(this.entBox);var entRow = this.entBox.insertRow(0);var calLeft = entRow.insertCell(0);calLeft.style.paddingRight = '2px';var calRight = entRow.insertCell(1);this.leftCalendar = new dhtmlxCalendarObject(calLeft, false, this.options);this.leftCalendar._dblC = this;this.leftCalendar.setOnClickHandler(this.doOnCLeftClick);this.rightCalendar = new dhtmlxCalendarObject(calRight, false, this.options);this.rightCalendar._dblC = this;this.rightCalendar.setOnClickHandler(this.doOnCRightClick);this.doOnClick = null;this.onLanguageLoaded = null;this.getPosition = this.leftCalendar.getPosition;this.startDrag = this.leftCalendar.startDrag;this.stopDrag = this.leftCalendar.stopDrag;this.onDrag = this.leftCalendar.onDrag;this.drawHeader = this.leftCalendar.drawHeader;dhtmlxEventable(this);var self = this;if (typeof(contId)!= 'string') this.con = contId;else this.con = document.getElementById(contId);if (isAutoDraw)this.draw ()};dhtmlXDblCalendarObject = dhtmlxDblCalendarObject;dhtmlxDblCalendarObject.prototype.setHeader = function(isVisible, isDrag, btnsOpt){this.leftCalendar.options.isWinHeader = this.options.isWinHeader = isVisible;this.leftCalendar.options.isWinDrag = this.options.isWinDrag = isDrag;if (btnsOpt)this.options.headerButtons = this.leftCalendar.options.headerButtons = btnsOpt;if (this.isAutoDraw)this.drawHeader()};dhtmlxDblCalendarObject.prototype.setYearsRange = function(minYear, maxYear){var cs = [this.leftCalendar, this.rightCalendar];for (var ind=0;ind < cs.length;ind++){cs[ind].options.yearsRange = [parseInt(minYear), parseInt(maxYear)];cs[ind].allYears = [];for (var i=minYear;i <= maxYear;i++)cs[ind].allYears.push(i)}};dhtmlxDblCalendarObject.prototype.show = function(){this.parent.style.display = 'block'};dhtmlxDblCalendarObject.prototype.hide = function(){this.parent.style.display = 'none'};dhtmlxDblCalendarObject.prototype.createStructure = function(){if (this.options.isWinHeader){var headerRow = this.entBox.insertRow(0).insertCell(0);headerRow.colSpan = 2;headerRow.align = 'right';this.winHeader = document.createElement('DIV');headerRow.appendChild(this.winHeader)};this.setParent(this.con)};dhtmlxDblCalendarObject.prototype.draw = function(){if (!this.parent)this.createStructure();this.drawHeader();this.leftCalendar.draw();this.rightCalendar.draw();this.isAutoDraw = true};dhtmlxDblCalendarObject.prototype.loadUserLanguage = function(lang, userCBfunction){this.numLoaded = 0;if (userCBfunction)this.onLanguageLoaded = userCBfunction;this.leftCalendar.loadUserLanguage(lang, this.languageLoaded);this.rightCalendar.loadUserLanguage(lang, this.languageLoaded)};dhtmlxDblCalendarObject.prototype.languageLoaded = function(status){var self = this._dblC;self.numLoaded ++;if (self.numLoaded == 2){for (param in this.options)self.options[param] = this.options[param];if (this.isAutoDraw)self.drawHeader();if (self.onLanguageLoaded)self.onLanguageLoaded(status)}};dhtmlxDblCalendarObject.prototype.setParent = function(newParent){if (newParent){this.parent = newParent;this.parent.style.display = 'block';this.parent.appendChild(this.entObj)}};dhtmlxDblCalendarObject.prototype.setOnClickHandler = function(func){this.doOnClick = func};dhtmlxDblCalendarObject.prototype.doOnCLeftClick = function(date){date = new Date (date)
+ this._dblC.rightCalendar.setSensitive(date, null);if (this._dblC.doOnClick)this._dblC.doOnClick(date, this, "left");return true};dhtmlxDblCalendarObject.prototype.doOnCRightClick = function(date){this._dblC.leftCalendar.setSensitive(null, date);if (this._dblC.doOnClick)this._dblC.doOnClick(date, this, "right");return true};dhtmlxDblCalendarObject.prototype.setSensitive = function(){this.rightCalendar.setSensitive(null, this.leftCalendar.date[0]);this.leftCalendar.setSensitive(this.rightCalendar.date[0], null)};dhtmlxDblCalendarObject.prototype.minimize = function(){if (!this.winHeader)return;var tr = this.winHeader.parentNode.parentNode.nextSibling;tr.parentNode.parentNode.style.width = parseInt(tr.parentNode.parentNode.offsetWidth) + 'px';if (tr)tr.style.display = (tr.style.display == 'none')? 'block': 'none'};dhtmlxDblCalendarObject.prototype.setDate = function(dateFrom,dateTo){this.leftCalendar.setDate(dateFrom);this.rightCalendar.setDate(dateTo);this.leftCalendar.setSensitive(null, this.rightCalendar.date[0]);this.rightCalendar.setSensitive(this.leftCalendar.date[0], null)};dhtmlxDblCalendarObject.prototype.setDateFormat = function(format){this.leftCalendar.setDateFormat(format);this.rightCalendar.setDateFormat(format)};dhtmlxDblCalendarObject.prototype.isVisible = function(){return (this.parent.style.display == 'block'?true:false)};dhtmlxDblCalendarObject.prototype.setHolidays = function(dates){this.leftCalendar.setHolidays(dates);this.rightCalendar.setHolidays(dates)};function dhtmlxCalendarObject (base, isAutoDraw, options){if (typeof(base)== "object" && base.parent)
+ {options = {};for (i in base)options [i] = base [i]};this.isAutoDraw = base.autoDraw || isAutoDraw || false;this.contId = base.parent || base;this.scriptName = 'dhtmlxcalendar.js';this.date = [this.cutTime(new Date())];this.selDate = [this.cutTime(new Date())];this.curDate = this.cutTime(new Date());this.entObj = document.createElement("DIV");this.monthPan = document.createElement("TABLE");this.dlabelPan = document.createElement("TABLE");this.daysPan = document.createElement("TABLE");this.parent = null;this.style = "dhtmlxcalendar";this.skinName = dhtmlx.skin || "";this.doOnClick = null;this.sensitiveFrom = null;this.sensitiveTo = null;this.insensitiveDates = null;this.activeCell = null;this.hotCell = null;this.winHeader = null
+ this.onLanguageLoaded = null;this.dragging = false;this.minimized = false;this.uid = 'sc&Cal'+Math.round(1000000*Math.random());this.holidays = null;this.time = false;this.daysCells = {};this.weekCells = {};this.con = [];this.conInd = [];this.activeCon = null;this.activeConInd = 0;this.userPosition = false;this.useIframe = true;this._c = this;dhtmlxEventable(this);this.options = {btnPrev: "&laquo;",
+ btnBgPrev: null,
+ btnNext: "&raquo;",
+ btnBgNext: null,
+ yearsRange: [1900, 2100],
+ 
+ isMonthEditable: false,
+ isYearEditable: false,
+ 
+ isWinHeader: false,
+ headerText : 'Calendar header',
+ headerButtons: 'TMX', 
+ 
+ 
+ isWinDrag: true
+ };defLeng = {langname: 'en-us',
+ dateformat: '%Y-%m-%d',
+ monthesFNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ monthesSNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ daysFNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ daysSNames: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
+ weekend: [0, 6],
+ weekstart: 0,
+ msgClose: "Close",
+ msgMinimize: "Minimize",
+ msgToday: "Today",
+ msgClear: "Clear"
+ };if (!window.dhtmlxCalendarLangModules)window.dhtmlxCalendarLangModules = {};window.dhtmlxCalendarLangModules['en-us'] = defLeng;if (window.dhtmlxCalendarObjects)window.dhtmlxCalendarObjects.push(this);else window.dhtmlxCalendarObjects = [this];dhtmlxEvent(document.body,"click",function(ev){for (cal in window.dhtmlxCalendarObjects){if (!isNaN(cal))
+ {var wCal = window.dhtmlxCalendarObjects[cal];if (wCal.con[0].nodeName == 'INPUT')wCal.hide ()
+ }}});for (lg in defLeng)this.options[lg] = defLeng[lg];if (options)for (param in options)this.options[param] = options[param];this.loadUserLanguage();if (options)for (param in options)this.options[param] = options[param];this.allYears = Array();with (this.options)
+ for (var i=yearsRange[0];i <= yearsRange[1];i++)this.allYears.push(i);if(isAutoDraw !== false)this.draw(options);return this};dhtmlXCalendarObject = dhtmlxCalendarObject;dhtmlxCalendarObject.prototype={createStructure:function(){var self = this;if (!this.entObj.className)this.setSkin (this.skinName);this.entObj.style.position = "relative";if (this.options.isWinHeader){this.winHeader = document.createElement('DIV');this.entObj.appendChild(this.winHeader)};this.entBox = document.createElement("TABLE");this.entBox.className = "entbox";with (this.entBox) {cellPadding = "0px";cellSpacing = "0px";width = '100%'};this.entObj.appendChild(this.entBox);var monthBox = this.entBox.insertRow(0).insertCell(0);with (this.monthPan) {cellPadding = "0px";cellSpacing = "0px";width = '100%';align = 'center'};this.monthPan.className = "dxcalmonth";monthBox.appendChild(this.monthPan);var dlabelBox = this.entBox.insertRow(1).insertCell(0);dlabelBox.appendChild(this.dlabelPan);with (this.dlabelPan) {cellPadding = "0px";cellSpacing = "0px";width = '100%';align = 'center'};this.dlabelPan.className = "dxcaldlabel";var daysBox = this.entBox.insertRow(2).insertCell(0);daysBox.appendChild(this.daysPan);with (this.daysPan) {cellPadding = "1px";cellSpacing = "0px";width = '100%';align = 'center'};if(_isIE || _isKHTML)this.daysPan.className = "dxcaldays_ie";else
+ this.daysPan.className = "dxcaldays";this.daysPan.onmousemove = function (e) {self.doHotKeys(e)};this.daysPan.onmouseout = function () {self.endHotKeys()};if (typeof(this.contId)!= 'string') {if (!this.contId.nodeName){for (var i=0;i < this.contId.length;i++){this.con[i] = document.getElementById(this.contId[i]);this.selDate[i] = this.cutTime(new Date());this.conInd[this.contId[i]] = i}}else {this.con [0] = this.contId;this.conInd [this.contId.id] = 0}}else 
+ {this.con [0] = document.getElementById(this.contId);this.conInd [this.contId] = 0};this.activeCon = this.con[0];if (this.con[0].nodeName == 'INPUT'){var div = document.createElement('DIV');with (div.style) {position = 'absolute';display = 'none';zIndex = 101};this.setParent(div);document.body.appendChild(div);conOnclick = function (e) {if (self.isVisible())
+ self.hide()
+ else {self.activeCon = this;if (this.value){if (self.time){var val = this.value.split (" ");self.setFormatedTime(null, val [1]);self.setDate(self.getFormatedDate(val [0]))}else
+ self.setDate(self.getFormatedDate(this.value))};self.show(this.id);self.draw()};if (this.id != self.activeCon.id){self.show(this.id);self.draw()};(e||event).cancelBubble=true};this.doOnClick = function (date) {self.hide();self.activeCon.focus();return true};conOnkeydown = function(e){if((e||window.event).keyCode==27)
+ self.hide();else if((e||window.event).keyCode==13)
+ self.show()};for (i in this.con){this.con[i].onclick = conOnclick;this.con[i].onkeydown = conOnkeydown}}else this.setParent(this.con [0]);if(_isIE && this.useIframe){if(this.parent.style.zIndex==0){this.parent.style.zIndex = 100};if(this.ifr == undefined && this._dblC == undefined){this.ifr = document.createElement("IFRAME");this.ifr.src="javascript:false;"
+ this.ifr.style.position = "absolute";this.ifr.style.zIndex = 1;this.ifr.frameBorder = "no";this.ifr.style.top = getAbsoluteTop(this.entObj) + 'px';this.ifr.scrolling = 'no';this.ifr.style.display = this.parent.style.display;this.ifr.className = this.style + (this.skinName?'_':"") + this.skinName + "_ifr";this.parent.appendChild(this.ifr)}};this.entObj.onclick = function (e) {e = e||event;if (e.stopPropagation)e.stopPropagation();else e.cancelBubble = true};if (!this.entObj.className)this.setSkin (this.skinName)},
+
+ 
+ drawHeader:function(){if (this._dblC 
+ || !this.options.isWinHeader 
+ || !this.winHeader)return
+ var self = this;while (this.winHeader.hasChildNodes())
+ this.winHeader.removeChild(this.winHeader.firstChild);this.winHeader.className = 'winHeader';this.winHeader.onselectstart=function(){return false};this.headerLabel = document.createElement('div');this.headerLabel.className = 'winTitle';this.headerLabel.appendChild(document.createTextNode(this.options.headerText));this.headerLabel.setAttribute('title', this.options.headerText);this.winHeader.appendChild(this.headerLabel);if (this.options.isWinDrag){this.winHeader.onmousedown = function(e) {self.startDrag(e)}};if (this.options.headerButtons.indexOf('X')>=0) {var btnClose = document.createElement('DIV');btnClose.className = 'btn_close';btnClose.setAttribute('title', this.options.msgClose);btnClose.onmousedown =function (e) {(e||event).cancelBubble=true};btnClose.onclick = function (e) {(e||event).cancelBubble=true;self.hide()};this.winHeader.appendChild(btnClose)};if (this.options.headerButtons.indexOf('M')>=0) {var btnMin = document.createElement('DIV');btnMin.className = 'btn_mini';btnMin.setAttribute('title', this.options.msgMinimize);btnMin.onmousedown =function (e) {(e||event).cancelBubble=true};btnMin.onclick = function(e) {this.className = this.className == 'btn_mini' ? 'btn_maxi' : 'btn_mini';(e||event).cancelBubble=true;self.minimize()};this.winHeader.appendChild(btnMin)};if (this.options.headerButtons.indexOf('C')>=0) {var btnClear = document.createElement('DIV');btnClear.className = 'btn_clear';btnClear.setAttribute('title', this.options.msgClear);btnClear.onmousedown =function (e) {(e||event).cancelBubble=true};btnClear.onclick = function(e) {(e||event).cancelBubble=true;self.activeCon.value = "";self.hide()};this.winHeader.appendChild(btnClear)};if (this.options.headerButtons.indexOf('T')>=0) {var btnToday = document.createElement('DIV');btnToday.className = 'btn_today';btnToday.setAttribute('title', this.options.msgToday);btnToday.onmousedown =function (e) {(e||event).cancelBubble=true};btnToday.onclick = function(e) {(e||event).cancelBubble=true;self.setDate(new Date())};this.winHeader.appendChild(btnToday)}},
+ 
+ 
+ drawMonth:function(){var self = this;if (this.monthPan.hasChildNodes()) 
+ this.monthPan.removeChild(this.monthPan.firstChild);var row = this.monthPan.insertRow(0);var cArLeft = row.insertCell(0);var cContent = row.insertCell(1);var cArRight = row.insertCell(2);cArLeft.align = "left";cArLeft.className = 'month_btn_left';var btnLabel = document.createElement("div");btnLabel.innerHTML = " ";cArLeft.appendChild(btnLabel);cArLeft.onclick = function(){self.prevMonth() };cArLeft.onselectstart = function () {return false};cArRight.align = "right";cArRight.className = 'month_btn_right';var btnLabel = document.createElement("div");btnLabel.innerHTML = " ";cArRight.appendChild(btnLabel);cArRight.onclick = function(){self.nextMonth() };cArRight.onselectstart = function () {return false};cContent.align = 'center';var mHeader = document.createElement("TABLE");with (mHeader) {cellPadding = "0px";cellSpacing = "0px";align = "center"};var mRow = mHeader.insertRow(0);var cMonth = mRow.insertCell(0);var cComma = mRow.insertCell(1);var cYear = mRow.insertCell(2);cContent.appendChild(mHeader);var date = this.date[0];this.planeMonth = document.createElement('DIV');this.planeMonth._c = this;this.planeMonth.appendChild(document.createTextNode(this.options.monthesFNames[date.getMonth()]));this.planeMonth.className = 'planeMonth';cMonth.appendChild(this.planeMonth);if (this.options.isMonthEditable){this.planeMonth.style.cursor = 'pointer';this.editorMonth = new dhtmlxRichSelector({nodeBefore: this.planeMonth,
+ valueList: [0,1,2,3,4,5,6,7,8,9,10,11],
+ titleList: this.options.monthesFNames,
+ activeValue: this.options.monthesFNames[date.getMonth()],
+ onSelect: this.onMonthSelect,
+ isAllowUserValue: false
+ });this.editorMonth._c = this};cComma.appendChild(document.createTextNode(","));cComma.className = 'comma';this.planeYear = document.createElement('DIV');this.planeYear._c = this;this.planeYear.appendChild(document.createTextNode(date.getFullYear()));this.planeYear.className = 'planeYear';cYear.appendChild(this.planeYear);if (this.options.isYearEditable){this.planeYear.style.cursor = 'pointer';this.editorYear = new dhtmlxRichSelector({nodeBefore: this.planeYear,
+ valueList: this.allYears,
+ titleList: this.allYears,
+ activeValue: date.getFullYear(),
+ onSelect: this.onYearSelect,
+ isOrderedList: true,
+ isNumbersList: true,
+ isAllowUserValue: true
+ });this.editorYear._c = this}},
+
+ 
+ drawDayLabels:function() {var self = this;if(!this.dlabelPan.hasChildNodes()) 
+ {var row = this.dlabelPan.insertRow(-1);row.className = "daynames";for(var i=0;i<7;i++){(this.weekCells [i] = row.insertCell(i)).appendChild(document.createTextNode(this.getDayName(i)))
+ }}else 
+ {for(var i=0;i<7;i++)this.weekCells[i].childNodes [0].nodeValue = this.getDayName(i)}},
+
+ 
+ drawDays:function() {var self = this;var row = {}, cell;if(!this.daysPan.hasChildNodes()) 
+ {for (var weekNumber=0;weekNumber<6;weekNumber++){row = this.daysPan.insertRow(-1);this.daysCells [weekNumber] = {};for (var i=0;i<7;i++){(this.daysCells [weekNumber] [i] = row.insertCell(-1)).appendChild(document.createTextNode(""))}}};var date = this.date[0], tempDate = new Date(date);var selectedDate = this.selDate[this.activeConInd].toDateString();tempDate.setDate(1);var day1 = (tempDate.getDay() - this.options.weekstart) % 7;if (day1 <= 0)day1 += 7;tempDate.setDate(- day1);tempDate.setDate(tempDate.getDate() + 1);if (tempDate.getDate()< tempDate.getDay()) 
+ tempDate.setMonth(tempDate.getMonth() - 1);var curDay = null;for (var weekNumber=0;weekNumber<6;weekNumber++){for (var i=0;i<7;i++){if (curDay == tempDate.getDate())
+ tempDate.setDate(tempDate.getDate() + 1);curDay = tempDate.getDate();cell = this.daysCells [weekNumber] [i];cell.setAttribute('id', this.uid+tempDate.getFullYear()+tempDate.getMonth()+tempDate.getDate());cell.childNodes [0].nodeValue = tempDate.getDate();cell.thisdate = tempDate.toString();cell.className = "thismonth";cell.onclick = null;if(tempDate.getMonth()!=date.getMonth())
+ cell.className = "othermonth";if (this.insensitiveDates){var c = false;for (var j=0;j<this.insensitiveDates.length;j++){var s = /\.|\-/.exec(this.insensitiveDates[j])
+ if (s)var f = (this.insensitiveDates[j].split (s).length == 2 ? '%m'+s+'%d' : '%Y'+s+'%m'+s+'%d');if (s && this.getFormatedDate(f, tempDate)== this.insensitiveDates[j] || tempDate.getDay () == this.insensitiveDates[j]) {this.addClass(cell, "insensitive");tempDate.setDate(tempDate.getDate() + 1);c = true;break}};if (c)continue};if (this.sensitiveFrom && this.sensitiveFrom instanceof Array){var c = true;for (var j=0;j<this.sensitiveFrom.length;j++){var s = /\.|\-/.exec(this.sensitiveFrom[j]);var f = (this.sensitiveFrom[j].split (s).length == 2 ? '%m'+s+'%d' : '%Y'+s+'%m'+s+'%d');if (this.getFormatedDate(f, tempDate)== this.sensitiveFrom[j])
+ c = false};if (c){this.addClass(cell, "insensitive");tempDate.setDate(tempDate.getDate() + 1);continue}};if ((this.sensitiveFrom && (tempDate.valueOf()< this.sensitiveFrom.valueOf()))
+ || (this.sensitiveTo && (tempDate.valueOf() > this.sensitiveTo.valueOf()))) {this.addClass(cell, "insensitive");tempDate.setDate(tempDate.getDate() + 1);continue};if (this.isWeekend(i)&& tempDate.getMonth()==date.getMonth()) 
+ cell.className = "weekend";if (tempDate.toDateString()== this.curDate.toDateString())
+ this.addClass(cell, "current");if (tempDate.toDateString()== selectedDate) {this.activeCell = cell;this.addClass(cell, "selected")};if (this.holidays)for (var j=0;j<this.holidays.length;j++){var s = /\.|\-/.exec(this.holidays[j]);var f = (this.holidays[j].split (s).length == 2 ? '%m'+s+'%d' : '%Y'+s+'%m'+s+'%d');if (this.getFormatedDate(f, tempDate)== this.holidays[j])
+ this.addClass(cell, "holiday")};cell.onclick = function(){var date = this.thisdate;self.setDate (date);if(!self.doOnClick || self.doOnClick(date)){self.callEvent("onClick", [date])}};tempDate.setDate(tempDate.getDate() + 1)}}},
+
+ 
+ draw:function(){if (!this.parent)this.createStructure();var self = this;if (this.loadingLanguage){setTimeout(function() {self.draw();return}, 20);return};if (this.winHeader && !this.winHeader.hasChildNodes())
+ this.drawHeader();this.drawMonth();this.drawDayLabels();this.drawDays();this.isAutoDraw = true},
+
+ 
+ loadUserLanguage:function(language, userCBfunction){if (userCBfunction)this.onLanguageLoaded = userCBfunction;if (!language){language="en-us"};this.loadingLanguage = language;if (!language){this.loadUserLanguageCallback(false);return};if (language == this.options.langname){this.loadUserLanguageCallback(true);return};var __lm = window.dhtmlxCalendarLangModules;if (__lm[language]){for (lg in __lm[language])this.options[lg] = __lm[language][lg];this.loadUserLanguageCallback(true);return};var src, path = null;var scripts = document.getElementsByTagName('SCRIPT');for (var i=0;i<scripts.length;i++)if(src = scripts[i].getAttribute('src'))
+ if (src.indexOf(this.scriptName)>= 0) {path = src.substr(0, src.indexOf(this.scriptName));break};if (path === null){this.loadUserLanguageCallback(false);return};this.options.langname = language;var langPath = path + 'lang/' + language + '.js';for (var i=0;i<scripts.length;i++)if(src = scripts[i].getAttribute('src'))
+ if (src == langPath)return;var script = document.createElement('SCRIPT');script.setAttribute('language', "Java-Script");script.setAttribute('type', "text/javascript");script.setAttribute('src', langPath);document.body.appendChild(script)},
+
+ loadUserLanguageCallback:function(status) {this.loadingLanguage = null;if (this.isAutoDraw)this.draw();if (this.onLanguageLoaded && (typeof(this.onLanguageLoaded)== 'function'))
+ this.onLanguageLoaded(status)},
+
+ loadLanguageModule:function(langModule) {var __c = window.dhtmlxCalendarObjects;for (var i=0;i<__c.length;i++){if (__c[i].loadingLanguage == langModule.langname){for (lg in langModule)__c[i].options[lg] = langModule[lg];__c[i].loadUserLanguageCallback(true)}};window.dhtmlxCalendarLangModules[langModule.langname] = langModule},
+
+ 
+
+ show:function(conId){this.activeCon = this.con[this._activeConInd(conId)];this.parent.style.display = '';this.parent.style.visibility = 'hidden';if (this.activeCon.nodeName == 'INPUT' && !this.userPosition){if( typeof window.innerWidth == 'number' ){docWidth = window.innerWidth;docHeight = window.innerHeight}else {docWidth = document.body.offsetWidth;docHeight = document.body.offsetHeight};var aLeft = getAbsoluteLeft( this.activeCon);var aTop = getAbsoluteTop( this.activeCon);if (aTop + this.parent.offsetHeight > docHeight && this.parent.offsetHeight < aTop)this.parent.style.top = aTop - this.parent.offsetHeight + this.activeCon.offsetHeight + 'px';else
+ this.parent.style.top = aTop + 'px';if (aLeft + this.parent.offsetWidth + this.activeCon.offsetWidth > docWidth)this.parent.style.left = aLeft + 'px';else
+ this.parent.style.left = aLeft + this.activeCon.offsetWidth + 'px'};if (this.ifr != undefined){this.ifr.style.top = this.entObj.offsetTop + 'px';this.ifr.style.left = this.entObj.offsetLeft + 'px';this.ifr.style.display = 'block'};if (this.time && !this.minimized){this.tp.setPosition (getAbsoluteLeft (this.parent) + 30, getAbsoluteTop (this.parent) + 147);this.tp.show ()};this.parent.style.visibility = 'visible';return this},
+
+ 
+ hide:function(){this.parent.style.display = 'none';if(this.ifr!=undefined)this.ifr.style.display = 'none';if (this.time)this.tp.hide();return this},
+
+ 
+ setDateFormat:function(format){this.options.dateformat = format},
+
+
+
+ 
+ cutTime:function(date) {date = new Date(date);var ndate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 1, 1);return ndate},
+
+
+ 
+ setParent:function(newParent){if (newParent){this.parent = newParent;this.parent.appendChild(this.entObj)}},
+ 
+ setDate:function(date, conId){tmpDate = date;conId = this._activeConInd (conId);this.activeCon = this.con [conId];if (typeof date != "Object")date = this.setFormatedDate(null ,tmpDate);if (isNaN(date)|| date == null)
+ date = new Date (tmpDate);if (!isNaN(date)) {this.date[conId] = new Date(this.cutTime(date));this.selDate[conId] = new Date(this.cutTime(date))};if (this.isAutoDraw){this.draw()};if (this.activeCon.nodeName == 'INPUT')this.activeCon.value = this.getFormatedDate(this.options.dateformat, date) + (this.time ? " " + this.getFormatedTime () : "")},
+ 
+ addClass:function(obj, styleName) {obj.className += ' ' + styleName},
+
+ 
+ resetClass:function(obj) {obj.className = obj.className.toString().split(' ')[0]},
+
+ resetHotClass:function(obj) {obj.className = obj.className.toString().replace(/hover/, '')},
+
+ 
+ setSkin:function(newSkin) {this.skinName = newSkin;var mode = "";mode = (this.minimized
+ ? "_mini" 
+ : (this.time 
+ ? "_long"
+ : (this.options.isWinHeader
+ ? "_maxi"
+ : ""
+ )
+ )
+ );this.entObj.className = this.style + (newSkin ? '_' + newSkin : '');if (mode)this.entObj.className += " " + this.entObj.className + mode;if(this.ifr!=undefined){this.ifr.className = this.style + (newSkin ? '_' + newSkin : '') + mode + "_ifr"};if (this.time)(this.isVisible () && !this.minimized) ? this.tp.show () : this.tp.hide ()},
+ 
+ 
+ getDate:function(conId)
+ {return this.selDate[this._activeConInd(conId)].toString()},
+ 
+ 
+
+ nextMonth:function(){var date = this.date[0], month;date.setDate(1);date.setMonth(month = date.getMonth() + 1);this.callEvent ("onChangeMonth",[(month+1 > 12 ? 1 : month+1), month || 12]);if (this.isAutoDraw)this.draw()},
+ 
+ 
+ prevMonth:function(){var date = this.date[0], month;date.setDate(1);date.setMonth(month = date.getMonth()-1);this.callEvent ("onChangeMonth",[month+1 || 12,month+2 > 12 ? 1 : (month+2 || 12)]);if (this.isAutoDraw)this.draw()},
+ 
+ setOnClickHandler:function(func){this.attachEvent("onClick",func)},
+
+ 
+
+ getFormatedDate:function (dateformat, date, conInd) {if(!dateformat)dateformat = this.options.dateformat
+ if(!date)date = this.selDate[this._activeConInd(conInd)];date = new Date(date);var out = '';var plain = true;for (var i=0;i<dateformat.length;i++){var replStr = dateformat.substr(i, 1);if (plain){if (replStr == '%'){plain = false;continue};out += replStr}else {switch (replStr) {case 'e':
+ replStr = date.getDate();break;case 'd':
+ replStr = date.getDate();if (replStr.toString().length == 1)
+ replStr='0'+replStr;break;case 'j':
+ var x = new Date(date.getFullYear(), 0, 0, 0, 0, 0, 0);replStr = Math.ceil((date.valueOf() - x.valueOf())/1000/60/60/24 - 1);while (replStr.toString().length < 3)
+ replStr = '0' + replStr;break;case 'a':
+ replStr = this.options.daysSNames[date.getDay()];break;case 'W':
+ replStr = this.options.daysFNames[date.getDay()];break;case 'c':
+ replStr = 1 + date.getMonth();break;case 'm':
+ replStr = 1 + date.getMonth();if (replStr.toString().length == 1)
+ replStr = '0' + replStr;break;case 'b':
+ replStr = this.options.monthesSNames[date.getMonth()];break;case 'M':
+ replStr = this.options.monthesFNames[date.getMonth()];break;case 'y':
+ replStr = date.getFullYear();replStr = replStr.toString().substr(2);break;case 'Y':
+ replStr = date.getFullYear()};out += replStr;plain = true}};return out},
+
+ 
+
+
+ setFormatedDate: function(dateformatarg, date, conInd, skip){if (!date || !(typeof date == 'string')) return date;if (self.time){self.time.setFormatedTIme(null, date.split(" ")[1]);date = date.split(" ")[0]};if(!dateformatarg)dateformatarg = this.options.dateformat;function parseMonth(val){var tmpAr = new Array(this.options.monthesSNames,this.options.monthesFNames);for(var j=0;j<tmpAr.length;j++){for (var i=0;i<tmpAr[j].length;i++)if (tmpAr[j][i].indexOf(val)== 0)
+ return i};return -1};var outputDate = new Date(2008, 0, 1);var j=0;for(var i=0;i<dateformatarg.length;i++){var _char = dateformatarg.charAt(i);if(_char=="%"){var _cd = dateformatarg.charAt(i+1);var _nextpc = dateformatarg.indexOf("%",i+1);var _nextDelim = dateformatarg.substr(i+2,_nextpc-i-1-1);var _nDelimInDatePos = date.indexOf(_nextDelim,j);if(_nextDelim=="")_nDelimInDatePos = date.length
+ if(_nDelimInDatePos==-1)return null;var value = date.substr(j, _nDelimInDatePos-j);if (_cd != 'M' && _cd != 'b')value = parseFloat(value);j=_nDelimInDatePos+_nextDelim.length
+ switch (_cd) {case 'd':
+ case 'e':
+ outputDate.setDate(parseFloat(value));break;case "c":
+ case "m":
+ outputDate.setMonth(parseFloat(value) - 1);break;case "M":
+ var val = parseMonth.call(this,value);if(val!=-1)outputDate.setMonth(parseFloat(val));else 
+ return null;break;case "b":
+ var val = parseMonth.call(this,value);if(val!=-1)outputDate.setMonth(parseFloat(val));else 
+ return null;break;case 'Y':
+ outputDate.setFullYear(parseFloat(value));break;case 'y':
+ var year=parseFloat(value);outputDate.setFullYear(((year>20)?1900:2000) + year);break}}};if (isNaN(outputDate))
+ outputDate = new Date(this.selDate[this._activeConInd]);if (skip)return outputDate;this.setDate (outputDate, conInd);return this.selDate[this. activeConInd]},
+
+ 
+ isWeekend:function(k){var q = k + this.options.weekstart;if (q > 6)q -= 7;for (var i=0;i<this.options.weekend.length;i++)if (this.options.weekend[i] == q)return true;return false},
+
+ 
+ getDayName:function(k){var q = k + this.options.weekstart;if (q > 6)q = q - 7;return this.options.daysSNames[q]},
+
+ 
+ isVisible: function(){return this.parent.style.display != 'none'},
+ doHotKeys:function(e){e = e||event;var cell = e.target || e.srcElement;if (cell.className.toString().indexOf('insensitive') >=0 ) {this.endHotKeys()}else {if (this.hotCell)this.resetHotClass(this.hotCell);this.addClass(cell, 'hover');this.hotCell = cell}},
+
+ endHotKeys:function(){if (this.hotCell){this.resetHotClass(this.hotCell);this.hotCell = null}},
+ _activeConInd:function(ind){if (!this.parent)this.createStructure();return (this.activeConInd = (this.conInd[ind]==0?'0':this.conInd[ind]) || (ind==0?'0':ind) || this.conInd[this.activeCon.id] || 0)}};function dhtmlxRichSelector(parametres) {for (x in parametres)this[x] = parametres[x];this.initValue = this.activeValue;if (!this.selectorSize)this.selectorSize = 7;var self = this;this.blurTimer = null;this.nodeBefore.onclick = function() {self.show()};this.editor = document.createElement('TEXTAREA');this.editor.value = this.activeValue;this.editor._s = this;this.editor.className = 'dhtmlxRichSelector';this.editor.onfocus = this.onFocus;this.editor.onblur = this.onBlur;this.selector = document.createElement('SELECT');this.selector.size = this.selectorSize;this.selector.className = 'dhtmlxRichSelector';if (this.valueList)for (var i = 0;i < this.valueList.length;i++)this.selector.options[i] = new Option(this.titleList[i], this.valueList[i], false, false);this.selector._s = this;this.selector.onfocus = this.onFocus;this.selector.onblur = this.onBlur;this.selector.onclick = function () {window.t = self;self.onSelect(self.selector.value);clearTimeout(self.blurTimer)};this.selector.getIndexByValue = function (Value, isFull) {var Select = this;Value = Value.toString().toUpperCase();if (!isFull)isFull=false;for (var i=0;i<Select.length;i++){var i_value = Select[i].text.toUpperCase();if (isFull){if(i_value == Value)return i}else {if (i_value.indexOf(Value)== 0) return i}};if (Select._s.isOrderedList){if (Select._s.isNumbersList)if (isNaN(Value)) return -1;i_value = Select[0].text.substring(0, Value.length).toUpperCase();if (i_value > Value)return 0;i_value = Select[Select.length-1].text.substring(0, Value.length);if (i_value < Value)return Select.length-1};return -1};this.con = document.createElement('DIV')
+ this.con.className = 'dhtmlxRichSelector';with (this.con.style) {width = 'auto';display = 'none'};this.con.appendChild(this.editor);this.con.appendChild(this.selector);this.nodeBefore.parentNode.insertBefore(this.con, this.nodeBefore);return this};dhtmlxRichSelector.prototype.show = function() {this.con.style.display = 'block';with (this.selector.style) {marginTop = parseInt(this.nodeBefore.offsetHeight)+'px';width = 'auto'};with (this.editor.style) {width = parseInt(this.nodeBefore.offsetWidth)+15+'px';height = parseInt(this.nodeBefore.offsetHeight)+'px'};this.selector.selectedIndex = this.selector.getIndexByValue(this.activeValue);this.editor.focus()};dhtmlxRichSelector.prototype.hide = function() {this.con.style.display = 'none'};dhtmlxRichSelector.prototype.onBlur = function() {var self = this._s;self.blurTimer = setTimeout(function(){if (self.isAllowUserValue){if (self.onSelect(self.editor.value))
+ self.activeValue = self.editor.value}else {if (self.onSelect(self.selector.value))
+ self.activeValue = self.selector.value}}, 10)};dhtmlxRichSelector.prototype.onFocus = function() {var self = this._s;if(self.blurTimer){clearTimeout(self.blurTimer);self.blurTimer = null};if (this === this._s.selector)self.editor.focus()};dhtmlxCalendarObject.prototype.setHeader = function(isVisible, isDrag, btnsOpt){with (this.options) {isWinHeader = isVisible;isWinDrag = isDrag;if (btnsOpt)headerButtons = btnsOpt};this.setSkin (this.skinName)};dhtmlxCalendarObject.prototype.setYearsRange = function(minYear, maxYear){this.options.yearsRange = [parseInt(minYear), parseInt(maxYear)];this.allYears = [];for (var i=minYear;i <= maxYear;i++)this.allYears.push(i)};dhtmlxCalendarObject.prototype.startDrag = function(e) {e = e||event;if ((e.button === 0)|| (e.button === 1)) {if (this.dragging){this.stopDrag(e)};this.drag_mx = e.clientX;this.drag_my = e.clientY;this.drag_spos = this.getPosition(this.parent);document.body.appendChild(this.parent);with (this.parent.style) {left = this.drag_spos[0] + 'px';top = this.drag_spos[1] + 'px';margin = '0px';position = 'absolute'};if (this.ifr){this.ifr.style.top = '0px';this.ifr.style.left = '0px'};this.bu_onmousemove = document.body.onmousemove;var self = this;document.body.onmousemove = function (e) {self.onDrag(e)};this.bu_onmouseup = document.body.onmouseup;document.body.onmouseup = function (e) {self.stopDrag(e)};this.dragging = true}};dhtmlxCalendarObject.prototype.onDrag = function(e) {e = e||event;if ((e.button === 0)|| (e.button === 1)) {var delta_x = this.drag_mx - e.clientX;var delta_y = this.drag_my - e.clientY;this.parent.style.left = this.drag_spos[0] - delta_x + 'px';this.parent.style.top = this.drag_spos[1] - delta_y + 'px';if (this.time){this.tp.setPosition (getAbsoluteLeft (this.parent) + 30, getAbsoluteTop (this.parent) + 160)};if(this.ifr != undefined){this.ifr.style.left = 0;this.ifr.style.top = 0}}else {this.stopDrag(e)}};dhtmlxCalendarObject.prototype.stopDrag = function(e) {e = e||event;document.body.onmouseup = (this.bu_onmouseup === window.undefined)? null: this.bu_onmouseup;document.body.onmousemove = (this.bu_onmousemove === window.undefined)? null: this.bu_onmousemove;this.dragging = false};dhtmlxCalendarObject.prototype.minimize = function(){if (!this.winHeader)return;this.minimized = !this.minimized;this.entBox.style.display = (!this.minimized) ? '' : 'none';this.setSkin (this.skinName)};dhtmlxCalendarObject.prototype.onYearSelect = function(value) {if (!isNaN(value))
+ {this._c.date[this._c._activeConInd()].setFullYear(
+ Math.min 
+ (
+ Math.max 
+ (
+ value, 
+ this._c.allYears[0]
+ ), 
+ this._c.allYears.slice(-1)
+ )
+ )};this._c.draw();return (!isNaN(value))};dhtmlxCalendarObject.prototype.onMonthSelect = function(value) {this._c.date[this._c._activeConInd()].setMonth(value);this._c.draw();return true};dhtmlxCalendarObject.prototype.setPosition = function(argA,argB,argC){if(typeof(argA)=='object'){var posAr = this.getPosition(argA)
+ var left = posAr[0]+argA.offsetWidth+(argC||0);var top = posAr[1]+(argB||0)};this.parent.style.position = "absolute";this.parent.style.top = (top||argA)+"px";this.parent.style.left = (left||argB)+"px";if (this.ifr != undefined){this.ifr.style.left = '0px';this.ifr.style.top = '0px'};if (this.time)this.tp.setPosition (getAbsoluteLeft (this.parent) + 30, getAbsoluteTop (this.parent) + 160)};dhtmlxCalendarObject.prototype.close = function(func){this.hide ()};dhtmlxCalendarObject.prototype.getPosition = function(oNode,pNode) {if(!pNode)var pNode = document.body
+ var oCurrentNode=oNode;var iLeft=0;var iTop=0;while ((oCurrentNode)&&(oCurrentNode!=pNode)){iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;oCurrentNode=oCurrentNode.offsetParent};if (pNode == document.body ){if (_isIE){if (document.documentElement.scrollTop)iTop+=document.documentElement.scrollTop;if (document.documentElement.scrollLeft)iLeft+=document.documentElement.scrollLeft}else
+ if (!_isFF){iLeft+=document.body.offsetLeft;iTop+=document.body.offsetTop}};return new Array(iLeft,iTop)};dhtmlxCalendarObject.prototype.setSensitive = function(fromDate,toDate){if (fromDate)if (fromDate instanceof Date){this.sensitiveFrom = this.cutTime(fromDate)}else {this.sensitiveFrom = fromDate.toString ().split (',')};if (toDate)this.sensitiveTo = this.cutTime(toDate);if (this.isAutoDraw)this.draw()};dhtmlxCalendarObject.prototype.setHolidays = function(dates){this.holidays = dates.toString().split(",");if (this.isAutoDraw)this.draw()};dhtmlxCalendarObject.prototype.onChangeMonth = function (func) {this.attachEvent ("onChangeMonth",func)};dhtmlxCalendarObject.prototype.setInsensitiveDates = function (dates) {this.insensitiveDates = dates.toString().split(",");if (this.isAutoDraw)this.draw()};dhtmlxCalendarObject.prototype.enableTime = function (mode) {if (this.time = mode){this.tp = new dhtmlXTimePicker ();this.tp.setPosition (getAbsoluteLeft (this.parent) + 30, getAbsoluteTop (this.parent) + 160);for (m in dhtmlXTimePicker.prototype)(function (m) {if (!dhtmlxCalendarObject.prototype [m])dhtmlxCalendarObject.prototype [m] = function (){return this.tp[m].apply(this.tp, arguments)}})(m)}else {this.tp.entBox.parentNode.removeChild (this.tp.entBox);this.tp = null};this.setSkin(this.skinName)};dhtmlxCalendarObject.prototype.setHeaderText = function (text) {this.options.headerText = text;if (this.headerLabel){this.headerLabel.childNodes[0].nodeValue = text;this.headerLabel.setAttribute('title', text)}};dhtmlxCalendarObject.prototype.disableIESelectFix = function (mode) {this.useIframe = !mode;if (this.ifr != undefined){this.ifr.parentNode.removeChild(this.ifr);this.ifr = null}};(function(){dhtmlx.extend_api("dhtmlxCalendarObject",{_init:function(obj){return [obj.parent, obj.draw ]}},{});dhtmlx.extend_api("dhtmlxDblCalendarObject",{_init:function(obj){return [obj.parent, obj.draw ]}},{})})();
+//v.2.5 build 91111
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
Index: /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcommon.js
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcommon.js	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/dhtmlxcommon.js	(revision 478)
@@ -0,0 +1,100 @@
+//v.2.5 build 91111
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+dhtmlx=function(obj){for (var a in obj)dhtmlx[a]=obj[a];return dhtmlx};dhtmlx.extend_api=function(name,map,ext){var t = window[name];if (!t)return;window[name]=function(obj){if (obj && typeof obj == "object" && !obj.tagName && !(obj instanceof Array)){var that = t.apply(this,(map._init?map._init(obj):arguments));for (var a in dhtmlx)if (map[a])this[map[a]](dhtmlx[a]);for (var a in obj){if (map[a])this[map[a]](obj[a]);else if (a.indexOf("on")==0){this.attachEvent(a,obj[a])}}}else
+ var that = t.apply(this,arguments);if (map._patch)map._patch(this);return that||this};window[name].prototype=t.prototype;if (ext)dhtmlXHeir(window[name].prototype,ext)};dhtmlxAjax={get:function(url,callback){var t=new dtmlXMLLoaderObject(true);t.async=(arguments.length<3);t.waitCall=callback;t.loadXML(url)
+ return t},
+ post:function(url,post,callback){var t=new dtmlXMLLoaderObject(true);t.async=(arguments.length<4);t.waitCall=callback;t.loadXML(url,true,post)
+ return t},
+ getSync:function(url){return this.get(url,null,true)
+ },
+ postSync:function(url,post){return this.post(url,post,null,true)}};function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){this.xmlDoc="";if (typeof (async)!= "undefined")
+ this.async=async;else
+ this.async=true;this.onloadAction=funcObject||null;this.mainObject=dhtmlObject||null;this.waitCall=null;this.rSeed=rSeed||false;return this};dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){var once = true;this.check=function (){if ((dhtmlObject)&&(dhtmlObject.onloadAction != null)){if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){if (!once)return;once=false;if (typeof dhtmlObject.onloadAction == "function")dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject);if (dhtmlObject.waitCall){dhtmlObject.waitCall.call(this,dhtmlObject);dhtmlObject.waitCall=null}}}};return this.check};dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){if (this.xmlDoc.responseXML){var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName);if(temp.length==0 && tagName.indexOf(":")!=-1)
+ var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]);var z = temp[0]}else
+ var z = this.xmlDoc.documentElement;if (z){this._retry=false;return z};if ((_isIE)&&(!this._retry)){var xmlString = this.xmlDoc.responseText;var oldObj = this.xmlDoc;this._retry=true;this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM");this.xmlDoc.async=false;this.xmlDoc["loadXM"+"L"](xmlString);return this.getXMLTopNode(tagName, oldObj)};dhtmlxError.throwError("LoadXML", "Incorrect XML", [
+ (oldObj||this.xmlDoc),
+ this.mainObject
+ ]);return document.createElement("DIV")};dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){{
+ try{var parser = new DOMParser();this.xmlDoc=parser.parseFromString(xmlString, "text/xml")}catch (e){this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM");this.xmlDoc.async=this.async;this.xmlDoc["loadXM"+"L"](xmlString)}};this.onloadAction(this.mainObject, null, null, null, this);if (this.waitCall){this.waitCall();this.waitCall=null}};dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){if (this.rSeed)filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf();this.filePath=filePath;if ((!_isIE)&&(window.XMLHttpRequest))
+ this.xmlDoc=new XMLHttpRequest();else {if (document.implementation&&document.implementation.createDocument){this.xmlDoc=document.implementation.createDocument("", "", null);this.xmlDoc.onload=new this.waitLoadFunction(this);this.xmlDoc.load(filePath);return}else
+ this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP")};if (this.async)this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async);if (rpc){this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")");this.xmlDoc.setRequestHeader("Content-type", "text/xml")}else if (postMode)this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest");this.xmlDoc.send(null||postVars);if (!this.async)(new this.waitLoadFunction(this))()};dtmlXMLLoaderObject.prototype.destructor=function(){this.onloadAction=null;this.mainObject=null;this.xmlDoc=null;return null};dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){var t={};for (var i=0;i<node.attributes.length;i++)t[node.attributes[i].name]=node.attributes[i].value;t["_tagvalue"]=node.firstChild?node.firstChild.nodeValue:"";for (var i=0;i<node.childNodes.length;i++){var name=node.childNodes[i].tagName;if (name){if (!t[name])t[name]=[];t[name].push(this.xmlNodeToJSON(node.childNodes[i]))}};return t};function callerFunction(funcObject, dhtmlObject){this.handler=function(e){if (!e)e=window.event;funcObject(e, dhtmlObject);return true};return this.handler};function getAbsoluteLeft(htmlObject){return getOffset(htmlObject).left};function getAbsoluteTop(htmlObject){return getOffset(htmlObject).top};function getOffsetSum(elem) {var top=0, left=0;while(elem){top = top + parseInt(elem.offsetTop);left = left + parseInt(elem.offsetLeft);elem = elem.offsetParent};return {top: top, left: left}};function getOffsetRect(elem) {var box = elem.getBoundingClientRect();var body = document.body;var docElem = document.documentElement;var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;var clientTop = docElem.clientTop || body.clientTop || 0;var clientLeft = docElem.clientLeft || body.clientLeft || 0;var top = box.top + scrollTop - clientTop;var left = box.left + scrollLeft - clientLeft;return {top: Math.round(top), left: Math.round(left) }};function getOffset(elem) {if (elem.getBoundingClientRect && !_isChrome){return getOffsetRect(elem)}else {return getOffsetSum(elem)}};function convertStringToBoolean(inputString){if (typeof (inputString)== "string")
+ inputString=inputString.toLowerCase();switch (inputString){case "1":
+ case "true":
+ case "yes":
+ case "y":
+ case 1:
+ case true:
+ return true;break;default: return false}};function getUrlSymbol(str){if (str.indexOf("?")!= -1)
+ return "&"
+ else
+ return "?"
+};function dhtmlDragAndDropObject(){if (window.dhtmlDragAndDrop)return window.dhtmlDragAndDrop;this.lastLanding=0;this.dragNode=0;this.dragStartNode=0;this.dragStartObject=0;this.tempDOMU=null;this.tempDOMM=null;this.waitDrag=0;window.dhtmlDragAndDrop=this;return this};dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){htmlNode.onmousedown=null;htmlNode.dragStarter=null;htmlNode.dragLanding=null};dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode, dhtmlObject){htmlNode.onmousedown=this.preCreateDragCopy;htmlNode.dragStarter=dhtmlObject;this.addDragLanding(htmlNode, dhtmlObject)};dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode, dhtmlObject){htmlNode.dragLanding=dhtmlObject};dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e){if ((e||event)&& (e||event).button == 2)
+ return;if (window.dhtmlDragAndDrop.waitDrag){window.dhtmlDragAndDrop.waitDrag=0;document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU;document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM;return false};window.dhtmlDragAndDrop.waitDrag=1;window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup;window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove;window.dhtmlDragAndDrop.dragStartNode=this;window.dhtmlDragAndDrop.dragStartObject=this.dragStarter;document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy;document.body.onmousemove=window.dhtmlDragAndDrop.callDrag;window.dhtmlDragAndDrop.downtime = new Date().valueOf();if ((e)&&(e.preventDefault)){e.preventDefault();return false};return false};dhtmlDragAndDropObject.prototype.callDrag=function(e){if (!e)e=window.event;dragger=window.dhtmlDragAndDrop;if ((new Date()).valueOf()-dragger.downtime<100) return;if ((e.button == 0)&&(_isIE))
+ return dragger.stopDrag();if (!dragger.dragNode&&dragger.waitDrag){dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode, e);if (!dragger.dragNode)return dragger.stopDrag();dragger.dragNode.onselectstart=function(){return false};dragger.gldragNode=dragger.dragNode;document.body.appendChild(dragger.dragNode);document.body.onmouseup=dragger.stopDrag;dragger.waitDrag=0;dragger.dragNode.pWindow=window;dragger.initFrameRoute()};if (dragger.dragNode.parentNode != window.document.body){var grd = dragger.gldragNode;if (dragger.gldragNode.old)grd=dragger.gldragNode.old;grd.parentNode.removeChild(grd);var oldBody = dragger.dragNode.pWindow;if (_isIE){var div = document.createElement("Div");div.innerHTML=dragger.dragNode.outerHTML;dragger.dragNode=div.childNodes[0]}else
+ dragger.dragNode=dragger.dragNode.cloneNode(true);dragger.dragNode.pWindow=window;dragger.gldragNode.old=dragger.dragNode;document.body.appendChild(dragger.dragNode);oldBody.dhtmlDragAndDrop.dragNode=dragger.dragNode};dragger.dragNode.style.left=e.clientX+15+(dragger.fx
+ ? dragger.fx*(-1)
+ : 0)
+ +(document.body.scrollLeft||document.documentElement.scrollLeft)+"px";dragger.dragNode.style.top=e.clientY+3+(dragger.fy
+ ? dragger.fy*(-1)
+ : 0)
+ +(document.body.scrollTop||document.documentElement.scrollTop)+"px";if (!e.srcElement)var z = e.target;else
+ z=e.srcElement;dragger.checkLanding(z, e)};dhtmlDragAndDropObject.prototype.calculateFramePosition=function(n){if (window.name){var el = parent.frames[window.name].frameElement.offsetParent;var fx = 0;var fy = 0;while (el){fx+=el.offsetLeft;fy+=el.offsetTop;el=el.offsetParent};if ((parent.dhtmlDragAndDrop)){var ls = parent.dhtmlDragAndDrop.calculateFramePosition(1);fx+=ls.split('_')[0]*1;fy+=ls.split('_')[1]*1};if (n)return fx+"_"+fy;else
+ this.fx=fx;this.fy=fy};return "0_0"};dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject, e){if ((htmlObject)&&(htmlObject.dragLanding)){if (this.lastLanding)this.lastLanding.dragLanding._dragOut(this.lastLanding);this.lastLanding=htmlObject;this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding, this.dragStartNode, e.clientX,
+ e.clientY, e);this.lastLanding_scr=(_isIE ? e.srcElement : e.target)}else {if ((htmlObject)&&(htmlObject.tagName != "BODY"))
+ this.checkLanding(htmlObject.parentNode, e);else {if (this.lastLanding)this.lastLanding.dragLanding._dragOut(this.lastLanding, e.clientX, e.clientY, e);this.lastLanding=0;if (this._onNotFound)this._onNotFound()}}};dhtmlDragAndDropObject.prototype.stopDrag=function(e, mode){dragger=window.dhtmlDragAndDrop;if (!mode){dragger.stopFrameRoute();var temp = dragger.lastLanding;dragger.lastLanding=null;if (temp)temp.dragLanding._drag(dragger.dragStartNode, dragger.dragStartObject, temp, (_isIE
+ ? event.srcElement
+ : e.target))};dragger.lastLanding=null;if ((dragger.dragNode)&&(dragger.dragNode.parentNode == document.body))
+ dragger.dragNode.parentNode.removeChild(dragger.dragNode);dragger.dragNode=0;dragger.gldragNode=0;dragger.fx=0;dragger.fy=0;dragger.dragStartNode=0;dragger.dragStartObject=0;document.body.onmouseup=dragger.tempDOMU;document.body.onmousemove=dragger.tempDOMM;dragger.tempDOMU=null;dragger.tempDOMM=null;dragger.waitDrag=0};dhtmlDragAndDropObject.prototype.stopFrameRoute=function(win){if (win)window.dhtmlDragAndDrop.stopDrag(1, 1);for (var i = 0;i < window.frames.length;i++){try{if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
+ window.frames[i].dhtmlDragAndDrop.stopFrameRoute(window)}catch(e){}};try{if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
+ parent.dhtmlDragAndDrop.stopFrameRoute(window)}catch(e){}};dhtmlDragAndDropObject.prototype.initFrameRoute=function(win, mode){if (win){window.dhtmlDragAndDrop.preCreateDragCopy();window.dhtmlDragAndDrop.dragStartNode=win.dhtmlDragAndDrop.dragStartNode;window.dhtmlDragAndDrop.dragStartObject=win.dhtmlDragAndDrop.dragStartObject;window.dhtmlDragAndDrop.dragNode=win.dhtmlDragAndDrop.dragNode;window.dhtmlDragAndDrop.gldragNode=win.dhtmlDragAndDrop.dragNode;window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag;window.waitDrag=0;if (((!_isIE)&&(mode))&&((!_isFF)||(_FFrv < 1.8)))
+ window.dhtmlDragAndDrop.calculateFramePosition()};try{if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
+ parent.dhtmlDragAndDrop.initFrameRoute(window)}catch(e){};for (var i = 0;i < window.frames.length;i++){try{if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
+ window.frames[i].dhtmlDragAndDrop.initFrameRoute(window, ((!win||mode) ? 1 : 0))}catch(e){}}};var _isFF = false;var _isIE = false;var _isOpera = false;var _isKHTML = false;var _isMacOS = false;var _isChrome = false;if (navigator.userAgent.indexOf('Macintosh')!= -1)
+ _isMacOS=true;if (navigator.userAgent.toLowerCase().indexOf('chrome')>-1)
+ _isChrome=true;if ((navigator.userAgent.indexOf('Safari')!= -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){var _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5));if (_KHTMLrv > 525){_isFF=true;var _FFrv = 1.9}else
+ _isKHTML=true}else if (navigator.userAgent.indexOf('Opera')!= -1){_isOpera=true;_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6, 3))}else if (navigator.appName.indexOf("Microsoft")!= -1){_isIE=true;if (navigator.appVersion.indexOf("MSIE 8.0")!= -1 && document.compatMode != "BackCompat") _isIE=8}else {_isFF=true;var _FFrv = parseFloat(navigator.userAgent.split("rv:")[1])
+};dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){if (_isKHTML || (!_isIE && !window.XPathResult))
+ return this.doXPathOpera(xpathExp, docObj);if (_isIE){if (!docObj)if (!this.xmlDoc.nodeName)docObj=this.xmlDoc.responseXML
+ else
+ docObj=this.xmlDoc;if (!docObj)dhtmlxError.throwError("LoadXML", "Incorrect XML", [
+ (docObj||this.xmlDoc),
+ this.mainObject
+ ]);if (namespace != null)docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'");if (result_type == 'single'){return docObj.selectSingleNode(xpathExp)}else {return docObj.selectNodes(xpathExp)||new Array(0)}}else {var nodeObj = docObj;if (!docObj){if (!this.xmlDoc.nodeName){docObj=this.xmlDoc.responseXML
+ }else {docObj=this.xmlDoc}};if (!docObj)dhtmlxError.throwError("LoadXML", "Incorrect XML", [
+ (docObj||this.xmlDoc),
+ this.mainObject
+ ]);if (docObj.nodeName.indexOf("document")!= -1){nodeObj=docObj}else {nodeObj=docObj;docObj=docObj.ownerDocument};var retType = XPathResult.ANY_TYPE;if (result_type == 'single')retType=XPathResult.FIRST_ORDERED_NODE_TYPE
+ var rowsCol = new Array();var col = docObj.evaluate(xpathExp, nodeObj, function(pref){return namespace
+ }, retType, null);if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){return col.singleNodeValue};var thisColMemb = col.iterateNext();while (thisColMemb){rowsCol[rowsCol.length]=thisColMemb;thisColMemb=col.iterateNext()};return rowsCol}};function _dhtmlxError(type, name, params){if (!this.catches)this.catches=new Array();return this};_dhtmlxError.prototype.catchError=function(type, func_name){this.catches[type]=func_name};_dhtmlxError.prototype.throwError=function(type, name, params){if (this.catches[type])return this.catches[type](type, name, params);if (this.catches["ALL"])return this.catches["ALL"](type, name, params);alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]);return null};window.dhtmlxError=new _dhtmlxError();dtmlXMLLoaderObject.prototype.doXPathOpera=function(xpathExp, docObj){var z = xpathExp.replace(/[\/]+/gi, "/").split('/');var obj = null;var i = 1;if (!z.length)return [];if (z[0] == ".")obj=[docObj];else if (z[0] == ""){obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g, ""));i++}else
+ return [];for (i;i < z.length;i++)obj=this._getAllNamedChilds(obj, z[i]);if (z[i-1].indexOf("[")!= -1)
+ obj=this._filterXPath(obj, z[i-1]);return obj};dtmlXMLLoaderObject.prototype._filterXPath=function(a, b){var c = new Array();var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, "");for (var i = 0;i < a.length;i++)if (a[i].getAttribute(b))
+ c[c.length]=a[i];return c};dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a, b){var c = new Array();if (_isKHTML)b=b.toUpperCase();for (var i = 0;i < a.length;i++)for (var j = 0;j < a[i].childNodes.length;j++){if (_isKHTML){if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase()== b)
+ c[c.length]=a[i].childNodes[j]}else if (a[i].childNodes[j].tagName == b)c[c.length]=a[i].childNodes[j]};return c};function dhtmlXHeir(a, b){for (var c in b)if (typeof (b[c])== "function")
+ a[c]=b[c];return a};function dhtmlxEvent(el, event, handler){if (el.addEventListener)el.addEventListener(event, handler, false);else if (el.attachEvent)el.attachEvent("on"+event, handler)};dtmlXMLLoaderObject.prototype.xslDoc=null;dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){if (!xslDoc)xslDoc=this.xslDoc
+
+ if (xslDoc.responseXML)xslDoc=xslDoc.responseXML;var item =
+ this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc,
+ "http:/\/www.w3.org/1999/XSL/Transform", "single");if (item != null)item.firstChild.nodeValue=paramValue
+};dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){if (!xslDoc)xslDoc=this.xslDoc;if (xslDoc.responseXML)xslDoc=xslDoc.responseXML
+
+ if (!xmlDoc)xmlDoc=this.xmlDoc;if (xmlDoc.responseXML)xmlDoc=xmlDoc.responseXML
+
+ 
+ if (!_isIE){if (!this.XSLProcessor){this.XSLProcessor=new XSLTProcessor();this.XSLProcessor.importStylesheet(xslDoc)};var result = this.XSLProcessor.transformToDocument(xmlDoc)}else {var result = new ActiveXObject("Msxml2.DOMDocument.3.0");try{xmlDoc.transformNodeToObject(xslDoc, result)}catch(e){result = xmlDoc.transformNode(xslDoc)}};return result};dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){var res = this.doXSLTransToObject(xslDoc, xmlDoc);if(typeof(res)=="string")
+ return res;return this.doSerialization(res)};dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){if (!xmlDoc)xmlDoc=this.xmlDoc;if (xmlDoc.responseXML)xmlDoc=xmlDoc.responseXML
+ if (!_isIE){var xmlSerializer = new XMLSerializer();return xmlSerializer.serializeToString(xmlDoc)}else
+ return xmlDoc.xml};dhtmlxEventable=function(obj){obj.dhx_SeverCatcherPath="";obj.attachEvent=function(name, catcher, callObj){name='ev_'+name.toLowerCase();if (!this[name])this[name]=new this.eventCatcher(callObj||this);return(name+':'+this[name].addEvent(catcher))};obj.callEvent=function(name, arg0){name='ev_'+name.toLowerCase();if (this[name])return this[name].apply(this, arg0);return true};obj.checkEvent=function(name){return (!!this['ev_'+name.toLowerCase()])
+ };obj.eventCatcher=function(obj){var dhx_catch = [];var z = function(){var res = true;for (var i = 0;i < dhx_catch.length;i++){if (dhx_catch[i] != null){var zr = dhx_catch[i].apply(obj, arguments);res=res&&zr}};return res};z.addEvent=function(ev){if (typeof (ev)!= "function")
+ ev=eval(ev);if (ev)return dhx_catch.push(ev)-1;return false};z.removeEvent=function(id){dhx_catch[id]=null};return z};obj.detachEvent=function(id){if (id != false){var list = id.split(':');this[list[0]].removeEvent(list[1])}}};
+//v.2.5 build 91111
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_classic.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_classic.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_classic.css	(revision 478)
@@ -0,0 +1,240 @@
+.dhtmlxcalendar_classic {
+	background: url(../imgs/__dhxCal_skin_Classic/cal_bg_single.gif) no-repeat;
+	background-color:white;
+	border: 1px solid gray;
+	font-family: Arial;
+	z-index:99;
+	height:auto;
+	width:145px;
+	padding:5px 10px 5px 10px;
+}
+
+.dhtmlxcalendar_classic_maxi{
+  height:auto;
+}
+
+.dhtmlxcalendar_classic_ifr,
+.dhtmlxcalendar_classic_mini_ifr,
+.dhtmlxcalendar_classic_maxi_ifr {
+  height:147px;
+  width:167px;
+}
+  
+.dhtmlxcalendar_classic_mini_ifr {
+  height: 14px;
+}
+
+.dhtmlxcalendar_classic_maxi_ifr {
+  height: 176px;
+}
+
+.dhtmlxcalendar_classic_mini {
+  height: 14px;
+}
+
+.dhtmlxcalendar_classic_mini .winHeader{
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_classic .winHeader {
+  height: 14px;
+  width: 144px;
+  margin-bottom: 7px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_classic .winTitle {
+  color: #383838;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 90px; 
+  height: 15px;
+  overflow: hidden;
+  margin-top: -2px;
+}
+
+.dhtmlxcalendar_classic .btn_maxi,
+.dhtmlxcalendar_classic .btn_mini,
+.dhtmlxcalendar_classic .btn_close,
+.dhtmlxcalendar_classic .btn_today,
+.dhtmlxcalendar_classic .btn_clear {
+  background: url(../imgs/__dhxCal_skin_Classic/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left:1px;
+}
+
+.dhtmlxcalendar_classic .btn_mini {
+  background-position: -48px 0;
+}
+
+.dhtmlxcalendar_classic .btn_maxi {
+  background-position: -36px 0;
+}
+
+.dhtmlxcalendar_classic .btn_close {
+  background-position: 0 0;
+}
+
+.dhtmlxcalendar_classic .btn_today {
+  background-position: -12px 0;
+}
+
+.dhtmlxcalendar_classic .btn_clear {
+  background-position: -24px 0;
+}
+
+.dhtmlxcalendar_classic .entbox{
+	width:145px;
+}
+
+.dhtmlxcalendar_classic td {
+	font-size: 11px;
+	font-family: Tahoma;
+	text-align:center;
+	font-weight: bold;	
+}
+
+.dhtmlxcalendar_classic .dxcalmonth div.planeYear{
+	margin-left:4px;
+	
+}
+
+.dhtmlxcalendar_classic .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_classic .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_Black/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 6px;
+}
+.dhtmlxcalendar_classic .dxcalmonth td.month_btn_right {
+	background-position: -66px 0;
+}
+
+.dhtmlxcalendar_classic .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_classic .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar_classic .dxcalmonth table {
+  margin: auto;
+}
+.dhtmlxcalendar_classic .dxcaldlabel {
+	border-bottom: 0px solid #7e7e7e;
+	color:#7e7e7e;
+	background-color: #eeeeee;
+	margin-top: 5px;
+}
+.dhtmlxcalendar_classic .dxcaldlabel td,
+.dhtmlxcalendar_classic .dxcaldays td,
+.dhtmlxcalendar_classic .dxcaldays_ie td{
+	font-size: 11px;
+	font-family: Tahoma;
+	font-weight: normal;	
+	text-align: left;
+	vertical-align: middle;
+	width: 18px;
+	height: 18px;
+	color: black;
+}
+
+.dhtmlxcalendar_classic .dxcaldlabel{
+
+  	border-top: 1px solid #7e7e7e;
+}
+.dhtmlxcalendar_classic .dxcaldays td,
+.dhtmlxcalendar_classic .dxcaldays_ie td{
+	border: 0px;
+	text-align: center;
+	cursor: pointer;
+}
+.dhtmlxcalendar_classic .dxcaldays_ie td{
+	height:16px;
+}
+.dhtmlxcalendar_classic td.comma{
+	visibility:visible;
+}
+.dhtmlxcalendar_classic div.planeMonth,
+.dhtmlxcalendar_classic div.planeYear {
+	height: auto;
+	overflow: auto;
+}
+div.dhtmlxcalendar_classic div.planeYear{
+	display:inline;
+	width:28px;
+}
+
+/* begin: days colors */
+.dhtmlxcalendar_classic td.thismonth{
+    border-top: 1px solid #7e7e7e;
+	color:#0052ab;
+	text-decoration:underline;
+	padding:1px;
+}
+
+.dhtmlxcalendar_classic td.othermonth{
+   	border-top: 1px solid #7e7e7e;
+	visibility:visible;
+	color:#0052ab;
+}
+
+.dhtmlxcalendar_classic td.weekend{
+  	border-top: 1px solid #7e7e7e;  
+	color:#0052ab;
+	text-decoration:underline;
+	padding:1px;
+}
+
+.dhtmlxcalendar_classic td.insensitive{
+	color:#b5b5b5;
+	cursor: default;
+	padding:1px;
+}
+
+.dhtmlxcalendar_classic td.selected{
+  	border-top: 1px solid #7e7e7e;
+  	background-color: #f5c453;
+	color:#0052ab !important;
+}
+
+
+.dhtmlxcalendar_classic td.current{
+  	border-top: 1px solid #7e7e7e;
+  	color:#0052ab;
+	font-weight:bold !important
+}
+
+.dhtmlxcalendar_classic td.hover{
+  	border: 1px solid #f5c453;
+	padding:0px;
+}
+
+.dhtmlxcalendar_classic td.holiday{ 
+	font-weight:bold;
+	color:#0052ab;
+}
+
+/* begin: dhtmlxRichSelector */
+ .dhtmlxcalendar_classic div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_classic textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_classic select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt; 
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+.dhtmlxcalendar_classic select.dhtmlxRichSelector {
+	border: 1px solid #555555;
+}
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_black.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_black.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_black.css	(revision 478)
@@ -0,0 +1,249 @@
+.dhtmlxcalendar_dhx_black {
+	background: url(../imgs/__dhxCal_skin_Black/cal_bg_single.png) no-repeat;
+	font-family: Arial;
+	z-index:99;
+	height:173px;
+	padding: 14px 10px 0px 8px;
+	width:161px;	
+}
+
+.dhtmlxcalendar_dhx_black_mini {
+	background: url(../imgs/__dhxCal_skin_Black/cal_bg_single_mini.gif) no-repeat;
+	height:25px;
+	padding-top: 14px;
+  width:161px;;
+}
+
+.dhtmlxcalendar_dhx_black_maxi {
+  background: url(../imgs/__dhxCal_skin_Black/cal_bg_single_maxi.gif) no-repeat;
+  height:185px;
+}
+
+.dhtmlxcalendar_dhx_black_ifr,
+.dhtmlxcalendar_dhx_black_mini_ifr,
+.dhtmlxcalendar_dhx_black_maxi_ifr {
+	height:173px;
+	width:179px;
+}
+
+.dhtmlxcalendar_dhx_black_mini_ifr {
+  height:25px;
+}
+
+.dhtmlxcalendar_dhx_black_maxi_ifr {
+  height:185px;
+}
+
+.dhtmlxcalendar_dhx_black_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_dhx_black .winHeader {
+	height: 13px;
+  margin: -7px 0 7px;
+  -moz-user-select:none;
+  width: 161px;
+}
+
+.dhtmlxcalendar_dhx_black .winTitle {
+	color:#b2b2b2;
+	font-size:12px;
+	float:left;
+	cursor: move;	
+  margin-top: -2px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_dhx_black .btn_maxi,
+.dhtmlxcalendar_dhx_black .btn_mini,
+.dhtmlxcalendar_dhx_black .btn_close,
+.dhtmlxcalendar_dhx_black .btn_today,
+.dhtmlxcalendar_dhx_black .btn_clear {
+  background: url(../imgs/__dhxCal_skin_Black/btns.gif) no-repeat;
+	float:right;
+	height:12px;
+	width:12px;	
+  margin-left:1px;
+}
+
+.dhtmlxcalendar_dhx_black .btn_close {
+    background-position:0 0;
+}
+.dhtmlxcalendar_dhx_black .btn_today {
+    background-position:-12px 0;
+}
+.dhtmlxcalendar_dhx_black .btn_clear {
+    background-position:-24px 0;
+}
+.dhtmlxcalendar_dhx_black .btn_maxi {
+  	background-position:-36px 0;
+}
+
+.dhtmlxcalendar_dhx_black .btn_mini {
+  	background-position:-48px 0;
+}
+
+.dhtmlxcalendar_dhx_black .entbox{
+	width:161px;
+	clear:both;
+}
+
+.dhtmlxcalendar_dhx_black td {
+	font-size: 11px;
+	font-family: Tahoma;
+	text-align:center;
+}
+
+.dhtmlxcalendar_dhx_black .dxcalmonth td{
+	color: #ffd028;
+	font-weight: bold;
+}
+
+.dhtmlxcalendar_dhx_black .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_dhx_black .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_Black/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 6px;
+}
+
+.dhtmlxcalendar_dhx_black .dxcalmonth td.month_btn_right {
+	background-position: -66px 0;
+}
+
+.dhtmlxcalendar_dhx_black .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_dhx_black .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar_dhx_black .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_dhx_black .dxcaldlabel {
+	border-bottom: 1px solid #fff;
+	border-top: 0px;
+	padding-left:2px;
+	margin-top: 4px;
+}
+
+.dhtmlxcalendar_dhx_black .dxcaldays{
+  margin-top:10px;
+}
+
+.dhtmlxcalendar_dhx_black .dxcaldays_ie{
+  width: 161px;
+  margin-top:13px;
+  height: 102px;
+}
+
+.dhtmlxcalendar_dhx_black .dxcaldlabel td,
+.dhtmlxcalendar_dhx_black .dxcaldays td,
+.dhtmlxcalendar_dhx_black .dxcaldays_ie td{
+	color:#fff;
+	font-size: 11px;
+	font-family: Tahoma;
+	text-align: center;
+	vertical-align: middle;
+	width: 20px;
+	height: 17px;
+}
+
+.dhtmlxcalendar_dhx_black .dxcaldays td,
+.dhtmlxcalendar_dhx_black .dxcaldays_ie td{
+	border: 0px;
+	cursor: pointer;
+	color: #fff;
+}
+
+.dhtmlxcalendar_dhx_black .dxcaldays_ie td{
+	height:15px;
+}
+
+.dhtmlxcalendar_dhx_black td.comma{
+	visibility:visible;
+	padding-right: 3px;
+}
+
+.dhtmlxcalendar_dhx_black div.planeMonth,
+.dhtmlxcalendar_dhx_black div.planeYear {
+	height: auto;
+	overflow: auto;
+}
+
+div.dhtmlxcalendar_dhx_black div.planeYear{
+	display:inline;
+	width:28px;
+}
+
+.dhtmlxcalendar_dhx_black td.thismonth{
+	color: #fff;
+	padding:1px;
+}
+
+.dhtmlxcalendar_dhx_black td.othermonth{
+	visibility: visible;
+	color: #fedb2f;
+}
+
+.dhtmlxcalendar_dhx_black td.weekend{
+	color:#b1b1b1;
+	padding:1px;
+}
+
+.dhtmlxcalendar_dhx_black td.insensitive{
+	color:#333;
+	cursor: default;
+	padding:1px;
+}
+
+.dhtmlxcalendar_dhx_black td.selected{
+	background: url(../imgs/__dhxCal_skin_Black/cell_select.png) center center no-repeat;
+	color:white !important;
+}
+
+.dhtmlxcalendar_dhx_black td.current{
+	font-weight:bold  !important;
+	color:#fff;
+}
+
+.dhtmlxcalendar_dhx_black td.hover{
+	border:1px solid #b5b5b5;
+	padding:0px;
+}
+
+.dhtmlxcalendar_dhx_black td.holiday{ 
+	font-weight:bold;
+	color:#FF00D4;
+}
+
+
+
+/* begin: dhtmlxDblCalendarObject */
+.dhtmlxdblcalendar_dhx_black {
+	background: url(_dhx_black/cal_bg_double.png) no-repeat;
+	padding: 0px;
+}
+.dhtmlxdblcalendar_dhx_black .dhtmlxcalendar {
+	background-image: url(../imgs/blank.gif);
+}
+/* end: dhtmlxDblCalendarObject */
+
+/* begin: dhtmlxRichSelector */
+.dhtmlxcalendar_dhx_black div.dhtmlxRichSelector {
+	position: absolute;
+	background-color:#ffffff;
+	display: block;
+}
+.dhtmlxcalendar_dhx_black textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_dhx_black select.dhtmlxRichSelector {
+	font-family: verdana;
+	position: absolute;
+	font-size: 9px;
+	overflow: hidden;
+	border-width: 0px;
+	z-index:100;
+}
+.dhtmlxcalendar_dhx_black select.dhtmlxRichSelector {
+	border: 1px solid #555555;
+}
+/* end: dhtmlxRichSelector */
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_blue.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_blue.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_blue.css	(revision 478)
@@ -0,0 +1,255 @@
+.dhtmlxcalendar_dhx_blue{
+  background: url(../imgs/__dhxCal_skin_Blue/cal_bg_single.gif) no-repeat;
+  font-family: Arial;
+  z-index:99;
+  height:173px;
+  padding: 14px 10px 0px 8px;
+  width:161px;  
+}
+
+.dhtmlxcalendar_dhx_blue_mini{
+  background: url(../imgs/__dhxCal_skin_Blue/cal_bg_single_mini.gif) no-repeat;
+  height:25px;
+  padding-top: 14px;
+  width:161px;;
+}
+
+.dhtmlxcalendar_dhx_blue_maxi{
+  background: url(../imgs/__dhxCal_skin_Blue/cal_bg_single_maxi.gif) no-repeat;
+  height:185px;
+}
+
+.dhtmlxcalendar_dhx_blue_ifr,
+.dhtmlxcalendar_dhx_blue_mini_ifr,
+.dhtmlxcalendar_dhx_blue_maxi_ifr {
+  height:173px;
+  width:179px;
+}
+
+.dhtmlxcalendar_dhx_blue_mini_ifr {
+  height:25px;
+}
+
+.dhtmlxcalendar_dhx_blue_maxi_ifr {
+  height:185px;
+}
+
+.dhtmlxcalendar_dhx_blue_mini .winHeader{
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_dhx_blue .winHeader {
+  height: 13px;
+  margin: -7px 0 7px;
+  width: 161px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_dhx_blue .winTitle {
+  color: #01699E;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 105px;
+  margin-top: -2px;
+}
+
+.dhtmlxcalendar_dhx_blue .btn_maxi,
+.dhtmlxcalendar_dhx_blue .btn_mini,
+.dhtmlxcalendar_dhx_blue .btn_close,
+.dhtmlxcalendar_dhx_blue .btn_today,
+.dhtmlxcalendar_dhx_blue .btn_clear {
+  background: url(../imgs/__dhxCal_skin_Blue/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left: 1px;
+}
+
+.dhtmlxcalendar_dhx_blue .btn_mini {
+    background-position: -48px 0;
+}
+
+.dhtmlxcalendar_dhx_blue .btn_maxi {
+    background-position: -36px 0;
+}
+
+.dhtmlxcalendar_dhx_blue .btn_close {
+    background-position: 0 0;
+}
+
+.dhtmlxcalendar_dhx_blue .btn_today {
+    background-position: -12px 0;
+
+}
+
+.dhtmlxcalendar_dhx_blue .btn_clear {
+    background-position: -24px 0;
+}
+
+.dhtmlxcalendar_dhx_blue .entbox{
+	width:161px;
+	clear:both;
+}
+
+.dhtmlxcalendar_dhx_blue td {
+	font-size: 11px;
+	font-family: Tahoma;
+	text-align:center;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcalmonth td{
+	color: #01699e;
+	font-weight: bold;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_dhx_blue .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_Blue/btns.gif) no-repeat;
+	background-position: -60px;
+	width: 6px;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcalmonth td.month_btn_right {
+	background-position: -66px;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_dhx_blue .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcaldlabel {
+	border-bottom: 1px solid #fff;
+	border-top: 0px;
+	padding-left:2px;
+	margin-top: 4px;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcaldays{
+  margin-top:10px;
+  height: 114px;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcaldays_ie{
+  width: 161px;
+  margin-top:13px; 
+  height: 102px;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcaldlabel td {
+	color:#5e6366;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcaldlabel td,
+.dhtmlxcalendar_dhx_blue .dxcaldays td,
+.dhtmlxcalendar_dhx_blue .dxcaldays_ie td{
+	font-size: 11px;
+	font-family: Tahoma;
+	text-align: center;
+	vertical-align: middle;
+	width: 20px;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcaldays td,
+.dhtmlxcalendar_dhx_blue .dxcaldays_ie td{
+	border: 0px;
+	cursor: pointer;
+	color: #fff;
+}
+
+.dhtmlxcalendar_dhx_blue .dxcaldays_ie td{
+  height: 16px;
+}
+
+.dhtmlxcalendar_dhx_blue td.comma{
+	visibility:visible;
+	padding-right: 3px;
+}
+
+.dhtmlxcalendar_dhx_blue div.planeMonth,
+.dhtmlxcalendar_dhx_blue div.planeYear {
+	height: auto;
+	overflow: auto;
+}
+
+div.dhtmlxcalendar_dhx_blue div.planeYear{
+	display:inline;
+	width:28px;
+}
+
+.dhtmlxcalendar_dhx_blue td.thismonth{
+	color: #919294;
+	padding:1px;
+}
+
+.dhtmlxcalendar_dhx_blue td.othermonth{
+	visibility: visible;
+	color: #73aabe;
+}
+
+.dhtmlxcalendar_dhx_blue td.weekend{
+	color:#036497;
+	padding:1px;
+}
+
+.dhtmlxcalendar_dhx_blue td.insensitive{
+	color:#d0d0d0;
+	cursor: default;
+	padding:1px;
+}
+
+.dhtmlxcalendar_dhx_blue td.selected{
+	background: #04648c;
+	color:white !important;
+	font-weight: bold;
+}
+
+.dhtmlxcalendar_dhx_blue td.current{
+	font-weight:bold  !important;
+	color:#919294;
+}
+
+.dhtmlxcalendar_dhx_blue td.hover{
+	border:1px solid #b5b5b5;
+	padding:0px;
+}
+
+.dhtmlxcalendar_dhx_blue td.holiday{ 
+	font-weight:bold;
+	color:#ed3a64;
+}
+
+/* begin: dhtmlxDblCalendarObject */
+.dhtmlxdblcalendar_dhx_blue {
+	background: url(_dhx_blue/cal_bg_double.png) no-repeat;
+	padding: 0px;
+}
+.dhtmlxdblcalendar_dhx_blue .dhtmlxcalendar {
+	background-image: url(../imgs/blank.gif);
+}
+/* end: dhtmlxDblCalendarObject */
+
+/* begin: dhtmlxRichSelector */
+.dhtmlxcalendar_dhx_blue div.dhtmlxRichSelector {
+	position: absolute;
+	background-color:#ffffff;
+	display: block;
+}
+.dhtmlxcalendar_dhx_blue textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_dhx_blue select.dhtmlxRichSelector {
+	font-family: verdana;
+	position: absolute;
+	font-size: 9px;
+	overflow: hidden;
+	border-width: 0px;
+	z-index:100;
+}
+.dhtmlxcalendar_dhx_blue select.dhtmlxRichSelector {
+	border: 1px solid #555555;
+}
+/* end: dhtmlxRichSelector */
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_skyblue.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_skyblue.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_dhx_skyblue.css	(revision 478)
@@ -0,0 +1,247 @@
+.dhtmlxcalendar_dhx_skyblue{
+  background: #fff;
+  font: 12px Tahoma;
+  color: #000;
+  z-index:99;
+  height:153px;
+  padding-top:14px;
+  width:193px;  
+  border: 1px solid #a4bed4;
+}
+
+.dhtmlxcalendar_dhx_skyblue_mini{
+  height:25px;
+  padding-top: 0px;
+}
+
+.dhtmlxcalendar_dhx_skyblue_maxi{
+  height:179px !important;
+  height:193px;
+}
+
+.dhtmlxcalendar_dhx_skyblue_ifr,
+.dhtmlxcalendar_dhx_skyblue_mini_ifr,
+.dhtmlxcalendar_dhx_skyblue_maxi_ifr {
+  height:173px;
+  width:193px;
+}
+
+.dhtmlxcalendar_dhx_skyblue_mini_ifr {
+  height:25px;
+}
+
+.dhtmlxcalendar_dhx_skyblue_maxi_ifr {
+  height:185px;
+}
+
+.dhtmlxcalendar_dhx_skyblue_mini .winHeader {
+  margin:0 !important;
+  border-bottom: 0 !important;
+}
+
+.dhtmlxcalendar_dhx_skyblue .winHeader {
+  background:url('../imgs/__dhxCal_skin_Skyblue/cal_header_bg.gif');
+  border-style: solid;
+  border-width: 0 1px 1px 1px;
+  border-color: #fff #fff #a4bed4 #fff;
+  padding: 9px 5px 0;
+  height: 16px;
+  
+  
+  margin: -14px 0 12px;
+  -moz-user-select:none;       
+}
+
+.dhtmlxcalendar_dhx_skyblue .winTitle {
+  font-size:11px;
+  font-weight: bold;
+  float:left;
+  cursor: move;  
+  width: 105px;
+  margin-top: -2px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .btn_maxi,
+.dhtmlxcalendar_dhx_skyblue .btn_mini,
+.dhtmlxcalendar_dhx_skyblue .btn_close,
+.dhtmlxcalendar_dhx_skyblue .btn_today,
+.dhtmlxcalendar_dhx_skyblue .btn_clear {
+  background: url(../imgs/__dhxCal_skin_Skyblue/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left: 3px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .btn_mini {
+    background-position: -48px 0;
+}
+
+.dhtmlxcalendar_dhx_skyblue .btn_maxi {
+    background-position: -36px 0;
+}
+
+.dhtmlxcalendar_dhx_skyblue .btn_close {
+    background-position: 0 0;
+}
+
+.dhtmlxcalendar_dhx_skyblue .btn_today {
+    background-position: -12px 0;
+
+}
+
+.dhtmlxcalendar_dhx_skyblue .btn_clear {
+    background-position: -24px 0;
+}
+
+.dhtmlxcalendar_dhx_skyblue .entbox{
+  width:161px;
+  height: 114px;
+  clear:both;
+  margin: 0 15px;
+}
+
+.dhtmlxcalendar_dhx_skyblue td {
+  text-align:center;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcalmonth td{
+  font-size: 11px;
+  font-weight: bold;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_dhx_skyblue .dxcalmonth td.month_btn_right {
+  background: url(../imgs/__dhxCal_skin_Skyblue/btns.gif) no-repeat;
+  background-position: -60px;
+  width: 4px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcalmonth td.month_btn_right {
+  background-position: -64px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_dhx_skyblue .dxcalmonth td.month_btn_right span{
+  visibility: hidden;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcaldlabel {
+  font-size: 11px;
+  font-weight: bold;
+  border-top: 0px;
+  padding-left:2px;
+  margin-top: 4px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcaldays{
+  margin-top:5px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcaldays_ie{
+  width: 161px;
+  margin-top:5px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcaldlabel td,
+.dhtmlxcalendar_dhx_skyblue .dxcaldays td,
+.dhtmlxcalendar_dhx_skyblue .dxcaldays_ie td{
+  text-align: center;
+  vertical-align: middle;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcaldays td,
+.dhtmlxcalendar_dhx_skyblue .dxcaldays_ie td{
+  height: 19px;
+  width: 21px;
+  font-size:12px;
+  border: 0px;
+  cursor: pointer;
+  padding: 0px;
+}
+
+.dhtmlxcalendar_dhx_skyblue .dxcaldays_ie td{
+  height:19px;
+}
+
+.dhtmlxcalendar_dhx_skyblue td.comma{
+  visibility:visible;
+  padding-right: 3px;
+}
+
+.dhtmlxcalendar_dhx_skyblue div.planeMonth,
+.dhtmlxcalendar_dhx_skyblue div.planeYear {
+  height: auto;
+  overflow: auto;
+}
+
+div.dhtmlxcalendar_dhx_skyblue div.planeYear{
+  display:inline;
+  width:28px;
+}
+
+.dhtmlxcalendar_dhx_skyblue td.othermonth{
+  visibility: visible;
+  color: #ccc;
+}
+
+.dhtmlxcalendar_dhx_skyblue td.weekend{
+
+}
+
+.dhtmlxcalendar_dhx_skyblue td.insensitive{
+  color:#ccc;
+  cursor: default;
+
+}
+
+.dhtmlxcalendar_dhx_skyblue td.selected{
+  background: url(../imgs/__dhxCal_skin_Skyblue/cell_select.gif) center no-repeat;
+}
+
+.dhtmlxcalendar_dhx_skyblue td.current{
+  font-weight:bold  !important;
+}
+
+.dhtmlxcalendar_dhx_skyblue td.hover{
+
+}
+
+.dhtmlxcalendar_dhx_skyblue td.holiday{ 
+  font-weight:bold;
+  color:#ed3a64;
+}
+
+/* begin: dhtmlxDblCalendarObject */
+.dhtmlxdblcalendar_dhx_skyblue {
+  background: url(_dhx_blue/cal_bg_double.png) no-repeat;
+  padding: 0px;
+}
+.dhtmlxdblcalendar_dhx_skyblue .dhtmlxcalendar {
+  background-image: url(../imgs/blank.gif);
+}
+/* end: dhtmlxDblCalendarObject */
+
+/* begin: dhtmlxRichSelector */
+.dhtmlxcalendar_dhx_skyblue div.dhtmlxRichSelector {
+  position: absolute;
+  background-color:#ffffff;
+  display: block;
+}
+.dhtmlxcalendar_dhx_skyblue textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_dhx_skyblue select.dhtmlxRichSelector {
+  font-family: verdana;
+  position: absolute;
+  font-size: 9px;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+}
+.dhtmlxcalendar_dhx_skyblue select.dhtmlxRichSelector {
+  border: 1px solid #555555;
+}
+/* end: dhtmlxRichSelector */
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simpleblue.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simpleblue.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simpleblue.css	(revision 478)
@@ -0,0 +1,253 @@
+.dhtmlxcalendar_simpleblue {
+	background: url(../imgs/__dhxCal_skin_SimpleBlue/cal_bg_single.png) no-repeat;
+	border: 0px solid green;
+	font-family: Arial;
+	z-index:99;
+	height:174px;
+	width:160px;
+	padding:16px;
+}
+
+.dhtmlxcalendar_simpleblue_mini {
+  background: url(../imgs/__dhxCal_skin_SimpleBlue/cal_bg_single_mini.gif) no-repeat;
+  height:5px;
+  width:160px;
+}
+
+.dhtmlxcalendar_simpleblue_maxi {
+  background: url(../imgs/__dhxCal_skin_SimpleBlue/cal_bg_single_maxi.gif) no-repeat;
+  height:175px;
+}
+
+.dhtmlxcalendar_simpleblue_ifr,
+.dhtmlxcalendar_simpleblue_mini_ifr,
+.dhtmlxcalendar_simpleblue_maxi_ifr {
+  height:195px;
+  width:189px;
+}
+
+.dhtmlxcalendar_simpleblue_maxi_ifr {
+  height:195px;
+  width:180px;
+}
+
+.dhtmlxcalendar_simpleblue_mini_ifr {
+  height:25px;
+}
+
+.dhtmlxcalendar_simpleblue_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_simpleblue .winHeader {
+  height: 13px;
+  margin-top: -7px;
+  margin-bottom: 3px;
+  width: 160px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_simpleblue .winTitle {
+  color:#575757;
+  font-size:12px;                                
+  float:left;
+  cursor: move;  
+  width: 100px;
+  margin-top: -1px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_simpleblue .btn_maxi,
+.dhtmlxcalendar_simpleblue .btn_mini,
+.dhtmlxcalendar_simpleblue .btn_close,
+.dhtmlxcalendar_simpleblue .btn_today,
+.dhtmlxcalendar_simpleblue .btn_clear {
+  background: url(../imgs/__dhxCal_skin_SimpleBlue/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;
+  margin-left:1px;
+}
+
+.dhtmlxcalendar_simpleblue .btn_mini {
+  background-position: -48px 0;
+}
+
+.dhtmlxcalendar_simpleblue .btn_maxi {
+  background-position: -36px 0;
+}
+
+.dhtmlxcalendar_simpleblue .btn_close {
+  background-position: 0 0;
+}
+
+.dhtmlxcalendar_simpleblue .btn_today {
+  background-position: -12px 0;
+}
+
+.dhtmlxcalendar_simpleblue .btn_clear {
+  background-position: -24px 0;
+}
+
+.dhtmlxcalendar_simpleblue .entbox{
+	width:161px;
+	height:174px;
+}
+
+.dhtmlxcalendar_simpleblue td {
+	font-size: 10px;
+	font-family: Tahoma;
+	
+	text-align:center;
+}
+
+.dhtmlxcalendar_simpleblue .dxcalmonth{
+
+}
+
+.dhtmlxcalendar_simpleblue .dxcalmonth td{
+	font-size: 12px;
+	font-weight:bold;		
+}
+
+.dhtmlxcalendar_simpleblue .dxcalmonth .planeYear{
+	margin-left:8px;
+}
+
+
+.dhtmlxcalendar_simpleblue .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_simpleblue .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_SimpleBlue/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 8px;
+}
+.dhtmlxcalendar_simpleblue .dxcalmonth td.month_btn_right {
+	background-position: -68px 0;
+}
+
+.dhtmlxcalendar_simpleblue .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_simpleblue .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar_simpleblue .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_simpleblue .dxcaldlabel {
+	border-bottom: 1px solid #7e7e7e;
+  	margin-top: 10px;	
+	color:#7e7e7e;
+}
+.dhtmlxcalendar_simpleblue .dxcaldlabel td,
+.dhtmlxcalendar_simpleblue .dxcaldays td,
+.dhtmlxcalendar_simpleblue .dxcaldays_ie td{
+	font-size: 11px;
+	font-family: Tahoma;
+	font-weight:normal;	
+	text-align: center;
+	vertical-align: middle;
+	width: 24px;
+	height: 18px;
+	color: #7e7e7e;
+}
+
+.dhtmlxcalendar_simpleblue .dxcaldlabel{
+	border-top: 0px;
+}
+
+.dhtmlxcalendar_simpleblue .dxcaldlabel td{
+	color: black;
+}
+
+.dhtmlxcalendar_simpleblue .dxcaldays td,
+.dhtmlxcalendar_simpleblue .dxcaldays_ie td{
+	border: 0px;
+	text-align: center;
+	cursor: pointer;
+}
+.dhtmlxcalendar_simpleblue .dxcaldays_ie td{
+	height:19px;
+}
+.dhtmlxcalendar_simpleblue td.comma{
+	visibility:visible;
+}
+.dhtmlxcalendar_simpleblue div.planeMonth,
+.dhtmlxcalendar_simpleblue div.planeYear {
+	height: auto;
+	overflow: auto;
+}
+div.dhtmlxcalendar_simpleblue div.planeYear{
+	display:inline;
+	width:auto;
+}
+
+/* begin: days colors */
+.dhtmlxcalendar_simpleblue td.thismonth{
+	color:black;
+	padding:1px;
+	width: 24px;
+}
+
+.dhtmlxcalendar_simpleblue td.othermonth{
+	visibility: visible;
+}
+
+.dhtmlxcalendar_simpleblue td.weekend{
+	color:black;
+	padding:1px;
+}
+
+.dhtmlxcalendar_simpleblue td.insensitive{
+	color:#b5b5b5;
+	cursor: default;
+	padding:1px;
+}
+
+.dhtmlxcalendar_simpleblue td.selected{
+	background-color: #6fdcfa;
+	color:black !important;
+}
+
+
+.dhtmlxcalendar_simpleblue td.current{
+  	color:black;
+	font-weight:bold !important
+}
+
+.dhtmlxcalendar_simpleblue td.hover{
+	border:1px solid #6fdcfa;
+	padding:0px;
+}
+
+.dhtmlxcalendar_simpleblue td.holiday{ 
+	font-weight:bold;
+	text-decoration:underline;
+	color:#000;
+}
+
+/* begin: dhtmlxRichSelector */
+ .dhtmlxcalendar_simpleblue div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_simpleblue textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_simpleblue select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+
+.dhtmlxcalendar_simpleblue select.dhtmlxRichSelector {
+  border: 1px solid #7b9ebd;
+}
+/* end: simpleblue */
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolordark.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolordark.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolordark.css	(revision 478)
@@ -0,0 +1,253 @@
+.dhtmlxcalendar_simplecolordark {
+  background: url(../imgs/__dhxCal_skin_SimpleColorDark/cal_bg_single.png) repeat-x;
+  border: 0px solid green;
+  font-family: Arial;
+  z-index:99;
+  height:177px;
+  width:160px;
+  padding:10px;
+}
+
+.dhtmlxcalendar_simplecolordark_mini {
+  background: #343434;
+  height:5px;
+  width:160px;
+  padding: 10px 10px 0px;
+}
+
+.dhtmlxcalendar_simplecolordark_maxi {
+  height:176px;
+}
+
+.dhtmlxcalendar_simplecolordark_ifr,
+.dhtmlxcalendar_simplecolordark_mini_ifr,
+.dhtmlxcalendar_simplecolordark_maxi_ifr {
+  height:184px;
+  width:180px;
+}
+
+.dhtmlxcalendar_simplecolordark_maxi_ifr {
+  height:195px;
+  width:180px;
+}
+
+.dhtmlxcalendar_simplecolordark_mini_ifr {
+  height:26px;
+}
+
+.dhtmlxcalendar_simplecolordark_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_simplecolordark .winHeader {
+  height: 13px;
+  margin: -5px 0 3px;
+  width: 160px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_simplecolordark .winTitle {
+  color:#b2b2b2;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 100px;
+  margin-top: -1px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_simplecolordark .btn_maxi,
+.dhtmlxcalendar_simplecolordark .btn_mini,
+.dhtmlxcalendar_simplecolordark .btn_close,
+.dhtmlxcalendar_simplecolordark .btn_today,
+.dhtmlxcalendar_simplecolordark .btn_clear {
+  background: url(../imgs/__dhxCal_skin_SimpleColorDark/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left: 1px;
+}
+
+.dhtmlxcalendar_simplecolordark .btn_mini {
+  background-position: -48px 0;
+}
+
+.dhtmlxcalendar_simplecolordark .btn_maxi {
+  background-position: -36px 0;
+}
+
+.dhtmlxcalendar_simplecolordark .btn_close {
+  background-position: 0 0;
+}
+
+.dhtmlxcalendar_simplecolordark .btn_today {
+  background-position: -12px 0;
+}
+
+.dhtmlxcalendar_simplecolordark .btn_clear {
+  background-position: -24px 0;
+}
+
+.dhtmlxcalendar_simplecolordark .entbox{
+  width:161px;
+  height:164px;
+}
+
+.dhtmlxcalendar_simplecolordark td {
+  font-size: 10px;
+  font-family: Tahoma;
+  font-weight:bold;  
+  text-align:center;
+}
+
+.dhtmlxcalendar_simplecolordark .dxcalmonth{
+
+}
+
+.dhtmlxcalendar_simplecolordark .dxcalmonth td{
+  font-size: 12px;
+  color:#b2b405;
+}
+
+
+.dhtmlxcalendar_simplecolordark .dxcalmonth .planeYear{
+  margin-left:4px;
+}
+
+
+.dhtmlxcalendar_simplecolordark .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_simplecolordark .dxcalmonth td.month_btn_right {
+  background: url(../imgs/__dhxCal_skin_SimpleColorDark/btns.gif) no-repeat;
+  background-position: -60px 0;
+  width: 4px;
+}
+.dhtmlxcalendar_simplecolordark .dxcalmonth td.month_btn_right {
+  background-position: -64px 0;
+}
+
+.dhtmlxcalendar_simplecolordark .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_simplecolordark .dxcalmonth td.month_btn_right span{
+  visibility: hidden;
+}
+
+.dhtmlxcalendar_simplecolordark .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_simplecolordark .dxcaldlabel {
+    margin-top: 6px;  
+  border-bottom: 1px solid #7e7e7e;
+  color:#7e7e7e;
+}
+.dhtmlxcalendar_simplecolordark .dxcaldlabel td,
+.dhtmlxcalendar_simplecolordark .dxcaldays td,
+.dhtmlxcalendar_simplecolordark .dxcaldays_ie td{
+  font-size: 11px;
+  font-family: Tahoma;
+  font-weight:normal;  
+  text-align: center;
+  vertical-align: middle;
+  width: 24px;
+  height: 21px;
+  color: #7e7e7e;
+}
+
+.dhtmlxcalendar_simplecolordark .dxcaldlabel{
+  border-top: 0px;
+}
+
+.dhtmlxcalendar_simplecolordark .dxcaldlabel td{
+  color: #a5a5a5;
+}
+
+.dhtmlxcalendar_simplecolordark .dxcaldays td,
+.dhtmlxcalendar_simplecolordark .dxcaldays_ie td{
+  border: 0px;
+  text-align: center;
+  cursor: pointer;
+}
+.dhtmlxcalendar_simplecolordark .dxcaldays_ie td{
+  height:16px;
+}
+.dhtmlxcalendar_simplecolordark td.comma{
+  visibility:visible;
+}
+.dhtmlxcalendar_simplecolordark div.planeMonth,
+.dhtmlxcalendar_simplecolordark div.planeYear {
+  height: auto;
+  overflow: auto;
+}
+div.dhtmlxcalendar_simplecolordark div.planeYear{
+  display:inline;
+  width:auto;
+}
+
+/* begin: days colors */
+.dhtmlxcalendar_simplecolordark td.thismonth{
+  color:#717171;
+  padding:1px;
+  width: 24px;
+  height: 21px;
+}
+
+.dhtmlxcalendar_simplecolordark td.othermonth{
+  visibility: visible;
+  color:#3b3b3b;
+}
+
+.dhtmlxcalendar_simplecolordark td.weekend{
+  color:#717171;
+  padding:1px;
+}
+
+.dhtmlxcalendar_simplecolordark td.insensitive{
+  color:#b5b5b5;
+  cursor: default;
+  padding:1px;
+}
+
+.dhtmlxcalendar_simplecolordark td.selected{
+  background-color: #404040;
+  color:white !important;
+}
+
+
+.dhtmlxcalendar_simplecolordark td.current{
+    color:#717171;
+  font-weight:bold !important
+}
+
+.dhtmlxcalendar_simplecolordark td.hover{
+    border: 1px solid white;
+  padding:0px;
+}
+
+.dhtmlxcalendar_simplecolordark td.holiday{ 
+  font-weight:bold;
+  text-decoration:underline;
+  color:#b2b405;
+}
+/* begin: dhtmlxRichSelector */
+ .dhtmlxcalendar_simplecolordark div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_simplecolordark textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_simplecolordark select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+
+.dhtmlxcalendar_simplecolordark select.dhtmlxRichSelector {
+  border: 1px solid #7b9ebd;
+}
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolorsand.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolorsand.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplecolorsand.css	(revision 478)
@@ -0,0 +1,245 @@
+.dhtmlxcalendar_simplecolorsand {
+	background: url(../imgs/__dhxCal_skin_SimpleColorSand/cal_bg_single.png) repeat-x;
+	border: 1px solid #c3c9aa;
+	font-family: Arial;
+	z-index:99;
+	height:174px;
+	width:160px;
+	padding:10px;
+}
+
+.dhtmlxcalendar_simplecolorsand_mini {
+  background: #f2f7e4;
+  height:5px;
+  width:160px;
+  padding: 10px 10px 0px;
+}
+
+.dhtmlxcalendar_simplecolorsand_maxi {
+  height:175px;
+}
+
+.dhtmlxcalendar_simplecolorsand_ifr,
+.dhtmlxcalendar_simplecolorsand_mini_ifr,
+.dhtmlxcalendar_simplecolorsand_maxi_ifr {
+  height:184px;
+  width:180px;
+}
+
+.dhtmlxcalendar_simplecolorsand_maxi_ifr {
+  height:195px;
+  width:180px;
+}
+
+.dhtmlxcalendar_simplecolorsand_mini_ifr {
+  height:26px;
+}
+
+.dhtmlxcalendar_simplecolorsand_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_simplecolorsand .winHeader {
+  height: 13px;
+  margin: -5px 0px 3px;
+  width: 160px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_simplecolorsand .winTitle {
+  color:#575757;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 100px;
+  margin-top: -1px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_simplecolorsand .btn_maxi,
+.dhtmlxcalendar_simplecolorsand .btn_mini,
+.dhtmlxcalendar_simplecolorsand .btn_close,
+.dhtmlxcalendar_simplecolorsand .btn_today,
+.dhtmlxcalendar_simplecolorsand .btn_clear {
+  background: url(../imgs/__dhxCal_skin_SimpleColorSand/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left: 1px;
+}
+
+.dhtmlxcalendar_simplecolorsand .btn_mini {
+  background-position: -48px 0;
+}
+
+.dhtmlxcalendar_simplecolorsand .btn_maxi {
+  background-position: -36px 0;
+}
+
+.dhtmlxcalendar_simplecolorsand .btn_close {
+  background-position: 0 0;
+}
+
+.dhtmlxcalendar_simplecolorsand .btn_today {
+  background-position: -12px 0;
+}
+
+.dhtmlxcalendar_simplecolorsand .btn_clear {
+  background-position: -24px 0;
+}
+
+.dhtmlxcalendar_simplecolorsand .entbox{
+	width:161px;
+	height:160px;
+}
+
+.dhtmlxcalendar_simplecolorsand td {
+	font-size: 10px;
+	font-family: Tahoma;
+	font-weight:bold;
+	text-align:center;
+	
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcalmonth .planeYear{
+	margin-left:4px;
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcalmonth td{
+	font-size: 12px;
+	color:#575757;	
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_simplecolorsand .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_SimpleColorSand/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 4px;
+}
+.dhtmlxcalendar_simplecolorsand .dxcalmonth td.month_btn_right {
+	background-position: -64px 0;
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_simplecolorsand .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcaldlabel {
+  margin-top: 6px;  
+	border-bottom: 1px solid #7e7e7e;
+	color:#717171;
+}
+.dhtmlxcalendar_simplecolorsand .dxcaldlabel td,
+.dhtmlxcalendar_simplecolorsand .dxcaldays td,
+.dhtmlxcalendar_simplecolorsand .dxcaldays_ie td{
+  font: normal 11px Tahoma;
+	text-align: center;
+	vertical-align: middle;
+	width: 24px;
+	height: 19px;
+	color: #7e7e7e;
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcaldlabel{
+	border-top: 0px;
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcaldlabel td{
+	color: #3b3b3b;
+}
+
+.dhtmlxcalendar_simplecolorsand .dxcaldays td,
+.dhtmlxcalendar_simplecolorsand .dxcaldays_ie td{
+	border: 0px;
+	text-align: center;
+	cursor: pointer;
+}
+.dhtmlxcalendar_simplecolorsand .dxcaldays_ie td{
+	height:16px;
+}
+.dhtmlxcalendar_simplecolorsand td.comma{
+	visibility:visible;
+}
+.dhtmlxcalendar_simplecolorsand div.planeMonth,
+.dhtmlxcalendar_simplecolorsand div.planeYear {
+	height: auto;
+	overflow: auto;
+}
+div.dhtmlxcalendar_simplecolorsand div.planeYear{
+	display:inline;
+	width:auto;
+}
+
+/* begin: days colors */
+.dhtmlxcalendar_simplecolorsand td.thismonth{
+	color:#3b3b3b;
+	padding:1px;
+	
+}
+
+.dhtmlxcalendar_simplecolorsand td.othermonth{
+	visibility: visible;
+	color:#a5a5a5;
+}
+
+.dhtmlxcalendar_simplecolorsand td.weekend{
+	color:#3b3b3b;
+	padding:1px;
+}
+
+.dhtmlxcalendar_simplecolorsand td.insensitive{
+	color:#b5b5b5;
+	cursor: default;
+	padding:1px;
+}
+
+.dhtmlxcalendar_simplecolorsand td.selected{
+  	background-color: #f5c453;
+	color:black !important;
+}
+
+
+.dhtmlxcalendar_simplecolorsand td.current{
+  	color:#3b3b3b;
+	font-weight:bold !important
+}
+
+.dhtmlxcalendar_simplecolorsand td.hover{
+  	border: 1px solid #f5c453;
+	padding:0px;
+}
+
+.dhtmlxcalendar_simplecolorsand td.holiday{ 
+	font-weight:bold;
+	text-decoration:underline;
+	color:#3b3b3b;
+}
+/* begin: dhtmlxRichSelector */
+ .dhtmlxcalendar_simplecolorsand div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_simplecolorsand textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_simplecolorsand select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+
+.dhtmlxcalendar_simplecolorsand select.dhtmlxRichSelector {
+  border: 1px solid #7b9ebd;
+}
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplegrey.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplegrey.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_simplegrey.css	(revision 478)
@@ -0,0 +1,254 @@
+.dhtmlxcalendar_simplegrey {
+	background: url(../imgs/__dhxCal_skin_SimpleGrey/cal_bg_single.png) no-repeat;
+	border: 0px solid green;
+	font-family: Arial;
+	z-index:99;
+	height:174px;
+	width:160px;
+	padding:16px;
+}
+
+.dhtmlxcalendar_simplegrey_mini {
+  background: url(../imgs/__dhxCal_skin_SimpleGrey/cal_bg_single_mini.gif) no-repeat;
+  height:5px;
+  width:160px;
+}
+
+.dhtmlxcalendar_simplegrey_maxi {
+  background: url(../imgs/__dhxCal_skin_SimpleGrey/cal_bg_single_maxi.gif) no-repeat;
+  height:175px;
+}
+
+.dhtmlxcalendar_simplegrey_ifr,
+.dhtmlxcalendar_simplegrey_mini_ifr,
+.dhtmlxcalendar_simplegrey_maxi_ifr {
+  height:195px;
+  width:189px;
+}
+
+.dhtmlxcalendar_simplegrey_maxi_ifr {
+  height:195px;
+  width:180px;
+}
+
+.dhtmlxcalendar_simplegrey_mini_ifr {
+  height:25px;
+}
+
+.dhtmlxcalendar_simplegrey_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_simplegrey .winHeader {
+  height: 13px;
+  margin-top: -7px;
+  margin-bottom: 3px;
+  width: 160px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_simplegrey .winTitle {
+  color:#575757;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 100px;
+  margin-top: -1px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_simplegrey .btn_maxi,
+.dhtmlxcalendar_simplegrey .btn_mini,
+.dhtmlxcalendar_simplegrey .btn_close,
+.dhtmlxcalendar_simplegrey .btn_today,
+.dhtmlxcalendar_simplegrey .btn_clear {
+  background: url(../imgs/__dhxCal_skin_SimpleGrey/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left: 1px;
+}
+
+.dhtmlxcalendar_simplegrey .btn_mini {
+  background-position: -48px 0;
+}
+
+.dhtmlxcalendar_simplegrey .btn_maxi {
+  background-position: -36px 0;
+}
+
+.dhtmlxcalendar_simplegrey .btn_close {
+  background-position: 0 0;
+}
+
+.dhtmlxcalendar_simplegrey .btn_today {
+  background-position: -12px 0;
+}
+
+.dhtmlxcalendar_simplegrey .btn_clear {
+  background-position: -24px 0;
+}
+
+
+.dhtmlxcalendar_simplegrey .entbox{
+	width:161px;
+	height:174px;
+}
+
+.dhtmlxcalendar_simplegrey td {
+	font-size: 10px;
+	font-family: Tahoma;
+	text-align:center;
+}
+
+.dhtmlxcalendar_simplegrey .dxcalmonth td{
+  	font-weight:bold;	
+	font-size: 12px;
+}
+
+.dhtmlxcalendar_simplegrey .dxcalmonth .planeYear{
+	margin-left:4px;
+}
+
+.dhtmlxcalendar_simplegrey .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_simplegrey .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_SimpleGrey/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 4px;
+}
+.dhtmlxcalendar_simplegrey .dxcalmonth td.month_btn_right {
+	background-position: -64px 0;
+}
+
+.dhtmlxcalendar_simplegrey .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_simplegrey .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar_simplegrey .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_simplegrey .dxcaldlabel {
+  margin-top: 10px;
+	border-bottom: 1px solid #7e7e7e;
+	color:#7e7e7e;
+}
+.dhtmlxcalendar_simplegrey .dxcaldlabel td,
+.dhtmlxcalendar_simplegrey .dxcaldays td,
+.dhtmlxcalendar_simplegrey .dxcaldays_ie td{
+	font-size: 11px;
+	font-family: Tahoma;
+	font-weight:normal;		
+	text-align: center;
+	vertical-align: middle;
+	width: 24px;
+	height: 18px;
+	color: #7e7e7e;
+}
+
+.dhtmlxcalendar_simplegrey .dxcaldlabel{
+	border-top: 0px;
+}
+
+.dhtmlxcalendar_simplegrey .dxcaldlabel td{
+	color: black;
+}
+
+.dhtmlxcalendar_simplegrey .dxcaldays td,
+.dhtmlxcalendar_simplegrey .dxcaldays_ie td{
+	border: 0px;
+	text-align: center;
+	cursor: pointer;
+}
+.dhtmlxcalendar_simplegrey .dxcaldays_ie td{
+	display: block;
+	height:19px;
+	
+}
+.dhtmlxcalendar_simplegrey td.comma{
+	visibility:visible;
+}
+.dhtmlxcalendar_simplegrey div.planeMonth,
+.dhtmlxcalendar_simplegrey div.planeYear {
+	height: auto;
+	overflow: auto;
+}
+
+div.dhtmlxcalendar_simplegrey div.planeYear{
+	display:inline;
+	width:auto;
+}
+
+/* begin: days colors */
+.dhtmlxcalendar_simplegrey td.thismonth{
+	color:black;
+	padding:1px;
+	width: 24px;
+}
+
+.dhtmlxcalendar_simplegrey td.othermonth{
+	visibility: visible;
+}
+
+.dhtmlxcalendar_simplegrey td.weekend{
+	color:black;
+	padding:1px;
+}
+
+.dhtmlxcalendar_simplegrey td.insensitive{
+	color:#b5b5b5;
+	cursor: default;
+	padding:1px;
+}
+
+.dhtmlxcalendar_simplegrey td.selected{
+	background: url(../imgs/__dhxCal_skin_SimpleGrey/cell_select.png) center center no-repeat;
+	border:1px solid #b5b5b5;
+	padding:0px;
+	color:black !important;
+}
+
+
+.dhtmlxcalendar_simplegrey td.current{
+	color:black;
+	font-weight:bold !important
+
+}
+
+.dhtmlxcalendar_simplegrey td.hover{
+	border:1px solid #b5b5b5;
+	padding:0px;
+}
+
+.dhtmlxcalendar_simplegrey td.holiday{ 
+	font-weight:bold;
+	text-decoration:underline;
+	color:#000;
+}
+
+/* begin: dhtmlxRichSelector */
+ .dhtmlxcalendar_simplegrey div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_simplegrey textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_simplegrey select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+
+.dhtmlxcalendar_simplegrey select.dhtmlxRichSelector {
+	border: 1px solid #7b9ebd;
+}
+/* end: dhtmlxRichSelector */
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_vista.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_vista.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_vista.css	(revision 478)
@@ -0,0 +1,249 @@
+.dhtmlxcalendar_vista {
+	background: url(../imgs/__dhxCal_skin_Vista/cal_bg_single.png) no-repeat;
+	border: 0px solid green;
+	font-family: Arial;
+	z-index:99;
+	height:163px;
+	width:163px;
+	padding:16px;
+}
+
+
+.dhtmlxcalendar_vista_mini {
+  background: url(../imgs/__dhxCal_skin_Vista/cal_bg_single_mini.gif) no-repeat;
+  height:25px;
+  padding-top: 16px;
+  width:163px;
+}
+
+.dhtmlxcalendar_vista_maxi {
+  height:163px;
+}
+
+.dhtmlxcalendar_vista_ifr,
+.dhtmlxcalendar_vista_mini_ifr,
+.dhtmlxcalendar_vista_maxi_ifr {
+  height:195px;
+  width:195px;
+}
+
+.dhtmlxcalendar_vista_mini_ifr {
+  height:34px;
+}
+
+.dhtmlxcalendar_vista_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_vista .winHeader {
+  height: 13px;
+  margin-top: -5px;
+  margin-bottom: 3px;
+  width: 168px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_vista .winTitle {
+  color:#018ad1;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 100px;
+  margin-top: -1px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_vista .btn_maxi,
+.dhtmlxcalendar_vista .btn_mini,
+.dhtmlxcalendar_vista .btn_close,
+.dhtmlxcalendar_vista .btn_today,
+.dhtmlxcalendar_vista .btn_clear {   
+  background: url(../imgs/__dhxCal_skin_Vista/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left:1px;
+}
+
+.dhtmlxcalendar_vista .btn_mini {
+  background-position: -48px 0;
+}
+
+.dhtmlxcalendar_vista .btn_maxi {
+  background-position: -36px 0;
+}
+
+.dhtmlxcalendar_vista .btn_close {
+  background-position: 0 0;
+}
+
+.dhtmlxcalendar_vista .btn_today {
+  background-position: -12px 0;
+}
+
+.dhtmlxcalendar_vista .btn_clear {
+  background-position: -24px 0;
+}
+
+.dhtmlxcalendar_vista .entbox{
+	height:163px;
+	width:163px;
+}
+
+.dhtmlxcalendar_vista td {
+	font-size: 10px;
+	font-family: Tahoma;
+	text-align:center;
+}
+
+.dhtmlxcalendar_vista .dxcalmonth{
+	color:#018ad1;
+}
+
+.dhtmlxcalendar_vista .dxcalmonth td{
+	font-size: 12px;
+	font-weight:bold;		
+}
+
+.dhtmlxcalendar_vista .dxcalmonth .planeYear{
+	margin-left:4px;
+}
+
+
+.dhtmlxcalendar_vista .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_vista .dxcalmonth td.month_btn_right {
+  background: url(../imgs/__dhxCal_skin_Vista/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 4px;
+}
+.dhtmlxcalendar_vista .dxcalmonth td.month_btn_right {
+	background-position: -64px 0;
+}
+
+.dhtmlxcalendar_vista .dxcalmonth td.month_btn_left span,
+.dhtmlxcalendar_vista .dxcalmonth td.month_btn_right span{
+	visibility: hidden;
+}
+
+.dhtmlxcalendar_vista .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_vista .dxcaldlabel {
+	border-bottom: 1px solid #7e7e7e;
+	color:#7e7e7e;
+  	margin-top: 5px;	
+}
+.dhtmlxcalendar_vista .dxcaldlabel td,
+.dhtmlxcalendar_vista .dxcaldays td,
+.dhtmlxcalendar_vista .dxcaldays_ie td{
+	font-size: 11px;
+	font-family: Tahoma;
+	font-weight:normal;	
+	text-align: center;
+	vertical-align: middle;
+	width: 24px;
+	height: 21px;
+	color: #7e7e7e;
+}
+
+.dhtmlxcalendar_vista .dxcaldlabel{
+	border-top: 0px;
+}
+
+.dhtmlxcalendar_vista .dxcaldlabel td{
+	color: black;
+}
+
+.dhtmlxcalendar_vista .dxcaldays td,
+.dhtmlxcalendar_vista .dxcaldays_ie td{
+	border: 0px;
+	text-align: center;
+	cursor: pointer;
+  height:19px;
+}
+.dhtmlxcalendar_vista .dxcaldays_ie td{
+	height:16px;
+}
+.dhtmlxcalendar_vista td.comma{
+	visibility:visible;
+}
+.dhtmlxcalendar_vista div.planeMonth,
+.dhtmlxcalendar_vista div.planeYear {
+	height: auto;
+	overflow: auto;
+}
+div.dhtmlxcalendar_vista div.planeYear{
+	display:inline;
+	width:auto;
+}
+
+/* begin: days colors */
+.dhtmlxcalendar_vista td.thismonth{
+	color:black;
+	padding:1px;
+	width: 24px;
+}
+
+.dhtmlxcalendar_vista td.othermonth{
+	visibility: visible;
+}
+
+.dhtmlxcalendar_vista td.weekend{
+	color:black;
+	padding:1px;
+}
+
+.dhtmlxcalendar_vista td.insensitive{
+	color:#b5b5b5;
+	cursor: default;
+	padding:1px;
+}
+
+.dhtmlxcalendar_vista td.selected{
+	background: url(../imgs/__dhxCal_skin_Vista/cell_select.png) center center no-repeat;
+	color:black !important;
+}
+
+
+.dhtmlxcalendar_vista td.current{
+	color:black;
+	font-weight:bold  !important;
+}
+
+.dhtmlxcalendar_vista td.hover{
+	background: url(../imgs/__dhxCal_skin_Vista/cell_hover.png) center center no-repeat;
+	color: #000000;
+}
+
+.dhtmlxcalendar_vista td.holiday{ 
+	font-weight:bold;
+	text-decoration:underline;
+	color:#000;
+}
+
+/* begin: dhtmlxRichSelector */
+ .dhtmlxcalendar_vista div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_vista textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_vista select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+
+.dhtmlxcalendar_vista select.dhtmlxRichSelector {
+	border: 1px solid #7b9ebd;
+}
+/* end: dhtmlxRichSelector */
Index: /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_yahoolike.css
===================================================================
--- /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_yahoolike.css	(revision 478)
+++ /tags/2.00/root/static/dhtmlxCalendar/skins/dhtmlxcalendar_yahoolike.css	(revision 478)
@@ -0,0 +1,225 @@
+.dhtmlxcalendar_yahoolike {
+	background: url(../imgs/__dhxCal_skin_Yahoolike/cal_bg_single.gif) no-repeat;
+	border: 1px solid gray;
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:small;
+	background-color: #f7f9fb;
+	width:178px;
+	height:166px;
+	padding:5px;
+	z-index:99;
+}
+
+.dhtmlxcalendar_yahoolike_mini {
+  background-color: #f7f9fb;
+  height:13px;
+}
+
+.dhtmlxcalendar_yahoolike_maxi {
+  height:178px;
+}
+
+.dhtmlxcalendar_yahoolike_ifr,
+.dhtmlxcalendar_yahoolike_mini_ifr,
+.dhtmlxcalendar_yahoolike_maxi_ifr {
+  height:166px;
+  width:188px
+}
+
+.dhtmlxcalendar_yahoolike_maxi_ifr {
+  height:195px;
+}
+
+.dhtmlxcalendar_yahoolike_mini_ifr {
+  height:26px;
+}
+
+.dhtmlxcalendar_yahoolike_mini .winHeader{
+  -moz-user-select: none;
+}
+
+.dhtmlxcalendar_yahoolike .winHeader {
+  height: 16px;
+
+  margin-bottom: 3px;
+  width:178px;
+  -moz-user-select:none;
+}
+
+.dhtmlxcalendar_yahoolike .winTitle {
+  color:#575757;
+  font-size:12px;
+  float:left;
+  cursor: move;  
+  width: 100px;
+  margin-top: -1px;
+  overflow: hidden;
+}
+
+.dhtmlxcalendar_yahoolike .btn_mini,
+.dhtmlxcalendar_yahoolike .btn_maxi,
+.dhtmlxcalendar_yahoolike .btn_close,
+.dhtmlxcalendar_yahoolike .btn_today,
+.dhtmlxcalendar_yahoolike .btn_clear {
+  background: url(../imgs/__dhxCal_skin_Yahoolike/btns.gif) no-repeat;
+  float:right;
+  height:12px;
+  width:12px;  
+  margin-left: 1px;
+}
+
+.dhtmlxcalendar_yahoolike .btn_close {
+    background-position: 0 0;
+}
+
+.dhtmlxcalendar_yahoolike .btn_today {
+    background-position: -12px 0;
+}
+
+.dhtmlxcalendar_yahoolike .btn_clear {
+    background-position: -24px 0;
+}
+.dhtmlxcalendar_yahoolike .btn_maxi {
+    background-position: -36px 0;
+}
+
+.dhtmlxcalendar_yahoolike .btn_mini {
+    background-position: -48px 0;
+}
+.dhtmlxcalendar_yahoolike .entbox{
+	margin:3px 3px 3px 3px;
+	width:172px;
+}
+
+.dhtmlxcalendar_yahoolike td {
+	font-size: 9px;
+	font-family: Arial, Helvetica, sans-serif;
+}
+
+.dhtmlxcalendar_yahoolike .dxcalmonth {
+	background-color: #f7f9fb;
+	border: 0px solid #e0e0e0;
+}
+
+.dhtmlxcalendar_yahoolike .dxcalmonth td.month_btn_left,
+.dhtmlxcalendar_yahoolike .dxcalmonth td.month_btn_right {
+	background: url(../imgs/__dhxCal_skin_Yahoolike/btns.gif) no-repeat;
+	background-position: -60px 0;
+	width: 9px;
+}
+.dhtmlxcalendar_yahoolike .dxcalmonth td.month_btn_right {
+  background-position: -69px 0;
+}
+
+.dhtmlxcalendar_yahoolike .dxcaldlabel {
+	border-width: 0px;
+}
+.dhtmlxcalendar_yahoolike .dxcaldlabel td,
+.dhtmlxcalendar_yahoolike .dxcaldays td,
+.dhtmlxcalendar_yahoolike .dxcaldays_ie td{
+	font-size: 10pt;
+	text-align: left;
+	vertical-align: middle;
+	width: 20px;
+	height: 17px;
+	color: #666;
+}
+.dhtmlxcalendar_yahoolike .dxcaldays_ie td{
+	height: 18px;
+}
+.dhtmlxcalendar_yahoolike .dxcaldays td,
+.dhtmlxcalendar_yahoolike .dxcaldays_ie td{
+	border: 1px solid #e0e0e0;
+	background-color: #fff;
+	text-align: center;
+	cursor: pointer;
+}
+
+
+.dhtmlxcalendar_yahoolike td.comma{
+	visibility:hidden;
+}
+
+.dhtmlxcalendar_yahoolike .dxcalmonth table {
+  margin: auto;
+}
+
+.dhtmlxcalendar_yahoolike div.planeMonth,
+.dhtmlxcalendar_yahoolike div.planeYear {
+	height: auto;
+	overflow: auto;
+	font-size:12px;
+	font-weight: bold;
+}
+/* begin: days colors */
+.dhtmlxcalendar_yahoolike td.thismonth{
+	color:#003db8;
+}
+
+.dhtmlxcalendar_yahoolike td.othermonth{
+	color:#999;
+	background-color:#eee;
+	visibility: visible;
+}
+
+.dhtmlxcalendar_yahoolike td.weekend{
+	color:#003db8;
+}
+
+.dhtmlxcalendar_yahoolike td.insensitive{
+	color:#ccc;
+	font-style:italic;
+	cursor: default;
+}
+
+.dhtmlxcalendar_yahoolike td.selected{
+	border:1px solid white;
+	background-color: lightblue;
+	color: #ffffff;
+}
+
+
+.dhtmlxcalendar_yahoolike td.current{
+	color: #00c;
+	font-weight:bold !important;
+}
+
+.dhtmlxcalendar_yahoolike td.hover{
+	border:1px solid #426FD9;
+	background-color: #426FD9;
+	color: white;
+}
+
+.dhtmlxcalendar_yahoolike td.holiday{ 
+	font-weight:bold;
+	color:#00c;
+	text-decoration:underline;
+}
+
+/* end: days colors */
+
+/* begin: dhtmlxRichSelector */
+.dhtmlxcalendar_yahoolike div.dhtmlxRichSelector {
+  position: relative;
+  background-color:#ffffff;
+  display: block;
+  width: 1px;
+  height: 1px;
+}
+
+.dhtmlxcalendar_yahoolike textarea.dhtmlxRichSelector,
+.dhtmlxcalendar_yahoolike select.dhtmlxRichSelector {
+  position: absolute;
+  font-family: Arial;
+  font-size: 10pt;
+  overflow: hidden;
+  border-width: 0px;
+  z-index:100;
+  left: 0px;
+  top: 0px;
+}
+
+.dhtmlxcalendar_yahoolike select.dhtmlxRichSelector {
+	border: 1px solid #7b9ebd;
+}
+/* end: dhtmlxRichSelector */
Index: /tags/2.00/root/static/js/prototype/controls.js
===================================================================
--- /tags/2.00/root/static/js/prototype/controls.js	(revision 478)
+++ /tags/2.00/root/static/js/prototype/controls.js	(revision 478)
@@ -0,0 +1,770 @@
+// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//           (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+//           (c) 2005 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+//  Richard Livsey
+//  Rahul Bhargava
+//  Rob Wills
+//
+// See scriptaculous.js for full license.
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+var Autocompleter = {}
+Autocompleter.Base = function() {};
+Autocompleter.Base.prototype = {
+  baseInitialize: function(element, update, options) {
+    this.element     = $(element);
+    this.update      = $(update);
+    this.hasFocus    = false;
+    this.changed     = false;
+    this.active      = false;
+    this.index       = 0;
+    this.entryCount  = 0;
+
+    if (this.setOptions)
+      this.setOptions(options);
+    else
+      this.options = options || {};
+
+    this.options.paramName    = this.options.paramName || this.element.name;
+    this.options.tokens       = this.options.tokens || [];
+    this.options.frequency    = this.options.frequency || 0.4;
+    this.options.minChars     = this.options.minChars || 1;
+    this.options.onShow       = this.options.onShow ||
+    function(element, update){
+      if(!update.style.position || update.style.position=='absolute') {
+        update.style.position = 'absolute';
+        Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight});
+      }
+      Effect.Appear(update,{duration:0.15});
+    };
+    this.options.onHide = this.options.onHide ||
+    function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+    if (typeof(this.options.tokens) == 'string')
+      this.options.tokens = new Array(this.options.tokens);
+
+    this.observer = null;
+
+    this.element.setAttribute('autocomplete','off');
+
+    Element.hide(this.update);
+
+    Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
+    Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
+  },
+
+  show: function() {
+    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+    if(!this.iefix &&
+      (navigator.appVersion.indexOf('MSIE')>0) &&
+      (navigator.userAgent.indexOf('Opera')<0) &&
+      (Element.getStyle(this.update, 'position')=='absolute')) {
+      new Insertion.After(this.update,
+       '<iframe id="' + this.update.id + '_iefix" '+
+       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+      this.iefix = $(this.update.id+'_iefix');
+    }
+    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+  },
+
+  fixIEOverlapping: function() {
+    Position.clone(this.update, this.iefix);
+    this.iefix.style.zIndex = 1;
+    this.update.style.zIndex = 2;
+    Element.show(this.iefix);
+  },
+
+  hide: function() {
+    this.stopIndicator();
+    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+    if(this.iefix) Element.hide(this.iefix);
+  },
+
+  startIndicator: function() {
+    if(this.options.indicator) Element.show(this.options.indicator);
+  },
+
+  stopIndicator: function() {
+    if(this.options.indicator) Element.hide(this.options.indicator);
+  },
+
+  onKeyPress: function(event) {
+    if(this.active)
+      switch(event.keyCode) {
+       case Event.KEY_TAB:
+       case Event.KEY_RETURN:
+         this.selectEntry();
+         Event.stop(event);
+       case Event.KEY_ESC:
+         this.hide();
+         this.active = false;
+         Event.stop(event);
+         return;
+       case Event.KEY_LEFT:
+       case Event.KEY_RIGHT:
+         return;
+       case Event.KEY_UP:
+         this.markPrevious();
+         this.render();
+         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
+         return;
+       case Event.KEY_DOWN:
+         this.markNext();
+         this.render();
+         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
+         return;
+      }
+     else
+      if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN)
+        return;
+
+    this.changed = true;
+    this.hasFocus = true;
+
+    if(this.observer) clearTimeout(this.observer);
+      this.observer =
+        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+  },
+
+  onHover: function(event) {
+    var element = Event.findElement(event, 'LI');
+    if(this.index != element.autocompleteIndex)
+    {
+        this.index = element.autocompleteIndex;
+        this.render();
+    }
+    Event.stop(event);
+  },
+
+  onClick: function(event) {
+    var element = Event.findElement(event, 'LI');
+    this.index = element.autocompleteIndex;
+    this.selectEntry();
+    this.hide();
+  },
+
+  onBlur: function(event) {
+    // needed to make click events working
+    setTimeout(this.hide.bind(this), 250);
+    this.hasFocus = false;
+    this.active = false;
+  },
+
+  render: function() {
+    if(this.entryCount > 0) {
+      for (var i = 0; i < this.entryCount; i++)
+        this.index==i ?
+          Element.addClassName(this.getEntry(i),"selected") :
+          Element.removeClassName(this.getEntry(i),"selected");
+
+      if(this.hasFocus) {
+        this.show();
+        this.active = true;
+      }
+    } else {
+      this.active = false;
+      this.hide();
+    }
+  },
+
+  markPrevious: function() {
+    if(this.index > 0) this.index--
+      else this.index = this.entryCount-1;
+  },
+
+  markNext: function() {
+    if(this.index < this.entryCount-1) this.index++
+      else this.index = 0;
+  },
+
+  getEntry: function(index) {
+    return this.update.firstChild.childNodes[index];
+  },
+
+  getCurrentEntry: function() {
+    return this.getEntry(this.index);
+  },
+
+  selectEntry: function() {
+    this.active = false;
+    this.updateElement(this.getCurrentEntry());
+  },
+
+  updateElement: function(selectedElement) {
+    if (this.options.updateElement) {
+      this.options.updateElement(selectedElement);
+      return;
+    }
+    var value = '';
+    if (this.options.select) {
+      var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
+      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+    } else
+      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+    var lastTokenPos = this.findLastToken();
+    if (lastTokenPos != -1) {
+      var newValue = this.element.value.substr(0, lastTokenPos + 1);
+      var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
+      if (whitespace)
+        newValue += whitespace[0];
+      this.element.value = newValue + value;
+    } else {
+      this.element.value = value;
+    }
+    this.element.focus();
+
+    if (this.options.afterUpdateElement)
+      this.options.afterUpdateElement(this.element, selectedElement);
+  },
+
+  updateChoices: function(choices) {
+    if(!this.changed && this.hasFocus) {
+      this.update.innerHTML = choices;
+      Element.cleanWhitespace(this.update);
+      Element.cleanWhitespace(this.update.firstChild);
+
+      if(this.update.firstChild && this.update.firstChild.childNodes) {
+        this.entryCount =
+          this.update.firstChild.childNodes.length;
+        for (var i = 0; i < this.entryCount; i++) {
+          var entry = this.getEntry(i);
+          entry.autocompleteIndex = i;
+          this.addObservers(entry);
+        }
+      } else {
+        this.entryCount = 0;
+      }
+
+      this.stopIndicator();
+
+      this.index = 0;
+      this.render();
+    }
+  },
+
+  addObservers: function(element) {
+    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+  },
+
+  onObserverEvent: function() {
+    this.changed = false;
+    if(this.getToken().length>=this.options.minChars) {
+      this.startIndicator();
+      this.getUpdatedChoices();
+    } else {
+      this.active = false;
+      this.hide();
+    }
+  },
+
+  getToken: function() {
+    var tokenPos = this.findLastToken();
+    if (tokenPos != -1)
+      var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
+    else
+      var ret = this.element.value;
+
+    return /\n/.test(ret) ? '' : ret;
+  },
+
+  findLastToken: function() {
+    var lastTokenPos = -1;
+
+    for (var i=0; i<this.options.tokens.length; i++) {
+      var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
+      if (thisTokenPos > lastTokenPos)
+        lastTokenPos = thisTokenPos;
+    }
+    return lastTokenPos;
+  }
+}
+
+Ajax.Autocompleter = Class.create();
+Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
+  initialize: function(element, update, url, options) {
+	  this.baseInitialize(element, update, options);
+    this.options.asynchronous  = true;
+    this.options.onComplete    = this.onComplete.bind(this);
+    this.options.defaultParams = this.options.parameters || null;
+    this.url                   = url;
+  },
+
+  getUpdatedChoices: function() {
+    entry = encodeURIComponent(this.options.paramName) + '=' +
+      encodeURIComponent(this.getToken());
+
+    this.options.parameters = this.options.callback ?
+      this.options.callback(this.element, entry) : entry;
+
+    if(this.options.defaultParams)
+      this.options.parameters += '&' + this.options.defaultParams;
+
+    new Ajax.Request(this.url, this.options);
+  },
+
+  onComplete: function(request) {
+    this.updateChoices(request.responseText);
+  }
+
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+//                    text only at the beginning of strings in the
+//                    autocomplete array. Defaults to true, which will
+//                    match text at the beginning of any *word* in the
+//                    strings in the autocomplete array. If you want to
+//                    search anywhere in the string, additionally set
+//                    the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+//                   a partial match (unlike minChars, which defines
+//                   how many characters are required to do any match
+//                   at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+//                 Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create();
+Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
+  initialize: function(element, update, array, options) {
+    this.baseInitialize(element, update, options);
+    this.options.array = array;
+  },
+
+  getUpdatedChoices: function() {
+    this.updateChoices(this.options.selector(this));
+  },
+
+  setOptions: function(options) {
+    this.options = Object.extend({
+      choices: 10,
+      partialSearch: true,
+      partialChars: 2,
+      ignoreCase: true,
+      fullSearch: false,
+      selector: function(instance) {
+        var ret       = []; // Beginning matches
+        var partial   = []; // Inside matches
+        var entry     = instance.getToken();
+        var count     = 0;
+
+        for (var i = 0; i < instance.options.array.length &&
+          ret.length < instance.options.choices ; i++) {
+
+          var elem = instance.options.array[i];
+          var foundPos = instance.options.ignoreCase ?
+            elem.toLowerCase().indexOf(entry.toLowerCase()) :
+            elem.indexOf(entry);
+
+          while (foundPos != -1) {
+            if (foundPos == 0 && elem.length != entry.length) {
+              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+                elem.substr(entry.length) + "</li>");
+              break;
+            } else if (entry.length >= instance.options.partialChars &&
+              instance.options.partialSearch && foundPos != -1) {
+              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+                  foundPos + entry.length) + "</li>");
+                break;
+              }
+            }
+
+            foundPos = instance.options.ignoreCase ?
+              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+              elem.indexOf(entry, foundPos + 1);
+
+          }
+        }
+        if (partial.length)
+          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
+        return "<ul>" + ret.join('') + "</ul>";
+      }
+    }, options || {});
+  }
+});
+
+// AJAX in-place editor
+//
+// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+  setTimeout(function() {
+    Field.activate(field);
+  }, 1);
+}
+
+Ajax.InPlaceEditor = Class.create();
+Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
+Ajax.InPlaceEditor.prototype = {
+  initialize: function(element, url, options) {
+    this.url = url;
+    this.element = $(element);
+
+    this.options = Object.extend({
+      okButton: true,
+      okText: "ok",
+      cancelLink: true,
+      cancelText: "cancel",
+      savingText: "Saving...",
+      clickToEditText: "Click to edit",
+      okText: "ok",
+      rows: 1,
+      onComplete: function(transport, element) {
+        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
+      },
+      onFailure: function(transport) {
+        alert("Error communicating with the server: " + transport.responseText.stripTags());
+      },
+      callback: function(form) {
+        return Form.serialize(form);
+      },
+      handleLineBreaks: true,
+      loadingText: 'Loading...',
+      savingClassName: 'inplaceeditor-saving',
+      loadingClassName: 'inplaceeditor-loading',
+      formClassName: 'inplaceeditor-form',
+      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
+      highlightendcolor: "#FFFFFF",
+      externalControl:	null,
+      submitOnBlur: false,
+      ajaxOptions: {}
+    }, options || {});
+
+    if(!this.options.formId && this.element.id) {
+      this.options.formId = this.element.id + "-inplaceeditor";
+      if ($(this.options.formId)) {
+        // there's already a form with that name, don't specify an id
+        this.options.formId = null;
+      }
+    }
+
+    if (this.options.externalControl) {
+      this.options.externalControl = $(this.options.externalControl);
+    }
+
+    this.originalBackground = Element.getStyle(this.element, 'background-color');
+    if (!this.originalBackground) {
+      this.originalBackground = "transparent";
+    }
+
+    this.element.title = this.options.clickToEditText;
+
+    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
+    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
+    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
+    Event.observe(this.element, 'click', this.onclickListener);
+    Event.observe(this.element, 'mouseover', this.mouseoverListener);
+    Event.observe(this.element, 'mouseout', this.mouseoutListener);
+    if (this.options.externalControl) {
+      Event.observe(this.options.externalControl, 'click', this.onclickListener);
+      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
+      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
+    }
+  },
+  enterEditMode: function(evt) {
+    if (this.saving) return;
+    if (this.editing) return;
+    this.editing = true;
+    this.onEnterEditMode();
+    if (this.options.externalControl) {
+      Element.hide(this.options.externalControl);
+    }
+    Element.hide(this.element);
+    this.createForm();
+    this.element.parentNode.insertBefore(this.form, this.element);
+    Field.scrollFreeActivate(this.editField);
+    // stop the event to avoid a page refresh in Safari
+    if (evt) {
+      Event.stop(evt);
+    }
+    return false;
+  },
+  createForm: function() {
+    this.form = document.createElement("form");
+    this.form.id = this.options.formId;
+    Element.addClassName(this.form, this.options.formClassName)
+    this.form.onsubmit = this.onSubmit.bind(this);
+
+    this.createEditField();
+
+    if (this.options.textarea) {
+      var br = document.createElement("br");
+      this.form.appendChild(br);
+    }
+
+    if (this.options.okButton) {
+      okButton = document.createElement("input");
+      okButton.type = "submit";
+      okButton.value = this.options.okText;
+      this.form.appendChild(okButton);
+    }
+
+    if (this.options.cancelLink) {
+      cancelLink = document.createElement("a");
+      cancelLink.href = "#";
+      cancelLink.appendChild(document.createTextNode(this.options.cancelText));
+      cancelLink.onclick = this.onclickCancel.bind(this);
+      this.form.appendChild(cancelLink);
+    }
+  },
+  hasHTMLLineBreaks: function(string) {
+    if (!this.options.handleLineBreaks) return false;
+    return string.match(/<br/i) || string.match(/<p>/i);
+  },
+  convertHTMLLineBreaks: function(string) {
+    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
+  },
+  createEditField: function() {
+    var text;
+    if(this.options.loadTextURL) {
+      text = this.options.loadingText;
+    } else {
+      text = this.getText();
+    }
+
+    var obj = this;
+
+    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
+      this.options.textarea = false;
+      var textField = document.createElement("input");
+      textField.obj = this;
+      textField.type = "text";
+      textField.name = "value";
+      textField.value = text;
+      textField.style.backgroundColor = this.options.highlightcolor;
+      var size = this.options.size || this.options.cols || 0;
+      if (size != 0) textField.size = size;
+      if (this.options.submitOnBlur)
+        textField.onblur = this.onSubmit.bind(this);
+      this.editField = textField;
+    } else {
+      this.options.textarea = true;
+      var textArea = document.createElement("textarea");
+      textArea.obj = this;
+      textArea.name = "value";
+      textArea.value = this.convertHTMLLineBreaks(text);
+      textArea.rows = this.options.rows;
+      textArea.cols = this.options.cols || 40;
+      if (this.options.submitOnBlur)
+        textArea.onblur = this.onSubmit.bind(this);
+      this.editField = textArea;
+    }
+
+    if(this.options.loadTextURL) {
+      this.loadExternalText();
+    }
+    this.form.appendChild(this.editField);
+  },
+  getText: function() {
+    return this.element.innerHTML;
+  },
+  loadExternalText: function() {
+    Element.addClassName(this.form, this.options.loadingClassName);
+    this.editField.disabled = true;
+    new Ajax.Request(
+      this.options.loadTextURL,
+      Object.extend({
+        asynchronous: true,
+        onComplete: this.onLoadedExternalText.bind(this)
+      }, this.options.ajaxOptions)
+    );
+  },
+  onLoadedExternalText: function(transport) {
+    Element.removeClassName(this.form, this.options.loadingClassName);
+    this.editField.disabled = false;
+    this.editField.value = transport.responseText.stripTags();
+  },
+  onclickCancel: function() {
+    this.onComplete();
+    this.leaveEditMode();
+    return false;
+  },
+  onFailure: function(transport) {
+    this.options.onFailure(transport);
+    if (this.oldInnerHTML) {
+      this.element.innerHTML = this.oldInnerHTML;
+      this.oldInnerHTML = null;
+    }
+    return false;
+  },
+  onSubmit: function() {
+    // onLoading resets these so we need to save them away for the Ajax call
+    var form = this.form;
+    var value = this.editField.value;
+
+    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
+    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
+    // to be displayed indefinitely
+    this.onLoading();
+
+    new Ajax.Updater(
+      {
+        success: this.element,
+         // don't update on failure (this could be an option)
+        failure: null
+      },
+      this.url,
+      Object.extend({
+        parameters: this.options.callback(form, value),
+        onComplete: this.onComplete.bind(this),
+        onFailure: this.onFailure.bind(this)
+      }, this.options.ajaxOptions)
+    );
+    // stop the event to avoid a page refresh in Safari
+    if (arguments.length > 1) {
+      Event.stop(arguments[0]);
+    }
+    return false;
+  },
+  onLoading: function() {
+    this.saving = true;
+    this.removeForm();
+    this.leaveHover();
+    this.showSaving();
+  },
+  showSaving: function() {
+    this.oldInnerHTML = this.element.innerHTML;
+    this.element.innerHTML = this.options.savingText;
+    Element.addClassName(this.element, this.options.savingClassName);
+    this.element.style.backgroundColor = this.originalBackground;
+    Element.show(this.element);
+  },
+  removeForm: function() {
+    if(this.form) {
+      if (this.form.parentNode) Element.remove(this.form);
+      this.form = null;
+    }
+  },
+  enterHover: function() {
+    if (this.saving) return;
+    this.element.style.backgroundColor = this.options.highlightcolor;
+    if (this.effect) {
+      this.effect.cancel();
+    }
+    Element.addClassName(this.element, this.options.hoverClassName)
+  },
+  leaveHover: function() {
+    if (this.options.backgroundColor) {
+      this.element.style.backgroundColor = this.oldBackground;
+    }
+    Element.removeClassName(this.element, this.options.hoverClassName)
+    if (this.saving) return;
+    this.effect = new Effect.Highlight(this.element, {
+      startcolor: this.options.highlightcolor,
+      endcolor: this.options.highlightendcolor,
+      restorecolor: this.originalBackground
+    });
+  },
+  leaveEditMode: function() {
+    Element.removeClassName(this.element, this.options.savingClassName);
+    this.removeForm();
+    this.leaveHover();
+    this.element.style.backgroundColor = this.originalBackground;
+    Element.show(this.element);
+    if (this.options.externalControl) {
+      Element.show(this.options.externalControl);
+    }
+    this.editing = false;
+    this.saving = false;
+    this.oldInnerHTML = null;
+    this.onLeaveEditMode();
+  },
+  onComplete: function(transport) {
+    this.leaveEditMode();
+    this.options.onComplete.bind(this)(transport, this.element);
+  },
+  onEnterEditMode: function() {},
+  onLeaveEditMode: function() {},
+  dispose: function() {
+    if (this.oldInnerHTML) {
+      this.element.innerHTML = this.oldInnerHTML;
+    }
+    this.leaveEditMode();
+    Event.stopObserving(this.element, 'click', this.onclickListener);
+    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
+    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
+    if (this.options.externalControl) {
+      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
+      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
+      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
+    }
+  }
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create();
+Form.Element.DelayedObserver.prototype = {
+  initialize: function(element, delay, callback) {
+    this.delay     = delay || 0.5;
+    this.element   = $(element);
+    this.callback  = callback;
+    this.timer     = null;
+    this.lastValue = $F(this.element);
+    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+  },
+  delayedListener: function(event) {
+    if(this.lastValue == $F(this.element)) return;
+    if(this.timer) clearTimeout(this.timer);
+    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+    this.lastValue = $F(this.element);
+  },
+  onTimerEvent: function() {
+    this.timer = null;
+    this.callback(this.element, $F(this.element));
+  }
+};
Index: /tags/2.00/root/static/js/prototype/dragdrop.js
===================================================================
--- /tags/2.00/root/static/js/prototype/dragdrop.js	(revision 478)
+++ /tags/2.00/root/static/js/prototype/dragdrop.js	(revision 478)
@@ -0,0 +1,585 @@
+// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// See scriptaculous.js for full license.
+
+/*--------------------------------------------------------------------------*/
+
+var Droppables = {
+  drops: [],
+
+  remove: function(element) {
+    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
+  },
+
+  add: function(element) {
+    element = $(element);
+    var options = Object.extend({
+      greedy:     true,
+      hoverclass: null
+    }, arguments[1] || {});
+
+    // cache containers
+    if(options.containment) {
+      options._containers = [];
+      var containment = options.containment;
+      if((typeof containment == 'object') &&
+        (containment.constructor == Array)) {
+        containment.each( function(c) { options._containers.push($(c)) });
+      } else {
+        options._containers.push($(containment));
+      }
+    }
+
+    if(options.accept) options.accept = [options.accept].flatten();
+
+    Element.makePositioned(element); // fix IE
+    options.element = element;
+
+    this.drops.push(options);
+  },
+
+  isContained: function(element, drop) {
+    var parentNode = element.parentNode;
+    return drop._containers.detect(function(c) { return parentNode == c });
+  },
+
+  isAffected: function(point, element, drop) {
+    return (
+      (drop.element!=element) &&
+      ((!drop._containers) ||
+        this.isContained(element, drop)) &&
+      ((!drop.accept) ||
+        (Element.classNames(element).detect(
+          function(v) { return drop.accept.include(v) } ) )) &&
+      Position.within(drop.element, point[0], point[1]) );
+  },
+
+  deactivate: function(drop) {
+    if(drop.hoverclass)
+      Element.removeClassName(drop.element, drop.hoverclass);
+    this.last_active = null;
+  },
+
+  activate: function(drop) {
+    if(drop.hoverclass)
+      Element.addClassName(drop.element, drop.hoverclass);
+    this.last_active = drop;
+  },
+
+  show: function(point, element) {
+    if(!this.drops.length) return;
+
+    if(this.last_active) this.deactivate(this.last_active);
+    this.drops.each( function(drop) {
+      if(Droppables.isAffected(point, element, drop)) {
+        if(drop.onHover)
+           drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+        if(drop.greedy) {
+          Droppables.activate(drop);
+          throw $break;
+        }
+      }
+    });
+  },
+
+  fire: function(event, element) {
+    if(!this.last_active) return;
+    Position.prepare();
+
+    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+      if (this.last_active.onDrop)
+        this.last_active.onDrop(element, this.last_active.element, event);
+  },
+
+  reset: function() {
+    if(this.last_active)
+      this.deactivate(this.last_active);
+  }
+}
+
+var Draggables = {
+  drags: [],
+  observers: [],
+
+  register: function(draggable) {
+    if(this.drags.length == 0) {
+      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
+      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
+
+      Event.observe(document, "mouseup", this.eventMouseUp);
+      Event.observe(document, "mousemove", this.eventMouseMove);
+      Event.observe(document, "keypress", this.eventKeypress);
+    }
+    this.drags.push(draggable);
+  },
+
+  unregister: function(draggable) {
+    this.drags = this.drags.reject(function(d) { return d==draggable });
+    if(this.drags.length == 0) {
+      Event.stopObserving(document, "mouseup", this.eventMouseUp);
+      Event.stopObserving(document, "mousemove", this.eventMouseMove);
+      Event.stopObserving(document, "keypress", this.eventKeypress);
+    }
+  },
+
+  activate: function(draggable) {
+    window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+    this.activeDraggable = draggable;
+  },
+
+  deactivate: function(draggbale) {
+    this.activeDraggable = null;
+  },
+
+  updateDrag: function(event) {
+    if(!this.activeDraggable) return;
+    var pointer = [Event.pointerX(event), Event.pointerY(event)];
+    // Mozilla-based browsers fire successive mousemove events with
+    // the same coordinates, prevent needless redrawing (moz bug?)
+    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+    this._lastPointer = pointer;
+    this.activeDraggable.updateDrag(event, pointer);
+  },
+
+  endDrag: function(event) {
+    if(!this.activeDraggable) return;
+    this._lastPointer = null;
+    this.activeDraggable.endDrag(event);
+    this.activeDraggable = null;
+  },
+
+  keyPress: function(event) {
+    if(this.activeDraggable)
+      this.activeDraggable.keyPress(event);
+  },
+
+  addObserver: function(observer) {
+    this.observers.push(observer);
+    this._cacheObserverCallbacks();
+  },
+
+  removeObserver: function(element) {  // element instead of observer fixes mem leaks
+    this.observers = this.observers.reject( function(o) { return o.element==element });
+    this._cacheObserverCallbacks();
+  },
+
+  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
+    if(this[eventName+'Count'] > 0)
+      this.observers.each( function(o) {
+        if(o[eventName]) o[eventName](eventName, draggable, event);
+      });
+  },
+
+  _cacheObserverCallbacks: function() {
+    ['onStart','onEnd','onDrag'].each( function(eventName) {
+      Draggables[eventName+'Count'] = Draggables.observers.select(
+        function(o) { return o[eventName]; }
+      ).length;
+    });
+  }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create();
+Draggable.prototype = {
+  initialize: function(element) {
+    var options = Object.extend({
+      handle: false,
+      starteffect: function(element) {
+        new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7});
+      },
+      reverteffect: function(element, top_offset, left_offset) {
+        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+        element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur});
+      },
+      endeffect: function(element) {
+        new Effect.Opacity(element, {duration:0.2, from:0.7, to:1.0});
+      },
+      zindex: 1000,
+      revert: false,
+      snap: false   // false, or xy or [x,y] or function(x,y){ return [x,y] }
+    }, arguments[1] || {});
+
+    this.element = $(element);
+
+    if(options.handle && (typeof options.handle == 'string'))
+      this.handle = Element.childrenWithClassName(this.element, options.handle)[0];
+    if(!this.handle) this.handle = $(options.handle);
+    if(!this.handle) this.handle = this.element;
+
+    Element.makePositioned(this.element); // fix IE
+
+    this.delta    = this.currentDelta();
+    this.options  = options;
+    this.dragging = false;
+
+    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+    Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+    Draggables.register(this);
+  },
+
+  destroy: function() {
+    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+    Draggables.unregister(this);
+  },
+
+  currentDelta: function() {
+    return([
+      parseInt(Element.getStyle(this.element,'left') || '0'),
+      parseInt(Element.getStyle(this.element,'top') || '0')]);
+  },
+
+  initDrag: function(event) {
+    if(Event.isLeftClick(event)) {
+      // abort on form elements, fixes a Firefox issue
+      var src = Event.element(event);
+      if(src.tagName && (
+        src.tagName=='INPUT' ||
+        src.tagName=='SELECT' ||
+        src.tagName=='BUTTON' ||
+        src.tagName=='TEXTAREA')) return;
+
+      if(this.element._revert) {
+        this.element._revert.cancel();
+        this.element._revert = null;
+      }
+
+      var pointer = [Event.pointerX(event), Event.pointerY(event)];
+      var pos     = Position.cumulativeOffset(this.element);
+      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+      Draggables.activate(this);
+      Event.stop(event);
+    }
+  },
+
+  startDrag: function(event) {
+    this.dragging = true;
+
+    if(this.options.zindex) {
+      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+      this.element.style.zIndex = this.options.zindex;
+    }
+
+    if(this.options.ghosting) {
+      this._clone = this.element.cloneNode(true);
+      Position.absolutize(this.element);
+      this.element.parentNode.insertBefore(this._clone, this.element);
+    }
+
+    Draggables.notify('onStart', this, event);
+    if(this.options.starteffect) this.options.starteffect(this.element);
+  },
+
+  updateDrag: function(event, pointer) {
+    if(!this.dragging) this.startDrag(event);
+    Position.prepare();
+    Droppables.show(pointer, this.element);
+    Draggables.notify('onDrag', this, event);
+    this.draw(pointer);
+    if(this.options.change) this.options.change(this);
+
+    // fix AppleWebKit rendering
+    if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+    Event.stop(event);
+  },
+
+  finishDrag: function(event, success) {
+    this.dragging = false;
+
+    if(this.options.ghosting) {
+      Position.relativize(this.element);
+      Element.remove(this._clone);
+      this._clone = null;
+    }
+
+    if(success) Droppables.fire(event, this.element);
+    Draggables.notify('onEnd', this, event);
+
+    var revert = this.options.revert;
+    if(revert && typeof revert == 'function') revert = revert(this.element);
+
+    var d = this.currentDelta();
+    if(revert && this.options.reverteffect) {
+      this.options.reverteffect(this.element,
+        d[1]-this.delta[1], d[0]-this.delta[0]);
+    } else {
+      this.delta = d;
+    }
+
+    if(this.options.zindex)
+      this.element.style.zIndex = this.originalZ;
+
+    if(this.options.endeffect)
+      this.options.endeffect(this.element);
+
+    Draggables.deactivate(this);
+    Droppables.reset();
+  },
+
+  keyPress: function(event) {
+    if(!event.keyCode==Event.KEY_ESC) return;
+    this.finishDrag(event, false);
+    Event.stop(event);
+  },
+
+  endDrag: function(event) {
+    if(!this.dragging) return;
+    this.finishDrag(event, true);
+    Event.stop(event);
+  },
+
+  draw: function(point) {
+    var pos = Position.cumulativeOffset(this.element);
+    var d = this.currentDelta();
+    pos[0] -= d[0]; pos[1] -= d[1];
+
+    var p = [0,1].map(function(i){ return (point[i]-pos[i]-this.offset[i]) }.bind(this));
+
+    if(this.options.snap) {
+      if(typeof this.options.snap == 'function') {
+        p = this.options.snap(p[0],p[1]);
+      } else {
+      if(this.options.snap instanceof Array) {
+        p = p.map( function(v, i) {
+          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
+      } else {
+        p = p.map( function(v) {
+          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
+      }
+    }}
+
+    var style = this.element.style;
+    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+      style.left = p[0] + "px";
+    if((!this.options.constraint) || (this.options.constraint=='vertical'))
+      style.top  = p[1] + "px";
+    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+  }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create();
+SortableObserver.prototype = {
+  initialize: function(element, observer) {
+    this.element   = $(element);
+    this.observer  = observer;
+    this.lastValue = Sortable.serialize(this.element);
+  },
+
+  onStart: function() {
+    this.lastValue = Sortable.serialize(this.element);
+  },
+
+  onEnd: function() {
+    Sortable.unmark();
+    if(this.lastValue != Sortable.serialize(this.element))
+      this.observer(this.element)
+  }
+}
+
+var Sortable = {
+  sortables: new Array(),
+
+  options: function(element){
+    element = $(element);
+    return this.sortables.detect(function(s) { return s.element == element });
+  },
+
+  destroy: function(element){
+    element = $(element);
+    this.sortables.findAll(function(s) { return s.element == element }).each(function(s){
+      Draggables.removeObserver(s.element);
+      s.droppables.each(function(d){ Droppables.remove(d) });
+      s.draggables.invoke('destroy');
+    });
+    this.sortables = this.sortables.reject(function(s) { return s.element == element });
+  },
+
+  create: function(element) {
+    element = $(element);
+    var options = Object.extend({
+      element:     element,
+      tag:         'li',       // assumes li children, override with tag: 'tagname'
+      dropOnEmpty: false,
+      tree:        false,      // fixme: unimplemented
+      overlap:     'vertical', // one of 'vertical', 'horizontal'
+      constraint:  'vertical', // one of 'vertical', 'horizontal', false
+      containment: element,    // also takes array of elements (or id's); or false
+      handle:      false,      // or a CSS class
+      only:        false,
+      hoverclass:  null,
+      ghosting:    false,
+      format:      null,
+      onChange:    Prototype.emptyFunction,
+      onUpdate:    Prototype.emptyFunction
+    }, arguments[1] || {});
+
+    // clear any old sortable with same element
+    this.destroy(element);
+
+    // build options for the draggables
+    var options_for_draggable = {
+      revert:      true,
+      ghosting:    options.ghosting,
+      constraint:  options.constraint,
+      handle:      options.handle };
+
+    if(options.starteffect)
+      options_for_draggable.starteffect = options.starteffect;
+
+    if(options.reverteffect)
+      options_for_draggable.reverteffect = options.reverteffect;
+    else
+      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+        element.style.top  = 0;
+        element.style.left = 0;
+      };
+
+    if(options.endeffect)
+      options_for_draggable.endeffect = options.endeffect;
+
+    if(options.zindex)
+      options_for_draggable.zindex = options.zindex;
+
+    // build options for the droppables
+    var options_for_droppable = {
+      overlap:     options.overlap,
+      containment: options.containment,
+      hoverclass:  options.hoverclass,
+      onHover:     Sortable.onHover,
+      greedy:      !options.dropOnEmpty
+    }
+
+    // fix for gecko engine
+    Element.cleanWhitespace(element);
+
+    options.draggables = [];
+    options.droppables = [];
+
+    // make it so
+
+    // drop on empty handling
+    if(options.dropOnEmpty) {
+      Droppables.add(element,
+        {containment: options.containment, onHover: Sortable.onEmptyHover, greedy: false});
+      options.droppables.push(element);
+    }
+
+    (this.findElements(element, options) || []).each( function(e) {
+      // handles are per-draggable
+      var handle = options.handle ?
+        Element.childrenWithClassName(e, options.handle)[0] : e;
+      options.draggables.push(
+        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+      Droppables.add(e, options_for_droppable);
+      options.droppables.push(e);
+    });
+
+    // keep reference
+    this.sortables.push(options);
+
+    // for onupdate
+    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+  },
+
+  // return all suitable-for-sortable elements in a guaranteed order
+  findElements: function(element, options) {
+    if(!element.hasChildNodes()) return null;
+    var elements = [];
+    $A(element.childNodes).each( function(e) {
+      if(e.tagName && e.tagName.toUpperCase()==options.tag.toUpperCase() &&
+        (!options.only || (Element.hasClassName(e, options.only))))
+          elements.push(e);
+      if(options.tree) {
+        var grandchildren = this.findElements(e, options);
+        if(grandchildren) elements.push(grandchildren);
+      }
+    });
+
+    return (elements.length>0 ? elements.flatten() : null);
+  },
+
+  onHover: function(element, dropon, overlap) {
+    if(overlap>0.5) {
+      Sortable.mark(dropon, 'before');
+      if(dropon.previousSibling != element) {
+        var oldParentNode = element.parentNode;
+        element.style.visibility = "hidden"; // fix gecko rendering
+        dropon.parentNode.insertBefore(element, dropon);
+        if(dropon.parentNode!=oldParentNode)
+          Sortable.options(oldParentNode).onChange(element);
+        Sortable.options(dropon.parentNode).onChange(element);
+      }
+    } else {
+      Sortable.mark(dropon, 'after');
+      var nextElement = dropon.nextSibling || null;
+      if(nextElement != element) {
+        var oldParentNode = element.parentNode;
+        element.style.visibility = "hidden"; // fix gecko rendering
+        dropon.parentNode.insertBefore(element, nextElement);
+        if(dropon.parentNode!=oldParentNode)
+          Sortable.options(oldParentNode).onChange(element);
+        Sortable.options(dropon.parentNode).onChange(element);
+      }
+    }
+  },
+
+  onEmptyHover: function(element, dropon) {
+    if(element.parentNode!=dropon) {
+      var oldParentNode = element.parentNode;
+      dropon.appendChild(element);
+      Sortable.options(oldParentNode).onChange(element);
+      Sortable.options(dropon).onChange(element);
+    }
+  },
+
+  unmark: function() {
+    if(Sortable._marker) Element.hide(Sortable._marker);
+  },
+
+  mark: function(dropon, position) {
+    // mark on ghosting only
+    var sortable = Sortable.options(dropon.parentNode);
+    if(sortable && !sortable.ghosting) return;
+
+    if(!Sortable._marker) {
+      Sortable._marker = $('dropmarker') || document.createElement('DIV');
+      Element.hide(Sortable._marker);
+      Element.addClassName(Sortable._marker, 'dropmarker');
+      Sortable._marker.style.position = 'absolute';
+      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+    }
+    var offsets = Position.cumulativeOffset(dropon);
+    Sortable._marker.style.left = offsets[0] + 'px';
+    Sortable._marker.style.top = offsets[1] + 'px';
+
+    if(position=='after')
+      if(sortable.overlap == 'horizontal')
+        Sortable._marker.style.left = (offsets[0]+dropon.clientWidth) + 'px';
+      else
+        Sortable._marker.style.top = (offsets[1]+dropon.clientHeight) + 'px';
+
+    Element.show(Sortable._marker);
+  },
+
+  serialize: function(element) {
+    element = $(element);
+    var sortableOptions = this.options(element);
+    var options = Object.extend({
+      tag:  sortableOptions.tag,
+      only: sortableOptions.only,
+      name: element.id,
+      format: sortableOptions.format || /^[^_]*_(.*)$/
+    }, arguments[1] || {});
+    return $(this.findElements(element, options) || []).map( function(item) {
+      return (encodeURIComponent(options.name) + "[]=" +
+              encodeURIComponent(item.id.match(options.format) ? item.id.match(options.format)[1] : ''));
+    }).join("&");
+  }
+}
Index: /tags/2.00/root/static/js/prototype/effects.js
===================================================================
--- /tags/2.00/root/static/js/prototype/effects.js	(revision 478)
+++ /tags/2.00/root/static/js/prototype/effects.js	(revision 478)
@@ -0,0 +1,903 @@
+// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+//  Justin Palmer (http://encytemedia.com/)
+//  Mark Pilgrim (http://diveintomark.org/)
+//  Martin Bialasinki
+//
+// See scriptaculous.js for full license.
+
+/* ------------- element ext -------------- */
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+  var color = '#';
+  if(this.slice(0,4) == 'rgb(') {
+    var cols = this.slice(4,this.length-1).split(',');
+    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+  } else {
+    if(this.slice(0,1) == '#') {
+      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+      if(this.length==7) color = this.toLowerCase();
+    }
+  }
+  return(color.length==7 ? color : (arguments[0] || this));
+}
+
+Element.collectTextNodes = function(element) {
+  return $A($(element).childNodes).collect( function(node) {
+    return (node.nodeType==3 ? node.nodeValue :
+      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+  }).flatten().join('');
+}
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+  return $A($(element).childNodes).collect( function(node) {
+    return (node.nodeType==3 ? node.nodeValue :
+      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+        Element.collectTextNodes(node) : ''));
+  }).flatten().join('');
+}
+
+Element.setStyle = function(element, style) {
+  element = $(element);
+  for(k in style) element.style[k.camelize()] = style[k];
+}
+
+Element.setContentZoom = function(element, percent) {
+  Element.setStyle(element, {fontSize: (percent/100) + 'em'});
+  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+}
+
+Element.getOpacity = function(element){
+  var opacity;
+  if (opacity = Element.getStyle(element, 'opacity'))
+    return parseFloat(opacity);
+  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))
+    if(opacity[1]) return parseFloat(opacity[1]) / 100;
+  return 1.0;
+}
+
+Element.setOpacity = function(element, value){
+  element= $(element);
+  if (value == 1){
+    Element.setStyle(element, { opacity:
+      (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ?
+      0.999999 : null });
+    if(/MSIE/.test(navigator.userAgent))
+      Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});
+  } else {
+    if(value < 0.00001) value = 0;
+    Element.setStyle(element, {opacity: value});
+    if(/MSIE/.test(navigator.userAgent))
+     Element.setStyle(element,
+       { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +
+                 'alpha(opacity='+value*100+')' });
+  }
+}
+
+Element.getInlineOpacity = function(element){
+  return $(element).style.opacity || '';
+}
+
+Element.childrenWithClassName = function(element, className) {
+  return $A($(element).getElementsByTagName('*')).select(
+    function(c) { return Element.hasClassName(c, className) });
+}
+
+Array.prototype.call = function() {
+  var args = arguments;
+  this.each(function(f){ f.apply(this, args) });
+}
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+  tagifyText: function(element) {
+    var tagifyStyle = 'position:relative';
+    if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';
+    element = $(element);
+    $A(element.childNodes).each( function(child) {
+      if(child.nodeType==3) {
+        child.nodeValue.toArray().each( function(character) {
+          element.insertBefore(
+            Builder.node('span',{style: tagifyStyle},
+              character == ' ' ? String.fromCharCode(160) : character),
+              child);
+        });
+        Element.remove(child);
+      }
+    });
+  },
+  multiple: function(element, effect) {
+    var elements;
+    if(((typeof element == 'object') ||
+        (typeof element == 'function')) &&
+       (element.length))
+      elements = element;
+    else
+      elements = $(element).childNodes;
+
+    var options = Object.extend({
+      speed: 0.1,
+      delay: 0.0
+    }, arguments[2] || {});
+    var masterDelay = options.delay;
+
+    $A(elements).each( function(element, index) {
+      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+    });
+  },
+  PAIRS: {
+    'slide':  ['SlideDown','SlideUp'],
+    'blind':  ['BlindDown','BlindUp'],
+    'appear': ['Appear','Fade']
+  },
+  toggle: function(element, effect) {
+    element = $(element);
+    effect = (effect || 'appear').toLowerCase();
+    var options = Object.extend({
+      queue: { position:'end', scope:(element.id || 'global') }
+    }, arguments[2] || {});
+    Effect[Element.visible(element) ?
+      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
+  }
+};
+
+var Effect2 = Effect; // deprecated
+
+/* ------------- transitions ------------- */
+
+Effect.Transitions = {}
+
+Effect.Transitions.linear = function(pos) {
+  return pos;
+}
+Effect.Transitions.sinoidal = function(pos) {
+  return (-Math.cos(pos*Math.PI)/2) + 0.5;
+}
+Effect.Transitions.reverse  = function(pos) {
+  return 1-pos;
+}
+Effect.Transitions.flicker = function(pos) {
+  return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
+}
+Effect.Transitions.wobble = function(pos) {
+  return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
+}
+Effect.Transitions.pulse = function(pos) {
+  return (Math.floor(pos*10) % 2 == 0 ?
+    (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));
+}
+Effect.Transitions.none = function(pos) {
+  return 0;
+}
+Effect.Transitions.full = function(pos) {
+  return 1;
+}
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create();
+Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
+  initialize: function() {
+    this.effects  = [];
+    this.interval = null;
+  },
+  _each: function(iterator) {
+    this.effects._each(iterator);
+  },
+  add: function(effect) {
+    var timestamp = new Date().getTime();
+
+    var position = (typeof effect.options.queue == 'string') ?
+      effect.options.queue : effect.options.queue.position;
+
+    switch(position) {
+      case 'front':
+        // move unstarted effects after this effect
+        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+            e.startOn  += effect.finishOn;
+            e.finishOn += effect.finishOn;
+          });
+        break;
+      case 'end':
+        // start effect after last queued effect has finished
+        timestamp = this.effects.pluck('finishOn').max() || timestamp;
+        break;
+    }
+
+    effect.startOn  += timestamp;
+    effect.finishOn += timestamp;
+    this.effects.push(effect);
+    if(!this.interval)
+      this.interval = setInterval(this.loop.bind(this), 40);
+  },
+  remove: function(effect) {
+    this.effects = this.effects.reject(function(e) { return e==effect });
+    if(this.effects.length == 0) {
+      clearInterval(this.interval);
+      this.interval = null;
+    }
+  },
+  loop: function() {
+    var timePos = new Date().getTime();
+    this.effects.invoke('loop', timePos);
+  }
+});
+
+Effect.Queues = {
+  instances: $H(),
+  get: function(queueName) {
+    if(typeof queueName != 'string') return queueName;
+
+    if(!this.instances[queueName])
+      this.instances[queueName] = new Effect.ScopedQueue();
+
+    return this.instances[queueName];
+  }
+}
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.DefaultOptions = {
+  transition: Effect.Transitions.sinoidal,
+  duration:   1.0,   // seconds
+  fps:        25.0,  // max. 25fps due to Effect.Queue implementation
+  sync:       false, // true for combining
+  from:       0.0,
+  to:         1.0,
+  delay:      0.0,
+  queue:      'parallel'
+}
+
+Effect.Base = function() {};
+Effect.Base.prototype = {
+  position: null,
+  start: function(options) {
+    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
+    this.currentFrame = 0;
+    this.state        = 'idle';
+    this.startOn      = this.options.delay*1000;
+    this.finishOn     = this.startOn + (this.options.duration*1000);
+    this.event('beforeStart');
+    if(!this.options.sync)
+      Effect.Queues.get(typeof this.options.queue == 'string' ?
+        'global' : this.options.queue.scope).add(this);
+  },
+  loop: function(timePos) {
+    if(timePos >= this.startOn) {
+      if(timePos >= this.finishOn) {
+        this.render(1.0);
+        this.cancel();
+        this.event('beforeFinish');
+        if(this.finish) this.finish();
+        this.event('afterFinish');
+        return;
+      }
+      var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);
+      var frame = Math.round(pos * this.options.fps * this.options.duration);
+      if(frame > this.currentFrame) {
+        this.render(pos);
+        this.currentFrame = frame;
+      }
+    }
+  },
+  render: function(pos) {
+    if(this.state == 'idle') {
+      this.state = 'running';
+      this.event('beforeSetup');
+      if(this.setup) this.setup();
+      this.event('afterSetup');
+    }
+    if(this.state == 'running') {
+      if(this.options.transition) pos = this.options.transition(pos);
+      pos *= (this.options.to-this.options.from);
+      pos += this.options.from;
+      this.position = pos;
+      this.event('beforeUpdate');
+      if(this.update) this.update(pos);
+      this.event('afterUpdate');
+    }
+  },
+  cancel: function() {
+    if(!this.options.sync)
+      Effect.Queues.get(typeof this.options.queue == 'string' ?
+        'global' : this.options.queue.scope).remove(this);
+    this.state = 'finished';
+  },
+  event: function(eventName) {
+    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+    if(this.options[eventName]) this.options[eventName](this);
+  },
+  inspect: function() {
+    return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';
+  }
+}
+
+Effect.Parallel = Class.create();
+Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
+  initialize: function(effects) {
+    this.effects = effects || [];
+    this.start(arguments[1]);
+  },
+  update: function(position) {
+    this.effects.invoke('render', position);
+  },
+  finish: function(position) {
+    this.effects.each( function(effect) {
+      effect.render(1.0);
+      effect.cancel();
+      effect.event('beforeFinish');
+      if(effect.finish) effect.finish(position);
+      effect.event('afterFinish');
+    });
+  }
+});
+
+Effect.Opacity = Class.create();
+Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
+  initialize: function(element) {
+    this.element = $(element);
+    // make this work on IE on elements without 'layout'
+    if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))
+      Element.setStyle(this.element, {zoom: 1});
+    var options = Object.extend({
+      from: Element.getOpacity(this.element) || 0.0,
+      to:   1.0
+    }, arguments[1] || {});
+    this.start(options);
+  },
+  update: function(position) {
+    Element.setOpacity(this.element, position);
+  }
+});
+
+Effect.Move = Class.create();
+Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
+  initialize: function(element) {
+    this.element = $(element);
+    var options = Object.extend({
+      x:    0,
+      y:    0,
+      mode: 'relative'
+    }, arguments[1] || {});
+    this.start(options);
+  },
+  setup: function() {
+    // Bug in Opera: Opera returns the "real" position of a static element or
+    // relative element that does not have top/left explicitly set.
+    // ==> Always set top and left for position relative elements in your stylesheets
+    // (to 0 if you do not need them)
+    Element.makePositioned(this.element);
+    this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');
+    this.originalTop  = parseFloat(Element.getStyle(this.element,'top')  || '0');
+    if(this.options.mode == 'absolute') {
+      // absolute movement, so we need to calc deltaX and deltaY
+      this.options.x = this.options.x - this.originalLeft;
+      this.options.y = this.options.y - this.originalTop;
+    }
+  },
+  update: function(position) {
+    Element.setStyle(this.element, {
+      left: this.options.x  * position + this.originalLeft + 'px',
+      top:  this.options.y  * position + this.originalTop  + 'px'
+    });
+  }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+  return new Effect.Move(element,
+    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
+};
+
+Effect.Scale = Class.create();
+Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
+  initialize: function(element, percent) {
+    this.element = $(element)
+    var options = Object.extend({
+      scaleX: true,
+      scaleY: true,
+      scaleContent: true,
+      scaleFromCenter: false,
+      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
+      scaleFrom: 100.0,
+      scaleTo:   percent
+    }, arguments[2] || {});
+    this.start(options);
+  },
+  setup: function() {
+    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+    this.elementPositioning = Element.getStyle(this.element,'position');
+
+    this.originalStyle = {};
+    ['top','left','width','height','fontSize'].each( function(k) {
+      this.originalStyle[k] = this.element.style[k];
+    }.bind(this));
+
+    this.originalTop  = this.element.offsetTop;
+    this.originalLeft = this.element.offsetLeft;
+
+    var fontSize = Element.getStyle(this.element,'font-size') || '100%';
+    ['em','px','%'].each( function(fontSizeType) {
+      if(fontSize.indexOf(fontSizeType)>0) {
+        this.fontSize     = parseFloat(fontSize);
+        this.fontSizeType = fontSizeType;
+      }
+    }.bind(this));
+
+    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+    this.dims = null;
+    if(this.options.scaleMode=='box')
+      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+    if(/^content/.test(this.options.scaleMode))
+      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+    if(!this.dims)
+      this.dims = [this.options.scaleMode.originalHeight,
+                   this.options.scaleMode.originalWidth];
+  },
+  update: function(position) {
+    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+    if(this.options.scaleContent && this.fontSize)
+      Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });
+    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+  },
+  finish: function(position) {
+    if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);
+  },
+  setDimensions: function(height, width) {
+    var d = {};
+    if(this.options.scaleX) d.width = width + 'px';
+    if(this.options.scaleY) d.height = height + 'px';
+    if(this.options.scaleFromCenter) {
+      var topd  = (height - this.dims[0])/2;
+      var leftd = (width  - this.dims[1])/2;
+      if(this.elementPositioning == 'absolute') {
+        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
+        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+      } else {
+        if(this.options.scaleY) d.top = -topd + 'px';
+        if(this.options.scaleX) d.left = -leftd + 'px';
+      }
+    }
+    Element.setStyle(this.element, d);
+  }
+});
+
+Effect.Highlight = Class.create();
+Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
+  initialize: function(element) {
+    this.element = $(element);
+    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
+    this.start(options);
+  },
+  setup: function() {
+    // Prevent executing on elements not in the layout flow
+    if(Element.getStyle(this.element, 'display')=='none') { this.cancel(); return; }
+    // Disable background image during the effect
+    this.oldStyle = {
+      backgroundImage: Element.getStyle(this.element, 'background-image') };
+    Element.setStyle(this.element, {backgroundImage: 'none'});
+    if(!this.options.endcolor)
+      this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');
+    if(!this.options.restorecolor)
+      this.options.restorecolor = Element.getStyle(this.element, 'background-color');
+    // init color calculations
+    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+  },
+  update: function(position) {
+    Element.setStyle(this.element,{backgroundColor: $R(0,2).inject('#',function(m,v,i){
+      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
+  },
+  finish: function() {
+    Element.setStyle(this.element, Object.extend(this.oldStyle, {
+      backgroundColor: this.options.restorecolor
+    }));
+  }
+});
+
+Effect.ScrollTo = Class.create();
+Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
+  initialize: function(element) {
+    this.element = $(element);
+    this.start(arguments[1] || {});
+  },
+  setup: function() {
+    Position.prepare();
+    var offsets = Position.cumulativeOffset(this.element);
+    if(this.options.offset) offsets[1] += this.options.offset;
+    var max = window.innerHeight ?
+      window.height - window.innerHeight :
+      document.body.scrollHeight -
+        (document.documentElement.clientHeight ?
+          document.documentElement.clientHeight : document.body.clientHeight);
+    this.scrollStart = Position.deltaY;
+    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
+  },
+  update: function(position) {
+    Position.prepare();
+    window.scrollTo(Position.deltaX,
+      this.scrollStart + (position*this.delta));
+  }
+});
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+  var oldOpacity = Element.getInlineOpacity(element);
+  var options = Object.extend({
+  from: Element.getOpacity(element) || 1.0,
+  to:   0.0,
+  afterFinishInternal: function(effect) { with(Element) {
+    if(effect.options.to!=0) return;
+    hide(effect.element);
+    setStyle(effect.element, {opacity: oldOpacity}); }}
+  }, arguments[1] || {});
+  return new Effect.Opacity(element,options);
+}
+
+Effect.Appear = function(element) {
+  var options = Object.extend({
+  from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),
+  to:   1.0,
+  beforeSetup: function(effect) { with(Element) {
+    setOpacity(effect.element, effect.options.from);
+    show(effect.element); }}
+  }, arguments[1] || {});
+  return new Effect.Opacity(element,options);
+}
+
+Effect.Puff = function(element) {
+  element = $(element);
+  var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };
+  return new Effect.Parallel(
+   [ new Effect.Scale(element, 200,
+      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+     Object.extend({ duration: 1.0,
+      beforeSetupInternal: function(effect) { with(Element) {
+        setStyle(effect.effects[0].element, {position: 'absolute'}); }},
+      afterFinishInternal: function(effect) { with(Element) {
+         hide(effect.effects[0].element);
+         setStyle(effect.effects[0].element, oldStyle); }}
+     }, arguments[1] || {})
+   );
+}
+
+Effect.BlindUp = function(element) {
+  element = $(element);
+  Element.makeClipping(element);
+  return new Effect.Scale(element, 0,
+    Object.extend({ scaleContent: false,
+      scaleX: false,
+      restoreAfterFinish: true,
+      afterFinishInternal: function(effect) { with(Element) {
+        [hide, undoClipping].call(effect.element); }}
+    }, arguments[1] || {})
+  );
+}
+
+Effect.BlindDown = function(element) {
+  element = $(element);
+  var oldHeight = Element.getStyle(element, 'height');
+  var elementDimensions = Element.getDimensions(element);
+  return new Effect.Scale(element, 100,
+    Object.extend({ scaleContent: false,
+      scaleX: false,
+      scaleFrom: 0,
+      scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+      restoreAfterFinish: true,
+      afterSetup: function(effect) { with(Element) {
+        makeClipping(effect.element);
+        setStyle(effect.element, {height: '0px'});
+        show(effect.element);
+      }},
+      afterFinishInternal: function(effect) { with(Element) {
+        undoClipping(effect.element);
+        setStyle(effect.element, {height: oldHeight});
+      }}
+    }, arguments[1] || {})
+  );
+}
+
+Effect.SwitchOff = function(element) {
+  element = $(element);
+  var oldOpacity = Element.getInlineOpacity(element);
+  return new Effect.Appear(element, {
+    duration: 0.4,
+    from: 0,
+    transition: Effect.Transitions.flicker,
+    afterFinishInternal: function(effect) {
+      new Effect.Scale(effect.element, 1, {
+        duration: 0.3, scaleFromCenter: true,
+        scaleX: false, scaleContent: false, restoreAfterFinish: true,
+        beforeSetup: function(effect) { with(Element) {
+          [makePositioned,makeClipping].call(effect.element);
+        }},
+        afterFinishInternal: function(effect) { with(Element) {
+          [hide,undoClipping,undoPositioned].call(effect.element);
+          setStyle(effect.element, {opacity: oldOpacity});
+        }}
+      })
+    }
+  });
+}
+
+Effect.DropOut = function(element) {
+  element = $(element);
+  var oldStyle = {
+    top: Element.getStyle(element, 'top'),
+    left: Element.getStyle(element, 'left'),
+    opacity: Element.getInlineOpacity(element) };
+  return new Effect.Parallel(
+    [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+    Object.extend(
+      { duration: 0.5,
+        beforeSetup: function(effect) { with(Element) {
+          makePositioned(effect.effects[0].element); }},
+        afterFinishInternal: function(effect) { with(Element) {
+          [hide, undoPositioned].call(effect.effects[0].element);
+          setStyle(effect.effects[0].element, oldStyle); }}
+      }, arguments[1] || {}));
+}
+
+Effect.Shake = function(element) {
+  element = $(element);
+  var oldStyle = {
+    top: Element.getStyle(element, 'top'),
+    left: Element.getStyle(element, 'left') };
+	  return new Effect.Move(element,
+	    { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
+	  new Effect.Move(effect.element,
+	    { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
+	  new Effect.Move(effect.element,
+	    { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
+	  new Effect.Move(effect.element,
+	    { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
+	  new Effect.Move(effect.element,
+	    { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
+	  new Effect.Move(effect.element,
+	    { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { with(Element) {
+        undoPositioned(effect.element);
+        setStyle(effect.element, oldStyle);
+  }}}) }}) }}) }}) }}) }});
+}
+
+Effect.SlideDown = function(element) {
+  element = $(element);
+  Element.cleanWhitespace(element);
+  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+  var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');
+  var elementDimensions = Element.getDimensions(element);
+  return new Effect.Scale(element, 100, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    scaleFrom: 0,
+    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+    restoreAfterFinish: true,
+    afterSetup: function(effect) { with(Element) {
+      makePositioned(effect.element);
+      makePositioned(effect.element.firstChild);
+      if(window.opera) setStyle(effect.element, {top: ''});
+      makeClipping(effect.element);
+      setStyle(effect.element, {height: '0px'});
+      show(element); }},
+    afterUpdateInternal: function(effect) { with(Element) {
+      setStyle(effect.element.firstChild, {bottom:
+        (effect.dims[0] - effect.element.clientHeight) + 'px' }); }},
+    afterFinishInternal: function(effect) { with(Element) {
+      undoClipping(effect.element);
+      undoPositioned(effect.element.firstChild);
+      undoPositioned(effect.element);
+      setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}
+    }, arguments[1] || {})
+  );
+}
+
+Effect.SlideUp = function(element) {
+  element = $(element);
+  Element.cleanWhitespace(element);
+  var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');
+  return new Effect.Scale(element, 0,
+   Object.extend({ scaleContent: false,
+    scaleX: false,
+    scaleMode: 'box',
+    scaleFrom: 100,
+    restoreAfterFinish: true,
+    beforeStartInternal: function(effect) { with(Element) {
+      makePositioned(effect.element);
+      makePositioned(effect.element.firstChild);
+      if(window.opera) setStyle(effect.element, {top: ''});
+      makeClipping(effect.element);
+      show(element); }},
+    afterUpdateInternal: function(effect) { with(Element) {
+      setStyle(effect.element.firstChild, {bottom:
+        (effect.dims[0] - effect.element.clientHeight) + 'px' }); }},
+    afterFinishInternal: function(effect) { with(Element) {
+        [hide, undoClipping].call(effect.element);
+        undoPositioned(effect.element.firstChild);
+        undoPositioned(effect.element);
+        setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}
+   }, arguments[1] || {})
+  );
+}
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+  return new Effect.Scale(element, window.opera ? 1 : 0,
+    { restoreAfterFinish: true,
+      beforeSetup: function(effect) { with(Element) {
+        makeClipping(effect.element); }},
+      afterFinishInternal: function(effect) { with(Element) {
+        hide(effect.element);
+        undoClipping(effect.element); }}
+  });
+}
+
+Effect.Grow = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    direction: 'center',
+    moveTransistion: Effect.Transitions.sinoidal,
+    scaleTransition: Effect.Transitions.sinoidal,
+    opacityTransition: Effect.Transitions.full
+  }, arguments[1] || {});
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    height: element.style.height,
+    width: element.style.width,
+    opacity: Element.getInlineOpacity(element) };
+
+  var dims = Element.getDimensions(element);
+  var initialMoveX, initialMoveY;
+  var moveX, moveY;
+
+  switch (options.direction) {
+    case 'top-left':
+      initialMoveX = initialMoveY = moveX = moveY = 0;
+      break;
+    case 'top-right':
+      initialMoveX = dims.width;
+      initialMoveY = moveY = 0;
+      moveX = -dims.width;
+      break;
+    case 'bottom-left':
+      initialMoveX = moveX = 0;
+      initialMoveY = dims.height;
+      moveY = -dims.height;
+      break;
+    case 'bottom-right':
+      initialMoveX = dims.width;
+      initialMoveY = dims.height;
+      moveX = -dims.width;
+      moveY = -dims.height;
+      break;
+    case 'center':
+      initialMoveX = dims.width / 2;
+      initialMoveY = dims.height / 2;
+      moveX = -dims.width / 2;
+      moveY = -dims.height / 2;
+      break;
+  }
+
+  return new Effect.Move(element, {
+    x: initialMoveX,
+    y: initialMoveY,
+    duration: 0.01,
+    beforeSetup: function(effect) { with(Element) {
+      hide(effect.element);
+      makeClipping(effect.element);
+      makePositioned(effect.element);
+    }},
+    afterFinishInternal: function(effect) {
+      new Effect.Parallel(
+        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+          new Effect.Scale(effect.element, 100, {
+            scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+        ], Object.extend({
+             beforeSetup: function(effect) { with(Element) {
+               setStyle(effect.effects[0].element, {height: '0px'});
+               show(effect.effects[0].element); }},
+             afterFinishInternal: function(effect) { with(Element) {
+               [undoClipping, undoPositioned].call(effect.effects[0].element);
+               setStyle(effect.effects[0].element, oldStyle); }}
+           }, options)
+      )
+    }
+  });
+}
+
+Effect.Shrink = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    direction: 'center',
+    moveTransistion: Effect.Transitions.sinoidal,
+    scaleTransition: Effect.Transitions.sinoidal,
+    opacityTransition: Effect.Transitions.none
+  }, arguments[1] || {});
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    height: element.style.height,
+    width: element.style.width,
+    opacity: Element.getInlineOpacity(element) };
+
+  var dims = Element.getDimensions(element);
+  var moveX, moveY;
+
+  switch (options.direction) {
+    case 'top-left':
+      moveX = moveY = 0;
+      break;
+    case 'top-right':
+      moveX = dims.width;
+      moveY = 0;
+      break;
+    case 'bottom-left':
+      moveX = 0;
+      moveY = dims.height;
+      break;
+    case 'bottom-right':
+      moveX = dims.width;
+      moveY = dims.height;
+      break;
+    case 'center':
+      moveX = dims.width / 2;
+      moveY = dims.height / 2;
+      break;
+  }
+
+  return new Effect.Parallel(
+    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+    ], Object.extend({
+         beforeStartInternal: function(effect) { with(Element) {
+           [makePositioned, makeClipping].call(effect.effects[0].element) }},
+         afterFinishInternal: function(effect) { with(Element) {
+           [hide, undoClipping, undoPositioned].call(effect.effects[0].element);
+           setStyle(effect.effects[0].element, oldStyle); }}
+       }, options)
+  );
+}
+
+Effect.Pulsate = function(element) {
+  element = $(element);
+  var options    = arguments[1] || {};
+  var oldOpacity = Element.getInlineOpacity(element);
+  var transition = options.transition || Effect.Transitions.sinoidal;
+  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };
+  reverser.bind(transition);
+  return new Effect.Opacity(element,
+    Object.extend(Object.extend({  duration: 3.0, from: 0,
+      afterFinishInternal: function(effect) { Element.setStyle(effect.element, {opacity: oldOpacity}); }
+    }, options), {transition: reverser}));
+}
+
+Effect.Fold = function(element) {
+  element = $(element);
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    width: element.style.width,
+    height: element.style.height };
+  Element.makeClipping(element);
+  return new Effect.Scale(element, 5, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    afterFinishInternal: function(effect) {
+    new Effect.Scale(element, 1, {
+      scaleContent: false,
+      scaleY: false,
+      afterFinishInternal: function(effect) { with(Element) {
+        [hide, undoClipping].call(effect.element);
+        setStyle(effect.element, oldStyle);
+      }} });
+  }}, arguments[1] || {}));
+}
Index: /tags/2.00/root/static/js/prototype/prototype.js
===================================================================
--- /tags/2.00/root/static/js/prototype/prototype.js	(revision 478)
+++ /tags/2.00/root/static/js/prototype/prototype.js	(revision 478)
@@ -0,0 +1,1785 @@
+/*  Prototype JavaScript framework, version 1.4.0
+ *  (c) 2005 Sam Stephenson <sam@conio.net>
+ *
+ *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
+ *  against the source tree, available from the Prototype darcs repository.
+ *
+ *  Prototype is freely distributable under the terms of an MIT-style license.
+ *
+ *  For details, see the Prototype web site: http://prototype.conio.net/
+ *
+/*--------------------------------------------------------------------------*/
+
+var Prototype = {
+  Version: '1.4.0',
+  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
+
+  emptyFunction: function() {},
+  K: function(x) {return x}
+}
+
+var Class = {
+  create: function() {
+    return function() {
+      this.initialize.apply(this, arguments);
+    }
+  }
+}
+
+var Abstract = new Object();
+
+Object.extend = function(destination, source) {
+  for (property in source) {
+    destination[property] = source[property];
+  }
+  return destination;
+}
+
+Object.inspect = function(object) {
+  try {
+    if (object == undefined) return 'undefined';
+    if (object == null) return 'null';
+    return object.inspect ? object.inspect() : object.toString();
+  } catch (e) {
+    if (e instanceof RangeError) return '...';
+    throw e;
+  }
+}
+
+Function.prototype.bind = function() {
+  var __method = this, args = $A(arguments), object = args.shift();
+  return function() {
+    return __method.apply(object, args.concat($A(arguments)));
+  }
+}
+
+Function.prototype.bindAsEventListener = function(object) {
+  var __method = this;
+  return function(event) {
+    return __method.call(object, event || window.event);
+  }
+}
+
+Object.extend(Number.prototype, {
+  toColorPart: function() {
+    var digits = this.toString(16);
+    if (this < 16) return '0' + digits;
+    return digits;
+  },
+
+  succ: function() {
+    return this + 1;
+  },
+
+  times: function(iterator) {
+    $R(0, this, true).each(iterator);
+    return this;
+  }
+});
+
+var Try = {
+  these: function() {
+    var returnValue;
+
+    for (var i = 0; i < arguments.length; i++) {
+      var lambda = arguments[i];
+      try {
+        returnValue = lambda();
+        break;
+      } catch (e) {}
+    }
+
+    return returnValue;
+  }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create();
+PeriodicalExecuter.prototype = {
+  initialize: function(callback, frequency) {
+    this.callback = callback;
+    this.frequency = frequency;
+    this.currentlyExecuting = false;
+
+    this.registerCallback();
+  },
+
+  registerCallback: function() {
+    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+  },
+
+  onTimerEvent: function() {
+    if (!this.currentlyExecuting) {
+      try {
+        this.currentlyExecuting = true;
+        this.callback();
+      } finally {
+        this.currentlyExecuting = false;
+      }
+    }
+  }
+}
+
+/*--------------------------------------------------------------------------*/
+
+function $() {
+  var elements = new Array();
+
+  for (var i = 0; i < arguments.length; i++) {
+    var element = arguments[i];
+    if (typeof element == 'string')
+      element = document.getElementById(element);
+
+    if (arguments.length == 1)
+      return element;
+
+    elements.push(element);
+  }
+
+  return elements;
+}
+Object.extend(String.prototype, {
+  stripTags: function() {
+    return this.replace(/<\/?[^>]+>/gi, '');
+  },
+
+  stripScripts: function() {
+    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+  },
+
+  extractScripts: function() {
+    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+    return (this.match(matchAll) || []).map(function(scriptTag) {
+      return (scriptTag.match(matchOne) || ['', ''])[1];
+    });
+  },
+
+  evalScripts: function() {
+    return this.extractScripts().map(eval);
+  },
+
+  escapeHTML: function() {
+    var div = document.createElement('div');
+    var text = document.createTextNode(this);
+    div.appendChild(text);
+    return div.innerHTML;
+  },
+
+  unescapeHTML: function() {
+    var div = document.createElement('div');
+    div.innerHTML = this.stripTags();
+    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
+  },
+
+  toQueryParams: function() {
+    var pairs = this.match(/^\??(.*)$/)[1].split('&');
+    return pairs.inject({}, function(params, pairString) {
+      var pair = pairString.split('=');
+      params[pair[0]] = pair[1];
+      return params;
+    });
+  },
+
+  toArray: function() {
+    return this.split('');
+  },
+
+  camelize: function() {
+    var oStringList = this.split('-');
+    if (oStringList.length == 1) return oStringList[0];
+
+    var camelizedString = this.indexOf('-') == 0
+      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
+      : oStringList[0];
+
+    for (var i = 1, len = oStringList.length; i < len; i++) {
+      var s = oStringList[i];
+      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
+    }
+
+    return camelizedString;
+  },
+
+  inspect: function() {
+    return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
+  }
+});
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+var $break    = new Object();
+var $continue = new Object();
+
+var Enumerable = {
+  each: function(iterator) {
+    var index = 0;
+    try {
+      this._each(function(value) {
+        try {
+          iterator(value, index++);
+        } catch (e) {
+          if (e != $continue) throw e;
+        }
+      });
+    } catch (e) {
+      if (e != $break) throw e;
+    }
+  },
+
+  all: function(iterator) {
+    var result = true;
+    this.each(function(value, index) {
+      result = result && !!(iterator || Prototype.K)(value, index);
+      if (!result) throw $break;
+    });
+    return result;
+  },
+
+  any: function(iterator) {
+    var result = true;
+    this.each(function(value, index) {
+      if (result = !!(iterator || Prototype.K)(value, index))
+        throw $break;
+    });
+    return result;
+  },
+
+  collect: function(iterator) {
+    var results = [];
+    this.each(function(value, index) {
+      results.push(iterator(value, index));
+    });
+    return results;
+  },
+
+  detect: function (iterator) {
+    var result;
+    this.each(function(value, index) {
+      if (iterator(value, index)) {
+        result = value;
+        throw $break;
+      }
+    });
+    return result;
+  },
+
+  findAll: function(iterator) {
+    var results = [];
+    this.each(function(value, index) {
+      if (iterator(value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  grep: function(pattern, iterator) {
+    var results = [];
+    this.each(function(value, index) {
+      var stringValue = value.toString();
+      if (stringValue.match(pattern))
+        results.push((iterator || Prototype.K)(value, index));
+    })
+    return results;
+  },
+
+  include: function(object) {
+    var found = false;
+    this.each(function(value) {
+      if (value == object) {
+        found = true;
+        throw $break;
+      }
+    });
+    return found;
+  },
+
+  inject: function(memo, iterator) {
+    this.each(function(value, index) {
+      memo = iterator(memo, value, index);
+    });
+    return memo;
+  },
+
+  invoke: function(method) {
+    var args = $A(arguments).slice(1);
+    return this.collect(function(value) {
+      return value[method].apply(value, args);
+    });
+  },
+
+  max: function(iterator) {
+    var result;
+    this.each(function(value, index) {
+      value = (iterator || Prototype.K)(value, index);
+      if (value >= (result || value))
+        result = value;
+    });
+    return result;
+  },
+
+  min: function(iterator) {
+    var result;
+    this.each(function(value, index) {
+      value = (iterator || Prototype.K)(value, index);
+      if (value <= (result || value))
+        result = value;
+    });
+    return result;
+  },
+
+  partition: function(iterator) {
+    var trues = [], falses = [];
+    this.each(function(value, index) {
+      ((iterator || Prototype.K)(value, index) ?
+        trues : falses).push(value);
+    });
+    return [trues, falses];
+  },
+
+  pluck: function(property) {
+    var results = [];
+    this.each(function(value, index) {
+      results.push(value[property]);
+    });
+    return results;
+  },
+
+  reject: function(iterator) {
+    var results = [];
+    this.each(function(value, index) {
+      if (!iterator(value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  sortBy: function(iterator) {
+    return this.collect(function(value, index) {
+      return {value: value, criteria: iterator(value, index)};
+    }).sort(function(left, right) {
+      var a = left.criteria, b = right.criteria;
+      return a < b ? -1 : a > b ? 1 : 0;
+    }).pluck('value');
+  },
+
+  toArray: function() {
+    return this.collect(Prototype.K);
+  },
+
+  zip: function() {
+    var iterator = Prototype.K, args = $A(arguments);
+    if (typeof args.last() == 'function')
+      iterator = args.pop();
+
+    var collections = [this].concat(args).map($A);
+    return this.map(function(value, index) {
+      iterator(value = collections.pluck(index));
+      return value;
+    });
+  },
+
+  inspect: function() {
+    return '#<Enumerable:' + this.toArray().inspect() + '>';
+  }
+}
+
+Object.extend(Enumerable, {
+  map:     Enumerable.collect,
+  find:    Enumerable.detect,
+  select:  Enumerable.findAll,
+  member:  Enumerable.include,
+  entries: Enumerable.toArray
+});
+var $A = Array.from = function(iterable) {
+  if (!iterable) return [];
+  if (iterable.toArray) {
+    return iterable.toArray();
+  } else {
+    var results = [];
+    for (var i = 0; i < iterable.length; i++)
+      results.push(iterable[i]);
+    return results;
+  }
+}
+
+Object.extend(Array.prototype, Enumerable);
+
+Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+  _each: function(iterator) {
+    for (var i = 0; i < this.length; i++)
+      iterator(this[i]);
+  },
+
+  clear: function() {
+    this.length = 0;
+    return this;
+  },
+
+  first: function() {
+    return this[0];
+  },
+
+  last: function() {
+    return this[this.length - 1];
+  },
+
+  compact: function() {
+    return this.select(function(value) {
+      return value != undefined || value != null;
+    });
+  },
+
+  flatten: function() {
+    return this.inject([], function(array, value) {
+      return array.concat(value.constructor == Array ?
+        value.flatten() : [value]);
+    });
+  },
+
+  without: function() {
+    var values = $A(arguments);
+    return this.select(function(value) {
+      return !values.include(value);
+    });
+  },
+
+  indexOf: function(object) {
+    for (var i = 0; i < this.length; i++)
+      if (this[i] == object) return i;
+    return -1;
+  },
+
+  reverse: function(inline) {
+    return (inline !== false ? this : this.toArray())._reverse();
+  },
+
+  shift: function() {
+    var result = this[0];
+    for (var i = 0; i < this.length - 1; i++)
+      this[i] = this[i + 1];
+    this.length--;
+    return result;
+  },
+
+  inspect: function() {
+    return '[' + this.map(Object.inspect).join(', ') + ']';
+  }
+});
+var Hash = {
+  _each: function(iterator) {
+    for (key in this) {
+      var value = this[key];
+      if (typeof value == 'function') continue;
+
+      var pair = [key, value];
+      pair.key = key;
+      pair.value = value;
+      iterator(pair);
+    }
+  },
+
+  keys: function() {
+    return this.pluck('key');
+  },
+
+  values: function() {
+    return this.pluck('value');
+  },
+
+  merge: function(hash) {
+    return $H(hash).inject($H(this), function(mergedHash, pair) {
+      mergedHash[pair.key] = pair.value;
+      return mergedHash;
+    });
+  },
+
+  toQueryString: function() {
+    return this.map(function(pair) {
+      return pair.map(encodeURIComponent).join('=');
+    }).join('&');
+  },
+
+  inspect: function() {
+    return '#<Hash:{' + this.map(function(pair) {
+      return pair.map(Object.inspect).join(': ');
+    }).join(', ') + '}>';
+  }
+}
+
+function $H(object) {
+  var hash = Object.extend({}, object || {});
+  Object.extend(hash, Enumerable);
+  Object.extend(hash, Hash);
+  return hash;
+}
+ObjectRange = Class.create();
+Object.extend(ObjectRange.prototype, Enumerable);
+Object.extend(ObjectRange.prototype, {
+  initialize: function(start, end, exclusive) {
+    this.start = start;
+    this.end = end;
+    this.exclusive = exclusive;
+  },
+
+  _each: function(iterator) {
+    var value = this.start;
+    do {
+      iterator(value);
+      value = value.succ();
+    } while (this.include(value));
+  },
+
+  include: function(value) {
+    if (value < this.start)
+      return false;
+    if (this.exclusive)
+      return value < this.end;
+    return value <= this.end;
+  }
+});
+
+var $R = function(start, end, exclusive) {
+  return new ObjectRange(start, end, exclusive);
+}
+
+var Ajax = {
+  getTransport: function() {
+    return Try.these(
+      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
+      function() {return new XMLHttpRequest()}
+    ) || false;
+  },
+
+  activeRequestCount: 0
+}
+
+Ajax.Responders = {
+  responders: [],
+
+  _each: function(iterator) {
+    this.responders._each(iterator);
+  },
+
+  register: function(responderToAdd) {
+    if (!this.include(responderToAdd))
+      this.responders.push(responderToAdd);
+  },
+
+  unregister: function(responderToRemove) {
+    this.responders = this.responders.without(responderToRemove);
+  },
+
+  dispatch: function(callback, request, transport, json) {
+    this.each(function(responder) {
+      if (responder[callback] && typeof responder[callback] == 'function') {
+        try {
+          responder[callback].apply(responder, [request, transport, json]);
+        } catch (e) {}
+      }
+    });
+  }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+  onCreate: function() {
+    Ajax.activeRequestCount++;
+  },
+
+  onComplete: function() {
+    Ajax.activeRequestCount--;
+  }
+});
+
+Ajax.Base = function() {};
+Ajax.Base.prototype = {
+  setOptions: function(options) {
+    this.options = {
+      method:       'post',
+      asynchronous: true,
+      parameters:   ''
+    }
+    Object.extend(this.options, options || {});
+  },
+
+  responseIsSuccess: function() {
+    return this.transport.status == undefined
+        || this.transport.status == 0
+        || (this.transport.status >= 200 && this.transport.status < 300);
+  },
+
+  responseIsFailure: function() {
+    return !this.responseIsSuccess();
+  }
+}
+
+Ajax.Request = Class.create();
+Ajax.Request.Events =
+  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
+  initialize: function(url, options) {
+    this.transport = Ajax.getTransport();
+    this.setOptions(options);
+    this.request(url);
+  },
+
+  request: function(url) {
+    var parameters = this.options.parameters || '';
+    if (parameters.length > 0) parameters += '&_=';
+
+    try {
+      this.url = url;
+      if (this.options.method == 'get' && parameters.length > 0)
+        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;
+
+      Ajax.Responders.dispatch('onCreate', this, this.transport);
+
+      this.transport.open(this.options.method, this.url,
+        this.options.asynchronous);
+
+      if (this.options.asynchronous) {
+        this.transport.onreadystatechange = this.onStateChange.bind(this);
+        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
+      }
+
+      this.setRequestHeaders();
+
+      var body = this.options.postBody ? this.options.postBody : parameters;
+      this.transport.send(this.options.method == 'post' ? body : null);
+
+    } catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  setRequestHeaders: function() {
+    var requestHeaders =
+      ['X-Requested-With', 'XMLHttpRequest',
+       'X-Prototype-Version', Prototype.Version];
+
+    if (this.options.method == 'post') {
+      requestHeaders.push('Content-type',
+        'application/x-www-form-urlencoded');
+
+      /* Force "Connection: close" for Mozilla browsers to work around
+       * a bug where XMLHttpReqeuest sends an incorrect Content-length
+       * header. See Mozilla Bugzilla #246651.
+       */
+      if (this.transport.overrideMimeType)
+        requestHeaders.push('Connection', 'close');
+    }
+
+    if (this.options.requestHeaders)
+      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
+
+    for (var i = 0; i < requestHeaders.length; i += 2)
+      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
+  },
+
+  onStateChange: function() {
+    var readyState = this.transport.readyState;
+    if (readyState != 1)
+      this.respondToReadyState(this.transport.readyState);
+  },
+
+  header: function(name) {
+    try {
+      return this.transport.getResponseHeader(name);
+    } catch (e) {}
+  },
+
+  evalJSON: function() {
+    try {
+      return eval(this.header('X-JSON'));
+    } catch (e) {}
+  },
+
+  evalResponse: function() {
+    try {
+      return eval(this.transport.responseText);
+    } catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  respondToReadyState: function(readyState) {
+    var event = Ajax.Request.Events[readyState];
+    var transport = this.transport, json = this.evalJSON();
+
+    if (event == 'Complete') {
+      try {
+        (this.options['on' + this.transport.status]
+         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
+         || Prototype.emptyFunction)(transport, json);
+      } catch (e) {
+        this.dispatchException(e);
+      }
+
+      if ((this.header('Content-type') || '').match(/^text\/javascript/i))
+        this.evalResponse();
+    }
+
+    try {
+      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
+      Ajax.Responders.dispatch('on' + event, this, transport, json);
+    } catch (e) {
+      this.dispatchException(e);
+    }
+
+    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
+    if (event == 'Complete')
+      this.transport.onreadystatechange = Prototype.emptyFunction;
+  },
+
+  dispatchException: function(exception) {
+    (this.options.onException || Prototype.emptyFunction)(this, exception);
+    Ajax.Responders.dispatch('onException', this, exception);
+  }
+});
+
+Ajax.Updater = Class.create();
+
+Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
+  initialize: function(container, url, options) {
+    this.containers = {
+      success: container.success ? $(container.success) : $(container),
+      failure: container.failure ? $(container.failure) :
+        (container.success ? null : $(container))
+    }
+
+    this.transport = Ajax.getTransport();
+    this.setOptions(options);
+
+    var onComplete = this.options.onComplete || Prototype.emptyFunction;
+    this.options.onComplete = (function(transport, object) {
+      this.updateContent();
+      onComplete(transport, object);
+    }).bind(this);
+
+    this.request(url);
+  },
+
+  updateContent: function() {
+    var receiver = this.responseIsSuccess() ?
+      this.containers.success : this.containers.failure;
+    var response = this.transport.responseText;
+
+    if (!this.options.evalScripts)
+      response = response.stripScripts();
+
+    if (receiver) {
+      if (this.options.insertion) {
+        new this.options.insertion(receiver, response);
+      } else {
+        Element.update(receiver, response);
+      }
+    }
+
+    if (this.responseIsSuccess()) {
+      if (this.onComplete)
+        setTimeout(this.onComplete.bind(this), 10);
+    }
+  }
+});
+
+Ajax.PeriodicalUpdater = Class.create();
+Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
+  initialize: function(container, url, options) {
+    this.setOptions(options);
+    this.onComplete = this.options.onComplete;
+
+    this.frequency = (this.options.frequency || 2);
+    this.decay = (this.options.decay || 1);
+
+    this.updater = {};
+    this.container = container;
+    this.url = url;
+
+    this.start();
+  },
+
+  start: function() {
+    this.options.onComplete = this.updateComplete.bind(this);
+    this.onTimerEvent();
+  },
+
+  stop: function() {
+    this.updater.onComplete = undefined;
+    clearTimeout(this.timer);
+    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+  },
+
+  updateComplete: function(request) {
+    if (this.options.decay) {
+      this.decay = (request.responseText == this.lastText ?
+        this.decay * this.options.decay : 1);
+
+      this.lastText = request.responseText;
+    }
+    this.timer = setTimeout(this.onTimerEvent.bind(this),
+      this.decay * this.frequency * 1000);
+  },
+
+  onTimerEvent: function() {
+    this.updater = new Ajax.Updater(this.container, this.url, this.options);
+  }
+});
+document.getElementsByClassName = function(className, parentElement) {
+  var children = ($(parentElement) || document.body).getElementsByTagName('*');
+  return $A(children).inject([], function(elements, child) {
+    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
+      elements.push(child);
+    return elements;
+  });
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Element) {
+  var Element = new Object();
+}
+
+Object.extend(Element, {
+  visible: function(element) {
+    return $(element).style.display != 'none';
+  },
+
+  toggle: function() {
+    for (var i = 0; i < arguments.length; i++) {
+      var element = $(arguments[i]);
+      Element[Element.visible(element) ? 'hide' : 'show'](element);
+    }
+  },
+
+  hide: function() {
+    for (var i = 0; i < arguments.length; i++) {
+      var element = $(arguments[i]);
+      element.style.display = 'none';
+    }
+  },
+
+  show: function() {
+    for (var i = 0; i < arguments.length; i++) {
+      var element = $(arguments[i]);
+      element.style.display = '';
+    }
+  },
+
+  remove: function(element) {
+    element = $(element);
+    element.parentNode.removeChild(element);
+  },
+
+  update: function(element, html) {
+    $(element).innerHTML = html.stripScripts();
+    setTimeout(function() {html.evalScripts()}, 10);
+  },
+
+  getHeight: function(element) {
+    element = $(element);
+    return element.offsetHeight;
+  },
+
+  classNames: function(element) {
+    return new Element.ClassNames(element);
+  },
+
+  hasClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    return Element.classNames(element).include(className);
+  },
+
+  addClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    return Element.classNames(element).add(className);
+  },
+
+  removeClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    return Element.classNames(element).remove(className);
+  },
+
+  // removes whitespace-only text node children
+  cleanWhitespace: function(element) {
+    element = $(element);
+    for (var i = 0; i < element.childNodes.length; i++) {
+      var node = element.childNodes[i];
+      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+        Element.remove(node);
+    }
+  },
+
+  empty: function(element) {
+    return $(element).innerHTML.match(/^\s*$/);
+  },
+
+  scrollTo: function(element) {
+    element = $(element);
+    var x = element.x ? element.x : element.offsetLeft,
+        y = element.y ? element.y : element.offsetTop;
+    window.scrollTo(x, y);
+  },
+
+  getStyle: function(element, style) {
+    element = $(element);
+    var value = element.style[style.camelize()];
+    if (!value) {
+      if (document.defaultView && document.defaultView.getComputedStyle) {
+        var css = document.defaultView.getComputedStyle(element, null);
+        value = css ? css.getPropertyValue(style) : null;
+      } else if (element.currentStyle) {
+        value = element.currentStyle[style.camelize()];
+      }
+    }
+
+    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
+      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
+
+    return value == 'auto' ? null : value;
+  },
+
+  setStyle: function(element, style) {
+    element = $(element);
+    for (name in style)
+      element.style[name.camelize()] = style[name];
+  },
+
+  getDimensions: function(element) {
+    element = $(element);
+    if (Element.getStyle(element, 'display') != 'none')
+      return {width: element.offsetWidth, height: element.offsetHeight};
+
+    // All *Width and *Height properties give 0 on elements with display none,
+    // so enable the element temporarily
+    var els = element.style;
+    var originalVisibility = els.visibility;
+    var originalPosition = els.position;
+    els.visibility = 'hidden';
+    els.position = 'absolute';
+    els.display = '';
+    var originalWidth = element.clientWidth;
+    var originalHeight = element.clientHeight;
+    els.display = 'none';
+    els.position = originalPosition;
+    els.visibility = originalVisibility;
+    return {width: originalWidth, height: originalHeight};
+  },
+
+  makePositioned: function(element) {
+    element = $(element);
+    var pos = Element.getStyle(element, 'position');
+    if (pos == 'static' || !pos) {
+      element._madePositioned = true;
+      element.style.position = 'relative';
+      // Opera returns the offset relative to the positioning context, when an
+      // element is position relative but top and left have not been defined
+      if (window.opera) {
+        element.style.top = 0;
+        element.style.left = 0;
+      }
+    }
+  },
+
+  undoPositioned: function(element) {
+    element = $(element);
+    if (element._madePositioned) {
+      element._madePositioned = undefined;
+      element.style.position =
+        element.style.top =
+        element.style.left =
+        element.style.bottom =
+        element.style.right = '';
+    }
+  },
+
+  makeClipping: function(element) {
+    element = $(element);
+    if (element._overflow) return;
+    element._overflow = element.style.overflow;
+    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
+      element.style.overflow = 'hidden';
+  },
+
+  undoClipping: function(element) {
+    element = $(element);
+    if (element._overflow) return;
+    element.style.overflow = element._overflow;
+    element._overflow = undefined;
+  }
+});
+
+var Toggle = new Object();
+Toggle.display = Element.toggle;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.Insertion = function(adjacency) {
+  this.adjacency = adjacency;
+}
+
+Abstract.Insertion.prototype = {
+  initialize: function(element, content) {
+    this.element = $(element);
+    this.content = content.stripScripts();
+
+    if (this.adjacency && this.element.insertAdjacentHTML) {
+      try {
+        this.element.insertAdjacentHTML(this.adjacency, this.content);
+      } catch (e) {
+        if (this.element.tagName.toLowerCase() == 'tbody') {
+          this.insertContent(this.contentFromAnonymousTable());
+        } else {
+          throw e;
+        }
+      }
+    } else {
+      this.range = this.element.ownerDocument.createRange();
+      if (this.initializeRange) this.initializeRange();
+      this.insertContent([this.range.createContextualFragment(this.content)]);
+    }
+
+    setTimeout(function() {content.evalScripts()}, 10);
+  },
+
+  contentFromAnonymousTable: function() {
+    var div = document.createElement('div');
+    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
+    return $A(div.childNodes[0].childNodes[0].childNodes);
+  }
+}
+
+var Insertion = new Object();
+
+Insertion.Before = Class.create();
+Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
+  initializeRange: function() {
+    this.range.setStartBefore(this.element);
+  },
+
+  insertContent: function(fragments) {
+    fragments.each((function(fragment) {
+      this.element.parentNode.insertBefore(fragment, this.element);
+    }).bind(this));
+  }
+});
+
+Insertion.Top = Class.create();
+Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
+  initializeRange: function() {
+    this.range.selectNodeContents(this.element);
+    this.range.collapse(true);
+  },
+
+  insertContent: function(fragments) {
+    fragments.reverse(false).each((function(fragment) {
+      this.element.insertBefore(fragment, this.element.firstChild);
+    }).bind(this));
+  }
+});
+
+Insertion.Bottom = Class.create();
+Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
+  initializeRange: function() {
+    this.range.selectNodeContents(this.element);
+    this.range.collapse(this.element);
+  },
+
+  insertContent: function(fragments) {
+    fragments.each((function(fragment) {
+      this.element.appendChild(fragment);
+    }).bind(this));
+  }
+});
+
+Insertion.After = Class.create();
+Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
+  initializeRange: function() {
+    this.range.setStartAfter(this.element);
+  },
+
+  insertContent: function(fragments) {
+    fragments.each((function(fragment) {
+      this.element.parentNode.insertBefore(fragment,
+        this.element.nextSibling);
+    }).bind(this));
+  }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+  initialize: function(element) {
+    this.element = $(element);
+  },
+
+  _each: function(iterator) {
+    this.element.className.split(/\s+/).select(function(name) {
+      return name.length > 0;
+    })._each(iterator);
+  },
+
+  set: function(className) {
+    this.element.className = className;
+  },
+
+  add: function(classNameToAdd) {
+    if (this.include(classNameToAdd)) return;
+    this.set(this.toArray().concat(classNameToAdd).join(' '));
+  },
+
+  remove: function(classNameToRemove) {
+    if (!this.include(classNameToRemove)) return;
+    this.set(this.select(function(className) {
+      return className != classNameToRemove;
+    }).join(' '));
+  },
+
+  toString: function() {
+    return this.toArray().join(' ');
+  }
+}
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+var Field = {
+  clear: function() {
+    for (var i = 0; i < arguments.length; i++)
+      $(arguments[i]).value = '';
+  },
+
+  focus: function(element) {
+    $(element).focus();
+  },
+
+  present: function() {
+    for (var i = 0; i < arguments.length; i++)
+      if ($(arguments[i]).value == '') return false;
+    return true;
+  },
+
+  select: function(element) {
+    $(element).select();
+  },
+
+  activate: function(element) {
+    element = $(element);
+    element.focus();
+    if (element.select)
+      element.select();
+  }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var Form = {
+  serialize: function(form) {
+    var elements = Form.getElements($(form));
+    var queryComponents = new Array();
+
+    for (var i = 0; i < elements.length; i++) {
+      var queryComponent = Form.Element.serialize(elements[i]);
+      if (queryComponent)
+        queryComponents.push(queryComponent);
+    }
+
+    return queryComponents.join('&');
+  },
+
+  getElements: function(form) {
+    form = $(form);
+    var elements = new Array();
+
+    for (tagName in Form.Element.Serializers) {
+      var tagElements = form.getElementsByTagName(tagName);
+      for (var j = 0; j < tagElements.length; j++)
+        elements.push(tagElements[j]);
+    }
+    return elements;
+  },
+
+  getInputs: function(form, typeName, name) {
+    form = $(form);
+    var inputs = form.getElementsByTagName('input');
+
+    if (!typeName && !name)
+      return inputs;
+
+    var matchingInputs = new Array();
+    for (var i = 0; i < inputs.length; i++) {
+      var input = inputs[i];
+      if ((typeName && input.type != typeName) ||
+          (name && input.name != name))
+        continue;
+      matchingInputs.push(input);
+    }
+
+    return matchingInputs;
+  },
+
+  disable: function(form) {
+    var elements = Form.getElements(form);
+    for (var i = 0; i < elements.length; i++) {
+      var element = elements[i];
+      element.blur();
+      element.disabled = 'true';
+    }
+  },
+
+  enable: function(form) {
+    var elements = Form.getElements(form);
+    for (var i = 0; i < elements.length; i++) {
+      var element = elements[i];
+      element.disabled = '';
+    }
+  },
+
+  findFirstElement: function(form) {
+    return Form.getElements(form).find(function(element) {
+      return element.type != 'hidden' && !element.disabled &&
+        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+    });
+  },
+
+  focusFirstElement: function(form) {
+    Field.activate(Form.findFirstElement(form));
+  },
+
+  reset: function(form) {
+    $(form).reset();
+  }
+}
+
+Form.Element = {
+  serialize: function(element) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    var parameter = Form.Element.Serializers[method](element);
+
+    if (parameter) {
+      var key = encodeURIComponent(parameter[0]);
+      if (key.length == 0) return;
+
+      if (parameter[1].constructor != Array)
+        parameter[1] = [parameter[1]];
+
+      return parameter[1].map(function(value) {
+        return key + '=' + encodeURIComponent(value);
+      }).join('&');
+    }
+  },
+
+  getValue: function(element) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    var parameter = Form.Element.Serializers[method](element);
+
+    if (parameter)
+      return parameter[1];
+  }
+}
+
+Form.Element.Serializers = {
+  input: function(element) {
+    switch (element.type.toLowerCase()) {
+      case 'submit':
+      case 'hidden':
+      case 'password':
+      case 'text':
+        return Form.Element.Serializers.textarea(element);
+      case 'checkbox':
+      case 'radio':
+        return Form.Element.Serializers.inputSelector(element);
+    }
+    return false;
+  },
+
+  inputSelector: function(element) {
+    if (element.checked)
+      return [element.name, element.value];
+  },
+
+  textarea: function(element) {
+    return [element.name, element.value];
+  },
+
+  select: function(element) {
+    return Form.Element.Serializers[element.type == 'select-one' ?
+      'selectOne' : 'selectMany'](element);
+  },
+
+  selectOne: function(element) {
+    var value = '', opt, index = element.selectedIndex;
+    if (index >= 0) {
+      opt = element.options[index];
+      value = opt.value;
+      if (!value && !('value' in opt))
+        value = opt.text;
+    }
+    return [element.name, value];
+  },
+
+  selectMany: function(element) {
+    var value = new Array();
+    for (var i = 0; i < element.length; i++) {
+      var opt = element.options[i];
+      if (opt.selected) {
+        var optValue = opt.value;
+        if (!optValue && !('value' in opt))
+          optValue = opt.text;
+        value.push(optValue);
+      }
+    }
+    return [element.name, value];
+  }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var $F = Form.Element.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = function() {}
+Abstract.TimedObserver.prototype = {
+  initialize: function(element, frequency, callback) {
+    this.frequency = frequency;
+    this.element   = $(element);
+    this.callback  = callback;
+
+    this.lastValue = this.getValue();
+    this.registerCallback();
+  },
+
+  registerCallback: function() {
+    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+  },
+
+  onTimerEvent: function() {
+    var value = this.getValue();
+    if (this.lastValue != value) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  }
+}
+
+Form.Element.Observer = Class.create();
+Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.Observer = Class.create();
+Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = function() {}
+Abstract.EventObserver.prototype = {
+  initialize: function(element, callback) {
+    this.element  = $(element);
+    this.callback = callback;
+
+    this.lastValue = this.getValue();
+    if (this.element.tagName.toLowerCase() == 'form')
+      this.registerFormCallbacks();
+    else
+      this.registerCallback(this.element);
+  },
+
+  onElementEvent: function() {
+    var value = this.getValue();
+    if (this.lastValue != value) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  },
+
+  registerFormCallbacks: function() {
+    var elements = Form.getElements(this.element);
+    for (var i = 0; i < elements.length; i++)
+      this.registerCallback(elements[i]);
+  },
+
+  registerCallback: function(element) {
+    if (element.type) {
+      switch (element.type.toLowerCase()) {
+        case 'checkbox':
+        case 'radio':
+          Event.observe(element, 'click', this.onElementEvent.bind(this));
+          break;
+        case 'password':
+        case 'text':
+        case 'textarea':
+        case 'select-one':
+        case 'select-multiple':
+          Event.observe(element, 'change', this.onElementEvent.bind(this));
+          break;
+      }
+    }
+  }
+}
+
+Form.Element.EventObserver = Class.create();
+Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.EventObserver = Class.create();
+Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+if (!window.Event) {
+  var Event = new Object();
+}
+
+Object.extend(Event, {
+  KEY_BACKSPACE: 8,
+  KEY_TAB:       9,
+  KEY_RETURN:   13,
+  KEY_ESC:      27,
+  KEY_LEFT:     37,
+  KEY_UP:       38,
+  KEY_RIGHT:    39,
+  KEY_DOWN:     40,
+  KEY_DELETE:   46,
+
+  element: function(event) {
+    return event.target || event.srcElement;
+  },
+
+  isLeftClick: function(event) {
+    return (((event.which) && (event.which == 1)) ||
+            ((event.button) && (event.button == 1)));
+  },
+
+  pointerX: function(event) {
+    return event.pageX || (event.clientX +
+      (document.documentElement.scrollLeft || document.body.scrollLeft));
+  },
+
+  pointerY: function(event) {
+    return event.pageY || (event.clientY +
+      (document.documentElement.scrollTop || document.body.scrollTop));
+  },
+
+  stop: function(event) {
+    if (event.preventDefault) {
+      event.preventDefault();
+      event.stopPropagation();
+    } else {
+      event.returnValue = false;
+      event.cancelBubble = true;
+    }
+  },
+
+  // find the first node with the given tagName, starting from the
+  // node the event was triggered on; traverses the DOM upwards
+  findElement: function(event, tagName) {
+    var element = Event.element(event);
+    while (element.parentNode && (!element.tagName ||
+        (element.tagName.toUpperCase() != tagName.toUpperCase())))
+      element = element.parentNode;
+    return element;
+  },
+
+  observers: false,
+
+  _observeAndCache: function(element, name, observer, useCapture) {
+    if (!this.observers) this.observers = [];
+    if (element.addEventListener) {
+      this.observers.push([element, name, observer, useCapture]);
+      element.addEventListener(name, observer, useCapture);
+    } else if (element.attachEvent) {
+      this.observers.push([element, name, observer, useCapture]);
+      element.attachEvent('on' + name, observer);
+    }
+  },
+
+  unloadCache: function() {
+    if (!Event.observers) return;
+    for (var i = 0; i < Event.observers.length; i++) {
+      Event.stopObserving.apply(this, Event.observers[i]);
+      Event.observers[i][0] = null;
+    }
+    Event.observers = false;
+  },
+
+  observe: function(element, name, observer, useCapture) {
+    var element = $(element);
+    useCapture = useCapture || false;
+
+    if (name == 'keypress' &&
+        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+        || element.attachEvent))
+      name = 'keydown';
+
+    this._observeAndCache(element, name, observer, useCapture);
+  },
+
+  stopObserving: function(element, name, observer, useCapture) {
+    var element = $(element);
+    useCapture = useCapture || false;
+
+    if (name == 'keypress' &&
+        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+        || element.detachEvent))
+      name = 'keydown';
+
+    if (element.removeEventListener) {
+      element.removeEventListener(name, observer, useCapture);
+    } else if (element.detachEvent) {
+      element.detachEvent('on' + name, observer);
+    }
+  }
+});
+
+/* prevent memory leaks in IE */
+Event.observe(window, 'unload', Event.unloadCache, false);
+var Position = {
+  // set to true if needed, warning: firefox performance problems
+  // NOT neeeded for page scrolling, only if draggable contained in
+  // scrollable elements
+  includeScrollOffsets: false,
+
+  // must be called before calling withinIncludingScrolloffset, every time the
+  // page is scrolled
+  prepare: function() {
+    this.deltaX =  window.pageXOffset
+                || document.documentElement.scrollLeft
+                || document.body.scrollLeft
+                || 0;
+    this.deltaY =  window.pageYOffset
+                || document.documentElement.scrollTop
+                || document.body.scrollTop
+                || 0;
+  },
+
+  realOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.scrollTop  || 0;
+      valueL += element.scrollLeft || 0;
+      element = element.parentNode;
+    } while (element);
+    return [valueL, valueT];
+  },
+
+  cumulativeOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+    } while (element);
+    return [valueL, valueT];
+  },
+
+  positionedOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        p = Element.getStyle(element, 'position');
+        if (p == 'relative' || p == 'absolute') break;
+      }
+    } while (element);
+    return [valueL, valueT];
+  },
+
+  offsetParent: function(element) {
+    if (element.offsetParent) return element.offsetParent;
+    if (element == document.body) return element;
+
+    while ((element = element.parentNode) && element != document.body)
+      if (Element.getStyle(element, 'position') != 'static')
+        return element;
+
+    return document.body;
+  },
+
+  // caches x/y coordinate pair to use with overlap
+  within: function(element, x, y) {
+    if (this.includeScrollOffsets)
+      return this.withinIncludingScrolloffsets(element, x, y);
+    this.xcomp = x;
+    this.ycomp = y;
+    this.offset = this.cumulativeOffset(element);
+
+    return (y >= this.offset[1] &&
+            y <  this.offset[1] + element.offsetHeight &&
+            x >= this.offset[0] &&
+            x <  this.offset[0] + element.offsetWidth);
+  },
+
+  withinIncludingScrolloffsets: function(element, x, y) {
+    var offsetcache = this.realOffset(element);
+
+    this.xcomp = x + offsetcache[0] - this.deltaX;
+    this.ycomp = y + offsetcache[1] - this.deltaY;
+    this.offset = this.cumulativeOffset(element);
+
+    return (this.ycomp >= this.offset[1] &&
+            this.ycomp <  this.offset[1] + element.offsetHeight &&
+            this.xcomp >= this.offset[0] &&
+            this.xcomp <  this.offset[0] + element.offsetWidth);
+  },
+
+  // within must be called directly before
+  overlap: function(mode, element) {
+    if (!mode) return 0;
+    if (mode == 'vertical')
+      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+        element.offsetHeight;
+    if (mode == 'horizontal')
+      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+        element.offsetWidth;
+  },
+
+  clone: function(source, target) {
+    source = $(source);
+    target = $(target);
+    target.style.position = 'absolute';
+    var offsets = this.cumulativeOffset(source);
+    target.style.top    = offsets[1] + 'px';
+    target.style.left   = offsets[0] + 'px';
+    target.style.width  = source.offsetWidth + 'px';
+    target.style.height = source.offsetHeight + 'px';
+  },
+
+  page: function(forElement) {
+    var valueT = 0, valueL = 0;
+
+    var element = forElement;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+
+      // Safari fix
+      if (element.offsetParent==document.body)
+        if (Element.getStyle(element,'position')=='absolute') break;
+
+    } while (element = element.offsetParent);
+
+    element = forElement;
+    do {
+      valueT -= element.scrollTop  || 0;
+      valueL -= element.scrollLeft || 0;
+    } while (element = element.parentNode);
+
+    return [valueL, valueT];
+  },
+
+  clone: function(source, target) {
+    var options = Object.extend({
+      setLeft:    true,
+      setTop:     true,
+      setWidth:   true,
+      setHeight:  true,
+      offsetTop:  0,
+      offsetLeft: 0
+    }, arguments[2] || {})
+
+    // find page position of source
+    source = $(source);
+    var p = Position.page(source);
+
+    // find coordinate system to use
+    target = $(target);
+    var delta = [0, 0];
+    var parent = null;
+    // delta [0,0] will do fine with position: fixed elements,
+    // position:absolute needs offsetParent deltas
+    if (Element.getStyle(target,'position') == 'absolute') {
+      parent = Position.offsetParent(target);
+      delta = Position.page(parent);
+    }
+
+    // correct by body offsets (fixes Safari)
+    if (parent == document.body) {
+      delta[0] -= document.body.offsetLeft;
+      delta[1] -= document.body.offsetTop;
+    }
+
+    // set position
+    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
+    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
+    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
+    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
+  },
+
+  absolutize: function(element) {
+    element = $(element);
+    if (element.style.position == 'absolute') return;
+    Position.prepare();
+
+    var offsets = Position.positionedOffset(element);
+    var top     = offsets[1];
+    var left    = offsets[0];
+    var width   = element.clientWidth;
+    var height  = element.clientHeight;
+
+    element._originalLeft   = left - parseFloat(element.style.left  || 0);
+    element._originalTop    = top  - parseFloat(element.style.top || 0);
+    element._originalWidth  = element.style.width;
+    element._originalHeight = element.style.height;
+
+    element.style.position = 'absolute';
+    element.style.top    = top + 'px';;
+    element.style.left   = left + 'px';;
+    element.style.width  = width + 'px';;
+    element.style.height = height + 'px';;
+  },
+
+  relativize: function(element) {
+    element = $(element);
+    if (element.style.position == 'relative') return;
+    Position.prepare();
+
+    element.style.position = 'relative';
+    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
+    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+    element.style.top    = top + 'px';
+    element.style.left   = left + 'px';
+    element.style.height = element._originalHeight;
+    element.style.width  = element._originalWidth;
+  }
+}
+
+// Safari returns margins on body which is incorrect if the child is absolutely
+// positioned.  For performance reasons, redefine Position.cumulativeOffset for
+// KHTML/WebKit only.
+if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
+  Position.cumulativeOffset = function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      if (element.offsetParent == document.body)
+        if (Element.getStyle(element, 'position') == 'absolute') break;
+
+      element = element.offsetParent;
+    } while (element);
+
+    return [valueL, valueT];
+  }
+}
Index: /tags/2.00/root/static/vote.css
===================================================================
--- /tags/2.00/root/static/vote.css	(revision 478)
+++ /tags/2.00/root/static/vote.css	(revision 478)
@@ -0,0 +1,192 @@
+img {
+    border: 0;
+    vertical-align: middle;
+}
+
+
+tr {
+    vertical-align: top;
+    padding: 4px;
+}
+
+h1 {
+	border-bottom:1px solid #E3AB2C;
+	color:#000000;
+	margin-left:50px;
+	text-align:left;
+	width:500px;
+	font-size:18px;
+}
+
+a {
+	color:#3344FF;
+	font-weight:bold;
+}
+
+ul {
+    margin: 0px;
+}
+
+/* The CLASS used in epoll */
+
+.alert {
+    color: red;
+}
+
+.warning {
+    background-color: red;
+}
+
+div.page_box {
+    border-style: outset;
+    border-width: 5px;
+    margin-left: 20%;
+    margin-right: 20%;
+    margin-top: 15px;
+    margin-bottom: 15px;
+    padding: 5px;
+}
+
+div.login_box {
+    border-style: outset;
+    border-width: 5px;
+    margin-left: 20%;
+    margin-right: 20%;
+    margin-top: 15px;
+    margin-bottom: 15px;
+    padding: 5px;
+    /* background-color: red; */
+}
+
+div.box {
+    border-style: outset;
+    border-width: 5px;
+    padding: 1em;
+}
+
+.majabs {
+    background-color: #FF9933;
+}
+
+.selected {
+    background-color: #FF9999;
+}
+
+.notselected {
+}
+
+/* The ID used in epoll */
+
+#header {
+    background-color:#CCFF99;
+    padding-bottom: 1em;
+    margin-bottom: 1em;
+}
+
+#title {
+    font-size: 1.5em;
+}
+
+#menu {
+    font-size: 0.9em;
+}
+
+#footer {
+    bottom: 0em;
+    margin-top: 2em;
+    width: 100%;
+    float: left;
+    position: relative;
+}
+
+#now {
+    font-size: 0.8em;
+    float: left;
+    text-align: left;
+    position: absolute;
+    bottom: 0em;
+}
+
+#catalyst_logo {
+    bottom: 1em;
+    right: 1em;
+    text-align: right;
+    float: right;
+}
+
+#poll_summary {
+    border-style: outset;
+    border-width: 5px;
+    padding: 1em;
+}
+
+#poll_label {}
+
+#voting_list {}
+
+#poll_running {
+    border-style: outset;
+    border-width: 5px;
+    padding: 1em;
+}
+
+#vote_done {}
+
+.ballot {
+    border-style: inset;
+    border-width: 10px;
+    padding: 10px;
+    background-color: Silver;
+}
+
+#ballot {
+    margin-left: 30%;
+    margin-right: 30%;
+    margin-top: 20px;
+    margin-bottom: 20px;
+}
+
+#admin_login {}
+
+#global_poll {
+    margin-left:30px;
+}
+
+#open_poll {
+    color:#E3AB2C;
+}
+
+#comming_poll {
+    color:#E3AB2C;
+}
+
+#closed_poll {
+    color:#E3AB2C;
+}
+
+#ballot_list {}
+
+#results {}
+
+#map_ballot {}
+
+#ballot_to_valid {}
+
+#poll_request {
+	margin-left: auto;
+	margin-right: auto;
+	width: 600px; 
+	text-align: left;
+}
+
+#poll_confirm {}
+
+div.reminder {
+    font-size: 75%;
+    border: outset;
+    padding: 0.2em;
+}
+
+input.reminder {
+    font-size: 75%
+}
Index: /tags/2.00/root/templates/admin/ballot.tt
===================================================================
--- /tags/2.00/root/templates/admin/ballot.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/ballot.tt	(revision 478)
@@ -0,0 +1,35 @@
+<!-- $Id$ -->
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/ballot_settings.tt' %]
+
+<hr>
+
+[% IF ! poll.choices_keys.size %]
+<p class="alert">[% l('No choices were made') %]</p>
+[% ELSE %]
+[% FOREACH choicek = poll.choices_keys %]
+[% choice = poll.choice(choicek) %]
+<form action="[% c.uri_for(poll.uid, 'ballot') %]" method="POST">
+[% loop.count %] - [% choice.info.label | html %]
+<input type="hidden" name="delch" value="[% choicek %]">
+<input type="submit" name="del" value="[% l('Delete') %]">
+</form>
+<br>
+[% END %]
+[% END %]
+<form action="[% c.uri_for(poll.uid, 'ballot') %]" method="POST">
+[% l('Add a choice') %]<br>
+<input type="text" name="addch">
+<input type="submit" value="[% l('Add') %]">
+</form>
+</div>
+
+<div style="float: right; width: 30%" class="ballot">
+<p>[% l('Preview ballot') %]</p>
+[% INCLUDE 'includes/ballot_form.tt' b_form_url = c.uri_for(poll.uid, 'ballot') %]
+</div>
+
+<div style="clear: both"></div>
Index: /tags/2.00/root/templates/admin/date.tt
===================================================================
--- /tags/2.00/root/templates/admin/date.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/date.tt	(revision 478)
@@ -0,0 +1,149 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+<script type="text/javascript" LANGUAGE="JavaScript">
+    var cal1, cal2, newStyleSheet;
+
+    var dateFrom = null;
+    var dateTo = null;
+    dhtmlxCalendarLangModules = new Array();
+
+    dhtmlxCalendarLangModules['locale'] = {
+          langname: 'fr',
+          dateformat: '%d/%m/%Y',
+          monthesFNames: [
+            "[% l('January') %]",
+            "[% l('February') %]",
+            "[% l('March') %]",
+            "[% l('April') %]",
+            "[% l('May') %]",
+            "[% l('June') %]",
+            "[% l('July') %]",
+            "[% l('August') %]",
+            "[% l('September') %]",
+            "[% l('October') %]",
+            "[% l('November') %]",
+            "[% l('December') %]"
+          ],
+          monthesSNames: [
+            "[% l('Jan') %]",
+            "[% l('Feb') %]",
+            "[% l('Mar') %]",
+            "[% l('Apr') %]",
+            "[% l('May') %]",
+            "[% l('Jun') %]",
+            "[% l('Jul') %]",
+            "[% l('Aug') %]",
+            "[% l('Sep') %]",
+            "[% l('Oct') %]",
+            "[% l('Nov') %]",
+            "[% l('Dec') %]"],
+          daysFNames: [
+            "[% l('Sunday') %]",
+            "[% l('Monday') %]",
+            "[% l('Tuesday') %]",
+            "[% l('Wednesday') %]",
+            "[% l('Thursday') %]",
+            "[% l('Friday') %]",
+            "[% l('Saturday') %]"],
+          daysSNames: [[%l('"S", "M", "T", "W", "T", "F", "S"') %]],
+          weekend: [0, 6],
+          weekstart: 1,
+          msgClose: "[% l('Close') %]",
+          msgMinimize: "[% l('Minimize') %]",
+          msgToday: "[% l('Today') %]",
+    }
+    
+    window.onload = function () {
+        cal1 = new dhtmlxCalendarObject('calendar1');
+        cal1.setYearsRange(2000, 2500);
+        cal1.setOnClickHandler(selectDate1);
+        cal1.setDateFormat('%d/%m/%Y');
+        cal1.loadUserLanguage('locale');
+        if (document.getElementById('calInput1').value != '') {
+            cal1.setDate(document.getElementById('calInput1').value);
+        }
+        cal2 = new dhtmlxCalendarObject('calendar2');
+        cal2.setOnClickHandler(selectDate2);
+        cal2.setDateFormat('%d/%m/%Y');
+        cal2.loadUserLanguage('locale');
+        if (document.getElementById('calInput2').value != '') {
+             cal2.setDate(document.getElementById('calInput2').value);
+        }
+    }
+    
+    function selectDate1(date) {
+        document.getElementById('calInput1').value = cal1.getFormatedDate(null,date);
+        document.getElementById('calendar1').style.display = 'none';
+        dateFrom = new Date(date);
+        return true;
+    }
+    function selectDate2(date) {
+        document.getElementById('calInput2').value = cal2.getFormatedDate(null,date);
+        document.getElementById('calendar2').style.display = 'none';
+        dateTo = new Date(date);
+        return true;
+    }
+
+    function showCalendar(k) {
+        if (document.getElementById('calendar'+k).style.display == 'none') {
+            document.getElementById('calendar'+k).style.display = 'block';
+        } else {
+            document.getElementById('calendar'+k).style.display = 'none';
+        }
+    }
+
+    function updatecal() {
+        var newval1 = document.getElementById('calInput1').value;
+        var newval2 = document.getElementById('calInput2').value;
+        cal1.setDate(newval1);
+        cal2.setDate(newval2);
+    }
+    
+</script>
+
+[% IF poll.status == 'BEFORE' %]
+<div class="box" style="float: left; width: 55%;">
+
+<form action="[% c.uri_for(poll.uid, 'date') %]" method="POST" id="dateform">
+
+<i>[% l('Date format is') _ ' ' %] [% l('DD/MM/YYYY HH:MM:SS') %]</i><br>
+[% IF dateerror %]<p class="alert">[% dateerror | html %]</p>[% END %]
+
+[% l('Poll start:') %]<br>
+[% l('date:') %]
+
+<input type="text" id="calInput1" name="dstart" value="[% c.req.param('dstart')
+|| poll.info('dstart') | html %]" onkeyup="updatecal()">
+<img alt="[% l('calendar') %]" style="cursor:pointer;" onClick="showCalendar(1)" src="[% c.uri_for('/static/dhtmlxCalendar/imgs', 'calendar.gif') %]" align="absmiddle">
+<div id="calendar1" style="position:absolute; left:199px; top:0px; display:none"></div>
+
+[% l('time:') %] <input type="text" size=9 name="hstart" value="[% c.req.param('hstart') || poll.info('hstart') || '8:00' | html %]">
+<br>
+[% l('Poll end:') %]<br>
+[% l('date:') %]
+
+<input type="text" id="calInput2" name="dend" value="[% c.req.param('dend') ||
+poll.info('dend') | html %]" onkeyup="updatecal()">
+<img alt="[% l('calendar') %]" style="cursor:pointer;" onClick="showCalendar(2)" src="[% c.uri_for('/static/dhtmlxCalendar/imgs', 'calendar.gif') %]" align="absmiddle">
+<div id="calendar2" style="position:absolute; left:199px; top:0px; display:none"></div>
+
+[% l('time:') %] <input type="text" size=9 name="hend" value="[% c.req.param('hend') || poll.info('hend') || '18:00' | html %]">
+<br>
+
+<hr>
+[% c.prototype.observe_form('dateform',
+    url => c.uri_for('/ajax', 'datecheck'),
+    update => 'datesub',
+    frequency => 2,
+) %]
+<div id="datesub"></div>
+</form>
+</div>
+
+[% ELSE %]
+[% END %]
+
+<div style="clear: both"></div>
Index: /tags/2.00/root/templates/admin/default.tt
===================================================================
--- /tags/2.00/root/templates/admin/default.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/default.tt	(revision 478)
@@ -0,0 +1,18 @@
+<!-- $Id$ -->
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% IF poll.status == 'BEFORE' %]
+[% INCLUDE 'admin/includes/poll_settings.tt' %]
+[% END %]
+
+[% IF poll.status == 'AFTER' %]
+[% IF poll.list_ballot_need_dec.size %]
+[% INCLUDE admin/includes/ballot_decrypt.tt %]
+[% ELSE %]
+[% INCLUDE admin/includes/ballot_validation.tt %]
+[% END %]
+[% END %]
+
+<div style="clear: both"></div>
Index: /tags/2.00/root/templates/admin/delete.tt
===================================================================
--- /tags/2.00/root/templates/admin/delete.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/delete.tt	(revision 478)
@@ -0,0 +1,31 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+[% IF poll.status == 'AFTER' %]
+<div style="width:25%; float: left" class="box">
+<p>[% l('Delete ballots') %]</p>
+
+<p>[% l('This will delete sensitive data from database and results will be finally
+computed. Note that voters won\'t be able to check their ballots anymore')
+%]</p>
+
+<form action="[% c.uri_for(poll.uid, 'delete') %]" method="post">
+<input type="submit" value="[% l('Delete') %]" name="delete_ballot">
+</form>
+</div>
+[% END %]
+
+[% IF poll.status != 'RUNNING' %]
+<div style="width:25%; float: left" class="box">
+<p>[% l('Delete this poll') %]</p>
+
+<p>[% l('This will completely delete all data about this poll (configuration,
+list of voters, ballots).') %]</p>
+
+<form action="[% c.uri_for(poll.uid, 'delete') %]" method="POST">
+<input type="submit" value="[% l('Delete') %]" name="delete_poll">
+</form>
+</div>
+[% END %]
Index: /tags/2.00/root/templates/admin/delete_ballot_confirm.tt
===================================================================
--- /tags/2.00/root/templates/admin/delete_ballot_confirm.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/delete_ballot_confirm.tt	(revision 478)
@@ -0,0 +1,10 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+<p>[% l('Please, confirm ballot deletion') %]</p>
+
+<form action="[% c.uri_for(poll.uid, 'delete') %]" method="post">
+<input type="submit" value="[% l('delete ballot') %]" name="delete_ballot_confirm">
+</form>
Index: /tags/2.00/root/templates/admin/delete_poll_confirm.tt
===================================================================
--- /tags/2.00/root/templates/admin/delete_poll_confirm.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/delete_poll_confirm.tt	(revision 478)
@@ -0,0 +1,12 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+<p>[% l('Please, confirm the deletion of poll [_1]', poll.info('label')) | html %]</p>
+
+<p>[% l('This action cannot be reverted') %]</p>
+
+<form action="[% c.uri_for(poll.uid, 'delete') %]" method="POST">
+<input type="submit" value="[% l('Yes, delete this poll') %]" name="delete_poll_confirm">
+</form>
Index: /tags/2.00/root/templates/admin/denied.tt
===================================================================
--- /tags/2.00/root/templates/admin/denied.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/denied.tt	(revision 478)
@@ -0,0 +1,5 @@
+<!-- $Id$ -->
+
+<div class="alert">
+<p>[% l('Cannot modify a running or a finished poll') %]</p>
+</div>
Index: /tags/2.00/root/templates/admin/includes/ballot_decrypt.tt
===================================================================
--- /tags/2.00/root/templates/admin/includes/ballot_decrypt.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/includes/ballot_decrypt.tt	(revision 478)
@@ -0,0 +1,13 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+<div class="box">
+<p>[% l('[_1] ballots to decrypt in this poll', poll.list_ballot_need_dec.size) %]</p>
+<form action="[% c.uri_for(poll.uid) %]" method="POST">
+[% IF NOT poll.info.private_key %]
+<p>[% l('Enter poll key here:') %]</p>
+<input type="password" name="passphrase"><br>
+[% END %]
+<input type="submit" name="decryptballot" value="[% l('Decrypt ballots') %]">
+</form>
+</div>
Index: /tags/2.00/root/templates/admin/includes/ballot_validation.tt
===================================================================
--- /tags/2.00/root/templates/admin/includes/ballot_validation.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/includes/ballot_validation.tt	(revision 478)
@@ -0,0 +1,13 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% IF poll.status == 'AFTER' %]
+
+[% IF poll.list_ballot_needvalid %]
+<p class="alert"><a href="[% c.uri_for(poll.uid, 'validate') %]">
+[% l('Some ballots need to be validated') %]</a></p>
+[% ELSE %]
+
+[% END %]
+
+[% END %]
Index: /tags/2.00/root/templates/admin/includes/poll_extra_settings.tt
===================================================================
--- /tags/2.00/root/templates/admin/includes/poll_extra_settings.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/includes/poll_extra_settings.tt	(revision 478)
@@ -0,0 +1,20 @@
+<!-- $Id$ -->
+
+<ul>
+  <li>[% l('Don\'t send receipt by email') %]
+    <span style="float:right"><input type="checkbox" name="no_mail_confirm_vote"
+[% "checked" IF pollsettings.no_mail_confirm_vote %]></span>
+[% IF NOT pollsettings.no_mail_confirm_vote %]
+  <ul>
+    <li style="clear: both">[% l('Email includes ballot id') %]
+      <span style="float:right"><input type="checkbox" name="no_mail_ballot_id"
+[% "checked" IF pollsettings.no_mail_ballot_id %]></span>
+    </li>
+  </ul>
+[% END %]
+  </li>
+  <li style="clear: both">[% l('Don\'t show ballot id after poll') %]
+    <span style="float:right"><input type="checkbox" name="no_ballot_id_voting"
+[% "checked" IF pollsettings.no_ballot_id_voting %]></span>
+  </li>
+</ul>
Index: /tags/2.00/root/templates/admin/includes/poll_settings.tt
===================================================================
--- /tags/2.00/root/templates/admin/includes/poll_settings.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/includes/poll_settings.tt	(revision 478)
@@ -0,0 +1,53 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% IF poll.status == 'BEFORE' %]
+<div class="box" style="float: left; width: 55%;">
+<form action="[% c.uri_for(poll.uid) %]" method="POST" id="poll_f_settings">
+
+[% l('Name:') %]<br><input type="text" name="label" value="[% c.req.param('label') || poll.info('label') | html %]">
+<br>
+[% l('Description:') %]<br>
+<textarea name="description" cols="60" rows="4">[% c.req.param('description') || poll.info('description') | html %]</textarea>
+<br>
+[% l('Rules:') %]<br>
+<textarea name="procedure" cols="60" rows="4">[% c.req.param('procedure') || poll.info('procedure') | html %]</textarea>
+<br>
+<hr>
+
+<div id="poll_extra_settings">
+[% INCLUDE 'admin/includes/poll_extra_settings.tt' 
+    pollsettings = poll.info
+%]
+</div>
+
+<hr>
+<input type="submit" name="pollparam" value="[% l('Save') %]">
+</form>
+</div>
+
+[% c.prototype.observe_form('poll_f_settings',
+    url => c.uri_for(poll.uid, 'ajaxsettings'),
+    update => 'poll_extra_settings',
+    frequency => 2,
+) %]
+
+
+<!-- Crypt settings -->
+<div class="box" style="float:right; width: 35%">
+[% IF poll.is_crypted %]
+<p><a href="[% c.uri_for(poll.uid, 'privatekey') %]">
+[% l('Download private key') %]</a></p>
+<hr>
+<form action="[% c.uri_for(poll.uid) %]" method="POST">
+<input type="submit" name="notcrypted" value="[% l('Don\'t encrypt ballot') %]">
+</form>
+[% ELSE %]
+<form action="[% c.uri_for(poll.uid) %]" method="POST">
+[% l('You can choose a passphrase to protect the key:') %]<br>
+<input type="password" name="passphrase"><br>
+<input type="submit" name="encrypted" value="[% l('Encrypt poll') %]">
+</form>
+[% END %]
+</div>
+[% END %]
Index: /tags/2.00/root/templates/admin/index.tt
===================================================================
--- /tags/2.00/root/templates/admin/index.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/index.tt	(revision 478)
@@ -0,0 +1,7 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% FOREACH voteid = c.model('Vote').list_coming_vote %]
+<a href="[% c.uri_for('/admin', poll.uid) %]">[% poll.info('label') | html %]</a>
+<br>
+[% END %]
Index: /tags/2.00/root/templates/admin/login.tt
===================================================================
--- /tags/2.00/root/templates/admin/login.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/login.tt	(revision 478)
@@ -0,0 +1,10 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+<div id="admin_login" class="login_box">
+<form action="[% c.uri_for('/admin', poll.uid) %]" method="POST">
+<p>[% l('Access to administration of poll:') _ ' ' %]<b><i>[% poll.info('label') | html %]</i></b></p>
+<p>[% l('Enter poll password: ') %]<input type="password" name="[% 'vpass' _ voteid %]">
+<input type="submit"></p>
+</form>
+</div>
Index: /tags/2.00/root/templates/admin/validate.tt
===================================================================
--- /tags/2.00/root/templates/admin/validate.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/validate.tt	(revision 478)
@@ -0,0 +1,111 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+[% IF poll.status == 'AFTER' %]
+[% IF poll.results %]
+[% ELSE %]
+<div style="float:left; width: 40%" class="box">
+<p>[% l('list ballots:') %]</p>
+<form action="[% c.uri_form(poll.uid, 'validate') %]" method="POST">
+<select name="ballotvalue">
+<option value="s:needvalid"[% " selected" IF c.req.param('ballotvalue') ==
+'s:needvalid' %]>[% l('need validation') %]</option>
+<option value="s:invalid"[% " selected" IF c.req.param('ballotvalue') ==
+'s:invalid' %]>[% l('invalid') %]</option>
+<option value="s:valid"[% " selected" IF c.req.param('ballotvalue') ==
+'s:valid' %]>[% l('valid') %]</option>
+[% FOREACH value = poll.ballot_values %]
+[% IF loop.first %]
+<optgroup label="[% l('ballot containing:') %]">
+[% END %]
+<option value="v:[% value | html %]"[% " selected" IF c.req.param('ballotvalue')
+== 'v:' _ value %]>[% value | html %]</option>
+[% IF loop.last %]
+</optgroup>
+[% END %]
+[% END %]
+</select>
+<input type="submit">
+</form>
+
+<div id="ballot_by_value">
+<p>[% ballotfilter.size _ ' ' _ l('ballots found') | html %].</p>
+[% FOREACH bid = ballotfilter %]
+    [% IF loop.first %]
+    <div id="ballot_to_valid">
+    <form action="[% c.uri_for(poll.uid, 'validate') %]" method="POST">
+    <input type="hidden" name="ballotvalue" value="[% c.req.param('ballotvalue') %]">
+    <table border="1">
+    [% END %]
+<tr>
+<td><pre>[% bid %]</pre>
+[% FOREACH item = poll.ballot(bid).items %]
+[% "<ol>" IF loop.first %]
+<li>[% item.v %]
+[% ' *' IF NOT item.fromlist %]
+[% IF item.corrected %] (=&gt; [% item.corrected %])[% END %]</li>
+[% "</ol>" IF loop.last %]
+[% END %]
+</td>
+<td>
+[% invalid = poll.ballot(bid).info.invalid %]
+<input type="hidden" name="bsubvalid" value="[% bid | html %]">
+<input type="radio" name="[% bid %]" value="valid"[% " checked" IF invalid ==
+'0' %]>[% l('is valid') %]<br>
+<input type="radio" name="[% bid %]" value="invalid"[% " checked" IF invalid ==
+'1' %]>[% l('isn\'t valid') %]<br>
+</td>
+</tr>
+    [% IF loop.last %]
+    </table>
+    <input type="submit">
+    </form>
+    </div>
+    [% END %]
+[% END %]
+</div>
+</div>
+
+[% FOREACH untrusted = poll.ballot_untrusted_values('noinvalid') %]
+[% IF loop.first %]
+<div style="float:left; width: 35%;" class="box">
+<div id="map_ballot">
+<p>[% l('map ballot value') %]</p>
+<table border="1">
+<tr><th>[% l('input value') %]</th><th>[% l('must be seen as') %]</th></tr>
+[% END %]
+<tr>
+[% bl = [ poll.ballot_by_value(untrusted) ] %]
+<td>[% untrusted | html %]</td>
+<td>
+    <form action="[% c.uri_for(poll.uid, 'validate') %]" method="POST">
+    <input type="hidden" name="mapfrom" value="[% untrusted | html %]">
+    <select name="mapto">
+    <option></option>
+    [% FOREACH v = poll.ballot_values('noinvalid') %]
+        [% NEXT IF v == untrusted %]
+        <option[% " selected" IF poll.value_map_to(untrusted) == v %]>[% v | html %]</options>
+    [% END %]
+    </select>
+    <input type="submit">
+    </form>
+</td>
+</tr>
+[% IF loop.last %]
+</table>
+</div>
+</div>
+[% END %]
+[% END %]
+
+<div id="publish" style="float:left;" class="box">
+<form action="[% c.uri_for(poll.uid, 'validate') %]" method="POST">
+<input type=submit name="publish" value="[% l('publish results') %]">
+</form>
+</div>
+
+[% END %]
+[% END %]
+
Index: /tags/2.00/root/templates/admin/voters.tt
===================================================================
--- /tags/2.00/root/templates/admin/voters.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/voters.tt	(revision 478)
@@ -0,0 +1,86 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+[% IF poll.status() != 'AFTER' %]
+<div style="float: left; width: 30%;" class="box">
+<p>[% l('Add a voter') %]</p>
+<form action="[% c.uri_for(poll.uid, 'voters') %]" method="POST">
+<table>
+<tr>
+<td align="left">[% l('Name:') %]&nbsp;</td>
+<td><input type="text" name="id"></td>
+</tr><tr>
+<td align="left">[% l('Email address:') %]&nbsp;</td>
+<td><input type="text" name="mail"></td>
+</tr>
+</table>
+<input type="submit" value="[% l('Add') %]">
+</form>
+
+<hr>
+<p>
+    <a href="[% c.uri_for(poll.uid, 'voters', 'import') %]">
+        [% l('Import the list of voters...') %]
+    </a>
+</p>
+
+
+<hr>
+<p>[% l('Send password to voters') %]</p>
+[% IF poll.info.hend %]
+<form action="[% c.uri_for(poll.uid, 'voters') %]" method="POST">
+[% l('Email language') %]: [% INCLUDE 'includes/locale_select.tt' varname='mail_locale' %]<br>
+<input type="submit" name="mailpasswd" value="[% l('Send password') %]">
+</form>
+[% ELSE %]
+[% l('Poll date must be set before announcing poll to voters') %]
+[% END %]
+</div>
+
+[% END %]
+
+<div class="box" style="float: right; width: 60%;">
+
+[% IF NOT poll.voting_count %]
+<p class="alert">[% l('No subscribed voters') %]</p>
+[% ELSE %]
+
+[% FOREACH votingkey = poll.voting_keys %]
+[% voting = poll.voting(votingkey) %]
+
+[% IF loop.first %]
+<table border="1">
+<tr><th>[% l('Email') %]</th>
+    <th>[% l('Status') %]</th> 
+    <th>[% l('Delete') %]</th>
+</tr>
+[% END %]
+
+<tr>
+
+<td>[% voting.label | html %] [% voting.info.mail | html %]</td>
+<td>[% IF voting.info.passwd %]<i>[% l('password sent') %]</i>[% END %]</td>
+
+[% IF NOT voting.info.date %]
+<td>
+[% IF poll.status != 'AFTER' %]
+<form action="[% c.uri_for(poll.uid, 'voters') %]" method="POST">
+<input type="hidden" name="delvoting" value="[% voting.votingkey %]">
+<input type="submit" name="delete" value="[% l('delete') %]">
+</form>
+[% END %]
+</td>
+[% ELSE %]
+<td>[% voting.info.date %]</td>
+[% END %]
+
+</tr>
+[% IF loop.last %]</table>[% END %]
+
+[% END %][% # FOREACH %]
+
+[% END %][% # IF NOT voting %]
+</div>
+<div style="clear: both"></div>
Index: /tags/2.00/root/templates/admin/votersimport.tt
===================================================================
--- /tags/2.00/root/templates/admin/votersimport.tt	(revision 478)
+++ /tags/2.00/root/templates/admin/votersimport.tt	(revision 478)
@@ -0,0 +1,60 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% INCLUDE 'includes/admin_menu.tt' %]
+
+[% IF poll.status() != 'AFTER' %]
+<div style="float: left; width: 30%;" class="box">
+<form action="[% c.uri_for(poll.uid, 'voters', 'import') %]" method="POST">
+<select name="importtype">
+  <option label="[% l('Dummy') | html %]" value="dummy" [% " selected" IF c.req.param('importtype') == 'dummy' %]">
+        [% l('Dummy') | html %]
+  </option>
+  <option label="[% l('CSV file') | html %]" value="csv" [% " selected" IF c.req.param('importtype') == 'csv' %]">
+        [% l('CSV file') | html %]
+  </option>
+  <option label="[% l('LDAP') | html %]" value="ldap" [% " selected" IF c.req.param('importtype') == 'ldap' %]">
+        [% l('LDAP') | html %]
+  </option>
+</select>
+<input type="submit" value="[% l('select') %]">
+</form>
+
+<hr>
+
+[% IF c.req.param('importtype') %]
+<form action="[% c.uri_for(poll.uid, 'voters', 'import') %]" ENCTYPE="multipart/form-data" method="POST">
+<input type="hidden" value="[% c.req.param('importtype') | html %]" name="importtype"><br>
+
+[% IF importtt %]
+[% INCLUDE $importtt %]
+[% END %]
+
+<p><input type="submit" value="[% l('import...') %]"></p>
+</form>
+[% END %][% # if importtype %]
+</div>
+
+[% END %]
+
+<div class="box" style="float: right; width: 60%;">
+[% FOREACH voter = voters %]
+[% IF loop.first %]
+<div class="box">
+<form action="[% c.uri_for(poll.uid, 'voters', 'import') %]" method="POST">
+<input type="hidden" value="[% c.req.param('importtype') | html %]" name="importtype">
+[% IF import_handle.can_authenticate %]
+[% l('Use external authentication') %]<input type="checkbox" name="ext_auth"><br>
+[% l('Enter a hint for the password here') %]<br>
+<textarea rows="3" cols="50" name="desc"></textarea><br>
+[% END %]
+<input type="submit" name="add_import" value="[% l('Import this list') %]"><br>
+</form>
+</div>
+[% END %]
+<p>[% voter.0 | html %]
+[% voter.1 | html %]
+[% voter.2 | html %]</p>
+[% END %]
+</div>
+<div style="clear: both"></div>
Index: /tags/2.00/root/templates/ballot/closed.tt
===================================================================
--- /tags/2.00/root/templates/ballot/closed.tt	(revision 478)
+++ /tags/2.00/root/templates/ballot/closed.tt	(revision 478)
@@ -0,0 +1,13 @@
+<!-- $Id$ -->
+[% INCLUDE 'includes/poll.tt' %]
+
+[% poll = c.model('Vote').poll(voteid) %]
+
+<div id="ballot">
+[% IF poll.status == 'BEFORE' %]
+[% l('This poll is not yet open') %].
+[% ELSIF poll.status == 'AFTER' %]
+[% l('This poll is over, results are now available') %]
+<a href="[% c.uri_for('/vote', poll.uid) %]">[% l('here') %]</a>.
+[% END %]
+</div>
Index: /tags/2.00/root/templates/ballot/default.tt
===================================================================
--- /tags/2.00/root/templates/ballot/default.tt	(revision 478)
+++ /tags/2.00/root/templates/ballot/default.tt	(revision 478)
@@ -0,0 +1,57 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% BLOCK infoip %]
+<p>[% l('You are [_1], your IP address ([_2]) will be also recorded
+(independantly from the ballot)', [ c.session.mail, c.req.address ]) | html %]
+</p>
+[% END %]
+
+<div id="ballot" class="ballot">
+<form action="[% c.uri_for(poll.uid) %]" method="POST">
+<p><b>Vote: [% poll.info('label') | html %]</b></p>
+[% IF c.req.param('ballot') %]
+<p>[% l('Confirm your vote') %]</p>
+[% ELSE %]
+[% IF vote_error %]<p class="alert">[% l('Error:') _ ' ' %][% vote_error %]</p>[% END %]
+<p>[% poll.info('description') | html | html_line_break %]</p>
+<p>[% l('[_1] possibles choices', poll.info('choice_count')) %] </p>
+[% END %]
+<hr>
+[% IF c.req.param('ballot') %]
+
+[% FOREACH ch = c.req.param('sbal') %]
+[% choices.$ch | html %]
+<input type="hidden" name="sbal" value="[% ch %]">
+<br>
+[% END %]
+[% FOREACH ch = c.req.param('fsbal') %]
+[% ch | html %]<br>
+<input type="hidden" name="fsbal" value="[% ch %]">
+[% END %]
+[% FOREACH ch = c.req.param('esbal') %]
+[% ch | html %]<br>
+<input type="hidden" name="esbal" value="[% ch %]">
+[% END %]
+[% IF ! c.req.param('fsbal').size && ! c.req.param('sbal').size && ! c.req.param('esbal').size %]
+<i>Vote blanc</i><br>
+[% END %]
+
+<hr>
+
+<p class="warning">[% l('Your vote will be final after validation') %]</p>
+<p><input type="submit" name="confirm" value="[% l('Validate') %]">
+<input type="submit" name="Modify" value="[% l('Modify my vote') %]"></p>
+</form>
+
+[% INCLUDE infoip %]
+
+[% ELSE %]
+
+[% INCLUDE 'includes/ballot_form.tt' b_form_url = c.uri_for(poll.uid) %]
+
+[% INCLUDE infoip %]
+
+<p>[% l('Your vote will be registered only after validation') %]</p>
+[% END %]
+</div>
Index: /tags/2.00/root/templates/ballot/done.tt
===================================================================
--- /tags/2.00/root/templates/ballot/done.tt	(revision 478)
+++ /tags/2.00/root/templates/ballot/done.tt	(revision 478)
@@ -0,0 +1,29 @@
+<!-- $Id$ -->
+[% INCLUDE 'includes/poll.tt' %]
+
+[% poll = c.model('Vote').poll(voteid) %]
+
+<div id="ballot" class="page_box">
+<p>[% l('You\'ve just submitted your ballot') %]
+[% IF NOT poll.info.no_ballot_id_voting %]
+, [% l('your ballot id is:') _ ' ' %]<b>[% ballotid %]</b>
+[% END %].</p>
+
+[% IF NOT poll.info.no_ballot_id_voting %]
+<p>[% l('Write it down if you want to be able to check it at the end of the poll') %]</p> 
+[% END %]
+
+<p>[% l('Results will be available') _ ' ' %]
+<a href="[% c.uri_for('/vote', poll.uid) %]">[% l('here') %]</a>.</p>
+
+<p>
+[% IF NOT c.stash.error_mail %]
+[% l('A summary mail has been sent') %].
+[% ELSE %]
+[% l('Could not send the summary mail:') %]
+<pre>[% c.stash.mail_error %]</pre>
+[% l('Please contact your system administrator') %].
+[% END %]
+</p>
+</div>
+
Index: /tags/2.00/root/templates/ballot/index.tt
===================================================================
--- /tags/2.00/root/templates/ballot/index.tt	(revision 478)
+++ /tags/2.00/root/templates/ballot/index.tt	(revision 478)
@@ -0,0 +1,16 @@
+<!-- $Id$ -->
+[% vote = c.model('Vote') %]
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% voteids = vote.list_running_vote %]
+
+[% IF voteids.size %]
+
+[% FOREACH voteid = voteids %]
+<a href="[% c.uri_for('/ballot', poll.uid) %]">[% poll.info('label') | html %]</a>
+<br>
+[% END %]
+
+[% ELSE %]
+[% l('No polls currently running') %]
+[% END %]
Index: /tags/2.00/root/templates/ballot/login.tt
===================================================================
--- /tags/2.00/root/templates/ballot/login.tt	(revision 478)
+++ /tags/2.00/root/templates/ballot/login.tt	(revision 478)
@@ -0,0 +1,23 @@
+<!-- $Id$ -->
+[% INCLUDE 'includes/poll.tt' %]
+
+<div id="login" class="login_box">
+[% IF login_failure %]
+<p class="alert">[% l('Invalid login/password, are you sure you can
+participate to this poll ?') %]</p>
+[% END %]
+<p>[% l('Please authenticate to participate to this poll') %]</p>
+<form action="[% c.uri_for(c.model('Vote').poll(voteid).uid) %]" method="POST">
+<table border="0" align="center">
+<tr>
+<td>[% l('Mail:') %]</td>
+<td><input type="text" name="mail" value="[% c.req.param('mail') %]"></td>
+</tr>
+<tr>
+<td>[% l('Password:') %]</td>
+<td><input type="password" name="password" value=""></td>
+</tr>
+<tr><td colspan="2" align="center"><input type="submit"></td></tr>
+</table>
+</form>
+</div>
Index: /tags/2.00/root/templates/ballot/signed.tt
===================================================================
--- /tags/2.00/root/templates/ballot/signed.tt	(revision 478)
+++ /tags/2.00/root/templates/ballot/signed.tt	(revision 478)
@@ -0,0 +1,9 @@
+<!-- $Id$ -->
+[% INCLUDE 'includes/poll.tt' %]
+
+<div id="vote_done">
+<p>[% mail _ ' '| html %][% l('already participated in this poll the [_1]', signed_date) | html %]</p>
+<p>[% l('Results will be available') _ ' ' -%]
+<a href="[% c.uri_for('/vote', c.model('Vote').poll(voteid).uid) %]">[% l('here') %]</a>.</p>
+</div>
+
Index: /tags/2.00/root/templates/default.tt
===================================================================
--- /tags/2.00/root/templates/default.tt	(revision 478)
+++ /tags/2.00/root/templates/default.tt	(revision 478)
@@ -0,0 +1,35 @@
+<!-- $Id$ -->
+[% vote = c.model('Vote') %]
+
+<div style="float: right; width: 33%;" class="reminder">
+<form action="[% c.uri_for %]" method="POST">
+[% IF novoting %]
+<p class="warning">[% l('You don\'t own any polls') %] [% novoting | html %].</p>
+[% END %]
+[% IF sendvoting %]
+[% l('An email has been sent to [_1]', sendvoting) %]
+[% END %]
+
+<p>[% l('Enter your email address to receive a list of your polls') %]</p>
+<input type="text" name="mailvoting" class="reminder">
+<input type="submit" class="reminder" value=">">
+</form>
+</div>
+
+[% FOREACH p = c.session.mypoll.keys %]
+[% poll = vote.poll(p) %]
+[% NEXT IF NOT poll.info %]
+[% IF loop.first %]
+<p>[% l('My polls:') %]</p>
+<ul>
+[% END %]
+<li><a href="[% c.uri_for('/vote', poll.uid) %]">[% poll.info.label | html %]</a>
+[% IF c.session.mypoll.$p %]
+    <a href="[% c.uri_for('/admin', poll.uid) %]"><i>[% l('administrate') %]</i></a>
+[% END %]
+</li>
+[% IF loop.last %]
+</ul>
+[% END %]
+
+[% END %]
Index: /tags/2.00/root/templates/errors/mail.tt
===================================================================
--- /tags/2.00/root/templates/errors/mail.tt	(revision 478)
+++ /tags/2.00/root/templates/errors/mail.tt	(revision 478)
@@ -0,0 +1,3 @@
+[% l('Cannot send email:') %]<br/>
+<pre>[% c.stash.mail_error %]</pre>
+[% l('Please contact your system administrator') %].
Index: /tags/2.00/root/templates/importv/csv.tt
===================================================================
--- /tags/2.00/root/templates/importv/csv.tt	(revision 478)
+++ /tags/2.00/root/templates/importv/csv.tt	(revision 478)
@@ -0,0 +1,4 @@
+<p>[% l('format:') _ ' ' %]<i>[% l('Mail@domain;Name')%]</i></p>
+<form method="POST" ENCTYPE="multipart/form-data" action="[% c.uri_for(poll.uid,
+'voting') %]">
+<input type="file" name="votinglist"><br>
Index: /tags/2.00/root/templates/importv/dummy.tt
===================================================================
--- /tags/2.00/root/templates/importv/dummy.tt	(revision 478)
+++ /tags/2.00/root/templates/importv/dummy.tt	(revision 478)
@@ -0,0 +1,1 @@
+<input type="text" name="mail" value="[% c.req.param('mail') %]">
Index: /tags/2.00/root/templates/importv/ldap.tt
===================================================================
--- /tags/2.00/root/templates/importv/ldap.tt	(revision 478)
+++ /tags/2.00/root/templates/importv/ldap.tt	(revision 478)
@@ -0,0 +1,10 @@
+[% l('Uri:') %] <input type="text" name="uri" value="[% c.req.param('uri') | html %]"><br>
+[% l('Base DN:') %] <input type="text" name="basedn" value="[% c.req.param('basedn') | html %]"><br>
+Filter:<br>
+<textarea type="text" name="filter" cols="40">[% c.req.param('filter') | html %]</textarea><br>
+[% l('UID attributes:') | html %]
+<input type="text" name="uid" value="[% c.req.param('uid') | html %]"><br>
+[% l('Email attributes:') | html %]
+<input type="text" name="mail" value="[% c.req.param('mail') | html %]"><br>
+[% l('Display Name attributes:') | html %]
+<input type="text" name="displayname" value="[% c.req.param('displayname') | html %]"><br>
Index: /tags/2.00/root/templates/includes/admin_menu.tt
===================================================================
--- /tags/2.00/root/templates/includes/admin_menu.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/admin_menu.tt	(revision 478)
@@ -0,0 +1,21 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+<div id="admin_menu">
+<a href="[% c.uri_for('/admin', poll.uid) %]">[% poll.info.label | html %]</a>
+[% IF poll.status == 'BEFORE' %]
+:: <a href="[% c.uri_for('/admin', poll.uid, 'ballot') %]">[% l('Ballots') %]</a>
+[% END %]
+:: <a href="[% c.uri_for('/admin', poll.uid, 'voters') %]">[% l('Voters') %]</a>
+[% IF poll.status == 'BEFORE' %]
+:: <a href="[% c.uri_for('/admin', poll.uid, 'date') %]">[% l('Dates') %]</a>
+[% END %]
+[% IF poll.status == 'AFTER' %]
+[% IF NOT poll.results %]
+:: <a href="[% c.uri_for('/admin', poll.uid, 'validate') %]">[% l('Validate') %]</a>
+[% END %]
+[% END %]
+[% IF poll.status != 'RUNNING' %]
+:: <a href="[% c.uri_for('/admin', poll.uid, 'delete') %]">[% l('Delete') %]</a>
+[% END %]
+</div>
Index: /tags/2.00/root/templates/includes/ballot_form.tt
===================================================================
--- /tags/2.00/root/templates/includes/ballot_form.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/ballot_form.tt	(revision 478)
@@ -0,0 +1,23 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% IF poll.info('procedure') %]
+[% poll.info('procedure') | html %]
+<hr>
+[% ELSIF poll.info('description') %]
+[% poll.info('description') | html %]
+<hr>
+[% END %]
+
+<form action="[% b_form_url %]" method="POST">
+
+[% ballottt = 'pollinc/' _ poll.type _ '/ballot.tt' %]
+[% INCLUDE $ballottt %]
+
+<br>
+<input type="submit" name="ballot" value="[% l('Vote') _ ' ' %] &gt;&gt;">
+</form>
+<hr>
+<form action="[% b_form_url %]" method="POST">
+<input type="submit" name="ballot" value="[% l('Empty ballot') _ ' ' %] &gt;&gt;">
+</form>
Index: /tags/2.00/root/templates/includes/ballot_settings.tt
===================================================================
--- /tags/2.00/root/templates/includes/ballot_settings.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/ballot_settings.tt	(revision 478)
@@ -0,0 +1,12 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+<div style="float: left; width: 55%" class="box">
+<form action="[% c.uri_for(poll.uid, 'ballot') %]" method="POST">
+
+[% ballotsettingstt = 'pollinc/' _ poll.type _ '/ballot_settings.tt' %]
+[% INCLUDE $ballotsettingstt %]
+
+<input type="submit" name="pollballot" value="[% l('Save') %]">
+</form>
+
Index: /tags/2.00/root/templates/includes/footer.tt
===================================================================
--- /tags/2.00/root/templates/includes/footer.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/footer.tt	(revision 478)
@@ -0,0 +1,10 @@
+<!-- $Id$ -->
+<div id="footer">
+<div id="now">[% l('Page generated the [_1]', c.model('Vote').dbtime) | html %]</div>
+<div id="catalyst_logo">
+<a href="http://forge.ipsl.jussieu.fr/epoll"> Epoll [% Vote.VERSION | html %]</a>
+<a href="http://www.catalystframework.org/"><img alt="Powered by Catalyst" src="[% c.uri_for('/static', 'images', 'btn_88x31_powered_shadow.png') %]"></a>
+</div>
+</div>
+</body>
+</html>
Index: /tags/2.00/root/templates/includes/header.tt
===================================================================
--- /tags/2.00/root/templates/includes/header.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/header.tt	(revision 478)
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- $Id$ -->
+<html>
+<head>
+<title>[% page.title %]</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" href="[% c.uri_for('/static', 'vote.css') %]" type="text/css">
+<link rel="icon" href="[%- c.uri_for('/static', 'images', 'favicon.ico') -%]" type="image/x-icon">
+[% FOREACH file = [ 'controls.js', 'dragdrop.js', 'effects.js', 'prototype.js' ] %]
+<script type="text/javascript" language="JavaScript" src="[% c.uri_for('/static', 'js', 'prototype',
+    file) %]"></script>
+[% END %]
+
+<link rel="stylesheet" href="[% c.uri_for('/static', 'dhtmlxCalendar', 'dhtmlxcalendar.css') %]" type="text/css">
+[% FOREACH file = [ 'dhtmlxcommon.js', 'dhtmlxcalendar.js' ] %]
+<script type="text/javascript" language="JavaScript" src="[% c.uri_for('/static', 'dhtmlxCalendar',
+    file) %]"></script>
+[% END %]
+
+</head>
+<body>
+<div id="header">
+    <p id="title"><b>Epoll:</b> [% l('Web voting system') %]</p>
+    
+    <p id="locale_select" style="float: right">[% INCLUDE 'includes/locale_select_form.tt' %]</p>
+    <p id="menu" style="clear: both;">
+    <a href="[% c.uri_for('/') %]">[% l('Welcome') %]</a> ::
+    <a href="[% c.uri_for('/newpoll') %]">[% l('Create a new poll') %]</a>
+    [% IF voteid %]
+    :: <a href="[% c.uri_for('/vote', c.model('Vote').poll(voteid).uid) %]">
+        [% l('Your poll:') _ ' ' %][% c.model('Vote').poll(voteid).info('label') | truncate(40) | html %]
+    </a>
+    [% END %]
+    </p>
+</div>
Index: /tags/2.00/root/templates/includes/loc.tt
===================================================================
--- /tags/2.00/root/templates/includes/loc.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/loc.tt	(revision 478)
@@ -0,0 +1,4 @@
+[% MACRO l(text, args) BLOCK;
+    c.localize(text, args);
+END; %]
+
Index: /tags/2.00/root/templates/includes/locale_select.tt
===================================================================
--- /tags/2.00/root/templates/includes/locale_select.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/locale_select.tt	(revision 478)
@@ -0,0 +1,8 @@
+<!-- $Id$ -->
+[% langs = [ 'fr', 'de', 'it', 'nl' ] %]
+<select name="[% varname || 'locale' %]">
+    <option>C</option>
+[% FOREACH lang = langs.sort %]
+    <option[% " selected" IF locale == lang %]>[% lang | html %]</option>
+[% END %]
+</select>
Index: /tags/2.00/root/templates/includes/locale_select_form.tt
===================================================================
--- /tags/2.00/root/templates/includes/locale_select_form.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/locale_select_form.tt	(revision 478)
@@ -0,0 +1,5 @@
+<!-- $Id: locale_select.tt 455 2010-10-18 01:38:55Z nanardon $ -->
+<form action="[% c.uri_for('/', c.req.path) %]" method="POST">
+[% INCLUDE 'includes/locale_select.tt' %]
+<input type="submit" value="[% l('Change language') %]">
+</form>
Index: /tags/2.00/root/templates/includes/poll.tt
===================================================================
--- /tags/2.00/root/templates/includes/poll.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/poll.tt	(revision 478)
@@ -0,0 +1,44 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').results(voteid) %]
+
+<div id="poll_summary" class="box" style="clear: both;">
+<div style="float: left; width: 70%;">
+<p id="poll_label">[% poll.info('label') | html %]</p>
+[% IF poll.info('description') %]
+<p>[% poll.info('description') | html | html_line_break %]</p>
+[% END %]
+[% IF poll.info('procedure') %]
+<p>[% poll.info('procedure') | html | html_line_break %]</p>
+[% END %]
+<p>[% l('[_1] choice have to be done', poll.info('choice_count')) %]
+[%- IF poll.info('choice_count') != poll.info('elected_count') -%]
+[%# do not erase the leading space below %]
+ [% l('for [_1] elected', poll.info('elected_count')) %][%- END -%].</p>
+[% IF poll.info('dstart') && poll.info('dend') %]
+<p>[% l('Poll open from') %]
+    <b>[% poll.info('dstart') _ ' ' _ poll.info('hstart') %]</b>
+[% ' ' _ l('to') %] <b>[% poll.info('dend') _ ' ' _ poll.info('hend') %]</b>.</p>
+[% END %]
+[% l('Participated') _ ' ' %] [% poll.signing_count %] / [% poll.voting_count %]<br>
+[% l('Ballots:') _ ' ' %] [% poll.ballot_count %]
+[% IF poll.signing_count != poll.ballot_count %]
+<p class="alert">
+[% l('The number of ballots doesn\'t match the number of voters') %]
+</p>
+[% END %]
+</div>
+[% FOREACH item = poll.choices %]
+[% IF loop.first %]
+<div style="float: right; width: 20%; top: 0px;" class="box">
+<p>[% l('Ballots:') %]</p>
+<ol style="padding-left:15px; margin:5px;">
+[% END %]
+<li>[% poll.choice(item).info.label | html %]</li>
+[% IF loop.last %]
+</ol>
+</div>
+[% END %]
+[% END %]
+<div style="clear: both;"></div>
+</div>
+
Index: /tags/2.00/root/templates/includes/poll_results.tt
===================================================================
--- /tags/2.00/root/templates/includes/poll_results.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/poll_results.tt	(revision 478)
@@ -0,0 +1,94 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').results(voteid) %]
+
+[% IF poll.can_show_result %]
+
+<div id="results" class="box">
+[% IF c.view('Latex').enabled %]
+<div style="float: right">
+<p><a href="[% c.uri_for('/vote', poll.uid, 'results.pdf') %]">[% l('Result in PDF') %]</a></p>
+<p><a href="[% c.uri_for('/vote', poll.uid, 'report.pdf') %]">[% l('Report in PDF') %]</a></p>
+</div>
+[% END %]
+[% IF poll.list_ballot_needvalid.size %]
+<p>[% l('Temporary results') %]</p>
+<p class="alert">[% l('Poll administrator must validate some ballots') %]</p>
+[% ELSE %]
+<p>[% l('Results:') %]</p>
+[% END %]
+<p>[% l('Number of choices to retain:') _ ' ' %][% poll.info('choice_count') %]</p>
+
+<table border="1">
+<tr>
+    <td>[% l('Participation') %]</td>
+    <td>[% poll.signing_count %]</td>
+    <td>[% poll.signing_count / poll.voting_count * 100 | format('%.2f %%') IF poll.voting_count %]</td>
+</tr>
+<tr>
+    <td>[% l('Ballots count') %]</td>
+    <td>[% poll.ballots_count %]</td>
+    <td></td></tr>
+<tr>
+    <td>[% l('Number of empty ballots') %]</td>
+    <td>[% poll.empty_ballot_count %]</td>
+    <td>[% poll.empty_ballot_count / poll.ballot_count * 100 | format('%.2f %%') IF poll.ballot_count %]</td>
+</tr>
+<tr>
+    <td>[% l('Number of null ballots') %]</td>
+    <td>[% poll.invalid_ballot_count %]</td>
+    <td>[% poll.invalid_ballot_count / poll.ballots_count * 100 | format('%.2f %%') IF poll.ballots_count %]</td>
+</tr>
+</table>
+
+[% resultstt = 'pollinc/' _ poll.type _ '/results.tt' %]
+[% INCLUDE $resultstt %]
+
+[% FOREACH id = poll.ballot_keys %]
+[% IF loop.first %]
+<div id="ballot_list" class="box">
+<p>[% l('Ballots list:') %]</p>
+<table border="1">
+<tr><th>[% l('number') %]</th><th>[% l('Id') %]</th>
+<th>[% l('date (=> view as)') | html %]
+[% IF poll.info('free_choice') %]
+<br>(*: [% l('not from list') %])
+[% END %]
+</th><th>[% l('comment') %]</th></tr>
+[% END %]
+<tr>
+<td>[% loop.count %]</td>
+<td><pre>[% id | html %]</pre></td>
+<td>
+[% items = poll.ballot(id).items %]
+[% IF items.size %]
+[% FOREACH item = items %]
+[% "<ul>\n" IF loop.first %]
+<li>[% item.v | html %]
+[% ' *' IF NOT item.fromlist %]
+[% IF item.corrected %] (=&gt; [% item.corrected %])[% END %]</li>
+[% "</ul>\n" IF loop.last %]
+[% END %]
+[% ELSE %]
+<i>[% l('Empty ballots') %]</i>
+[% END %]
+</td>
+<td>
+[% invalid = '#' _ poll.ballot(id).info.invalid %]
+[% IF invalid == '#1' %]
+<span class="alert">[% l('invalid') %]</span>
+[% ELSIF invalid  == '#' %]
+<i>[% l('must be validated') %]</i>
+[% END %]
+</td>
+</tr>
+[% IF loop.last %]
+</table>
+</div>
+[% END %]
+[% END %]
+
+[% ELSE %][% # can show result %]
+<div class="page_box">
+<p>[% l('Results haven\'t been published yet') %]<p>
+</div>
+[% END %]
Index: /tags/2.00/root/templates/includes/poll_running.tt
===================================================================
--- /tags/2.00/root/templates/includes/poll_running.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/poll_running.tt	(revision 478)
@@ -0,0 +1,6 @@
+<!-- $Id$ -->
+<div id="poll_running">
+<p>[% l('Poll is currently running') %]</p>
+<p>[% l('You can') _ ' ' %]<a href="[% c.uri_for('/ballot',
+c.model('Vote').poll(voteid).uid) %]">[% l('vote here') %]</a></li></p>
+</div>
Index: /tags/2.00/root/templates/includes/signing_list.tt
===================================================================
--- /tags/2.00/root/templates/includes/signing_list.tt	(revision 478)
+++ /tags/2.00/root/templates/includes/signing_list.tt	(revision 478)
@@ -0,0 +1,29 @@
+<!-- $Id$ -->
+[% USE Mail %]
+
+[% poll = c.model('Vote').poll(voteid) %]
+[% poll_status = poll.status %]
+
+[% FOREACH id = poll.voting_keys() %]
+[% voting = poll.voting(id).info %]
+[% IF loop.first %]
+<div id="voting_list" class="box">
+<p>[% l('List of voters') %]</p>
+<table border="1">
+<tr><th>[% l('Number') %]</th><th>[% l('Voter') %]</th>
+[% IF poll_status != 'RUNNING' %]<th>[% l('Sign') %]</th>[% END %]
+</tr>
+[% END %]
+<tr>
+<td>[% loop.count %]</td>
+<td>
+    [% voting.label | html %]
+    [% " &lt;" IF voting.label %][% voting.mail | mail | html %][% "&gt;" IF voting.label %]
+</td>
+[% IF poll_status != 'RUNNING' %]<td>[% l('has voted') IF voting.date %]</td>[% END %]
+</tr>
+[% IF loop.last %]
+</table>
+</div>
+[% END %]
+[% END %]
Index: /tags/2.00/root/templates/newpoll/default.tt
===================================================================
--- /tags/2.00/root/templates/newpoll/default.tt	(revision 478)
+++ /tags/2.00/root/templates/newpoll/default.tt	(revision 478)
@@ -0,0 +1,9 @@
+<!-- $Id$ -->
+<div id="poll_confirm" class="page_box">
+<form action="[% c.uri_for(reqid) %]" method="POST">
+[% c.model('Vote').poll_request_info(reqid).label | html %]<br>
+<p>[% l('Enter administration password for this poll') %]</p>
+<p><input type="password" name="passwd"></p>
+<p><input type="submit"></p>
+</form>
+</div>
Index: /tags/2.00/root/templates/newpoll/index.tt
===================================================================
--- /tags/2.00/root/templates/newpoll/index.tt	(revision 478)
+++ /tags/2.00/root/templates/newpoll/index.tt	(revision 478)
@@ -0,0 +1,34 @@
+<!-- $Id$ -->
+<div id="poll_request" class="page_box">
+<p>[% l('Create a new poll') %]</p>
+
+<form action="[% c.uri_for() %]" method="POST">
+<center>
+<table border="0">
+<tbody align="center">
+<tr><th>[% l('Your email address:') %]</th><td>
+  <input type="text" name="mail" value="[% c.req.param('mail') | html %]" tabindex="1" size="45" maxlength="150">
+</td></tr>
+<tr><th>[% l('Poll name:') %]</th><td>
+  <input type="text" name="label" value="[% c.req.param('label') | html %]" tabindex="2" size="45" maxlength="150">
+</td></tr>
+[% IF c.config.newpollpasswd %]
+<tr><th>[% l('Password of this poll:') %]</th><td>
+  <input type="password" name="vpasswd" value="[% c.req.param('vpasswd') | html %]"  tabindex="3">
+</td></tr>
+[% IF passwderror %]
+<tr><td colspan="2" class="alert">
+    [% l('Invalid site password:') %]
+</td></tr>
+[% END %]
+<tr><th>[% l('Site password:') %]</th><td><input type="password" name="passwd" tabindex="4"></td></tr>
+[% END %]
+<!-- Cf http://forge.ipsl.jussieu.fr/epoll/ticket/1
+<tr><th>[% l('Password') %]</th><td><input type="password" name="vpasswd"></td></tr>
+-->
+<tr><td></td><td><input type="submit" tabindex="3"></td></tr>
+</tbody>
+</table>
+</center>
+</form>
+</div>
Index: /tags/2.00/root/templates/newpoll/norequest.tt
===================================================================
--- /tags/2.00/root/templates/newpoll/norequest.tt	(revision 478)
+++ /tags/2.00/root/templates/newpoll/norequest.tt	(revision 478)
@@ -0,0 +1,11 @@
+<!-- $Id$ -->
+
+<div id="poll_request" class="box">
+<p class="alert">[% l('No such request found') %]</p>
+
+[% l('Enter the request ID you received by email') %]
+<form action="[% c.uri_for('/newpoll', 'confirm') %]" method="POST">
+<input type="text" name="id"><br>
+<input type="submit">
+</form>
+</div>
Index: /tags/2.00/root/templates/newpoll/request.tt
===================================================================
--- /tags/2.00/root/templates/newpoll/request.tt	(revision 478)
+++ /tags/2.00/root/templates/newpoll/request.tt	(revision 478)
@@ -0,0 +1,15 @@
+<!-- $Id$ -->
+<div id="poll_request" class="box">
+<p>
+[% l('An email has been sent to [_1], follow the instructions to complete poll
+creation', c.req.param('mail')) %]</p>
+
+<p>[% l('Thank you') %]</p>
+
+<p>[% l('You can enter the request code here') %]</p>
+<form action="[% c.uri_for('/newpoll', 'confirm') %]" method="POST">
+<input type="text" name="id"><br>
+<input type="submit">
+</form>
+
+</div>
Index: /tags/2.00/root/templates/pollinc/binary/ballot.tt
===================================================================
--- /tags/2.00/root/templates/pollinc/binary/ballot.tt	(revision 478)
+++ /tags/2.00/root/templates/pollinc/binary/ballot.tt	(revision 478)
@@ -0,0 +1,43 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+<p>[% l('You need to select [_1] choices', poll.info('choice_count') ) %]
+[%- IF poll.info('choice_count') != poll.info('elected_count') -%]
+[% ' ' _ l('for [_1] elected', poll.info('elected_count')) %] [%- END -%]</p>
+
+[% FOREACH key = poll.choices() %]
+[% "<p>Candidates:</p>" IF loop.first %]
+[% choice = poll.choice(key) %]
+<input type="checkbox" name="sbal" value="[% key %]"[% " checked" IF sbal.$key %]>
+[% choice.info.label | html %]<br>
+[% END %]
+
+[% count = 0 %]
+[% IF poll.voting_keys.size %]
+[% WHILE count < (poll.info('elected_choice') || 0) %]
+[% IF count == 0 %]
+<p>[% l('From the list of voters') %]</p>
+[% END %]
+[% FOREACH vkey = poll.voting_keys %]
+[% voting = poll.voting(vkey) %]
+[% '<select name="esbal"><option value=""></option>' IF loop.first %]
+<option value="[% voting.info.label || voting.info.mail | html %]"
+    [% " selected" IF esbal.$count == (voting.info.label || voting.info.mail) %]>
+    [% voting.info.label || voting.info.mail | html %]
+</option>
+[% '</select><br>' IF loop.last %]
+[% END %]
+[% count = count + 1 %]
+[% END %]
+[% ELSE %]
+<p>[% l('No voters to show') %]</p>
+[% END %]
+
+[% count = 0 %]
+[% WHILE count < poll.info('free_choice') %]
+[% IF count == 0 %]
+<p>[% l('Free choice') %]</p>
+[% END %]
+<input type="text" name="fsbal" value="[% fsbal.$count %]"><br>
+[% count = count + 1 %]
+[% END %]
Index: /tags/2.00/root/templates/pollinc/binary/ballot_settings.tt
===================================================================
--- /tags/2.00/root/templates/pollinc/binary/ballot_settings.tt	(revision 478)
+++ /tags/2.00/root/templates/pollinc/binary/ballot_settings.tt	(revision 478)
@@ -0,0 +1,27 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+<table border=1>
+<tr>
+<td>[% l('Number of possible choices') %]</td>
+<td><input type="text" size="3" name="choice_count" value="[% c.req.param('choice_count') || poll.info('choice_count') | html %]"></td>
+</tr>
+
+<tr>
+<td>[% l('Possible number of people to elect') %]<br>
+    ([% l('if you want to vote for more than one person') %])
+</td>
+<td><input type="text" size="3" name="elected_count" value="[% c.req.param('elected_count') || poll.raw_info('elected_count') | html %]"></td>
+</tr>
+
+<tr>
+<td>[% l('Number of free input fields:') %]</td>
+<td><input type="text" size="3" name="free_choice" value="[% c.req.param('free_choice') || poll.info('free_choice') || 0 | html %]"></td>
+</tr>
+
+<tr>
+<td>[% l('Number of people to elect, taken from the list of voters') %]</td>
+<td><input type="text" size="3" name="elected_choice" value="[% c.req.param('elected_choice') || poll.info('elected_choice') || 0 | html %]"></td>
+</tr>
+
+</table>
Index: /tags/2.00/root/templates/pollinc/binary/results.tt
===================================================================
--- /tags/2.00/root/templates/pollinc/binary/results.tt	(revision 478)
+++ /tags/2.00/root/templates/pollinc/binary/results.tt	(revision 478)
@@ -0,0 +1,45 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+[% IF poll.results %]
+[% FOREACH res = poll.results %]
+[% IF loop.first %]
+<p>[% l('Score:') %]</p>
+<table border="1"><tr>
+<th>[% l('Legend:') %]</th>
+<td class="majabs">[% l('Absolute Majority') %]</td>
+<td class="selected">[% l('Elected') %]</td>
+<td class="notselected">[% l('Not elected') %]</td>
+</tr></table><br>
+<table border="1">
+<tr><th>Score</th><th>[% l('Line nÂ°') %]</th><th>[% l('choice') %]</th><th>[%
+l('Number of votes') %]</th><th>[% l('%') %]</th><th></th></tr>
+[% END %]
+
+[% IF res.elected %]
+[% IF res.abs_maj %]
+[% class = 'majabs' %]
+[% ELSE %]
+[% class = 'selected' %]
+[% END %]
+[% ELSE %]
+[% class = 'notselected' %]
+[% END %]
+<tr class="[% class %]">
+<td>[% res.order %]</td>
+<td>[% loop.count %]</td>
+<td>[% res.value | html %]</td>
+<td>[% res.count %]</td>
+<td>[% res.count * 100 / poll.voices_ballot_count | format('%.2f') %]</td>
+<td><img src="[% c.uri_for('/static', 'images', 'green-v.png') %]" height="10px" width="[% res.count * 400 / poll.voices_ballot_count | format('%d') %]px"></td>
+</tr>
+
+[% IF loop.last %]
+</table>
+[% END %]
+[% END %]
+[% ELSE %]
+<p class="alert">[% l('No results') %]</p>
+[% END %]
+</div>
+
Index: /tags/2.00/root/templates/vote/default.tt
===================================================================
--- /tags/2.00/root/templates/vote/default.tt	(revision 478)
+++ /tags/2.00/root/templates/vote/default.tt	(revision 478)
@@ -0,0 +1,25 @@
+<!-- $Id$ -->
+[% poll = c.model('Vote').poll(voteid) %]
+
+<div style="text-align: right;"><a href="[% c.uri_for( '/admin', poll.uid ) %]">[% l('Administrate') %]</a></div>
+
+[% INCLUDE 'includes/poll.tt' %]
+
+[% SWITCH poll.status() %]
+
+[% CASE 'RUNNING' %]
+[% INCLUDE 'includes/poll_running.tt' %]
+[% INCLUDE 'includes/signing_list.tt' %]
+
+[% CASE 'BEFORE' %]
+<div class="page_box">
+<p>[% l('This poll is not yet open') %]</p>
+</div>
+[% INCLUDE 'includes/signing_list.tt' %]
+
+[% CASE 'AFTER' %]
+[% INCLUDE 'includes/poll_results.tt' %]
+[% INCLUDE 'includes/signing_list.tt' %]
+
+[% END %]
+
Index: /tags/2.00/script/epoll_cgi.pl
===================================================================
--- /tags/2.00/script/epoll_cgi.pl	(revision 478)
+++ /tags/2.00/script/epoll_cgi.pl	(revision 478)
@@ -0,0 +1,37 @@
+#!/usr/bin/perl -w
+
+BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' }
+
+use strict;
+use warnings;
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use Epoll;
+
+Epoll->run;
+
+1;
+
+=head1 NAME
+
+epoll_cgi.pl - Catalyst CGI
+
+=head1 SYNOPSIS
+
+See L<Catalyst::Manual>
+
+=head1 DESCRIPTION
+
+Run a Catalyst application as a cgi script.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri@oook.de>
+
+=head1 COPYRIGHT
+
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Index: /tags/2.00/script/epoll_create.pl
===================================================================
--- /tags/2.00/script/epoll_create.pl	(revision 478)
+++ /tags/2.00/script/epoll_create.pl	(revision 478)
@@ -0,0 +1,74 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use Getopt::Long;
+use Pod::Usage;
+use Catalyst::Helper;
+
+my $force = 0;
+my $mech  = 0;
+my $help  = 0;
+
+GetOptions(
+    'nonew|force'    => \$force,
+    'mech|mechanize' => \$mech,
+    'help|?'         => \$help
+ );
+
+pod2usage(1) if ( $help || !$ARGV[0] );
+
+my $helper = Catalyst::Helper->new( { '.newfiles' => !$force, mech => $mech } );
+
+pod2usage(1) unless $helper->mk_component( 'Epoll', @ARGV );
+
+1;
+
+=head1 NAME
+
+epoll_create.pl - Create a new Catalyst Component
+
+=head1 SYNOPSIS
+
+epoll_create.pl [options] model|view|controller name [helper] [options]
+
+ Options:
+   -force        don't create a .new file where a file to be created exists
+   -mechanize    use Test::WWW::Mechanize::Catalyst for tests if available
+   -help         display this help and exits
+
+ Examples:
+   epoll_create.pl controller My::Controller
+   epoll_create.pl -mechanize controller My::Controller
+   epoll_create.pl view My::View
+   epoll_create.pl view MyView TT
+   epoll_create.pl view TT TT
+   epoll_create.pl model My::Model
+   epoll_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\
+   dbi:SQLite:/tmp/my.db
+   epoll_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\
+   dbi:Pg:dbname=foo root 4321
+
+ See also:
+   perldoc Catalyst::Manual
+   perldoc Catalyst::Manual::Intro
+
+=head1 DESCRIPTION
+
+Create a new Catalyst Component.
+
+Existing component files are not overwritten.  If any of the component files
+to be created already exist the file will be written with a '.new' suffix.
+This behavior can be suppressed with the C<-force> option.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri@oook.de>
+Maintained by the Catalyst Core Team.
+
+=head1 COPYRIGHT
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Index: /tags/2.00/script/epoll_fastcgi.pl
===================================================================
--- /tags/2.00/script/epoll_fastcgi.pl	(revision 478)
+++ /tags/2.00/script/epoll_fastcgi.pl	(revision 478)
@@ -0,0 +1,80 @@
+#!/usr/bin/perl -w
+
+BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' }
+
+use strict;
+use warnings;
+use Getopt::Long;
+use Pod::Usage;
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use Epoll;
+
+my $help = 0;
+my ( $listen, $nproc, $pidfile, $manager, $detach, $keep_stderr );
+ 
+GetOptions(
+    'help|?'      => \$help,
+    'listen|l=s'  => \$listen,
+    'nproc|n=i'   => \$nproc,
+    'pidfile|p=s' => \$pidfile,
+    'manager|M=s' => \$manager,
+    'daemon|d'    => \$detach,
+    'keeperr|e'   => \$keep_stderr,
+);
+
+pod2usage(1) if $help;
+
+Epoll->run( 
+    $listen, 
+    {   nproc   => $nproc,
+        pidfile => $pidfile, 
+        manager => $manager,
+        detach  => $detach,
+	keep_stderr => $keep_stderr,
+    }
+);
+
+1;
+
+=head1 NAME
+
+epoll_fastcgi.pl - Catalyst FastCGI
+
+=head1 SYNOPSIS
+
+epoll_fastcgi.pl [options]
+ 
+ Options:
+   -? -help      display this help and exits
+   -l -listen    Socket path to listen on
+                 (defaults to standard input)
+                 can be HOST:PORT, :PORT or a
+                 filesystem path
+   -n -nproc     specify number of processes to keep
+                 to serve requests (defaults to 1,
+                 requires -listen)
+   -p -pidfile   specify filename for pid file
+                 (requires -listen)
+   -d -daemon    daemonize (requires -listen)
+   -M -manager   specify alternate process manager
+                 (FCGI::ProcManager sub-class)
+                 or empty string to disable
+   -e -keeperr   send error messages to STDOUT, not
+                 to the webserver
+
+=head1 DESCRIPTION
+
+Run a Catalyst application as fastcgi.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri@oook.de>
+Maintained by the Catalyst Core Team.
+
+=head1 COPYRIGHT
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Index: /tags/2.00/script/epoll_server.pl
===================================================================
--- /tags/2.00/script/epoll_server.pl	(revision 478)
+++ /tags/2.00/script/epoll_server.pl	(revision 478)
@@ -0,0 +1,111 @@
+#!/usr/bin/perl -w
+
+BEGIN { 
+    $ENV{CATALYST_ENGINE} ||= 'HTTP';
+    $ENV{CATALYST_SCRIPT_GEN} = 30;
+    require Catalyst::Engine::HTTP;
+}  
+
+use strict;
+use warnings;
+use Getopt::Long;
+use Pod::Usage;
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+
+my $debug             = 0;
+my $fork              = 0;
+my $help              = 0;
+my $host              = undef;
+my $port              = 3000;
+my $keepalive         = 0;
+my $restart           = 0;
+my $restart_delay     = 1;
+my $restart_regex     = '\.yml$|\.yaml$|\.pm$';
+my $restart_directory = undef;
+
+my @argv = @ARGV;
+
+GetOptions(
+    'debug|d'             => \$debug,
+    'fork'                => \$fork,
+    'help|?'              => \$help,
+    'host=s'              => \$host,
+    'port=s'              => \$port,
+    'keepalive|k'         => \$keepalive,
+    'restart|r'           => \$restart,
+    'restartdelay|rd=s'   => \$restart_delay,
+    'restartregex|rr=s'   => \$restart_regex,
+    'restartdirectory=s'  => \$restart_directory,
+);
+
+pod2usage(1) if $help;
+
+if ( $restart ) {
+    $ENV{CATALYST_ENGINE} = 'HTTP::Restarter';
+}
+if ( $debug ) {
+    $ENV{CATALYST_DEBUG} = 1;
+}
+
+# This is require instead of use so that the above environment
+# variables can be set at runtime.
+require Epoll;
+
+Epoll->run( $port, $host, {
+    argv              => \@argv,
+    'fork'            => $fork,
+    keepalive         => $keepalive,
+    restart           => $restart,
+    restart_delay     => $restart_delay,
+    restart_regex     => qr/$restart_regex/,
+    restart_directory => $restart_directory,
+} );
+
+1;
+
+=head1 NAME
+
+epoll_server.pl - Catalyst Testserver
+
+=head1 SYNOPSIS
+
+epoll_server.pl [options]
+
+ Options:
+   -d -debug          force debug mode
+   -f -fork           handle each request in a new process
+                      (defaults to false)
+   -? -help           display this help and exits
+      -host           host (defaults to all)
+   -p -port           port (defaults to 3000)
+   -k -keepalive      enable keep-alive connections
+   -r -restart        restart when files get modified
+                      (defaults to false)
+   -rd -restartdelay  delay between file checks
+   -rr -restartregex  regex match files that trigger
+                      a restart when modified
+                      (defaults to '\.yml$|\.yaml$|\.pm$')
+   -restartdirectory  the directory to search for
+                      modified files
+                      (defaults to '../')
+
+ See also:
+   perldoc Catalyst::Manual
+   perldoc Catalyst::Manual::Intro
+
+=head1 DESCRIPTION
+
+Run a Catalyst Testserver for this application.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri@oook.de>
+Maintained by the Catalyst Core Team.
+
+=head1 COPYRIGHT
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Index: /tags/2.00/script/epoll_test.pl
===================================================================
--- /tags/2.00/script/epoll_test.pl	(revision 478)
+++ /tags/2.00/script/epoll_test.pl	(revision 478)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use Getopt::Long;
+use Pod::Usage;
+use FindBin;
+use lib "$FindBin::Bin/../lib";
+use Catalyst::Test 'Epoll';
+
+my $help = 0;
+
+GetOptions( 'help|?' => \$help );
+
+pod2usage(1) if ( $help || !$ARGV[0] );
+
+print request($ARGV[0])->content . "\n";
+
+1;
+
+=head1 NAME
+
+epoll_test.pl - Catalyst Test
+
+=head1 SYNOPSIS
+
+epoll_test.pl [options] uri
+
+ Options:
+   -help    display this help and exits
+
+ Examples:
+   epoll_test.pl http://localhost/some_action
+   epoll_test.pl /some_action
+
+ See also:
+   perldoc Catalyst::Manual
+   perldoc Catalyst::Manual::Intro
+
+=head1 DESCRIPTION
+
+Run a Catalyst action from the command line.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri@oook.de>
+Maintained by the Catalyst Core Team.
+
+=head1 COPYRIGHT
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Index: /tags/2.00/t/01app.t
===================================================================
--- /tags/2.00/t/01app.t	(revision 478)
+++ /tags/2.00/t/01app.t	(revision 478)
@@ -0,0 +1,7 @@
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+BEGIN { use_ok 'Catalyst::Test', 'Epoll' }
+
+ok( request('/')->is_success, 'Request should succeed' );
Index: /tags/2.00/t/02pod.t
===================================================================
--- /tags/2.00/t/02pod.t	(revision 478)
+++ /tags/2.00/t/02pod.t	(revision 478)
@@ -0,0 +1,9 @@
+use strict;
+use warnings;
+use Test::More;
+
+eval "use Test::Pod 1.14";
+plan skip_all => 'Test::Pod 1.14 required' if $@;
+plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD};
+
+all_pod_files_ok();
Index: /tags/2.00/t/03podcoverage.t
===================================================================
--- /tags/2.00/t/03podcoverage.t	(revision 478)
+++ /tags/2.00/t/03podcoverage.t	(revision 478)
@@ -0,0 +1,9 @@
+use strict;
+use warnings;
+use Test::More;
+
+eval "use Test::Pod::Coverage 1.04";
+plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@;
+plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD};
+
+all_pod_coverage_ok();
Index: /tags/2.00/t/10Epoll_DB.t
===================================================================
--- /tags/2.00/t/10Epoll_DB.t	(revision 478)
+++ /tags/2.00/t/10Epoll_DB.t	(revision 478)
@@ -0,0 +1,179 @@
+use strict;
+use warnings;
+use Test::More;
+
+# $Id$
+
+# Tpoll Structure:
+#    {
+#        poll => { var => $val },
+#        choices => [ qw() ],
+#        voting => [ qw(mail) ],
+#        ballot => {
+#        # signing from voting list
+#            signing => { sbal => [], fsbal => [] } # list of items
+#        },
+#        map => { from => to },
+#        results => { var => $val }, # wanted results 
+#    }
+my $test_polls = [
+    { # an empty poll
+        poll => { label => 'empty poll' },
+        choices => [ qw(ch1 ch2) ],
+        test_count => 4,
+        tests => sub {
+            my ($r) = @_;
+            is($r->absolute_majority, 1, "Can get absolute_majority");
+            is($r->ballots_count, 0, "can get ballot count");
+            is($r->voting_count, 0, "can get voting count");
+            is($r->signing_count, 0, "can get signing count");
+        }
+    },
+    {
+        poll => { label => 'some vals' },
+        choices => [ qw(ch1 ch2) ],
+        voting => [ qw(a b c d e f) ],
+        ballot => {
+            a => { sbal => [ 'ch1' ] },
+            b => { sbal => [ 'ch1', 'ch10' ] },
+            d => { sbal => [ 'ch1', 'ch2' ] },
+            f => {},
+        },
+        test_count => 7,
+        tests => sub {
+            my ($r) = @_;
+            is($r->absolute_majority, 2, "Can get absolute_majority");
+            is($r->ballots_count, 4, "can get ballot count");
+            is($r->_voices_ballot_count, 3, "can get ballot count");
+            is($r->voting_count, 6, "can get voting count");
+            is($r->signing_count, 4, "can get signing count");
+            my $res = $r->results;
+            is($res->[0]->{value}, 'ch1', "winner is ch1");
+            is($res->[0]->{count}, 3, "winner has 3 voices");
+        }
+    },
+    {
+        poll => { label => 'some vals with mapped values' },
+        choices => [ qw(ch1 ch2 ch3) ],
+        voting => [ qw(a b c d e f) ],
+        ballot => {
+            a => { sbal => [ 'ch1' ] },
+            b => { sbal => [ 'ch1', 'ch10' ] },
+            d => { sbal => [ 'ch1', 'ch2', 'ch4' ] },
+            f => {},
+        },
+        map_values => sub {
+            my ($r) = @_;
+            $r->map_value('ch10', 'ch1');
+        },
+        test_count => 14,
+        tests => sub {
+            my ($r) = @_;
+            is($r->absolute_majority, 2, "Can get absolute_majority");
+            is($r->ballots_count, 4, "can get ballot count");
+            is($r->not_empty_ballot_count, 3, "can get ballot count");
+            is($r->empty_ballot_count, 1, "can get empty ballot count");
+            is($r->voting_count, 6, "can get voting count");
+            is($r->signing_count, 4, "can get signing count");
+            my $res = $r->results;
+            is($res->[0]->{value}, 'ch1', "winner is ch1");
+            is($res->[0]->{count}, 3, "winner has 3 voices");
+            ok($res->[0]->{abs_maj}, "winner has absolute majority");
+            ok($res->[0]->{elected}, "winner is set as elected");
+            is(@$res, 4, "count of winners");
+            is($res->[3]->{count}, 0, "last has 0 voices");
+            ok(!$res->[3]->{abs_maj}, "last has not absolute majority");
+            ok(!$res->[3]->{elected}, "last is not set as elected");
+        }
+    },
+    {
+        poll => {
+            label => 'empty ballot count',
+            empty_ballot_has_voice => 1,
+        },
+        choices => [ qw(ch1 ch2 ch3) ],
+        voting => [ qw(a b c d e f) ],
+        ballot => {
+            a => { sbal => [ 'ch1' ] },
+            b => { sbal => [ 'ch1', 'ch2' ] },
+            d => { sbal => [ 'ch1', 'ch2' ] },
+            e => {},
+            f => {},
+        },
+        test_count => 10,
+        tests => sub {
+            my ($r) = @_;
+            is($r->absolute_majority, 3, "Can get absolute_majority");
+            is($r->ballots_count, 5, "can get ballot count");
+            is($r->not_empty_ballot_count, 3, "can get ballot count");
+            is($r->empty_ballot_count, 2, "can get empty ballot count");
+            is($r->voting_count, 6, "can get voting count");
+            is($r->signing_count, 5, "can get signing count");
+            my $res = $r->results;
+            is($res->[0]->{value}, 'ch1', "winner is ch1");
+            is($res->[0]->{count}, 3, "winner has 3 voices");
+            is(@$res, 4, "count of winners");
+            is($res->[3]->{count}, 0, "last has 0 voices");
+        }
+    },
+];
+
+my $poll_test_count = 0;
+$poll_test_count += ($_->{test_count} || 0) foreach(@$test_polls);
+
+plan tests => 
+    3                          # Fixed test 
+    + scalar(@$test_polls) * 8 # number of tested polls scenario
+    + $poll_test_count;    # poll test
+
+use_ok 'Epoll', 'Epoll';
+use_ok 'Epoll::DB';
+$ENV{EPOLL_NO_COMMIT} = 1;
+isa_ok(my $vote = Epoll::DB->new(Epoll->config->{db}), 'Epoll::DB');
+
+my $count = 0;
+foreach my $tpoll (@$test_polls) {
+    $count++;
+    diag("Testing vote #$count: " . ($tpoll->{poll}{label} || 'No name'));
+    ok(my $pollid = $vote->_create_poll('test@', "Vote test $count", "password"),
+        "can create a new poll");
+
+    isa_ok(my $poll = $vote->poll($pollid), 'Epoll::DB::Poll');
+
+    ok(my $puid = $poll->uid, "can get poll uid");
+    is($vote->poll_id_from_uid($puid), $pollid, "can get id from uid");
+
+    foreach (keys %{ $tpoll->{poll} || {}}) {
+        $poll->param($_ => $tpoll->{poll}{$_});
+    }
+
+    $poll->addupd_voting($_) foreach (@{ $tpoll->{voting} || [] });
+
+    foreach (@{ $tpoll->{choices} || [] }) {
+        $poll->add_choice($_);
+    }
+
+    ok(eq_set(
+            [ map { $poll->choice($_)->info->{label} } $poll->choices ],
+            $tpoll->{choices} || []), "choices were added");
+
+    foreach my $name (keys %{ $tpoll->{ballot} || {} }) {
+        $poll->register_ballot(
+            $name, $tpoll->{ballot}{$name}{sbal}, 'localhost'
+        );
+    }
+
+    if ($tpoll->{map_values}) {
+        $tpoll->{map_values}->($poll);
+    }
+    
+    isa_ok(my $results = $vote->results($pollid), 'Epoll::DB::Poll');
+
+    ok($results->decrypted_ballots(), "Can decrypt ballot");
+    ok($results->compute_results(), "Can compute results");
+
+    $tpoll->{tests}->($results);
+
+    $vote->db->rollback; # really rollback
+}
+
Index: /tags/2.00/t/11Epoll_DB_crypted.t
===================================================================
--- /tags/2.00/t/11Epoll_DB_crypted.t	(revision 478)
+++ /tags/2.00/t/11Epoll_DB_crypted.t	(revision 478)
@@ -0,0 +1,37 @@
+use strict;
+use warnings;
+use Test::More tests => 14;
+
+# $Id$
+
+use_ok 'Epoll', 'Epoll';
+use_ok 'Epoll::DB';
+$ENV{EPOLL_NO_COMMIT} = 1;
+isa_ok(my $vote = Epoll::DB->new(Epoll->config->{db}), 'Epoll::DB');
+
+ok(my $pollid = $vote->_create_poll('test@', "Vote test", "password"),
+    "can create a new poll");
+
+isa_ok(my $poll = $vote->poll($pollid), 'Epoll::DB::Poll');
+
+ok($poll->gen_poll_keys('keypass'), 'can generate poll keys');
+
+$poll->addupd_voting($_) foreach (qw(a b c));
+
+$poll->register_ballot('a', ['ch', 'ch2'], 'localhost');
+$poll->register_ballot('b', ['ch'], 'localhost');
+$poll->register_ballot('c', [], 'localhost');
+
+
+ok($poll->decrypted_ballots('keypass'), "Can decrypt ballot");
+ok($poll->compute_results, "Can compute results");
+isa_ok(my $results = $vote->results($pollid), 'Epoll::DB::Poll');
+
+is($results->ballot_count_crypt, 3, "ballot count is 3");
+is($results->ballot_count_clear, 3, "ballot count is 3");
+
+ok(my $res = $results->results, "can get results");
+is($res->[0]->{value}, 'ch', "winner is ch");
+is($res->[0]->{count}, 2, "winner has two voices");
+
+$vote->db->rollback; # really rollback
Index: /tags/2.00/t/15ImportV.t
===================================================================
--- /tags/2.00/t/15ImportV.t	(revision 478)
+++ /tags/2.00/t/15ImportV.t	(revision 478)
@@ -0,0 +1,12 @@
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+use_ok('Epoll::DB::ImportV');
+
+ok(my $import = Epoll::DB::ImportV->new('dummy'),
+    "Can instanciate dummy import");
+
+$import->{params}{foo} = 1;
+$import->{params}{bar} = 1;
+
Index: /tags/2.00/t/20Epoll_Web.t
===================================================================
--- /tags/2.00/t/20Epoll_Web.t	(revision 478)
+++ /tags/2.00/t/20Epoll_Web.t	(revision 478)
@@ -0,0 +1,85 @@
+use strict;
+use warnings;
+use Test::More tests => 38;
+
+# $Id$
+
+$ENV{EPOLL_NO_COMMIT} = 1;
+
+use_ok 'Epoll', 'Epoll';
+use_ok 'Epoll::DB';
+use_ok 'Catalyst::Test', 'Epoll'; 
+
+my $vote = Epoll->model('Vote');
+
+ok(my $pollid = $vote->_create_poll('test@', 'Test poll', 'password'),
+    "Can get new poll id");
+
+ok(my $poll = $vote->poll($pollid), "Can get poll object");
+
+ok(my $vote_uid = $poll->uid, "Can get uid");
+
+ok($poll->addupd_voting('user@', 'id'), "Can add a voting");
+ok(my $votingpass = $poll->voting_from_mail('user@')->gen_passwd,
+    'can get voting password');
+
+diag("Test request before poll");
+ok( request('/')->is_success, 'Request should succeed' );
+ok( request("/poll/$pollid")->is_success, "Request /poll/$pollid should succeed" );
+ok( request("/poll/$vote_uid")->is_success, "Request /poll/$vote_uid should succeed" );
+
+ok( request("/admin/$pollid?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid should succeed" );
+ok( request("/admin/$pollid/voting?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid/voting should succeed" );
+ok( request("/admin/$pollid/ballot?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid/ballot should succeed" );
+
+ok( request("/admin/$pollid?vpass$pollid=password")->is_success, "Request /admin/$pollid should succeed" );
+ok( request("/ballot/$pollid?mail=user@;password=$votingpass")->is_success,
+    "Request /ballot/$pollid should succeed" );
+
+# Be sure today is included:
+diag("Test request during poll");
+ok($poll->param( start => '1/1/2000', end => '2/1/3000'),
+    "Can set poll date");
+
+ok( request('/')->is_success, 'Request should succeed' );
+ok( request("/poll/$pollid")->is_success, "Request /poll/$pollid should succeed" );
+ok( request("/poll/$pollid/report.pdf")->is_success, "Request /poll/$pollid/report.pdf should succeed" );
+
+ok( request("/admin/$pollid?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid should succeed" );
+ok( request("/admin/$pollid/voting?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid/voting should succeed" );
+ok( request("/admin/$pollid/ballot?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid/ballot should succeed" );
+
+ok( request("/ballot/$pollid")->is_success, "Request /ballot/$pollid should succeed" );
+ok( request("/ballot/$vote_uid")->is_success, "Request /ballot/$vote_uid should succeed" );
+ok( request("/ballot/$pollid?mail=user@;password=$votingpass")->is_success,
+    "Request /ballot/$pollid should succeed" );
+
+
+diag("Test request after poll");
+ok($poll->param( start => '1/1/1900', end => '2/1/1900'),
+    "Can set poll date");
+
+ok( request('/')->is_success, 'Request should succeed' );
+ok( request("/poll/$pollid")->is_success, "Request /poll/$pollid should succeed" );
+ok( request("/poll/$vote_uid")->is_success, "Request /poll/$vote_uid should succeed" );
+ok( request("/poll/$pollid/report.pdf")->is_success, "Request /poll/$pollid/report.pdf should succeed" );
+ok( request("/poll/$pollid/results.pdf")->is_success, "Request /poll/$pollid/results.pdf should succeed" );
+ok( request("/poll/$vote_uid/results.pdf")->is_success, "Request /poll/$vote_uid/results.pdf should succeed" );
+
+ok( request("/admin/$pollid?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid should succeed" );
+ok( request("/admin/$pollid/voting?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid/voting should succeed" );
+ok( request("/admin/$pollid/ballot?vpass$pollid=password")->is_success,
+    "Request /admin/$pollid/ballot should succeed" );
+
+ok( request("/ballot/$pollid")->is_success, "Request /admin/$pollid should succeed" );
+ok( request("/ballot/$pollid?mail=user@;password=$votingpass")->is_success,
+    "Request /admin/$pollid should succeed" );
+
Index: /tags/2.00/t/controller_Admin.t
===================================================================
--- /tags/2.00/t/controller_Admin.t	(revision 478)
+++ /tags/2.00/t/controller_Admin.t	(revision 478)
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+BEGIN { use_ok 'Catalyst::Test', 'Epoll' }
+BEGIN { use_ok 'Epoll::Controller::Admin' }
+
+ok( request('/admin')->is_redirect, 'Request should succeed' );
+
+
Index: /tags/2.00/t/controller_Ajax.t
===================================================================
--- /tags/2.00/t/controller_Ajax.t	(revision 478)
+++ /tags/2.00/t/controller_Ajax.t	(revision 478)
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+BEGIN { use_ok 'Catalyst::Test', 'Epoll' }
+BEGIN { use_ok 'Epoll::Controller::Ajax' }
+
+ok( request('/ajax')->is_success, 'Request should succeed' );
+
+
Index: /tags/2.00/t/controller_Ballot.t
===================================================================
--- /tags/2.00/t/controller_Ballot.t	(revision 478)
+++ /tags/2.00/t/controller_Ballot.t	(revision 478)
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+BEGIN { use_ok 'Catalyst::Test', 'Epoll' }
+BEGIN { use_ok 'Epoll::Controller::Ballot' }
+
+ok( request('/ballot')->is_redirect, 'Request should succeed' );
+
+
Index: /tags/2.00/t/controller_Epoll.t
===================================================================
--- /tags/2.00/t/controller_Epoll.t	(revision 478)
+++ /tags/2.00/t/controller_Epoll.t	(revision 478)
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+BEGIN { use_ok 'Catalyst::Test', 'Epoll' }
+BEGIN { use_ok 'Epoll::Controller::Vote' }
+
+ok( request('/vote')->is_redirect, 'Request should succeed' );
+
+
Index: /tags/2.00/t/controller_Newpoll.t
===================================================================
--- /tags/2.00/t/controller_Newpoll.t	(revision 478)
+++ /tags/2.00/t/controller_Newpoll.t	(revision 478)
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+BEGIN { use_ok 'Catalyst::Test', 'Epoll' }
+BEGIN { use_ok 'Epoll::Controller::Newpoll' }
+
+ok( request('/newpoll')->is_success, 'Request should succeed' );
+
+
Index: /tags/2.00/t/model_Epoll.t
===================================================================
--- /tags/2.00/t/model_Epoll.t	(revision 478)
+++ /tags/2.00/t/model_Epoll.t	(revision 478)
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+BEGIN { use_ok 'Epoll::Model::Vote' }
+
Index: /tags/2.00/t/view_Ajax.t
===================================================================
--- /tags/2.00/t/view_Ajax.t	(revision 478)
+++ /tags/2.00/t/view_Ajax.t	(revision 478)
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+BEGIN { use_ok 'Epoll::View::Ajax' }
+
Index: /tags/2.00/t/view_Latex.t
===================================================================
--- /tags/2.00/t/view_Latex.t	(revision 478)
+++ /tags/2.00/t/view_Latex.t	(revision 478)
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+BEGIN { use_ok 'Epoll::View::Latex' }
+
Index: /tags/2.00/t/view_Mail.t
===================================================================
--- /tags/2.00/t/view_Mail.t	(revision 478)
+++ /tags/2.00/t/view_Mail.t	(revision 478)
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+BEGIN { use_ok 'Epoll::View::Mail' }
+
Index: /tags/2.00/t/view_TT.t
===================================================================
--- /tags/2.00/t/view_TT.t	(revision 478)
+++ /tags/2.00/t/view_TT.t	(revision 478)
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+BEGIN { use_ok 'Epoll::View::TT' }
+
