[pkg-horde] [SCM] Debian Horde Packages repository: mnemo2 package branch, upstream, updated. af8b8c2537cf203b8a850db7040911e965a1da5e
Mathieu Parent
math.parent at gmail.com
Mon Dec 21 17:39:06 UTC 2009
The following commit has been merged in the upstream branch:
commit af8b8c2537cf203b8a850db7040911e965a1da5e
Author: Mathieu Parent <math.parent at gmail.com>
Date: Mon Dec 21 18:37:10 2009 +0100
Import new upstream sources 2.2.3
Summary: Import new upstream sources 2.2.3
Keywords:
Imported mnemo-h3-2.2.3
into Git repository
diff --git a/LICENSE b/LICENSE
index da074b8..437a0dc 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
Version 1.0
-Copyright (c) 2002-2005 The Horde Project. All rights reserved.
+Copyright 2002-2009 The Horde Project. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
diff --git a/README b/README
index f8912ed..4a88411 100644
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
What is Mnemo?
==============
-:Last update: $Date: 2007/12/20 14:17:36 $
+:Last update: $Date: 2007-12-20 14:17:36 $
:Revision: $Revision: 1.7.10.2 $
:Contact: horde at lists.horde.org
diff --git a/config/conf.xml b/config/conf.xml
index d6cb0fd..98b28f4 100644
--- a/config/conf.xml
+++ b/config/conf.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Horde: mnemo/config/conf.xml,v 1.17.10.1 2007/12/20 14:17:38 jan Exp $ -->
+<!-- $Horde: mnemo/config/conf.xml,v 1.17.10.1 2007-12-20 14:17:38 jan Exp $ -->
<configuration>
<configsection name="storage">
<configheader>Storage System Settings</configheader>
diff --git a/config/hooks.php.dist b/config/hooks.php.dist
new file mode 100644
index 0000000..0aaa90f
--- /dev/null
+++ b/config/hooks.php.dist
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Example hooks for Mnemo
+ *
+ * $Horde: mnemo/config/hooks.php.dist,v 1.1.2.1 2008-11-26 21:25:26 chuck Exp $
+ */
+
+// if (!function_exists('_mnemo_hook_format_description')) {
+// function _mnemo_hook_format_description($text)
+// {
+// $text = preg_replace('/#(\d+)/', '<a href="http://bugs.horde.org/ticket/\1">\0</a>', $text);
+// $text = preg_replace('/(bug|ticket|request|enhancement|issue):\s*#?(\d+)/i', '<a href="http://bugs.horde.org/ticket/\1">\0</a>', $text);
+//
+// $text = preg_replace_callback('/\[\[note: ?(.*)\]\]/i', create_function('$m', 'return \'<a href="/horde/mnemo/notes/?q=\' . urlencode($m[1]) . \'">\' . htmlspecialchars($m[0]) . \'</a>\';'), $text);
+// $text = preg_replace_callback('/\[\[task: ?(.*)\]\]/i', create_function('$m', 'return \'<a href="/horde/nag/tasks/?q=\' . urlencode($m[1]) . \'">\' . htmlspecialchars($m[0]) . \'</a>\';'), $text);
+//
+// return $text;
+// }
+// }
+
+// if (!function_exists('_mnemo_hook_description_help')) {
+// function _mnemo_hook_description_help()
+// {
+// return '<p>To create a link to a bug, use #123 where 123 is the bug number. To create a link to a task, use [[task: name]], where name is the beginning of the task name. To create a link to another note, use [[note: title]] where title is the beginning of the note title.</p>';
+// }
+// }
diff --git a/config/prefs.php.dist b/config/prefs.php.dist
index b83d5a4..5e566de 100644
--- a/config/prefs.php.dist
+++ b/config/prefs.php.dist
@@ -1,6 +1,6 @@
<?php
/**
- * $Horde: mnemo/config/prefs.php.dist,v 1.24.2.4 2008/06/13 14:44:04 jan Exp $
+ * $Horde: mnemo/config/prefs.php.dist,v 1.24.2.5 2009-06-19 17:06:22 jan Exp $
*
* See horde/config/prefs.php for documentation on the structure of this file.
*/
@@ -12,7 +12,7 @@ $prefGroups['display'] = array(
'column' => _("General Options"),
'label' => _("Display Options"),
'desc' => _("Change your note sorting and display options."),
- 'members' => array('show_notepad', 'show_panel', 'sortby', 'sortdir')
+ 'members' => array('show_notepad', 'sortby', 'sortdir')
);
$prefGroups['share'] = array(
@@ -45,8 +45,7 @@ $_prefs['show_panel'] = array(
'value' => 1,
'locked' => false,
'shared' => false,
- 'type' => 'checkbox',
- 'desc' => _("Show notepad options panel?")
+ 'type' => 'implicit',
);
// user preferred sorting column
diff --git a/data.php b/data.php
index 87de9a3..571fe25 100644
--- a/data.php
+++ b/data.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/data.php,v 1.36.2.11 2008/03/10 05:08:10 chuck Exp $
+ * $Horde: mnemo/data.php,v 1.36.2.12 2009-01-06 15:24:57 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/docs/CHANGES b/docs/CHANGES
index 0990248..a7e5740 100644
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -1,4 +1,30 @@
------
+v2.2.3
+------
+
+[jan] Add and fix Oracle SQL scripts.
+[jan] Add Croatian translation (Matej Vela <matej.vela at carnet.hr>).
+
+
+------
+v2.2.2
+------
+
+[mms] Upgrade prototype.js to v1.6.1.
+[jan] Fix synchronization with output compression enabled (Bug #7769).
+[jan] Add passphrase confirmation field (Bug #7379).
+[cjh] Work around BC break with Horde versions before 3.2 (Bug #7820).
+[cjh] Add URL access to notes by "starts-with" search on the note title.
+[cjh] Add hooks for altering the displayed note body and showing help text next
+ to the note entry field.
+[cjh] Explicitly load DB library (Bug #7648).
+[jan] Fix "replace" API method (Alfonso MarÃn MarÃn <almarin at um.es>, Bug #7436).
+[cjh] Add a PostgreSQL-specific upgrade script.
+[jan] Change group field in shares table to work with LDAP groups (Bug #6883).
+[jan] Fix user name conversion with user hooks in the notepad panel (Bug #7366).
+
+
+------
v2.2.1
------
diff --git a/docs/CREDITS b/docs/CREDITS
index b3f0dd3..96f4b7f 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -23,9 +23,11 @@ Bulgarian Miroslav Pendev <miro at cybershade.us>
Chinese (Simplified) Peter Wang <whw at oulink.net>
Anna Chen <annachen2008 at yahoo.com.cn>
Chinese (Traditional) Chih-Wei Yeh <cwyeh at ccca.nctu.edu.tw>
+Croatian Matej Vela <matej.vela at carnet.hr>
Czech Pavel Chytil <pavel at chytil.tk>
Danish Martin List-Petersen <martin at list-petersen.dk>
Brian Truelsen <horde+i18n at briantruelsen.dk>
+ Niels Baggesen <nba at users.sourceforge.net>
Dutch Jan Kuipers <jrkuipers at lauwerscollege.nl>
Finnish Leena Heino <liinu at uta.fi>
French Thierry Thomas <thierry at pompo.net>
diff --git a/docs/RELEASE_NOTES b/docs/RELEASE_NOTES
index 494e17d..c16e6ab 100644
--- a/docs/RELEASE_NOTES
+++ b/docs/RELEASE_NOTES
@@ -1,38 +1,35 @@
<?php
/**
- * Release focus. Possible values:
- * 0 - N/A
- * 1 - Initial freshmeat announcement
- * 2 - Documentation
- * 3 - Code cleanup
- * 4 - Minor feature enhancements
- * 5 - Major feature enhancements
- * 6 - Minor bugfixes
- * 7 - Major bugfixes
- * 8 - Minor security fixes
- * 9 - Major security fixes
+ * Release focus. Possible values (multiple possible with arrays):
+ * Horde_Release::FOCUS_INITIAL - Initial announcement
+ * Horde_Release::FOCUS_MINORFEATURE - Minor feature enhancement
+ * Horde_Release::FOCUS_MAJORFEATURE - Major feature enhancement
+ * Horde_Release::FOCUS_MINORBUG - Minor bugfixes
+ * Horde_Release::FOCUS_MAJORBUG - Major bugfixes
+ * Horde_Release::FOCUS_MINORSECURITY - Minor security fixes
+ * Horde_Release::FOCUS_MAJORSECURITY - Major security fixes
+ * Horde_Release::FOCUS_DOCS - Documentation improvements
*/
-$this->notes['fm']['focus'] = 4;
+$this->notes['fm']['focus'] = array(Horde_Release::FOCUS_MINORFEATURE);
/* Mailing list release notes. */
$this->notes['ml']['changes'] = <<<ML
The Horde Team is pleased to announce the final release of the Mnemo Note
-Manager version H3 (2.2.1).
+Manager version H3 (2.2.3).
The Mnemo Note Manager is the Horde notes/memos application. It provides
web-based notes and freeform text, similar to the PalmOS Note application and
shared notepads. It requires the Horde Application Framework and an SQL
database or Kolab server for backend storage.
-Major changes compared to the Mnemo H3 (2.2) version are:
- * Improved deleting user data.
- * Added Basque and Estonian translations.
+Major changes compared to the Mnemo H3 (2.2.2) version are:
+ * Improved Oracle compatibility.
+ * Added Croatian translation.
ML;
/* Freshmeat release notes. */
$this->notes['fm']['changes'] = <<<FM
-Deleting user data has been improved.
-Basque and Estonian translations have been added.
+Oracle compatibility has been improved. A Croatian translation has been added.
FM;
$this->notes['name'] = 'Mnemo';
diff --git a/docs/TODO b/docs/TODO
index 218a962..c2c2b42 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -2,7 +2,7 @@
Mnemo Development TODO List
=============================
-:Last update: $Date: 2007/12/20 14:17:38 $
+:Last update: $Date: 2007-12-20 14:17:38 $
:Revision: $Revision: 1.2.10.1 $
:Contact: horde at lists.horde.org
diff --git a/docs/UPGRADING b/docs/UPGRADING
index 362ece1..a38711d 100644
--- a/docs/UPGRADING
+++ b/docs/UPGRADING
@@ -1,9 +1,9 @@
-========================
+=================
Upgrading Mnemo
-========================
+=================
-:Last update: $Date: 2008/09/11 15:04:08 $
-:Revision: $Revision: 1.1.8.11 $
+:Last update: $Date: 2008-09-23 15:18:24 $
+:Revision: $Revision: 1.1.8.13 $
:Contact: horde at lists.horde.org
@@ -11,6 +11,16 @@ These are instructions to upgrade from earlier Mnemo versions. Please
backup your existing data before running any of the steps described below.
+Upgrading Mnemo from 2.2.1 to 2.2.2
+===================================
+
+The group_uid field in the SQL share driver groups table has been changed from
+an INT to a VARCHAR(255). Execute the provided SQL script to update your
+database if you are using the native SQL share driver.
+
+ mysql --user=root --password=<MySQL-root-password> <db name> < scripts/upgrades/2.2.1_to_2.2.2.sql
+
+
Upgrading Mnemo from 2.2 to 2.2.1
=================================
diff --git a/index.php b/index.php
index 67cb146..040f806 100644
--- a/index.php
+++ b/index.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/index.php,v 1.10.10.7 2008/01/02 11:32:25 jan Exp $
+ * $Horde: mnemo/index.php,v 1.10.10.8 2009-01-06 15:24:57 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/js/QuickFinder.js b/js/QuickFinder.js
index d0bc2df..d1dfef1 100644
--- a/js/QuickFinder.js
+++ b/js/QuickFinder.js
@@ -1 +1 @@
-var QuickFinder={attachBehavior:function(){$$("input").each(function(C){var B=C.readAttribute("for");if(!B){return }if(B.indexOf(",")!=-1){C.filterTargets=[];var A=B.split(",");for(var F=0;F<A.length;++F){var E=$(A[F]);if(E){C.filterTargets.push(E)}}if(!C.filterTargets.length){return }}else{C.filterTargets=[$(B)];if(!C.filterTargets[0]){return }}filterEmpty=C.readAttribute("empty");if(filterEmpty){C.filterEmpty=$(filterEmpty)}C.observe("keyup",QuickFinder.onKeyUp);for(var F=0,D=C.filterTargets.length;F<D;F++){C.filterTargets[F].immediateDescendants().each(function(G){var H=G.filterText||G.readAttribute("filterText");if(!H){G.filterText=G.innerHTML.stripTags()}G.filterText=G.filterText.toLowerCase()})}QuickFinder.filter(C)})},onKeyUp:function(A){input=A.element();if(input.filterTargets){QuickFinder.filter(input)}},filter:function(B){var F=B.value.toLowerCase();var A=0;for(var D=0,C=B.filterTargets.length;D<C;D++){B.filterTargets[D].immediateDescendants().each(function(G){var H=G.filterText;if(H.indexOf(F)==-1){G.addClassName("QuickFinderNoMatch")}else{++A;G.removeClassName("QuickFinderNoMatch")}})}try{if(B.filterEmpty){(A==0)?B.filterEmpty.show():B.filterEmpty.hide()}}catch(E){}}};document.observe("dom:loaded",QuickFinder.attachBehavior);
\ No newline at end of file
+var QuickFinder={attachBehavior:function(){$$("input").each(function(c){var b=c.readAttribute("for");if(!b){return}if(b.indexOf(",")!=-1){c.filterTargets=[];var a=b.split(",");for(var f=0;f<a.length;++f){var e=$(a[f]);if(e){c.filterTargets.push(e)}}if(!c.filterTargets.length){return}}else{c.filterTargets=[$(b)];if(!c.filterTargets[0]){return}}filterEmpty=c.readAttribute("empty");if(filterEmpty){c.filterEmpty=$(filterEmpty)}c.observe("keyup",QuickFinder.onKeyUp);for(var f=0,d=c.filterTargets.length;f<d;f++){c.filterTargets[f].immediateDescendants().each(function(g){var h=g.filterText||g.readAttribute("filterText");if(!h){g.filterText=g.innerHTML.stripTags()}g.filterText=g.filterText.toLowerCase()})}QuickFinder.filter(c)})},onKeyUp:function(a){input=a.element();if(input.filterTargets){QuickFinder.filter(input)}},filter:function(b){var g=b.value.toLowerCase();var a=0;for(var d=0,c=b.filterTargets.length;d<c;d++){b.filterTargets[d].immediateDescendants().each(function(e){var h=e.filterText;if(h.indexOf(g)==-1){e.addClassName("QuickFinderNoMatch")}else{++a;e.removeClassName("QuickFinderNoMatch")}})}try{if(b.filterEmpty){(a==0)?b.filterEmpty.show():b.filterEmpty.hide()}}catch(f){}}};document.observe("dom:loaded",QuickFinder.attachBehavior);
\ No newline at end of file
diff --git a/js/prototype.js b/js/prototype.js
index ab8726c..80e8d60 100644
--- a/js/prototype.js
+++ b/js/prototype.js
@@ -1 +1 @@
-var Prototype={Version:"1.6.0.2",Browser:{IE:!!(window.attachEvent&&!window.opera),Opera:!!window.opera,WebKit:navigator.userAgent.indexOf("AppleWebKit/")>-1,Gecko:navigator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("KHTML")==-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement("div").__proto__&&document.createElement("div").__proto__!==document.createElement("form").__proto__},ScriptFragment:"<script[^>]*>([\\S\\s]*?)<\/script>",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(A){return A}};if(Prototype.Browser.MobileSafari){Prototype.BrowserFeatures.SpecificElementExtensions=false}var Class={create:function(){var E=null,D=$A(arguments);if(Object.isFunction(D[0])){E=D.shift()}function A(){this.initialize.apply(this,arguments)}Object.extend(A,Class.Methods);A.superclass=E;A.subclasses=[];if(E){var B=function(){};B.prototype=E.prototype;A.prototype=new B;E.subclasses.push(A)}for(var C=0;C<D.length;C++){A.addMethods(D[C])}if(!A.prototype.initialize){A.prototype.initialize=Prototype.emptyFunction}A.prototype.constructor=A;return A}};Class.Methods={addMethods:function(G){var C=this.superclass&&this.superclass.prototype;var B=Object.keys(G);if(!Object.keys({toString:true}).length){B.push("toString","valueOf")}for(var A=0,D=B.length;A<D;A++){var F=B[A],E=G[F];if(C&&Object.isFunction(E)&&E.argumentNames().first()=="$super"){var H=E,E=Object.extend((function(I){return function(){return C[I].apply(this,arguments)}})(F).wrap(H),{valueOf:function(){return H},toString:function(){return H.toString()}})}this.prototype[F]=E}return this}};var Abstract={};Object.extend=function(A,C){for(var B in C){A[B]=C[B]}return A};Object.extend(Object,{inspect:function(A){try{if(Object.isUndefined(A)){return"undefined"}if(A===null){return"null"}return A.inspect?A.inspect():String(A)}catch(B){if(B instanceof RangeError){return"..."}throw B}},toJSON:function(A){var C=typeof A;switch(C){case"undefined":case"function":case"unknown":return ;case"boolean":return A.toString()}if(A===null){return"null"}if(A.toJSON){return A.toJSON()}if(Object.isElement(A)){return }var B=[];for(var E in A){var D=Object.toJSON(A[E]);if(!Object.isUndefined(D)){B.push(E.toJSON()+": "+D)}}return"{"+B.join(", ")+"}"},toQueryString:function(A){return $H(A).toQueryString()},toHTML:function(A){return A&&A.toHTML?A.toHTML():String.interpret(A)},keys:function(A){var B=[];for(var C in A){B.push(C)}return B},values:function(B){var A=[];for(var C in B){A.push(B[C])}return A},clone:function(A){return Object.extend({},A)},isElement:function(A){return A&&A.nodeType==1},isArray:function(A){return A!=null&&typeof A=="object"&&"splice" in A&&"join" in A},isHash:function(A){return A instanceof Hash},isFunction:function(A){return typeof A=="function"},isString:function(A){return typeof A=="string"},isNumber:function(A){return typeof A=="number"},isUndefined:function(A){return typeof A=="undefined"}});Object.extend(Function.prototype,{argumentNames:function(){var A=this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");return A.length==1&&!A[0]?[]:A},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0])){return this}var A=this,C=$A(arguments),B=C.shift();return function(){return A.apply(B,C.concat($A(arguments)))}},bindAsEventListener:function(){var A=this,C=$A(arguments),B=C.shift();return function(D){return A.apply(B,[D||window.event].concat(C))}},curry:function(){if(!arguments.length){return this}var A=this,B=$A(arguments);return function(){return A.apply(this,B.concat($A(arguments)))}},delay:function(){var A=this,B=$A(arguments),C=B.shift()*1000;return window.setTimeout(function(){return A.apply(A,B)},C)},wrap:function(B){var A=this;return function(){return B.apply(this,[A.bind(this)].concat($A(arguments)))}},methodize:function(){if(this._methodized){return this._methodized}var A=this;return this._methodized=function(){return A.apply(null,[this].concat($A(arguments)))}}});Function.prototype.defer=Function.prototype.delay.curry(0.01);Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+"-"+(this.getUTCMonth()+1).toPaddedString(2)+"-"+this.getUTCDate().toPaddedString(2)+"T"+this.getUTCHours().toPaddedString(2)+":"+this.getUTCMinutes().toPaddedString(2)+":"+this.getUTCSeconds().toPaddedString(2)+'Z"'};var Try={these:function(){var C;for(var B=0,D=arguments.length;B<D;B++){var A=arguments[B];try{C=A();break}catch(E){}}return C}};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(A){return String(A).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")};var PeriodicalExecuter=Class.create({initialize:function(B,A){this.callback=B;this.frequency=A;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},execute:function(){this.callback(this)},stop:function(){if(!this.timer){return }clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute()}finally{this.currentlyExecuting=false}}}});Object.extend(String,{interpret:function(A){return A==null?"":String(A)},specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"}});Object.extend(String.prototype,{gsub:function(E,C){var A="",D=this,B;C=arguments.callee.prepareReplacement(C);while(D.length>0){if(B=D.match(E)){A+=D.slice(0,B.index);A+=String.interpret(C(B));D=D.slice(B.index+B[0].length)}else{A+=D,D=""}}return A},sub:function(C,A,B){A=this.gsub.prepareReplacement(A);B=Object.isUndefined(B)?1:B;return this.gsub(C,function(D){if(--B<0){return D[0]}return A(D)})},scan:function(B,A){this.gsub(B,A);return String(this)},truncate:function(B,A){B=B||30;A=Object.isUndefined(A)?"...":A;return this.length>B?this.slice(0,B-A.length)+A:String(this)},strip:function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,"")},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")},extractScripts:function(){var B=new RegExp(Prototype.ScriptFragment,"img");var A=new RegExp(Prototype.ScriptFragment,"im");return(this.match(B)||[]).map(function(C){return(C.match(A)||["",""])[1]})},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)})},escapeHTML:function(){var A=arguments.callee;A.text.data=this;return A.div.innerHTML},unescapeHTML:function(){var A=new Element("div");A.innerHTML=this.stripTags();return A.childNodes[0]?(A.childNodes.length>1?$A(A.childNodes).inject("",function(B,C){return B+C.nodeValue}):A.childNodes[0].nodeValue):""},toQueryParams:function(B){var A=this.strip().match(/([^?#]*)(#.*)?$/);if(!A){return{}}return A[1].split(B||"&").inject({},function(E,F){if((F=F.split("="))[0]){var C=decodeURIComponent(F.shift());var D=F.length>1?F.join("="):F[0];if(D!=undefined){D=decodeURIComponent(D)}if(C in E){if(!Object.isArray(E[C])){E[C]=[E[C]]}E[C].push(D)}else{E[C]=D}}return E})},toArray:function(){return this.split("")},succ:function(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)},times:function(A){return A<1?"":new Array(A+1).join(this)},camelize:function(){var D=this.split("-"),A=D.length;if(A==1){return D[0]}var C=this.charAt(0)=="-"?D[0].charAt(0).toUpperCase()+D[0].substring(1):D[0];for(var B=1;B<A;B++){C+=D[B].charAt(0).toUpperCase()+D[B].substring(1)}return C},capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()},underscore:function(){return this.gsub(/::/,"/").gsub(/([A-Z]+)([A-Z][a-z])/,"#{1}_#{2}").gsub(/([a-z\d])([A-Z])/,"#{1}_#{2}").gsub(/-/,"_").toLowerCase()},dasherize:function(){return this.gsub(/_/,"-")},inspect:function(B){var A=this.gsub(/[\x00-\x1f\\]/,function(C){var D=String.specialChar[C[0]];return D?D:"\\u00"+C[0].charCodeAt().toPaddedString(2,16)});if(B){return'"'+A.replace(/"/g,'\\"')+'"'}return"'"+A.replace(/'/g,"\\'")+"'"},toJSON:function(){return this.inspect(true)},unfilterJSON:function(A){return this.sub(A||Prototype.JSONFilter,"#{1}")},isJSON:function(){var A=this;if(A.blank()){return false}A=this.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,"");return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(A)},evalJSON:function(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON()){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())},include:function(A){return this.indexOf(A)>-1},startsWith:function(A){return this.indexOf(A)===0},endsWith:function(A){var B=this.length-A.length;return B>=0&&this.lastIndexOf(A)===B},empty:function(){return this==""},blank:function(){return/^\s*$/.test(this)},interpolate:function(A,B){return new Template(this,B).evaluate(A)}});if(Prototype.Browser.WebKit||Prototype.Browser.IE){Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},unescapeHTML:function(){return this.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}})}String.prototype.gsub.prepareReplacement=function(B){if(Object.isFunction(B)){return B}var A=new Template(B);return function(C){return A.evaluate(C)}};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement("div"),text:document.createTextNode("")});with(String.prototype.escapeHTML){div.appendChild(text)}var Template=Class.create({initialize:function(A,B){this.template=A.toString();this.pattern=B||Template.Pattern},evaluate:function(A){if(Object.isFunction(A.toTemplateReplacements)){A=A.toTemplateReplacements()}return this.template.gsub(this.pattern,function(D){if(A==null){return""}var F=D[1]||"";if(F=="\\"){return D[2]}var B=A,G=D[3];var E=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;D=E.exec(G);if(D==null){return F}while(D!=null){var C=D[1].startsWith("[")?D[2].gsub("\\\\]","]"):D[1];B=B[C];if(null==B||""==D[3]){break}G=G.substring("["==D[3]?D[1].length:D[0].length);D=E.exec(G)}return F+String.interpret(B)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable={each:function(C,B){var A=0;C=C.bind(B);try{this._each(function(E){C(E,A++)})}catch(D){if(D!=$break){throw D}}return this},eachSlice:function(D,C,B){C=C?C.bind(B):Prototype.K;var A=-D,E=[],F=this.toArray();while((A+=D)<F.length){E.push(F.slice(A,A+D))}return E.collect(C,B)},all:function(C,B){C=C?C.bind(B):Prototype.K;var A=true;this.each(function(E,D){A=A&&!!C(E,D);if(!A){throw $break}});return A},any:function(C,B){C=C?C.bind(B):Prototype.K;var A=false;this.each(function(E,D){if(A=!!C(E,D)){throw $break}});return A},collect:function(C,B){C=C?C.bind(B):Prototype.K;var A=[];this.each(function(E,D){A.push(C(E,D))});return A},detect:function(C,B){C=C.bind(B);var A;this.each(function(E,D){if(C(E,D)){A=E;throw $break}});return A},findAll:function(C,B){C=C.bind(B);var A=[];this.each(function(E,D){if(C(E,D)){A.push(E)}});return A},grep:function(D,C,B){C=C?C.bind(B):Prototype.K;var A=[];if(Object.isString(D)){D=new RegExp(D)}this.each(function(F,E){if(D.match(F)){A.push(C(F,E))}});return A},include:function(A){if(Object.isFunction(this.indexOf)){if(this.indexOf(A)!=-1){return true}}var B=false;this.each(function(C){if(C==A){B=true;throw $break}});return B},inGroupsOf:function(B,A){A=Object.isUndefined(A)?null:A;return this.eachSlice(B,function(C){while(C.length<B){C.push(A)}return C})},inject:function(A,C,B){C=C.bind(B);this.each(function(E,D){A=C(A,E,D)});return A},invoke:function(B){var A=$A(arguments).slice(1);return this.map(function(C){return C[B].apply(C,A)})},max:function(C,B){C=C?C.bind(B):Prototype.K;var A;this.each(function(E,D){E=C(E,D);if(A==null||E>=A){A=E}});return A},min:function(C,B){C=C?C.bind(B):Prototype.K;var A;this.each(function(E,D){E=C(E,D);if(A==null||E<A){A=E}});return A},partition:function(D,B){D=D?D.bind(B):Prototype.K;var C=[],A=[];this.each(function(F,E){(D(F,E)?C:A).push(F)});return[C,A]},pluck:function(B){var A=[];this.each(function(C){A.push(C[B])});return A},reject:function(C,B){C=C.bind(B);var A=[];this.each(function(E,D){if(!C(E,D)){A.push(E)}});return A},sortBy:function(B,A){B=B.bind(A);return this.map(function(D,C){return{value:D,criteria:B(D,C)}}).sort(function(F,E){var D=F.criteria,C=E.criteria;return D<C?-1:D>C?1:0}).pluck("value")},toArray:function(){return this.map()},zip:function(){var B=Prototype.K,A=$A(arguments);if(Object.isFunction(A.last())){B=A.pop()}var C=[this].concat(A).map($A);return this.map(function(E,D){return B(C.pluck(D))})},size:function(){return this.toArray().length},inspect:function(){return"#<Enumerable:"+this.toArray().inspect()+">"}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});function $A(C){if(!C){return[]}if(C.toArray){return C.toArray()}var B=C.length||0,A=new Array(B);while(B--){A[B]=C[B]}return A}if(Prototype.Browser.WebKit){$A=function(C){if(!C){return[]}if(!(Object.isFunction(C)&&C=="[object NodeList]")&&C.toArray){return C.toArray()}var B=C.length||0,A=new Array(B);while(B--){A[B]=C[B]}return A}}Array.from=$A;Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse){Array.prototype._reverse=Array.prototype.reverse}Object.extend(Array.prototype,{_each:function(B){for(var A=0,C=this.length;A<C;A++){B(this[A])}},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(A){return A!=null})},flatten:function(){return this.inject([],function(B,A){return B.concat(Object.isArray(A)?A.flatten():[A])})},without:function(){var A=$A(arguments);return this.select(function(B){return !A.include(B)})},reverse:function(A){return(A!==false?this:this.toArray())._reverse()},reduce:function(){return this.length>1?this:this[0]},uniq:function(A){return this.inject([],function(D,C,B){if(0==B||(A?D.last()!=C:!D.include(C))){D.push(C)}return D})},intersect:function(A){return this.uniq().findAll(function(B){return A.detect(function(C){return B===C})})},clone:function(){return[].concat(this)},size:function(){return this.length},inspect:function(){return"["+this.map(Object.inspect).join(", ")+"]"},toJSON:function(){var A=[];this.each(function(B){var C=Object.toJSON(B);if(!Object.isUndefined(C)){A.push(C)}});return"["+A.join(", ")+"]"}});if(Object.isFunction(Array.prototype.forEach)){Array.prototype._each=Array.prototype.forEach}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(C,A){A||(A=0);var B=this.length;if(A<0){A=B+A}for(;A<B;A++){if(this[A]===C){return A}}return -1}}if(!Array.prototype.lastIndexOf){Array.prototype.lastIndexOf=function(B,A){A=isNaN(A)?this.length:(A<0?this.length+A:A)+1;var C=this.slice(0,A).reverse().indexOf(B);return(C<0)?C:A-C-1}}Array.prototype.toArray=Array.prototype.clone;function $w(A){if(!Object.isString(A)){return[]}A=A.strip();return A?A.split(/\s+/):[]}if(Prototype.Browser.Opera){Array.prototype.concat=function(){var E=[];for(var B=0,C=this.length;B<C;B++){E.push(this[B])}for(var B=0,C=arguments.length;B<C;B++){if(Object.isArray(arguments[B])){for(var A=0,D=arguments[B].length;A<D;A++){E.push(arguments[B][A])}}else{E.push(arguments[B])}}return E}}Object.extend(Number.prototype,{toColorPart:function(){return this.toPaddedString(2,16)},succ:function(){return this+1},times:function(A){$R(0,this,true).each(A);return this},toPaddedString:function(C,B){var A=this.toString(B||10);return"0".times(C-A.length)+A},toJSON:function(){return isFinite(this)?this.toString():"null"}});$w("abs round ceil floor").each(function(A){Number.prototype[A]=Math[A].methodize()});function $H(A){return new Hash(A)}var Hash=Class.create(Enumerable,(function(){function A(B,C){if(Object.isUndefined(C)){return B}return B+"="+encodeURIComponent(String.interpret(C))}return{initialize:function(B){this._object=Object.isHash(B)?B.toObject():Object.clone(B)},_each:function(C){for(var B in this._object){var D=this._object[B],E=[B,D];E.key=B;E.value=D;C(E)}},set:function(B,C){return this._object[B]=C},get:function(B){return this._object[B]},unset:function(B){var C=this._object[B];delete this._object[B];return C},toObject:function(){return Object.clone(this._object)},keys:function(){return this.pluck("key")},values:function(){return this.pluck("value")},index:function(C){var B=this.detect(function(D){return D.value===C});return B&&B.key},merge:function(B){return this.clone().update(B)},update:function(B){return new Hash(B).inject(this,function(C,D){C.set(D.key,D.value);return C})},toQueryString:function(){return this.map(function(D){var C=encodeURIComponent(D.key),B=D.value;if(B&&typeof B=="object"){if(Object.isArray(B)){return B.map(A.curry(C)).join("&")}}return A(C,B)}).join("&")},inspect:function(){return"#<Hash:{"+this.map(function(B){return B.map(Object.inspect).join(": ")}).join(", ")+"}>"},toJSON:function(){return Object.toJSON(this.toObject())},clone:function(){return new Hash(this)}}})());Hash.prototype.toTemplateReplacements=Hash.prototype.toObject;Hash.from=$H;var ObjectRange=Class.create(Enumerable,{initialize:function(C,A,B){this.start=C;this.end=A;this.exclusive=B},_each:function(A){var B=this.start;while(this.include(B)){A(B);B=B.succ()}},include:function(A){if(A<this.start){return false}if(this.exclusive){return A<this.end}return A<=this.end}});var $R=function(C,A,B){return new ObjectRange(C,A,B)};var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(A){this.responders._each(A)},register:function(A){if(!this.include(A)){this.responders.push(A)}},unregister:function(A){this.responders=this.responders.without(A)},dispatch:function(D,B,C,A){this.each(function(E){if(Object.isFunction(E[D])){try{E[D].apply(E,[B,C,A])}catch(F){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(A){this.options={method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",parameters:"",evalJSON:true,evalJS:true};Object.extend(this.options,A||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters)){this.options.parameters=this.options.parameters.toQueryParams()}else{if(Object.isHash(this.options.parameters)){this.options.parameters=this.options.parameters.toObject()}}}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,B,A){$super(A);this.transport=Ajax.getTransport();this.request(B)},request:function(B){this.url=B;this.method=this.options.method;var D=Object.clone(this.options.parameters);if(!["get","post"].include(this.method)){D._method=this.method;this.method="post"}this.parameters=D;if(D=Object.toQueryString(D)){if(this.method=="get"){this.url+=(this.url.include("?")?"&":"?")+D}else{if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){D+="&_="}}}try{var A=new Ajax.Response(this);if(this.options.onCreate){this.options.onCreate(A)}Ajax.Responders.dispatch("onCreate",this,A);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){this.respondToReadyState.bind(this).defer(1)}this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=="post"?(this.options.postBody||D):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange()}}catch(C){this.dispatchException(C)}},onStateChange:function(){var A=this.transport.readyState;if(A>1&&!((A==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var E={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){E["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){E.Connection="close"}}if(typeof this.options.requestHeaders=="object"){var C=this.options.requestHeaders;if(Object.isFunction(C.push)){for(var B=0,D=C.length;B<D;B+=2){E[C[B]]=C[B+1]}}else{$H(C).each(function(F){E[F.key]=F.value})}}for(var A in E){this.transport.setRequestHeader(A,E[A])}},success:function(){var A=this.getStatus();return !A||(A>=200&&A<300)},getStatus:function(){try{return this.transport.status||0}catch(A){return 0}},respondToReadyState:function(A){var C=Ajax.Request.Events[A],B=new Ajax.Response(this);if(C=="Complete"){try{this._complete=true;(this.options["on"+B.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(B,B.headerJSON)}catch(D){this.dispatchException(D)}var E=B.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&E&&E.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+C]||Prototype.emptyFunction)(B,B.headerJSON);Ajax.Responders.dispatch("on"+C,this,B,B.headerJSON)}catch(D){this.dispatchException(D)}if(C=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var A=this.url.match(/^\s*https?:\/\/[^\/]*/);return !A||(A[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""}))},getHeader:function(A){try{return this.transport.getResponseHeader(A)||null}catch(B){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(A){(this.options.onException||Prototype.emptyFunction)(this,A);Ajax.Responders.dispatch("onException",this,A)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(C){this.request=C;var D=this.transport=C.transport,A=this.readyState=D.readyState;if((A>2&&!Prototype.Browser.IE)||A==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(D.responseText);this.headerJSON=this._getHeaderJSON()}if(A==4){var B=D.responseXML;this.responseXML=Object.isUndefined(B)?null:B;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(A){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(A){return null}},getResponseHeader:function(A){return this.transport.getResponseHeader(A)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var A=this.getHeader("X-JSON");if(!A){return null}A=decodeURIComponent(escape(A));try{return A.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(B){this.request.dispatchException(B)}},_getResponseJSON:function(){var A=this.request.options;if(!A.evalJSON||(A.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json"))||this.responseText.blank()){return null}try{return this.responseText.evalJSON(A.sanitizeJSON||!this.request.isSameOrigin())}catch(B){this.request.dispatchException(B)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,A,C,B){this.container={success:(A.success||A),failure:(A.failure||(A.success?null:A))};B=Object.clone(B);var D=B.onComplete;B.onComplete=(function(E,F){this.updateContent(E.responseText);if(Object.isFunction(D)){D(E,F)}}).bind(this);$super(C,B)},updateContent:function(D){var C=this.container[this.success()?"success":"failure"],A=this.options;if(!A.evalScripts){D=D.stripScripts()}if(C=$(C)){if(A.insertion){if(Object.isString(A.insertion)){var B={};B[A.insertion]=D;C.insert(B)}else{A.insertion(C,D)}}else{C.update(D)}}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,A,C,B){$super(B);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=A;this.url=C;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(A){if(this.options.decay){this.decay=(A.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=A.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(B){if(arguments.length>1){for(var A=0,D=[],C=arguments.length;A<C;A++){D.push($(arguments[A]))}return D}if(Object.isString(B)){B=document.getElementById(B)}return Element.extend(B)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(F,A){var C=[];var E=document.evaluate(F,$(A)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var B=0,D=E.snapshotLength;B<D;B++){C.push(Element.extend(E.snapshotItem(B)))}return C}}if(!window.Node){var Node={}}if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12})}(function(){var A=this.Element;this.Element=function(D,C){C=C||{};D=D.toLowerCase();var B=Element.cache;if(Prototype.Browser.IE&&C.name){D="<"+D+' name="'+C.name+'">';delete C.name;return Element.writeAttribute(document.createElement(D),C)}if(!B[D]){B[D]=Element.extend(document.createElement(D))}return Element.writeAttribute(B[D].cloneNode(false),C)};Object.extend(this.Element,A||{})}).call(window);Element.cache={};Element.Methods={visible:function(A){return $(A).style.display!="none"},toggle:function(A){A=$(A);Element[Element.visible(A)?"hide":"show"](A);return A},hide:function(A){$(A).style.display="none";return A},show:function(A){$(A).style.display="";return A},remove:function(A){A=$(A);A.parentNode.removeChild(A);return A},update:function(A,B){A=$(A);if(B&&B.toElement){B=B.toElement()}if(Object.isElement(B)){return A.update().insert(B)}B=Object.toHTML(B);A.innerHTML=B.stripScripts();B.evalScripts.bind(B).defer();return A},replace:function(B,C){B=$(B);if(C&&C.toElement){C=C.toElement()}else{if(!Object.isElement(C)){C=Object.toHTML(C);var A=B.ownerDocument.createRange();A.selectNode(B);C.evalScripts.bind(C).defer();C=A.createContextualFragment(C.stripScripts())}}B.parentNode.replaceChild(C,B);return B},insert:function(C,E){C=$(C);if(Object.isString(E)||Object.isNumber(E)||Object.isElement(E)||(E&&(E.toElement||E.toHTML))){E={bottom:E}}var D,F,B,G;for(var A in E){D=E[A];A=A.toLowerCase();F=Element._insertionTranslations[A];if(D&&D.toElement){D=D.toElement()}if(Object.isElement(D)){F(C,D);continue}D=Object.toHTML(D);B=((A=="before"||A=="after")?C.parentNode:C).tagName.toUpperCase();G=Element._getContentFromAnonymousElement(B,D.stripScripts());if(A=="top"||A=="after"){G.reverse()}G.each(F.curry(C));D.evalScripts.bind(D).defer()}return C},wrap:function(B,C,A){B=$(B);if(Object.isElement(C)){$(C).writeAttribute(A||{})}else{if(Object.isString(C)){C=new Element(C,A)}else{C=new Element("div",C)}}if(B.parentNode){B.parentNode.replaceChild(C,B)}C.appendChild(B);return C},inspect:function(B){B=$(B);var A="<"+B.tagName.toLowerCase();$H({id:"id",className:"class"}).each(function(F){var E=F.first(),C=F.last();var D=(B[E]||"").toString();if(D){A+=" "+C+"="+D.inspect(true)}});return A+">"},recursivelyCollect:function(A,C){A=$(A);var B=[];while(A=A[C]){if(A.nodeType==1){B.push(Element.extend(A))}}return B},ancestors:function(A){return $(A).recursivelyCollect("parentNode")},descendants:function(A){return $(A).select("*")},firstDescendant:function(A){A=$(A).firstChild;while(A&&A.nodeType!=1){A=A.nextSibling}return $(A)},immediateDescendants:function(A){if(!(A=$(A).firstChild)){return[]}while(A&&A.nodeType!=1){A=A.nextSibling}if(A){return[A].concat($(A).nextSiblings())}return[]},previousSiblings:function(A){return $(A).recursivelyCollect("previousSibling")},nextSiblings:function(A){return $(A).recursivelyCollect("nextSibling")},siblings:function(A){A=$(A);return A.previousSiblings().reverse().concat(A.nextSiblings())},match:function(B,A){if(Object.isString(A)){A=new Selector(A)}return A.match($(B))},up:function(B,D,A){B=$(B);if(arguments.length==1){return $(B.parentNode)}var C=B.ancestors();return Object.isNumber(D)?C[D]:Selector.findElement(C,D,A)},down:function(B,C,A){B=$(B);if(arguments.length==1){return B.firstDescendant()}return Object.isNumber(C)?B.descendants()[C]:B.select(C)[A||0]},previous:function(B,D,A){B=$(B);if(arguments.length==1){return $(Selector.handlers.previousElementSibling(B))}var C=B.previousSiblings();return Object.isNumber(D)?C[D]:Selector.findElement(C,D,A)},next:function(C,D,B){C=$(C);if(arguments.length==1){return $(Selector.handlers.nextElementSibling(C))}var A=C.nextSiblings();return Object.isNumber(D)?A[D]:Selector.findElement(A,D,B)},select:function(){var A=$A(arguments),B=$(A.shift());return Selector.findChildElements(B,A)},adjacent:function(){var A=$A(arguments),B=$(A.shift());return Selector.findChildElements(B.parentNode,A).without(B)},identify:function(B){B=$(B);var C=B.readAttribute("id"),A=arguments.callee;if(C){return C}do{C="anonymous_element_"+A.counter++}while($(C));B.writeAttribute("id",C);return C},readAttribute:function(C,A){C=$(C);if(Prototype.Browser.IE){var B=Element._attributeTranslations.read;if(B.values[A]){return B.values[A](C,A)}if(B.names[A]){A=B.names[A]}if(A.include(":")){return(!C.attributes||!C.attributes[A])?null:C.attributes[A].value}}return C.getAttribute(A)},writeAttribute:function(E,C,F){E=$(E);var B={},D=Element._attributeTranslations.write;if(typeof C=="object"){B=C}else{B[C]=Object.isUndefined(F)?true:F}for(var A in B){C=D.names[A]||A;F=B[A];if(D.values[A]){C=D.values[A](E,F)}if(F===false||F===null){E.removeAttribute(C)}else{if(F===true){E.setAttribute(C,C)}else{E.setAttribute(C,F)}}}return E},getHeight:function(A){return $(A).getDimensions().height},getWidth:function(A){return $(A).getDimensions().width},classNames:function(A){return new Element.ClassNames(A)},hasClassName:function(A,B){if(!(A=$(A))){return }var C=A.className;return(C.length>0&&(C==B||new RegExp("(^|\\s)"+B+"(\\s|$)").test(C)))},addClassName:function(A,B){if(!(A=$(A))){return }if(!A.hasClassName(B)){A.className+=(A.className?" ":"")+B}return A},removeClassName:function(A,B){if(!(A=$(A))){return }A.className=A.className.replace(new RegExp("(^|\\s+)"+B+"(\\s+|$)")," ").strip();return A},toggleClassName:function(A,B){if(!(A=$(A))){return }return A[A.hasClassName(B)?"removeClassName":"addClassName"](B)},cleanWhitespace:function(B){B=$(B);var C=B.firstChild;while(C){var A=C.nextSibling;if(C.nodeType==3&&!/\S/.test(C.nodeValue)){B.removeChild(C)}C=A}return B},empty:function(A){return $(A).innerHTML.blank()},descendantOf:function(D,C){D=$(D),C=$(C);var F=C;if(D.compareDocumentPosition){return(D.compareDocumentPosition(C)&8)===8}if(D.sourceIndex&&!Prototype.Browser.Opera){var E=D.sourceIndex,B=C.sourceIndex,A=C.nextSibling;if(!A){do{C=C.parentNode}while(!(A=C.nextSibling)&&C.parentNode)}if(A&&A.sourceIndex){return(E>B&&E<A.sourceIndex)}}while(D=D.parentNode){if(D==F){return true}}return false},scrollTo:function(A){A=$(A);var B=A.cumulativeOffset();window.scrollTo(B[0],B[1]);return A},getStyle:function(B,C){B=$(B);C=C=="float"?"cssFloat":C.camelize();var D=B.style[C];if(!D){var A=document.defaultView.getComputedStyle(B,null);D=A?A[C]:null}if(C=="opacity"){return D?parseFloat(D):1}return D=="auto"?null:D},getOpacity:function(A){return $(A).getStyle("opacity")},setStyle:function(B,C){B=$(B);var E=B.style,A;if(Object.isString(C)){B.style.cssText+=";"+C;return C.include("opacity")?B.setOpacity(C.match(/opacity:\s*(\d?\.?\d*)/)[1]):B}for(var D in C){if(D=="opacity"){B.setOpacity(C[D])}else{E[(D=="float"||D=="cssFloat")?(Object.isUndefined(E.styleFloat)?"cssFloat":"styleFloat"):D]=C[D]}}return B},setOpacity:function(A,B){A=$(A);A.style.opacity=(B==1||B==="")?"":(B<0.00001)?0:B;return A},getDimensions:function(C){C=$(C);var G=$(C).getStyle("display");if(G!="none"&&G!=null){return{width:C.offsetWidth,height:C.offsetHeight}}var B=C.style;var F=B.visibility;var D=B.position;var A=B.display;B.visibility="hidden";B.position="absolute";B.display="block";var H=C.clientWidth;var E=C.clientHeight;B.display=A;B.position=D;B.visibility=F;return{width:H,height:E}},makePositioned:function(A){A=$(A);var B=Element.getStyle(A,"position");if(B=="static"||!B){A._madePositioned=true;A.style.position="relative";if(window.opera){A.style.top=0;A.style.left=0}}return A},undoPositioned:function(A){A=$(A);if(A._madePositioned){A._madePositioned=undefined;A.style.position=A.style.top=A.style.left=A.style.bottom=A.style.right=""}return A},makeClipping:function(A){A=$(A);if(A._overflow){return A}A._overflow=Element.getStyle(A,"overflow")||"auto";if(A._overflow!=="hidden"){A.style.overflow="hidden"}return A},undoClipping:function(A){A=$(A);if(!A._overflow){return A}A.style.overflow=A._overflow=="auto"?"":A._overflow;A._overflow=null;return A},cumulativeOffset:function(B){var A=0,C=0;do{A+=B.offsetTop||0;C+=B.offsetLeft||0;B=B.offsetParent}while(B);return Element._returnOffset(C,A)},positionedOffset:function(B){var A=0,D=0;do{A+=B.offsetTop||0;D+=B.offsetLeft||0;B=B.offsetParent;if(B){if(B.tagName=="BODY"){break}var C=Element.getStyle(B,"position");if(C!=="static"){break}}}while(B);return Element._returnOffset(D,A)},absolutize:function(B){B=$(B);if(B.getStyle("position")=="absolute"){return }var D=B.positionedOffset();var F=D[1];var E=D[0];var C=B.clientWidth;var A=B.clientHeight;B._originalLeft=E-parseFloat(B.style.left||0);B._originalTop=F-parseFloat(B.style.top||0);B._originalWidth=B.style.width;B._originalHeight=B.style.height;B.style.position="absolute";B.style.top=F+"px";B.style.left=E+"px";B.style.width=C+"px";B.style.height=A+"px";return B},relativize:function(A){A=$(A);if(A.getStyle("position")=="relative"){return }A.style.position="relative";var C=parseFloat(A.style.top||0)-(A._originalTop||0);var B=parseFloat(A.style.left||0)-(A._originalLeft||0);A.style.top=C+"px";A.style.left=B+"px";A.style.height=A._originalHeight;A.style.width=A._originalWidth;return A},cumulativeScrollOffset:function(B){var A=0,C=0;do{A+=B.scrollTop||0;C+=B.scrollLeft||0;B=B.parentNode}while(B);return Element._returnOffset(C,A)},getOffsetParent:function(B){B=$(B);var D=B.offsetParent,A=document.body,C=document.documentElement;if(D&&D!==C){return $(D)}if(D===C||B===C||B===A){return $(A)}while((B=B.parentNode)&&B!==A){if(Element.getStyle(B,"position")!="static"){return $(B)}}return $(A)},viewportOffset:function(D){D=$(D);var B=D,A=0,C=0;do{A+=B.offsetTop||0;C+=B.offsetLeft||0}while((B=B.getOffsetParent())!=document.body);B=D;do{if(!Prototype.Browser.Opera||B.tagName=="BODY"){A-=B.scrollTop||0;C-=B.scrollLeft||0}}while(B=B.parentNode);return Element._returnOffset(C,A)},clonePosition:function(B,D){var A=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});D=$(D);var E=D.viewportOffset();B=$(B);var F=[0,0];var C=null;if(Element.getStyle(B,"position")=="absolute"){C=B.getOffsetParent();F=C.viewportOffset()}if(C==document.body){F[0]-=document.body.offsetLeft;F[1]-=document.body.offsetTop}if(A.setLeft){B.style.left=(E[0]-F[0]+A.offsetLeft)+"px"}if(A.setTop){B.style.top=(E[1]-F[1]+A.offsetTop)+"px"}if(A.setWidth){B.style.width=D.offsetWidth+"px"}if(A.setHeight){B.style.height=D.offsetHeight+"px"}return B}};Element.Methods.identify.counter=1;Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:"class",htmlFor:"for"},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(D,B,C){switch(C){case"left":case"top":case"right":case"bottom":if(D(B,"position")==="static"){return null}case"height":case"width":if(!Element.visible(B)){return null}var E=parseInt(D(B,C),10);if(E!==B["offset"+C.capitalize()]){return E+"px"}var A;if(C==="height"){A=["border-top-width","padding-top","padding-bottom","border-bottom-width"]}else{A=["border-left-width","padding-left","padding-right","border-right-width"]}return A.inject(E,function(F,G){var H=D(B,G);return H===null?F:F-parseInt(H,10)})+"px";default:return D(B,C)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(C,A,B){if(B==="title"){return A.title}return C(A,B)})}else{if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(C,B){B=$(B);var A=B.getStyle("position");if(A!=="static"){return C(B)}B.setStyle({position:"relative"});var D=C(B);B.setStyle({position:A});return D});$w("positionedOffset viewportOffset").each(function(A){Element.Methods[A]=Element.Methods[A].wrap(function(E,C){C=$(C);var B=C.getStyle("position");if(B!=="static"){return E(C)}var D=C.getOffsetParent();if(D&&D.getStyle("position")==="fixed"){D.setStyle({zoom:1})}C.setStyle({position:"relative"});var F=E(C);C.setStyle({position:B});return F})});Element.Methods.getStyle=function(A,B){A=$(A);B=(B=="float"||B=="cssFloat")?"styleFloat":B.camelize();var C=A.style[B];if(!C&&A.currentStyle){C=A.currentStyle[B]}if(B=="opacity"){if(C=(A.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(C[1]){return parseFloat(C[1])/100}}return 1}if(C=="auto"){if((B=="width"||B=="height")&&(A.getStyle("display")!="none")){return A["offset"+B.capitalize()]+"px"}return null}return C};Element.Methods.setOpacity=function(B,E){function F(G){return G.replace(/alpha\([^\)]*\)/gi,"")}B=$(B);var A=B.currentStyle;if((A&&!A.hasLayout)||(!A&&B.style.zoom=="normal")){B.style.zoom=1}var D=B.getStyle("filter"),C=B.style;if(E==1||E===""){(D=F(D))?C.filter=D:C.removeAttribute("filter");return B}else{if(E<0.00001){E=0}}C.filter=F(D)+"alpha(opacity="+(E*100)+")";return B};Element._attributeTranslations={read:{names:{"class":"className","for":"htmlFor"},values:{_getAttr:function(A,B){return A.getAttribute(B,2)},_getAttrNode:function(A,C){var B=A.getAttributeNode(C);return B?B.value:""},_getEv:function(A,B){B=A.getAttribute(B);return B?B.toString().slice(23,-2):null},_flag:function(A,B){return $(A).hasAttribute(B)?B:null},style:function(A){return A.style.cssText.toLowerCase()},title:function(A){return A.title}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:"cellPadding",cellspacing:"cellSpacing"},Element._attributeTranslations.read.names),values:{checked:function(A,B){A.checked=!!B},style:function(A,B){A.style.cssText=B?B:""}}};Element._attributeTranslations.has={};$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc").each(function(A){Element._attributeTranslations.write.names[A.toLowerCase()]=A;Element._attributeTranslations.has[A.toLowerCase()]=A});(function(A){Object.extend(A,{href:A._getAttr,src:A._getAttr,type:A._getAttr,action:A._getAttrNode,disabled:A._flag,checked:A._flag,readonly:A._flag,multiple:A._flag,onload:A._getEv,onunload:A._getEv,onclick:A._getEv,ondblclick:A._getEv,onmousedown:A._getEv,onmouseup:A._getEv,onmouseover:A._getEv,onmousemove:A._getEv,onmouseout:A._getEv,onfocus:A._getEv,onblur:A._getEv,onkeypress:A._getEv,onkeydown:A._getEv,onkeyup:A._getEv,onsubmit:A._getEv,onreset:A._getEv,onselect:A._getEv,onchange:A._getEv})})(Element._attributeTranslations.read.values)}else{if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(A,B){A=$(A);A.style.opacity=(B==1)?0.999999:(B==="")?"":(B<0.00001)?0:B;return A}}else{if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(A,B){A=$(A);A.style.opacity=(B==1||B==="")?"":(B<0.00001)?0:B;if(B==1){if(A.tagName=="IMG"&&A.width){A.width++;A.width--}else{try{var D=document.createTextNode(" ");A.appendChild(D);A.removeChild(D)}catch(C){}}}return A};Element.Methods.cumulativeOffset=function(B){var A=0,C=0;do{A+=B.offsetTop||0;C+=B.offsetLeft||0;if(B.offsetParent==document.body){if(Element.getStyle(B,"position")=="absolute"){break}}B=B.offsetParent}while(B);return Element._returnOffset(C,A)}}}}}if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(B,C){B=$(B);if(C&&C.toElement){C=C.toElement()}if(Object.isElement(C)){return B.update().insert(C)}C=Object.toHTML(C);var A=B.tagName.toUpperCase();if(A in Element._insertionTranslations.tags){$A(B.childNodes).each(function(D){B.removeChild(D)});Element._getContentFromAnonymousElement(A,C.stripScripts()).each(function(D){B.appendChild(D)})}else{B.innerHTML=C.stripScripts()}C.evalScripts.bind(C).defer();return B}}if("outerHTML" in document.createElement("div")){Element.Methods.replace=function(C,E){C=$(C);if(E&&E.toElement){E=E.toElement()}if(Object.isElement(E)){C.parentNode.replaceChild(E,C);return C}E=Object.toHTML(E);var D=C.parentNode,B=D.tagName.toUpperCase();if(Element._insertionTranslations.tags[B]){var F=C.next();var A=Element._getContentFromAnonymousElement(B,E.stripScripts());D.removeChild(C);if(F){A.each(function(G){D.insertBefore(G,F)})}else{A.each(function(G){D.appendChild(G)})}}else{C.outerHTML=E.stripScripts()}E.evalScripts.bind(E).defer();return C}}Element._returnOffset=function(B,C){var A=[B,C];A.left=B;A.top=C;return A};Element._getContentFromAnonymousElement=function(C,B){var D=new Element("div"),A=Element._insertionTranslations.tags[C];if(A){D.innerHTML=A[0]+B+A[1];A[2].times(function(){D=D.firstChild})}else{D.innerHTML=B}return $A(D.childNodes)};Element._insertionTranslations={before:function(A,B){A.parentNode.insertBefore(B,A)},top:function(A,B){A.insertBefore(B,A.firstChild)},bottom:function(A,B){A.appendChild(B)},after:function(A,B){A.parentNode.insertBefore(B,A.nextSibling)},tags:{TABLE:["<table>","</table>",1],TBODY:["<table><tbody>","</tbody></table>",2],TR:["<table><tbody><tr>","</tr></tbody></table>",3],TD:["<table><tbody><tr><td>","</td></tr></tbody></table>",4],SELECT:["<select>","</select>",1]}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD})}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(A,C){C=Element._attributeTranslations.has[C]||C;var B=$(A).getAttributeNode(C);return B&&B.specified}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement("div").__proto__){window.HTMLElement={};window.HTMLElement.prototype=document.createElement("div").__proto__;Prototype.BrowserFeatures.ElementExtensions=true}Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions){return Prototype.K}var A={},B=Element.Methods.ByTag;var C=Object.extend(function(F){if(!F||F._extendedByPrototype||F.nodeType!=1||F==window){return F}var D=Object.clone(A),E=F.tagName,H,G;if(B[E]){Object.extend(D,B[E])}for(H in D){G=D[H];if(Object.isFunction(G)&&!(H in F)){F[H]=G.methodize()}}F._extendedByPrototype=Prototype.emptyFunction;return F},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(A,Element.Methods);Object.extend(A,Element.Methods.Simulated)}}});C.refresh();return C})();Element.hasAttribute=function(A,B){if(A.hasAttribute){return A.hasAttribute(B)}return Element.Methods.Simulated.hasAttribute(A,B)};Element.addMethods=function(C){var I=Prototype.BrowserFeatures,D=Element.Methods.ByTag;if(!C){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods)})}if(arguments.length==2){var B=C;C=arguments[1]}if(!B){Object.extend(Element.Methods,C||{})}else{if(Object.isArray(B)){B.each(H)}else{H(B)}}function H(F){F=F.toUpperCase();if(!Element.Methods.ByTag[F]){Element.Methods.ByTag[F]={}}Object.extend(Element.Methods.ByTag[F],C)}function A(L,K,F){F=F||false;for(var N in L){var M=L[N];if(!Object.isFunction(M)){continue}if(!F||!(N in K)){K[N]=M.methodize()}}}function E(L){var F;var K={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(K[L]){F="HTML"+K[L]+"Element"}if(window[F]){return window[F]}F="HTML"+L+"Element";if(window[F]){return window[F]}F="HTML"+L.capitalize()+"Element";if(window[F]){return window[F]}window[F]={};window[F].prototype=document.createElement(L).__proto__;return window[F]}if(I.ElementExtensions){A(Element.Methods,HTMLElement.prototype);A(Element.Methods.Simulated,HTMLElement.prototype,true)}if(I.SpecificElementExtensions){for(var J in Element.Methods.ByTag){var G=E(J);if(Object.isUndefined(G)){continue}A(D[J],G.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){var A={};var C=Prototype.Browser;$w("width height").each(function(E){var B=E.capitalize();A[E]=(C.WebKit&&!document.evaluate)?self["inner"+B]:(C.Opera)?document.body["client"+B]:document.documentElement["client"+B]});return A},getWidth:function(){return this.getDimensions().width},getHeight:function(){return this.getDimensions().height},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};var Selector=Class.create({initialize:function(A){this.expression=A.strip();this.compileMatcher()},shouldUseXPath:function(){if(!Prototype.BrowserFeatures.XPath){return false}var A=this.expression;if(Prototype.Browser.WebKit&&(A.include("-of-type")||A.include(":empty"))){return false}if((/(\[[\w-]*?:|:checked)/).test(this.expression)){return false}return true},compileMatcher:function(){if(this.shouldUseXPath()){return this.compileXPathMatcher()}var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return }this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(Object.isFunction(c[i])?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],"");break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join("\n"));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var E=this.expression,F=Selector.patterns,B=Selector.xpath,D,A;if(Selector._cache[E]){this.xpath=Selector._cache[E];return }this.matcher=[".//*"];while(E&&D!=E&&(/\S/).test(E)){D=E;for(var C in F){if(A=E.match(F[C])){this.matcher.push(Object.isFunction(B[C])?B[C](A):new Template(B[C]).evaluate(A));E=E.replace(A[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(A){A=A||document;if(this.xpath){return document._getElementsByXPath(this.xpath,A)}return this.matcher(A)},match:function(H){this.tokens=[];var L=this.expression,A=Selector.patterns,E=Selector.assertions;var B,D,F;while(L&&B!==L&&(/\S/).test(L)){B=L;for(var I in A){D=A[I];if(F=L.match(D)){if(E[I]){this.tokens.push([I,Object.clone(F)]);L=L.replace(F[0],"")}else{return this.findElements(document).include(H)}}}}var K=true,C,J;for(var I=0,G;G=this.tokens[I];I++){C=G[0],J=G[1];if(!Selector.assertions[C](H,J)){K=false;break}}return K},toString:function(){return this.expression},inspect:function(){return"#<Selector:"+this.expression.inspect()+">"}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:"/following-sibling::*",tagName:function(A){if(A[1]=="*"){return""}return"[local-name()='"+A[1].toLowerCase()+"' or local-name()='"+A[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(A){A[1]=A[1].toLowerCase();return new Template("[@#{1}]").evaluate(A)},attr:function(A){A[1]=A[1].toLowerCase();A[3]=A[5]||A[6];return new Template(Selector.xpath.operators[A[2]]).evaluate(A)},pseudo:function(A){var B=Selector.xpath.pseudos[A[1]];if(!B){return""}if(Object.isFunction(B)){return B(A)}return new Template(Selector.xpath.pseudos[A[1]]).evaluate(A)},operators:{"=":"[@#{1}='#{3}']","!=":"[@#{1}!='#{3}']","^=":"[starts-with(@#{1}, '#{3}')]","$=":"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']","*=":"[contains(@#{1}, '#{3}')]","~=":"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]","|=":"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{"first-child":"[not(preceding-sibling::*)]","last-child":"[not(following-sibling::*)]","only-child":"[not(preceding-sibling::* or following-sibling::*)]",empty:"[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",checked:"[@checked]",disabled:"[@disabled]",enabled:"[not(@disabled)]",not:function(B){var H=B[6],G=Selector.patterns,A=Selector.xpath,E,C;var F=[];while(H&&E!=H&&(/\S/).test(H)){E=H;for(var D in G){if(B=H.match(G[D])){C=Object.isFunction(A[D])?A[D](B):new Template(A[D]).evaluate(B);F.push("("+C.substring(1,C.length-1)+")");H=H.replace(B[0],"");break}}}return"[not("+F.join(" and ")+")]"},"nth-child":function(A){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",A)},"nth-last-child":function(A){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",A)},"nth-of-type":function(A){return Selector.xpath.pseudos.nth("position() ",A)},"nth-last-of-type":function(A){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",A)},"first-of-type":function(A){A[6]="1";return Selector.xpath.pseudos["nth-of-type"](A)},"last-of-type":function(A){A[6]="1";return Selector.xpath.pseudos["nth-last-of-type"](A)},"only-of-type":function(A){var B=Selector.xpath.pseudos;return B["first-of-type"](A)+B["last-of-type"](A)},nth:function(E,C){var F,G=C[6],B;if(G=="even"){G="2n+0"}if(G=="odd"){G="2n+1"}if(F=G.match(/^(\d+)$/)){return"["+E+"= "+F[1]+"]"}if(F=G.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(F[1]=="-"){F[1]=-1}var D=F[1]?Number(F[1]):1;var A=F[2]?Number(F[2]):0;B="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(B).evaluate({fragment:E,a:D,b:A})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c); c = false;',className:'n = h.className(n, r, "#{1}", c); c = false;',id:'n = h.id(n, r, "#{1}", c); c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(A){A[3]=(A[5]||A[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(A)},pseudo:function(A){if(A[6]){A[6]=A[6].replace(/"/g,'\\"')}return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(A)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,attrPresence:/^\[([\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/},assertions:{tagName:function(A,B){return B[1].toUpperCase()==A.tagName.toUpperCase()},className:function(A,B){return Element.hasClassName(A,B[1])},id:function(A,B){return A.id===B[1]},attrPresence:function(A,B){return Element.hasAttribute(A,B[1])},attr:function(B,C){var A=Element.readAttribute(B,C[1]);return A&&Selector.operators[C[2]](A,C[5]||C[6])}},handlers:{concat:function(B,A){for(var C=0,D;D=A[C];C++){B.push(D)}return B},mark:function(A){var D=Prototype.emptyFunction;for(var B=0,C;C=A[B];B++){C._countedByPrototype=D}return A},unmark:function(A){for(var B=0,C;C=A[B];B++){C._countedByPrototype=undefined}return A},index:function(A,D,G){A._countedByPrototype=Prototype.emptyFunction;if(D){for(var B=A.childNodes,E=B.length-1,C=1;E>=0;E--){var F=B[E];if(F.nodeType==1&&(!G||F._countedByPrototype)){F.nodeIndex=C++}}}else{for(var E=0,C=1,B=A.childNodes;F=B[E];E++){if(F.nodeType==1&&(!G||F._countedByPrototype)){F.nodeIndex=C++}}}},unique:function(B){if(B.length==0){return B}var D=[],E;for(var C=0,A=B.length;C<A;C++){if(!(E=B[C])._countedByPrototype){E._countedByPrototype=Prototype.emptyFunction;D.push(Element.extend(E))}}return Selector.handlers.unmark(D)},descendant:function(A){var D=Selector.handlers;for(var C=0,B=[],E;E=A[C];C++){D.concat(B,E.getElementsByTagName("*"))}return B},child:function(A){var E=Selector.handlers;for(var D=0,C=[],F;F=A[D];D++){for(var B=0,G;G=F.childNodes[B];B++){if(G.nodeType==1&&G.tagName!="!"){C.push(G)}}}return C},adjacent:function(A){for(var C=0,B=[],E;E=A[C];C++){var D=this.nextElementSibling(E);if(D){B.push(D)}}return B},laterSibling:function(A){var D=Selector.handlers;for(var C=0,B=[],E;E=A[C];C++){D.concat(B,Element.nextSiblings(E))}return B},nextElementSibling:function(A){while(A=A.nextSibling){if(A.nodeType==1){return A}}return null},previousElementSibling:function(A){while(A=A.previousSibling){if(A.nodeType==1){return A}}return null},tagName:function(A,H,C,B){var I=C.toUpperCase();var E=[],G=Selector.handlers;if(A){if(B){if(B=="descendant"){for(var F=0,D;D=A[F];F++){G.concat(E,D.getElementsByTagName(C))}return E}else{A=this[B](A)}if(C=="*"){return A}}for(var F=0,D;D=A[F];F++){if(D.tagName.toUpperCase()===I){E.push(D)}}return E}else{return H.getElementsByTagName(C)}},id:function(B,A,H,F){var G=$(H),D=Selector.handlers;if(!G){return[]}if(!B&&A==document){return[G]}if(B){if(F){if(F=="child"){for(var C=0,E;E=B[C];C++){if(G.parentNode==E){return[G]}}}else{if(F=="descendant"){for(var C=0,E;E=B[C];C++){if(Element.descendantOf(G,E)){return[G]}}}else{if(F=="adjacent"){for(var C=0,E;E=B[C];C++){if(Selector.handlers.previousElementSibling(G)==E){return[G]}}}else{B=D[F](B)}}}}for(var C=0,E;E=B[C];C++){if(E==G){return[G]}}return[]}return(G&&Element.descendantOf(G,A))?[G]:[]},className:function(B,A,C,D){if(B&&D){B=this[D](B)}return Selector.handlers.byClassName(B,A,C)},byClassName:function(C,B,F){if(!C){C=Selector.handlers.descendant([B])}var H=" "+F+" ";for(var E=0,D=[],G,A;G=C[E];E++){A=G.className;if(A.length==0){continue}if(A==F||(" "+A+" ").include(H)){D.push(G)}}return D},attrPresence:function(C,B,A,G){if(!C){C=B.getElementsByTagName("*")}if(C&&G){C=this[G](C)}var E=[];for(var D=0,F;F=C[D];D++){if(Element.hasAttribute(F,A)){E.push(F)}}return E},attr:function(A,I,H,J,C,B){if(!A){A=I.getElementsByTagName("*")}if(A&&B){A=this[B](A)}var K=Selector.operators[C],F=[];for(var E=0,D;D=A[E];E++){var G=Element.readAttribute(D,H);if(G===null){continue}if(K(G,J)){F.push(D)}}return F},pseudo:function(B,C,E,A,D){if(B&&D){B=this[D](B)}if(!B){B=A.getElementsByTagName("*")}return Selector.pseudos[C](B,E,A)}},pseudos:{"first-child":function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(Selector.handlers.previousElementSibling(E)){continue}C.push(E)}return C},"last-child":function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(Selector.handlers.nextElementSibling(E)){continue}C.push(E)}return C},"only-child":function(B,G,A){var E=Selector.handlers;for(var D=0,C=[],F;F=B[D];D++){if(!E.previousElementSibling(F)&&!E.nextElementSibling(F)){C.push(F)}}return C},"nth-child":function(B,C,A){return Selector.pseudos.nth(B,C,A)},"nth-last-child":function(B,C,A){return Selector.pseudos.nth(B,C,A,true)},"nth-of-type":function(B,C,A){return Selector.pseudos.nth(B,C,A,false,true)},"nth-last-of-type":function(B,C,A){return Selector.pseudos.nth(B,C,A,true,true)},"first-of-type":function(B,C,A){return Selector.pseudos.nth(B,"1",A,false,true)},"last-of-type":function(B,C,A){return Selector.pseudos.nth(B,"1",A,true,true)},"only-of-type":function(B,D,A){var C=Selector.pseudos;return C["last-of-type"](C["first-of-type"](B,D,A),D,A)},getIndices:function(B,A,C){if(B==0){return A>0?[A]:[]}return $R(1,C).inject([],function(D,E){if(0==(E-A)%B&&(E-A)/B>=0){D.push(E)}return D})},nth:function(A,L,N,K,C){if(A.length==0){return[]}if(L=="even"){L="2n+0"}if(L=="odd"){L="2n+1"}var J=Selector.handlers,I=[],B=[],E;J.mark(A);for(var H=0,D;D=A[H];H++){if(!D.parentNode._countedByPrototype){J.index(D.parentNode,K,C);B.push(D.parentNode)}}if(L.match(/^\d+$/)){L=Number(L);for(var H=0,D;D=A[H];H++){if(D.nodeIndex==L){I.push(D)}}}else{if(E=L.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(E[1]=="-"){E[1]=-1}var O=E[1]?Number(E[1]):1;var M=E[2]?Number(E[2]):0;var P=Selector.pseudos.getIndices(O,M,A.length);for(var H=0,D,F=P.length;D=A[H];H++){for(var G=0;G<F;G++){if(D.nodeIndex==P[G]){I.push(D)}}}}}J.unmark(A);J.unmark(B);return I},empty:function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(E.tagName=="!"||(E.firstChild&&!E.innerHTML.match(/^\s*$/))){continue}C.push(E)}return C},not:function(A,D,I){var G=Selector.handlers,J,C;var H=new Selector(D).findElements(I);G.mark(H);for(var F=0,E=[],B;B=A[F];F++){if(!B._countedByPrototype){E.push(B)}}G.unmark(H);return E},enabled:function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(!E.disabled){C.push(E)}}return C},disabled:function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(E.disabled){C.push(E)}}return C},checked:function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(E.checked){C.push(E)}}return C}},operators:{"=":function(B,A){return B==A},"!=":function(B,A){return B!=A},"^=":function(B,A){return B.startsWith(A)},"$=":function(B,A){return B.endsWith(A)},"*=":function(B,A){return B.include(A)},"~=":function(B,A){return(" "+B+" ").include(" "+A+" ")},"|=":function(B,A){return("-"+B.toUpperCase()+"-").include("-"+A.toUpperCase()+"-")}},split:function(B){var A=[];B.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(C){A.push(C[1].strip())});return A},matchElements:function(F,G){var E=$$(G),D=Selector.handlers;D.mark(E);for(var C=0,B=[],A;A=F[C];C++){if(A._countedByPrototype){B.push(A)}}D.unmark(E);return B},findElement:function(B,C,A){if(Object.isNumber(C)){A=C;C=false}return Selector.matchElements(B,C||"*")[A||0]},findChildElements:function(E,G){G=Selector.split(G.join(","));var D=[],F=Selector.handlers;for(var C=0,B=G.length,A;C<B;C++){A=new Selector(G[C].strip());F.concat(D,A.findElements(E))}return(B>1)?F.unique(D):D}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(B,A){for(var C=0,D;D=A[C];C++){if(D.tagName!=="!"){B.push(D)}}return B},unmark:function(A){for(var B=0,C;C=A[B];B++){C.removeAttribute("_countedByPrototype")}return A}})}function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(A){$(A).reset();return A},serializeElements:function(G,B){if(typeof B!="object"){B={hash:!!B}}else{if(Object.isUndefined(B.hash)){B.hash=true}}var C,F,A=false,E=B.submit;var D=G.inject({},function(H,I){if(!I.disabled&&I.name){C=I.name;F=$(I).getValue();if(F!=null&&(I.type!="submit"||(!A&&E!==false&&(!E||C==E)&&(A=true)))){if(C in H){if(!Object.isArray(H[C])){H[C]=[H[C]]}H[C].push(F)}else{H[C]=F}}}return H});return B.hash?D:Object.toQueryString(D)}};Form.Methods={serialize:function(B,A){return Form.serializeElements(Form.getElements(B),A)},getElements:function(A){return $A($(A).getElementsByTagName("*")).inject([],function(B,C){if(Form.Element.Serializers[C.tagName.toLowerCase()]){B.push(Element.extend(C))}return B})},getInputs:function(G,C,D){G=$(G);var A=G.getElementsByTagName("input");if(!C&&!D){return $A(A).map(Element.extend)}for(var E=0,H=[],F=A.length;E<F;E++){var B=A[E];if((C&&B.type!=C)||(D&&B.name!=D)){continue}H.push(Element.extend(B))}return H},disable:function(A){A=$(A);Form.getElements(A).invoke("disable");return A},enable:function(A){A=$(A);Form.getElements(A).invoke("enable");return A},findFirstElement:function(B){var C=$(B).getElements().findAll(function(D){return"hidden"!=D.type&&!D.disabled});var A=C.findAll(function(D){return D.hasAttribute("tabIndex")&&D.tabIndex>=0}).sortBy(function(D){return D.tabIndex}).first();return A?A:C.find(function(D){return["input","select","textarea"].include(D.tagName.toLowerCase())})},focusFirstElement:function(A){A=$(A);A.findFirstElement().activate();return A},request:function(B,A){B=$(B),A=Object.clone(A||{});var D=A.parameters,C=B.readAttribute("action")||"";if(C.blank()){C=window.location.href}A.parameters=B.serialize(true);if(D){if(Object.isString(D)){D=D.toQueryParams()}Object.extend(A.parameters,D)}if(B.hasAttribute("method")&&!A.method){A.method=B.method}return new Ajax.Request(C,A)}};Form.Element={focus:function(A){$(A).focus();return A},select:function(A){$(A).select();return A}};Form.Element.Methods={serialize:function(A){A=$(A);if(!A.disabled&&A.name){var B=A.getValue();if(B!=undefined){var C={};C[A.name]=B;return Object.toQueryString(C)}}return""},getValue:function(A){A=$(A);var B=A.tagName.toLowerCase();return Form.Element.Serializers[B](A)},setValue:function(A,B){A=$(A);var C=A.tagName.toLowerCase();Form.Element.Serializers[C](A,B);return A},clear:function(A){$(A).value="";return A},present:function(A){return $(A).value!=""},activate:function(A){A=$(A);try{A.focus();if(A.select&&(A.tagName.toLowerCase()!="input"||!["button","reset","submit"].include(A.type))){A.select()}}catch(B){}return A},disable:function(A){A=$(A);A.blur();A.disabled=true;return A},enable:function(A){A=$(A);A.disabled=false;return A}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(A,B){switch(A.type.toLowerCase()){case"checkbox":case"radio":return Form.Element.Serializers.inputSelector(A,B);default:return Form.Element.Serializers.textarea(A,B)}},inputSelector:function(A,B){if(Object.isUndefined(B)){return A.checked?A.value:null}else{A.checked=!!B}},textarea:function(A,B){if(Object.isUndefined(B)){return A.value}else{A.value=B}},select:function(D,A){if(Object.isUndefined(A)){return this[D.type=="select-one"?"selectOne":"selectMany"](D)}else{var C,F,G=!Object.isArray(A);for(var B=0,E=D.length;B<E;B++){C=D.options[B];F=this.optionValue(C);if(G){if(F==A){C.selected=true;return }}else{C.selected=A.include(F)}}}},selectOne:function(B){var A=B.selectedIndex;return A>=0?this.optionValue(B.options[A]):null},selectMany:function(D){var A,E=D.length;if(!E){return null}for(var C=0,A=[];C<E;C++){var B=D.options[C];if(B.selected){A.push(this.optionValue(B))}}return A},optionValue:function(A){return Element.extend(A).hasAttribute("value")?A.value:A.text}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,A,B,C){$super(C,B);this.element=$(A);this.lastValue=this.getValue()},execute:function(){var A=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(A)?this.lastValue!=A:String(this.lastValue)!=String(A)){this.callback(this.element,A);this.lastValue=A}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(A,B){this.element=$(A);this.callback=B;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var A=this.getValue();if(this.lastValue!=A){this.callback(this.element,A);this.lastValue=A}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(A){if(A.type){switch(A.type.toLowerCase()){case"checkbox":case"radio":Event.observe(A,"click",this.onElementEvent.bind(this));break;default:Event.observe(A,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});if(!window.Event){var Event={}}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,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{},relatedTarget:function(B){var A;switch(B.type){case"mouseover":A=B.fromElement;break;case"mouseout":A=B.toElement;break;default:return null}return Element.extend(A)}});Event.Methods=(function(){var A;if(Prototype.Browser.IE){var B={0:1,1:4,2:2};A=function(D,C){return D.button==B[C]}}else{if(Prototype.Browser.WebKit){A=function(D,C){switch(C){case 0:return D.which==1&&!D.metaKey;case 1:return D.which==1&&D.metaKey;default:return false}}}else{A=function(D,C){return D.which?(D.which===C+1):(D.button===C)}}}return{isLeftClick:function(C){return A(C,0)},isMiddleClick:function(C){return A(C,1)},isRightClick:function(C){return A(C,2)},element:function(D){var C=Event.extend(D).target;return Element.extend(C.nodeType==Node.TEXT_NODE?C.parentNode:C)},findElement:function(D,F){var C=Event.element(D);if(!F){return C}var E=[C].concat(C.ancestors());return Selector.findElement(E,F,0)},pointer:function(C){return{x:C.pageX||(C.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft)),y:C.pageY||(C.clientY+(document.documentElement.scrollTop||document.body.scrollTop))}},pointerX:function(C){return Event.pointer(C).x},pointerY:function(C){return Event.pointer(C).y},stop:function(C){Event.extend(C);C.preventDefault();C.stopPropagation();C.stopped=true}}})();Event.extend=(function(){var A=Object.keys(Event.Methods).inject({},function(B,C){B[C]=Event.Methods[C].methodize();return B});if(Prototype.Browser.IE){Object.extend(A,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(B){if(!B){return false}if(B._extendedByPrototype){return B}B._extendedByPrototype=Prototype.emptyFunction;var C=Event.pointer(B);Object.extend(B,{target:B.srcElement,relatedTarget:Event.relatedTarget(B),pageX:C.x,pageY:C.y});return Object.extend(B,A)}}else{Event.prototype=Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(Event.prototype,A);return Prototype.K}})();Object.extend(Event,(function(){var B=Event.cache;function C(J){if(J._prototypeEventID){return J._prototypeEventID[0]}arguments.callee.id=arguments.callee.id||1;return J._prototypeEventID=[++arguments.callee.id]}function G(J){if(J&&J.include(":")){return"dataavailable"}return J}function A(J){return B[J]=B[J]||{}}function F(L,J){var K=A(L);return K[J]=K[J]||[]}function H(K,J,L){var O=C(K);var N=F(O,J);if(N.pluck("handler").include(L)){return false}var M=function(P){if(!Event||!Event.extend||(P.eventName&&P.eventName!=J)){return false}Event.extend(P);L.call(K,P)};M.handler=L;N.push(M);return M}function I(M,J,K){var L=F(M,J);return L.find(function(N){return N.handler==K})}function D(M,J,K){var L=A(M);if(!L[J]){return false}L[J]=L[J].without(I(M,J,K))}function E(){for(var K in B){for(var J in B[K]){B[K][J]=null}}}if(window.attachEvent){window.attachEvent("onunload",E)}return{observe:function(L,J,M){L=$(L);var K=G(J);var N=H(L,J,M);if(!N){return L}if(L.addEventListener){L.addEventListener(K,N,false)}else{L.attachEvent("on"+K,N)}return L},stopObserving:function(L,J,M){L=$(L);var O=C(L),K=G(J);if(!M&&J){F(O,J).each(function(P){L.stopObserving(J,P.handler)});return L}else{if(!J){Object.keys(A(O)).each(function(P){L.stopObserving(P)});return L}}var N=I(O,J,M);if(!N){return L}if(L.removeEventListener){L.removeEventListener(K,N,false)}else{L.detachEvent("on"+K,N)}D(O,J,M);return L},fire:function(L,K,J){L=$(L);if(L==document&&document.createEvent&&!L.dispatchEvent){L=document.documentElement}var M;if(document.createEvent){M=document.createEvent("HTMLEvents");M.initEvent("dataavailable",true,true)}else{M=document.createEventObject();M.eventType="ondataavailable"}M.eventName=K;M.memo=J||{};if(document.createEvent){L.dispatchEvent(M)}else{L.fireEvent(M.eventType,M)}return Event.extend(M)}}})());Object.extend(Event,Event.Methods);Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});Object.extend(document,{fire:Element.Methods.fire.methodize(),observe:Element.Methods.observe.methodize(),stopObserving:Element.Methods.stopObserving.methodize(),loaded:false});(function(){var B;function A(){if(document.loaded){return }if(B){window.clearInterval(B)}document.fire("dom:loaded");document.loaded=true}if(document.addEventListener){if(Prototype.Browser.WebKit){B=window.setInterval(function(){if(/loaded|complete/.test(document.readyState)){A()}},0);Event.observe(window,"load",A)}else{document.addEventListener("DOMContentLoaded",A,false)}}else{document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");$("__onDOMContentLoaded").onreadystatechange=function(){if(this.readyState=="complete"){this.onreadystatechange=null;A()}}}})();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(A,B){return Element.insert(A,{before:B})},Top:function(A,B){return Element.insert(A,{top:B})},Bottom:function(A,B){return Element.insert(A,{bottom:B})},After:function(A,B){return Element.insert(A,{after:B})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(B,A,C){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(B,A,C)}this.xcomp=A;this.ycomp=C;this.offset=Element.cumulativeOffset(B);return(C>=this.offset[1]&&C<this.offset[1]+B.offsetHeight&&A>=this.offset[0]&&A<this.offset[0]+B.offsetWidth)},withinIncludingScrolloffsets:function(B,A,D){var C=Element.cumulativeScrollOffset(B);this.xcomp=A+C[0]-this.deltaX;this.ycomp=D+C[1]-this.deltaY;this.offset=Element.cumulativeOffset(B);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+B.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+B.offsetWidth)},overlap:function(B,A){if(!B){return 0}if(B=="vertical"){return((this.offset[1]+A.offsetHeight)-this.ycomp)/A.offsetHeight}if(B=="horizontal"){return((this.offset[0]+A.offsetWidth)-this.xcomp)/A.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(A){Position.prepare();return Element.absolutize(A)},relativize:function(A){Position.prepare();return Element.relativize(A)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(B,C,A){A=A||{};return Element.clonePosition(C,B,A)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(B){function A(C){return C.blank()?null:"[contains(concat(' ', @class, ' '), ' "+C+" ')]"}B.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(C,E){E=E.toString().strip();var D=/\s/.test(E)?$w(E).map(A).join(""):A(E);return D?document._getElementsByXPath(".//*"+D,C):[]}:function(E,F){F=F.toString().strip();var G=[],H=(/\s/.test(F)?$w(F):null);if(!H&&!F){return G}var C=$(E).getElementsByTagName("*");F=" "+F+" ";for(var D=0,J,I;J=C[D];D++){if(J.className&&(I=" "+J.className+" ")&&(I.include(F)||(H&&H.all(function(K){return !K.toString().blank()&&I.include(" "+K+" ")})))){G.push(Element.extend(J))}}return G};return function(D,C){return $(C||document.body).getElementsByClassName(D)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(A){this.element=$(A)},_each:function(A){this.element.className.split(/\s+/).select(function(B){return B.length>0})._each(A)},set:function(A){this.element.className=A},add:function(A){if(this.include(A)){return }this.set($A(this).concat(A).join(" "))},remove:function(A){if(!this.include(A)){return }this.set($A(this).without(A).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addMethods();
\ No newline at end of file
+var Prototype={Version:"1.6.1",Browser:(function(){var b=navigator.userAgent;var a=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!a,Opera:a,WebKit:b.indexOf("AppleWebKit/")>-1,Gecko:b.indexOf("Gecko")>-1&&b.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile.*Safari/.test(b)}})(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:(function(){var a=window.Element||window.HTMLElement;return!!(a&&a.prototype)})(),SpecificElementExtensions:(function(){if(typeof window.HTMLDivElement!=="undefined"){return true}var c=document.createElement("div");var b=document.createElement("form");var a=false;if(c.__proto__&&(c.__proto__!==b.__proto__)){a=true}c=b=null;return a})()},ScriptFragment:"<script[^>]*>([\\S\\s]*?)<\/script>",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(a){return a}};if(Prototype.Browser.MobileSafari){Prototype.BrowserFeatures.SpecificElementExtensions=false}var Abstract={};var Try={these:function(){var c;for(var b=0,d=arguments.length;b<d;b++){var a=arguments[b];try{c=a();break}catch(f){}}return c}};var Class=(function(){function a(){}function b(){var g=null,f=$A(arguments);if(Object.isFunction(f[0])){g=f.shift()}function d(){this.initialize.apply(this,arguments)}Object.extend(d,Class.Methods);d.superclass=g;d.subclasses=[];if(g){a.prototype=g.prototype;d.prototype=new a;g.subclasses.push(d)}for(var e=0;e<f.length;e++){d.addMethods(f[e])}if(!d.prototype.initialize){d.prototype.initialize=Prototype.emptyFunction}d.prototype.constructor=d;return d}function c(k){var f=this.superclass&&this.superclass.prototype;var e=Object.keys(k);if(!Object.keys({toString:true}).length){if(k.toString!=Object.prototype.toString){e.push("toString")}if(k.valueOf!=Object.prototype.valueOf){e.push("valueOf")}}for(var d=0,g=e.length;d<g;d++){var j=e[d],h=k[j];if(f&&Object.isFunction(h)&&h.argumentNames().first()=="$super"){var l=h;h=(function(i){return function(){return f[i].apply(this,arguments)}})(j).wrap(l);h.valueOf=l.valueOf.bind(l);h.toString=l.toString.bind(l)}this.prototype[j]=h}return this}return{create:b,Methods:{addMethods:c}}})();(function(){var d=Object.prototype.toString;function i(q,s){for(var r in s){q[r]=s[r]}return q}function l(q){try{if(e(q)){return"undefined"}if(q===null){return"null"}return q.inspect?q.inspect():String(q)}catch(r){if(r instanceof RangeError){return"..."}throw r}}function k(q){var s=typeof q;switch(s){case"undefined":case"function":case"unknown":return;case"boolean":return q.toString()}if(q===null){return"null"}if(q.toJSON){return q.toJSON()}if(h(q)){return}var r=[];for(var u in q){var t=k(q[u]);if(!e(t)){r.push(u.toJSON()+": "+t)}}return"{"+r.join(", ")+"}"}function c(q){return $H(q).toQueryString()}function f(q){return q&&q.toHTML?q.toHTML():String.interpret(q)}function o(q){var r=[];for(var s in q){r.push(s)}return r}function m(q){var r=[];for(var s in q){r.push(q[s])}return r}function j(q){return i({},q)}function h(q){return!!(q&&q.nodeType==1)}function g(q){return d.call(q)=="[object Array]"}function p(q){return q instanceof Hash}function b(q){return typeof q==="function"}function a(q){return d.call(q)=="[object String]"}function n(q){return d.call(q)=="[object Number]"}function e(q){return typeof q==="undefined"}i(Object,{extend:i,inspect:l,toJSON:k,toQueryString:c,toHTML:f,keys:o,values:m,clone:j,isElement:h,isArray:g,isHash:p,isFunction:b,isString:a,isNumber:n,isUndefined:e})})();Object.extend(Function.prototype,(function(){var k=Array.prototype.slice;function d(o,l){var n=o.length,m=l.length;while(m--){o[n+m]=l[m]}return o}function i(m,l){m=k.call(m,0);return d(m,l)}function g(){var l=this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,"").replace(/\s+/g,"").split(",");return l.length==1&&!l[0]?[]:l}function h(n){if(arguments.length<2&&Object.isUndefined(arguments[0])){return this}var l=this,m=k.call(arguments,1);return function(){var o=i(m,arguments);return l.apply(n,o)}}function f(n){var l=this,m=k.call(arguments,1);return function(p){var o=d([p||window.event],m);return l.apply(n,o)}}function j(){if(!arguments.length){return this}var l=this,m=k.call(arguments,0);return function(){var n=i(m,arguments);return l.apply(this,n)}}function e(n){var l=this,m=k.call(arguments,1);n=n*1000;return window.setTimeout(function(){return l.apply(l,m)},n)}function a(){var l=d([0.01],arguments);return this.delay.apply(this,l)}function c(m){var l=this;return function(){var n=d([l.bind(this)],arguments);return m.apply(this,n)}}function b(){if(this._methodized){return this._methodized}var l=this;return this._methodized=function(){var m=d([this],arguments);return l.apply(null,m)}}return{argumentNames:g,bind:h,bindAsEventListener:f,curry:j,delay:e,defer:a,wrap:c,methodize:b}})());Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+"-"+(this.getUTCMonth()+1).toPaddedString(2)+"-"+this.getUTCDate().toPaddedString(2)+"T"+this.getUTCHours().toPaddedString(2)+":"+this.getUTCMinutes().toPaddedString(2)+":"+this.getUTCSeconds().toPaddedString(2)+'Z"'};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(a){return String(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")};var PeriodicalExecuter=Class.create({initialize:function(b,a){this.callback=b;this.frequency=a;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},execute:function(){this.callback(this)},stop:function(){if(!this.timer){return}clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();this.currentlyExecuting=false}catch(a){this.currentlyExecuting=false;throw a}}}});Object.extend(String,{interpret:function(a){return a==null?"":String(a)},specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"}});Object.extend(String.prototype,(function(){function prepareReplacement(replacement){if(Object.isFunction(replacement)){return replacement}var template=new Template(replacement);return function(match){return template.evaluate(match)}}function gsub(pattern,replacement){var result="",source=this,match;replacement=prepareReplacement(replacement);if(Object.isString(pattern)){pattern=RegExp.escape(pattern)}if(!(pattern.length||pattern.source)){replacement=replacement("");return replacement+source.split("").join(replacement)+replacement}while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0){return match[0]}return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){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]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match){return{}}return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key])){hash[key]=[hash[key]]}hash[key].push(value)}else{hash[key]=value}}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){var parts=this.split("-"),len=parts.length;if(len==1){return parts[0]}var camelized=this.charAt(0)=="-"?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++){camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1)}return camelized}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes){return'"'+escapedString.replace(/"/g,'\\"')+'"'}return"'"+escapedString.replace(/'/g,"\\'")+"'"}function toJSON(){return this.inspect(true)}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank()){return false}str=this.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,"");return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str)}function evalJSON(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON()){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern){return this.indexOf(pattern)===0}function endsWith(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim?String.prototype.trim:strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,toJSON:toJSON,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:evalJSON,include:include,startsWith:startsWith,endsWith:endsWith,empty:empty,blank:blank,interpolate:interpolate}})());var Template=Class.create({initialize:function(a,b){this.template=a.toString();this.pattern=b||Template.Pattern},evaluate:function(a){if(a&&Object.isFunction(a.toTemplateReplacements)){a=a.toTemplateReplacements()}return this.template.gsub(this.pattern,function(d){if(a==null){return(d[1]+"")}var f=d[1]||"";if(f=="\\"){return d[2]}var b=a,g=d[3];var e=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;d=e.exec(g);if(d==null){return f}while(d!=null){var c=d[1].startsWith("[")?d[2].replace(/\\\\]/g,"]"):d[1];b=b[c];if(null==b||""==d[3]){break}g=g.substring("["==d[3]?d[1].length:d[0].length);d=e.exec(g)}return f+String.interpret(b)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=(function(){function c(y,x){var w=0;try{this._each(function(A){y.call(x,A,w++)})}catch(z){if(z!=$break){throw z}}return this}function r(z,y,x){var w=-z,A=[],B=this.toArray();if(z<1){return B}while((w+=z)<B.length){A.push(B.slice(w,w+z))}return A.collect(y,x)}function b(y,x){y=y||Prototype.K;var w=true;this.each(function(A,z){w=w&&!!y.call(x,A,z);if(!w){throw $break}});return w}function i(y,x){y=y||Prototype.K;var w=false;this.each(function(A,z){if(w=!!y.call(x,A,z)){throw $break}});return w}function j(y,x){y=y||Prototype.K;var w=[];this.each(function(A,z){w.push(y.call(x,A,z))});return w}function t(y,x){var w;this.each(function(A,z){if(y.call(x,A,z)){w=A;throw $break}});return w}function h(y,x){var w=[];this.each(function(A,z){if(y.call(x,A,z)){w.push(A)}});return w}function g(z,y,x){y=y||Prototype.K;var w=[];if(Object.isString(z)){z=new RegExp(RegExp.escape(z))}this.each(function(B,A){if(z.match(B)){w.push(y.call(x,B,A))}});return w}function a(w){if(Object.isFunction(this.indexOf)){if(this.indexOf(w)!=-1){return true}}var x=false;this.each(function(y){if(y==w){x=true;throw $break}});return x}function q(x,w){w=Object.isUndefined(w)?null:w;return this.eachSlice(x,function(y){while(y.length<x){y.push(w)}return y})}function l(w,y,x){this.each(function(A,z){w=y.call(x,w,A,z)});return w}function v(x){var w=$A(arguments).slice(1);return this.map(function(y){return y[x].apply(y,w)})}function p(y,x){y=y||Prototype.K;var w;this.each(function(A,z){A=y.call(x,A,z);if(w==null||A>=w){w=A}});return w}function n(y,x){y=y||Prototype.K;var w;this.each(function(A,z){A=y.call(x,A,z);if(w==null||A<w){w=A}});return w}function e(z,x){z=z||Prototype.K;var y=[],w=[];this.each(function(B,A){(z.call(x,B,A)?y:w).push(B)});return[y,w]}function f(x){var w=[];this.each(function(y){w.push(y[x])});return w}function d(y,x){var w=[];this.each(function(A,z){if(!y.call(x,A,z)){w.push(A)}});return w}function m(x,w){return this.map(function(z,y){return{value:z,criteria:x.call(w,z,y)}}).sort(function(B,A){var z=B.criteria,y=A.criteria;return z<y?-1:z>y?1:0}).pluck("value")}function o(){return this.map()}function s(){var x=Prototype.K,w=$A(arguments);if(Object.isFunction(w.last())){x=w.pop()}var y=[this].concat(w).map($A);return this.map(function(A,z){return x(y.pluck(z))})}function k(){return this.toArray().length}function u(){return"#<Enumerable:"+this.toArray().inspect()+">"}return{each:c,eachSlice:r,all:b,every:b,any:i,some:i,collect:j,map:j,detect:t,findAll:h,select:h,filter:h,grep:g,include:a,member:a,inGroupsOf:q,inject:l,invoke:v,max:p,min:n,partition:e,pluck:f,reject:d,sortBy:m,toArray:o,entries:o,zip:s,size:k,inspect:u,find:t}})();function $A(c){if(!c){return[]}if("toArray"in Object(c)){return c.toArray()}var b=c.length||0,a=new Array(b);while(b--){a[b]=c[b]}return a}function $w(a){if(!Object.isString(a)){return[]}a=a.strip();return a?a.split(/\s+/):[]}Array.from=$A;(function(){var s=Array.prototype,m=s.slice,o=s.forEach;function b(w){for(var v=0,x=this.length;v<x;v++){w(this[v])}}if(!o){o=b}function l(){this.length=0;return this}function d(){return this[0]}function g(){return this[this.length-1]}function i(){return this.select(function(v){return v!=null})}function u(){return this.inject([],function(w,v){if(Object.isArray(v)){return w.concat(v.flatten())}w.push(v);return w})}function h(){var v=m.call(arguments,0);return this.select(function(w){return!v.include(w)})}function f(v){return(v!==false?this:this.toArray())._reverse()}function k(v){return this.inject([],function(y,x,w){if(0==w||(v?y.last()!=x:!y.include(x))){y.push(x)}return y})}function p(v){return this.uniq().findAll(function(w){return v.detect(function(x){return w===x})})}function q(){return m.call(this,0)}function j(){return this.length}function t(){return"["+this.map(Object.inspect).join(", ")+"]"}function r(){var v=[];this.each(function(w){var x=Object.toJSON(w);if(!Object.isUndefined(x)){v.push(x)}});return"["+v.join(", ")+"]"}function a(x,v){v||(v=0);var w=this.length;if(v<0){v=w+v}for(;v<w;v++){if(this[v]===x){return v}}return-1}function n(w,v){v=isNaN(v)?this.length:(v<0?this.length+v:v)+1;var x=this.slice(0,v).reverse().indexOf(w);return(x<0)?x:v-x-1}function c(){var A=m.call(this,0),y;for(var w=0,x=arguments.length;w<x;w++){y=arguments[w];if(Object.isArray(y)&&!("callee"in y)){for(var v=0,z=y.length;v<z;v++){A.push(y[v])}}else{A.push(y)}}return A}Object.extend(s,Enumerable);if(!s._reverse){s._reverse=s.reverse}Object.extend(s,{_each:o,clear:l,first:d,last:g,compact:i,flatten:u,without:h,reverse:f,uniq:k,intersect:p,clone:q,toArray:q,size:j,inspect:t,toJSON:r});var e=(function(){return[].concat(arguments)[0][0]!==1})(1,2);if(e){s.concat=c}if(!s.indexOf){s.indexOf=a}if(!s.lastIndexOf){s.lastIndexOf=n}})();function $H(a){return new Hash(a)}var Hash=Class.create(Enumerable,(function(){function e(q){this._object=Object.isHash(q)?q.toObject():Object.clone(q)}function f(r){for(var q in this._object){var s=this._object[q],t=[q,s];t.key=q;t.value=s;r(t)}}function k(q,r){return this._object[q]=r}function c(q){if(this._object[q]!==Object.prototype[q]){return this._object[q]}}function n(q){var r=this._object[q];delete this._object[q];return r}function p(){return Object.clone(this._object)}function o(){return this.pluck("key")}function m(){return this.pluck("value")}function g(r){var q=this.detect(function(s){return s.value===r});return q&&q.key}function i(q){return this.clone().update(q)}function d(q){return new Hash(q).inject(this,function(r,s){r.set(s.key,s.value);return r})}function b(q,r){if(Object.isUndefined(r)){return q}return q+"="+encodeURIComponent(String.interpret(r))}function a(){return this.inject([],function(s,t){var r=encodeURIComponent(t.key),q=t.value;if(q&&typeof q=="object"){if(Object.isArray(q)){return s.concat(q.map(b.curry(r)))}}else{s.push(b(r,q))}return s}).join("&")}function l(){return"#<Hash:{"+this.map(function(q){return q.map(Object.inspect).join(": ")}).join(", ")+"}>"}function j(){return Object.toJSON(this.toObject())}function h(){return new Hash(this)}return{initialize:e,_each:f,set:k,get:c,unset:n,toObject:p,toTemplateReplacements:p,keys:o,values:m,index:g,merge:i,update:d,toQueryString:a,inspect:l,toJSON:j,clone:h}})());Hash.from=$H;Object.extend(Number.prototype,(function(){function d(){return this.toPaddedString(2,16)}function e(){return this+1}function a(k,j){$R(0,this,true).each(k,j);return this}function b(l,k){var j=this.toString(k||10);return"0".times(l-j.length)+j}function f(){return isFinite(this)?this.toString():"null"}function i(){return Math.abs(this)}function h(){return Math.round(this)}function g(){return Math.ceil(this)}function c(){return Math.floor(this)}return{toColorPart:d,succ:e,times:a,toPaddedString:b,toJSON:f,abs:i,round:h,ceil:g,floor:c}})());function $R(c,a,b){return new ObjectRange(c,a,b)}var ObjectRange=Class.create(Enumerable,(function(){function b(f,d,e){this.start=f;this.end=d;this.exclusive=e}function c(d){var e=this.start;while(this.include(e)){d(e);e=e.succ()}}function a(d){if(d<this.start){return false}if(this.exclusive){return d<this.end}return d<=this.end}return{initialize:b,_each:c,include:a}})());var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(a){this.responders._each(a)},register:function(a){if(!this.include(a)){this.responders.push(a)}},unregister:function(a){this.responders=this.responders.without(a)},dispatch:function(d,b,c,a){this.each(function(f){if(Object.isFunction(f[d])){try{f[d].apply(f,[b,c,a])}catch(g){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(a){this.options={method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",parameters:"",evalJSON:true,evalJS:true};Object.extend(this.options,a||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters)){this.options.parameters=this.options.parameters.toQueryParams()}else{if(Object.isHash(this.options.parameters)){this.options.parameters=this.options.parameters.toObject()}}}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,b,a){$super(a);this.transport=Ajax.getTransport();this.request(b)},request:function(b){this.url=b;this.method=this.options.method;var d=Object.clone(this.options.parameters);if(!["get","post"].include(this.method)){d._method=this.method;this.method="post"}this.parameters=d;if(d=Object.toQueryString(d)){if(this.method=="get"){this.url+=(this.url.include("?")?"&":"?")+d}else{if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){d+="&_="}}}try{var a=new Ajax.Response(this);if(this.options.onCreate){this.options.onCreate(a)}Ajax.Responders.dispatch("onCreate",this,a);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){this.respondToReadyState.bind(this).defer(1)}this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=="post"?(this.options.postBody||d):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange()}}catch(c){this.dispatchException(c)}},onStateChange:function(){var a=this.transport.readyState;if(a>1&&!((a==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var e={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){e["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){e.Connection="close"}}if(typeof this.options.requestHeaders=="object"){var c=this.options.requestHeaders;if(Object.isFunction(c.push)){for(var b=0,d=c.length;b<d;b+=2){e[c[b]]=c[b+1]}}else{$H(c).each(function(f){e[f.key]=f.value})}}for(var a in e){this.transport.setRequestHeader(a,e[a])}},success:function(){var a=this.getStatus();return!a||(a>=200&&a<300)},getStatus:function(){try{return this.transport.status||0}catch(a){return 0}},respondToReadyState:function(a){var c=Ajax.Request.Events[a],b=new Ajax.Response(this);if(c=="Complete"){try{this._complete=true;(this.options["on"+b.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(b,b.headerJSON)}catch(d){this.dispatchException(d)}var f=b.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&f&&f.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+c]||Prototype.emptyFunction)(b,b.headerJSON);Ajax.Responders.dispatch("on"+c,this,b,b.headerJSON)}catch(d){this.dispatchException(d)}if(c=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var a=this.url.match(/^\s*https?:\/\/[^\/]*/);return!a||(a[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""}))},getHeader:function(a){try{return this.transport.getResponseHeader(a)||null}catch(b){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(a){(this.options.onException||Prototype.emptyFunction)(this,a);Ajax.Responders.dispatch("onException",this,a)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(c){this.request=c;var d=this.transport=c.transport,a=this.readyState=d.readyState;if((a>2&&!Prototype.Browser.IE)||a==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(d.responseText);this.headerJSON=this._getHeaderJSON()}if(a==4){var b=d.responseXML;this.responseXML=Object.isUndefined(b)?null:b;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(a){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(a){return null}},getResponseHeader:function(a){return this.transport.getResponseHeader(a)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var a=this.getHeader("X-JSON");if(!a){return null}a=decodeURIComponent(escape(a));try{return a.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}},_getResponseJSON:function(){var a=this.request.options;if(!a.evalJSON||(a.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json"))||this.responseText.blank()){return null}try{return this.responseText.evalJSON(a.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,a,c,b){this.container={success:(a.success||a),failure:(a.failure||(a.success?null:a))};b=Object.clone(b);var d=b.onComplete;b.onComplete=(function(e,f){this.updateContent(e.responseText);if(Object.isFunction(d)){d(e,f)}}).bind(this);$super(c,b)},updateContent:function(d){var c=this.container[this.success()?"success":"failure"],a=this.options;if(!a.evalScripts){d=d.stripScripts()}if(c=$(c)){if(a.insertion){if(Object.isString(a.insertion)){var b={};b[a.insertion]=d;c.insert(b)}else{a.insertion(c,d)}}else{c.update(d)}}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,a,c,b){$super(b);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=a;this.url=c;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(a){if(this.options.decay){this.decay=(a.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=a.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(b){if(arguments.length>1){for(var a=0,d=[],c=arguments.length;a<c;a++){d.push($(arguments[a]))}return d}if(Object.isString(b)){b=document.getElementById(b)}return Element.extend(b)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(f,a){var c=[];var e=document.evaluate(f,$(a)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var b=0,d=e.snapshotLength;b<d;b++){c.push(Element.extend(e.snapshotItem(b)))}return c}}if(!window.Node){var Node={}}if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12})}(function(c){var b=(function(){var f=document.createElement("form");var e=document.createElement("input");var d=document.documentElement;e.setAttribute("name","test");f.appendChild(e);d.appendChild(f);var g=f.elements?(typeof f.elements.test=="undefined"):null;d.removeChild(f);f=e=null;return g})();var a=c.Element;c.Element=function(f,e){e=e||{};f=f.toLowerCase();var d=Element.cache;if(b&&e.name){f="<"+f+' name="'+e.name+'">';delete e.name;return Element.writeAttribute(document.createElement(f),e)}if(!d[f]){d[f]=Element.extend(document.createElement(f))}return Element.writeAttribute(d[f].cloneNode(false),e)};Object.extend(c.Element,a||{});if(a){c.Element.prototype=a.prototype}})(this);Element.cache={};Element.idCounter=1;Element.Methods={visible:function(a){return $(a).style.display!="none"},toggle:function(a){a=$(a);Element[Element.visible(a)?"hide":"show"](a);return a},hide:function(a){a=$(a);a.style.display="none";return a},show:function(a){a=$(a);a.style.display="";return a},remove:function(a){a=$(a);a.parentNode.removeChild(a);return a},update:(function(){var b=(function(){var e=document.createElement("select"),f=true;e.innerHTML='<option value="test">test</option>';if(e.options&&e.options[0]){f=e.options[0].nodeName.toUpperCase()!=="OPTION"}e=null;return f})();var a=(function(){try{var f=document.createElement("table");if(f&&f.tBodies){f.innerHTML="<tbody><tr><td>test</td></tr></tbody>";var h=typeof f.tBodies[0]=="undefined";f=null;return h}}catch(g){return true}})();var d=(function(){var f=document.createElement("script"),h=false;try{f.appendChild(document.createTextNode(""));h=!f.firstChild||f.firstChild&&f.firstChild.nodeType!==3}catch(g){h=true}f=null;return h})();function c(f,g){f=$(f);if(g&&g.toElement){g=g.toElement()}if(Object.isElement(g)){return f.update().insert(g)}g=Object.toHTML(g);var e=f.tagName.toUpperCase();if(e==="SCRIPT"&&d){f.text=g;return f}if(b||a){if(e in Element._insertionTranslations.tags){while(f.firstChild){f.removeChild(f.firstChild)}Element._getContentFromAnonymousElement(e,g.stripScripts()).each(function(h){f.appendChild(h)})}else{f.innerHTML=g.stripScripts()}}else{f.innerHTML=g.stripScripts()}g.evalScripts.bind(g).defer();return f}return c})(),replace:function(b,c){b=$(b);if(c&&c.toElement){c=c.toElement()}else{if(!Object.isElement(c)){c=Object.toHTML(c);var a=b.ownerDocument.createRange();a.selectNode(b);c.evalScripts.bind(c).defer();c=a.createContextualFragment(c.stripScripts())}}b.parentNode.replaceChild(c,b);return b},insert:function(c,e){c=$(c);if(Object.isString(e)||Object.isNumber(e)||Object.isElement(e)||(e&&(e.toElement||e.toHTML))){e={bottom:e}}var d,f,b,g;for(var a in e){d=e[a];a=a.toLowerCase();f=Element._insertionTranslations[a];if(d&&d.toElement){d=d.toElement()}if(Object.isElement(d)){f(c,d);continue}d=Object.toHTML(d);b=((a=="before"||a=="after")?c.parentNode:c).tagName.toUpperCase();g=Element._getContentFromAnonymousElement(b,d.stripScripts());if(a=="top"||a=="after"){g.reverse()}g.each(f.curry(c));d.evalScripts.bind(d).defer()}return c},wrap:function(b,c,a){b=$(b);if(Object.isElement(c)){$(c).writeAttribute(a||{})}else{if(Object.isString(c)){c=new Element(c,a)}else{c=new Element("div",c)}}if(b.parentNode){b.parentNode.replaceChild(c,b)}c.appendChild(b);return c},inspect:function(b){b=$(b);var a="<"+b.tagName.toLowerCase();$H({id:"id",className:"class"}).each(function(f){var e=f.first(),c=f.last();var d=(b[e]||"").toString();if(d){a+=" "+c+"="+d.inspect(true)}});return a+">"},recursivelyCollect:function(a,c){a=$(a);var b=[];while(a=a[c]){if(a.nodeType==1){b.push(Element.extend(a))}}return b},ancestors:function(a){return Element.recursivelyCollect(a,"parentNode")},descendants:function(a){return Element.select(a,"*")},firstDescendant:function(a){a=$(a).firstChild;while(a&&a.nodeType!=1){a=a.nextSibling}return $(a)},immediateDescendants:function(a){if(!(a=$(a).firstChild)){return[]}while(a&&a.nodeType!=1){a=a.nextSibling}if(a){return[a].concat($(a).nextSiblings())}return[]},previousSiblings:function(a){return Element.recursivelyCollect(a,"previousSibling")},nextSiblings:function(a){return Element.recursivelyCollect(a,"nextSibling")},siblings:function(a){a=$(a);return Element.previousSiblings(a).reverse().concat(Element.nextSiblings(a))},match:function(b,a){if(Object.isString(a)){a=new Selector(a)}return a.match($(b))},up:function(b,d,a){b=$(b);if(arguments.length==1){return $(b.parentNode)}var c=Element.ancestors(b);return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},down:function(b,c,a){b=$(b);if(arguments.length==1){return Element.firstDescendant(b)}return Object.isNumber(c)?Element.descendants(b)[c]:Element.select(b,c)[a||0]},previous:function(b,d,a){b=$(b);if(arguments.length==1){return $(Selector.handlers.previousElementSibling(b))}var c=Element.previousSiblings(b);return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},next:function(c,d,b){c=$(c);if(arguments.length==1){return $(Selector.handlers.nextElementSibling(c))}var a=Element.nextSiblings(c);return Object.isNumber(d)?a[d]:Selector.findElement(a,d,b)},select:function(b){var a=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(b,a)},adjacent:function(b){var a=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(b.parentNode,a).without(b)},identify:function(a){a=$(a);var b=Element.readAttribute(a,"id");if(b){return b}do{b="anonymous_element_"+Element.idCounter++}while($(b));Element.writeAttribute(a,"id",b);return b},readAttribute:function(c,a){c=$(c);if(Prototype.Browser.IE){var b=Element._attributeTranslations.read;if(b.values[a]){return b.values[a](c,a)}if(b.names[a]){a=b.names[a]}if(a.include(":")){return(!c.attributes||!c.attributes[a])?null:c.attributes[a].value}}return c.getAttribute(a)},writeAttribute:function(e,c,f){e=$(e);var b={},d=Element._attributeTranslations.write;if(typeof c=="object"){b=c}else{b[c]=Object.isUndefined(f)?true:f}for(var a in b){c=d.names[a]||a;f=b[a];if(d.values[a]){c=d.values[a](e,f)}if(f===false||f===null){e.removeAttribute(c)}else{if(f===true){e.setAttribute(c,c)}else{e.setAttribute(c,f)}}}return e},getHeight:function(a){return Element.getDimensions(a).height},getWidth:function(a){return Element.getDimensions(a).width},classNames:function(a){return new Element.ClassNames(a)},hasClassName:function(a,b){if(!(a=$(a))){return}var c=a.className;return(c.length>0&&(c==b||new RegExp("(^|\\s)"+b+"(\\s|$)").test(c)))},addClassName:function(a,b){if(!(a=$(a))){return}if(!Element.hasClassName(a,b)){a.className+=(a.className?" ":"")+b}return a},removeClassName:function(a,b){if(!(a=$(a))){return}a.className=a.className.replace(new RegExp("(^|\\s+)"+b+"(\\s+|$)")," ").strip();return a},toggleClassName:function(a,b){if(!(a=$(a))){return}return Element[Element.hasClassName(a,b)?"removeClassName":"addClassName"](a,b)},cleanWhitespace:function(b){b=$(b);var c=b.firstChild;while(c){var a=c.nextSibling;if(c.nodeType==3&&!/\S/.test(c.nodeValue)){b.removeChild(c)}c=a}return b},empty:function(a){return $(a).innerHTML.blank()},descendantOf:function(b,a){b=$(b),a=$(a);if(b.compareDocumentPosition){return(b.compareDocumentPosition(a)&8)===8}if(a.contains){return a.contains(b)&&a!==b}while(b=b.parentNode){if(b==a){return true}}return false},scrollTo:function(a){a=$(a);var b=Element.cumulativeOffset(a);window.scrollTo(b[0],b[1]);return a},getStyle:function(b,c){b=$(b);c=c=="float"?"cssFloat":c.camelize();var d=b.style[c];if(!d||d=="auto"){var a=document.defaultView.getComputedStyle(b,null);d=a?a[c]:null}if(c=="opacity"){return d?parseFloat(d):1}return d=="auto"?null:d},getOpacity:function(a){return $(a).getStyle("opacity")},setStyle:function(b,c){b=$(b);var e=b.style,a;if(Object.isString(c)){b.style.cssText+=";"+c;return c.include("opacity")?b.setOpacity(c.match(/opacity:\s*(\d?\.?\d*)/)[1]):b}for(var d in c){if(d=="opacity"){b.setOpacity(c[d])}else{e[(d=="float"||d=="cssFloat")?(Object.isUndefined(e.styleFloat)?"cssFloat":"styleFloat"):d]=c[d]}}return b},setOpacity:function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;return a},getDimensions:function(c){c=$(c);var g=Element.getStyle(c,"display");if(g!="none"&&g!=null){return{width:c.offsetWidth,height:c.offsetHeight}}var b=c.style;var f=b.visibility;var d=b.position;var a=b.display;b.visibility="hidden";if(d!="fixed"){b.position="absolute"}b.display="block";var h=c.clientWidth;var e=c.clientHeight;b.display=a;b.position=d;b.visibility=f;return{width:h,height:e}},makePositioned:function(a){a=$(a);var b=Element.getStyle(a,"position");if(b=="static"||!b){a._madePositioned=true;a.style.position="relative";if(Prototype.Browser.Opera){a.style.top=0;a.style.left=0}}return a},undoPositioned:function(a){a=$(a);if(a._madePositioned){a._madePositioned=undefined;a.style.position=a.style.top=a.style.left=a.style.bottom=a.style.right=""}return a},makeClipping:function(a){a=$(a);if(a._overflow){return a}a._overflow=Element.getStyle(a,"overflow")||"auto";if(a._overflow!=="hidden"){a.style.overflow="hidden"}return a},undoClipping:function(a){a=$(a);if(!a._overflow){return a}a.style.overflow=a._overflow=="auto"?"":a._overflow;a._overflow=null;return a},cumulativeOffset:function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;b=b.offsetParent}while(b);return Element._returnOffset(c,a)},positionedOffset:function(b){var a=0,d=0;do{a+=b.offsetTop||0;d+=b.offsetLeft||0;b=b.offsetParent;if(b){if(b.tagName.toUpperCase()=="BODY"){break}var c=Element.getStyle(b,"position");if(c!=="static"){break}}}while(b);return Element._returnOffset(d,a)},absolutize:function(b){b=$(b);if(Element.getStyle(b,"position")=="absolute"){return b}var d=Element.positionedOffset(b);var f=d[1];var e=d[0];var c=b.clientWidth;var a=b.clientHeight;b._originalLeft=e-parseFloat(b.style.left||0);b._originalTop=f-parseFloat(b.style.top||0);b._originalWidth=b.style.width;b._originalHeight=b.style.height;b.style.position="absolute";b.style.top=f+"px";b.style.left=e+"px";b.style.width=c+"px";b.style.height=a+"px";return b},relativize:function(a){a=$(a);if(Element.getStyle(a,"position")=="relative"){return a}a.style.position="relative";var c=parseFloat(a.style.top||0)-(a._originalTop||0);var b=parseFloat(a.style.left||0)-(a._originalLeft||0);a.style.top=c+"px";a.style.left=b+"px";a.style.height=a._originalHeight;a.style.width=a._originalWidth;return a},cumulativeScrollOffset:function(b){var a=0,c=0;do{a+=b.scrollTop||0;c+=b.scrollLeft||0;b=b.parentNode}while(b);return Element._returnOffset(c,a)},getOffsetParent:function(a){if(a.offsetParent){return $(a.offsetParent)}if(a==document.body){return $(a)}while((a=a.parentNode)&&a!=document.body&&a!=document){if(Element.getStyle(a,"position")!="static"){return $(a)}}return $(document.body)},viewportOffset:function(d){var a=0,c=0;var b=d;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body&&Element.getStyle(b,"position")=="absolute"){break}}while(b=b.offsetParent);b=d;do{if(!Prototype.Browser.Opera||(b.tagName&&(b.tagName.toUpperCase()=="BODY"))){a-=b.scrollTop||0;c-=b.scrollLeft||0}}while(b=b.parentNode);return Element._returnOffset(c,a)},clonePosition:function(b,d){var a=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});d=$(d);var e=Element.viewportOffset(d);b=$(b);var f=[0,0];var c=null;if(Element.getStyle(b,"position")=="absolute"){c=Element.getOffsetParent(b);f=Element.viewportOffset(c)}if(c==document.body){f[0]-=document.body.offsetLeft;f[1]-=document.body.offsetTop}if(a.setLeft){b.style.left=(e[0]-f[0]+a.offsetLeft)+"px"}if(a.setTop){b.style.top=(e[1]-f[1]+a.offsetTop)+"px"}if(a.setWidth){b.style.width=d.offsetWidth+"px"}if(a.setHeight){b.style.height=d.offsetHeight+"px"}return b}};Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:"class",htmlFor:"for"},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(d,b,c){switch(c){case"left":case"top":case"right":case"bottom":if(d(b,"position")==="static"){return null}case"height":case"width":if(!Element.visible(b)){return null}var e=parseInt(d(b,c),10);if(e!==b["offset"+c.capitalize()]){return e+"px"}var a;if(c==="height"){a=["border-top-width","padding-top","padding-bottom","border-bottom-width"]}else{a=["border-left-width","padding-left","padding-right","border-right-width"]}return a.inject(e,function(f,g){var h=d(b,g);return h===null?f:f-parseInt(h,10)})+"px";default:return d(b,c)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(c,a,b){if(b==="title"){return a.title}return c(a,b)})}else{if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(c,b){b=$(b);try{b.offsetParent}catch(f){return $(document.body)}var a=b.getStyle("position");if(a!=="static"){return c(b)}b.setStyle({position:"relative"});var d=c(b);b.setStyle({position:a});return d});$w("positionedOffset viewportOffset").each(function(a){Element.Methods[a]=Element.Methods[a].wrap(function(f,c){c=$(c);try{c.offsetParent}catch(h){return Element._returnOffset(0,0)}var b=c.getStyle("position");if(b!=="static"){return f(c)}var d=c.getOffsetParent();if(d&&d.getStyle("position")==="fixed"){d.setStyle({zoom:1})}c.setStyle({position:"relative"});var g=f(c);c.setStyle({position:b});return g})});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(b,a){try{a.offsetParent}catch(c){return Element._returnOffset(0,0)}return b(a)});Element.Methods.getStyle=function(a,b){a=$(a);b=(b=="float"||b=="cssFloat")?"styleFloat":b.camelize();var c=a.style[b];if(!c&&a.currentStyle){c=a.currentStyle[b]}if(b=="opacity"){if(c=(a.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(c[1]){return parseFloat(c[1])/100}}return 1}if(c=="auto"){if((b=="width"||b=="height")&&(a.getStyle("display")!="none")){return a["offset"+b.capitalize()]+"px"}return null}return c};Element.Methods.setOpacity=function(b,e){function f(g){return g.replace(/alpha\([^\)]*\)/gi,"")}b=$(b);var a=b.currentStyle;if((a&&!a.hasLayout)||(!a&&b.style.zoom=="normal")){b.style.zoom=1}var d=b.getStyle("filter"),c=b.style;if(e==1||e===""){(d=f(d))?c.filter=d:c.removeAttribute("filter");return b}else{if(e<0.00001){e=0}}c.filter=f(d)+"alpha(opacity="+(e*100)+")";return b};Element._attributeTranslations=(function(){var b="className";var a="for";var c=document.createElement("div");c.setAttribute(b,"x");if(c.className!=="x"){c.setAttribute("class","x");if(c.className==="x"){b="class"}}c=null;c=document.createElement("label");c.setAttribute(a,"x");if(c.htmlFor!=="x"){c.setAttribute("htmlFor","x");if(c.htmlFor==="x"){a="htmlFor"}}c=null;return{read:{names:{"class":b,className:b,"for":a,htmlFor:a},values:{_getAttr:function(d,e){return d.getAttribute(e)},_getAttr2:function(d,e){return d.getAttribute(e,2)},_getAttrNode:function(d,f){var e=d.getAttributeNode(f);return e?e.value:""},_getEv:(function(){var d=document.createElement("div");d.onclick=Prototype.emptyFunction;var g=d.getAttribute("onclick");var e;if(String(g).indexOf("{")>-1){e=function(f,h){h=f.getAttribute(h);if(!h){return null}h=h.toString();h=h.split("{")[1];h=h.split("}")[0];return h.strip()}}else{if(g===""){e=function(f,h){h=f.getAttribute(h);if(!h){return null}return h.strip()}}}d=null;return e})(),_flag:function(d,e){return $(d).hasAttribute(e)?e:null},style:function(d){return d.style.cssText.toLowerCase()},title:function(d){return d.title}}}}})();Element._attributeTranslations.write={names:Object.extend({cellpadding:"cellPadding",cellspacing:"cellSpacing"},Element._attributeTranslations.read.names),values:{checked:function(a,b){a.checked=!!b},style:function(a,b){a.style.cssText=b?b:""}}};Element._attributeTranslations.has={};$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc frameBorder").each(function(a){Element._attributeTranslations.write.names[a.toLowerCase()]=a;Element._attributeTranslations.has[a.toLowerCase()]=a});(function(a){Object.extend(a,{href:a._getAttr2,src:a._getAttr2,type:a._getAttr,action:a._getAttrNode,disabled:a._flag,checked:a._flag,readonly:a._flag,multiple:a._flag,onload:a._getEv,onunload:a._getEv,onclick:a._getEv,ondblclick:a._getEv,onmousedown:a._getEv,onmouseup:a._getEv,onmouseover:a._getEv,onmousemove:a._getEv,onmouseout:a._getEv,onfocus:a._getEv,onblur:a._getEv,onkeypress:a._getEv,onkeydown:a._getEv,onkeyup:a._getEv,onsubmit:a._getEv,onreset:a._getEv,onselect:a._getEv,onchange:a._getEv})})(Element._attributeTranslations.read.values);if(Prototype.BrowserFeatures.ElementExtensions){(function(){function a(e){var b=e.getElementsByTagName("*"),d=[];for(var c=0,f;f=b[c];c++){if(f.tagName!=="!"){d.push(f)}}return d}Element.Methods.down=function(c,d,b){c=$(c);if(arguments.length==1){return c.firstDescendant()}return Object.isNumber(d)?a(c)[d]:Element.select(c,d)[b||0]}})()}}else{if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1)?0.999999:(b==="")?"":(b<0.00001)?0:b;return a}}else{if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;if(b==1){if(a.tagName.toUpperCase()=="IMG"&&a.width){a.width++;a.width--}else{try{var d=document.createTextNode(" ");a.appendChild(d);a.removeChild(d)}catch(c){}}}return a};Element.Methods.cumulativeOffset=function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body){if(Element.getStyle(b,"position")=="absolute"){break}}b=b.offsetParent}while(b);return Element._returnOffset(c,a)}}}}}if("outerHTML"in document.documentElement){Element.Methods.replace=function(c,e){c=$(c);if(e&&e.toElement){e=e.toElement()}if(Object.isElement(e)){c.parentNode.replaceChild(e,c);return c}e=Object.toHTML(e);var d=c.parentNode,b=d.tagName.toUpperCase();if(Element._insertionTranslations.tags[b]){var f=c.next();var a=Element._getContentFromAnonymousElement(b,e.stripScripts());d.removeChild(c);if(f){a.each(function(g){d.insertBefore(g,f)})}else{a.each(function(g){d.appendChild(g)})}}else{c.outerHTML=e.stripScripts()}e.evalScripts.bind(e).defer();return c}}Element._returnOffset=function(b,c){var a=[b,c];a.left=b;a.top=c;return a};Element._getContentFromAnonymousElement=function(c,b){var d=new Element("div"),a=Element._insertionTranslations.tags[c];if(a){d.innerHTML=a[0]+b+a[1];a[2].times(function(){d=d.firstChild})}else{d.innerHTML=b}return $A(d.childNodes)};Element._insertionTranslations={before:function(a,b){a.parentNode.insertBefore(b,a)},top:function(a,b){a.insertBefore(b,a.firstChild)},bottom:function(a,b){a.appendChild(b)},after:function(a,b){a.parentNode.insertBefore(b,a.nextSibling)},tags:{TABLE:["<table>","</table>",1],TBODY:["<table><tbody>","</tbody></table>",2],TR:["<table><tbody><tr>","</tr></tbody></table>",3],TD:["<table><tbody><tr><td>","</td></tr></tbody></table>",4],SELECT:["<select>","</select>",1]}};(function(){var a=Element._insertionTranslations.tags;Object.extend(a,{THEAD:a.TBODY,TFOOT:a.TBODY,TH:a.TD})})();Element.Methods.Simulated={hasAttribute:function(a,c){c=Element._attributeTranslations.has[c]||c;var b=$(a).getAttributeNode(c);return!!(b&&b.specified)}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);(function(a){if(!Prototype.BrowserFeatures.ElementExtensions&&a.__proto__){window.HTMLElement={};window.HTMLElement.prototype=a.__proto__;Prototype.BrowserFeatures.ElementExtensions=true}a=null})(document.createElement("div"));Element.extend=(function(){function c(g){if(typeof window.Element!="undefined"){var i=window.Element.prototype;if(i){var k="_"+(Math.random()+"").slice(2);var h=document.createElement(g);i[k]="x";var j=(h[k]!=="x");delete i[k];h=null;return j}}return false}function b(h,g){for(var j in g){var i=g[j];if(Object.isFunction(i)&&!(j in h)){h[j]=i.methodize()}}}var d=c("object");if(Prototype.BrowserFeatures.SpecificElementExtensions){if(d){return function(h){if(h&&typeof h._extendedByPrototype=="undefined"){var g=h.tagName;if(g&&(/^(?:object|applet|embed)$/i.test(g))){b(h,Element.Methods);b(h,Element.Methods.Simulated);b(h,Element.Methods.ByTag[g.toUpperCase()])}}return h}}return Prototype.K}var a={},e=Element.Methods.ByTag;var f=Object.extend(function(i){if(!i||typeof i._extendedByPrototype!="undefined"||i.nodeType!=1||i==window){return i}var g=Object.clone(a),h=i.tagName.toUpperCase();if(e[h]){Object.extend(g,e[h])}b(i,g);i._extendedByPrototype=Prototype.emptyFunction;return i},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(a,Element.Methods);Object.extend(a,Element.Methods.Simulated)}}});f.refresh();return f})();Element.hasAttribute=function(a,b){if(a.hasAttribute){return a.hasAttribute(b)}return Element.Methods.Simulated.hasAttribute(a,b)};Element.addMethods=function(c){var i=Prototype.BrowserFeatures,d=Element.Methods.ByTag;if(!c){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods)})}if(arguments.length==2){var b=c;c=arguments[1]}if(!b){Object.extend(Element.Methods,c||{})}else{if(Object.isArray(b)){b.each(g)}else{g(b)}}function g(k){k=k.toUpperCase();if(!Element.Methods.ByTag[k]){Element.Methods.ByTag[k]={}}Object.extend(Element.Methods.ByTag[k],c)}function a(m,l,k){k=k||false;for(var o in m){var n=m[o];if(!Object.isFunction(n)){continue}if(!k||!(o in l)){l[o]=n.methodize()}}}function e(n){var k;var m={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(m[n]){k="HTML"+m[n]+"Element"}if(window[k]){return window[k]}k="HTML"+n+"Element";if(window[k]){return window[k]}k="HTML"+n.capitalize()+"Element";if(window[k]){return window[k]}var l=document.createElement(n);var o=l.__proto__||l.constructor.prototype;l=null;return o}var h=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(i.ElementExtensions){a(Element.Methods,h);a(Element.Methods.Simulated,h,true)}if(i.SpecificElementExtensions){for(var j in Element.Methods.ByTag){var f=e(j);if(Object.isUndefined(f)){continue}a(d[j],f.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){return{width:this.getWidth(),height:this.getHeight()}},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};(function(b){var g=Prototype.Browser,e=document,c,d={};function a(){if(g.WebKit&&!e.evaluate){return document}if(g.Opera&&window.parseFloat(window.opera.version())<9.5){return document.body}return document.documentElement}function f(h){if(!c){c=a()}d[h]="client"+h;b["get"+h]=function(){return c[d[h]]};return b["get"+h]()}b.getWidth=f.curry("Width");b.getHeight=f.curry("Height")})(document.viewport);Element.Storage={UID:1};Element.addMethods({getStorage:function(b){if(!(b=$(b))){return}var a;if(b===window){a=0}else{if(typeof b._prototypeUID==="undefined"){b._prototypeUID=[Element.Storage.UID++]}a=b._prototypeUID[0]}if(!Element.Storage[a]){Element.Storage[a]=$H()}return Element.Storage[a]},store:function(b,a,c){if(!(b=$(b))){return}if(arguments.length===2){Element.getStorage(b).update(a)}else{Element.getStorage(b).set(a,c)}return b},retrieve:function(c,b,a){if(!(c=$(c))){return}var e=Element.getStorage(c),d=e.get(b);if(Object.isUndefined(d)){e.set(b,a);d=a}return d},clone:function(c,a){if(!(c=$(c))){return}var e=c.cloneNode(a);e._prototypeUID=void 0;if(a){var d=Element.select(e,"*"),b=d.length;while(b--){d[b]._prototypeUID=void 0}}return Element.extend(e)}});var Selector=Class.create({initialize:function(a){this.expression=a.strip();if(this.shouldUseSelectorsAPI()){this.mode="selectorsAPI"}else{if(this.shouldUseXPath()){this.mode="xpath";this.compileXPathMatcher()}else{this.mode="normal";this.compileMatcher()}}},shouldUseXPath:(function(){var a=(function(){var e=false;if(document.evaluate&&window.XPathResult){var d=document.createElement("div");d.innerHTML="<ul><li></li></ul><div><ul><li></li></ul></div>";var c=".//*[local-name()='ul' or local-name()='UL']//*[local-name()='li' or local-name()='LI']";var b=document.evaluate(c,d,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);e=(b.snapshotLength!==2);d=null}return e})();return function(){if(!Prototype.BrowserFeatures.XPath){return false}var b=this.expression;if(Prototype.Browser.WebKit&&(b.include("-of-type")||b.include(":empty"))){return false}if((/(\[[\w-]*?:|:checked)/).test(b)){return false}if(a){return false}return true}})(),shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI){return false}if(Selector.CASE_INSENSITIVE_CLASS_NAMES){return false}if(!Selector._div){Selector._div=new Element("div")}try{Selector._div.querySelector(this.expression)}catch(a){return false}return true},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m,len=ps.length,name;if(Selector._cache[e]){this.matcher=Selector._cache[e];return}this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i=0;i<len;i++){p=ps[i].re;name=ps[i].name;if(m=e.match(p)){this.matcher.push(Object.isFunction(c[name])?c[name](m):new Template(c[name]).evaluate(m));e=e.replace(m[0],"");break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join("\n"));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var h=this.expression,j=Selector.patterns,c=Selector.xpath,g,b,a=j.length,d;if(Selector._cache[h]){this.xpath=Selector._cache[h];return}this.matcher=[".//*"];while(h&&g!=h&&(/\S/).test(h)){g=h;for(var f=0;f<a;f++){d=j[f].name;if(b=h.match(j[f].re)){this.matcher.push(Object.isFunction(c[d])?c[d](b):new Template(c[d]).evaluate(b));h=h.replace(b[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(a){a=a||document;var c=this.expression,b;switch(this.mode){case"selectorsAPI":if(a!==document){var d=a.id,f=$(a).identify();f=f.replace(/([\.:])/g,"\\$1");c="#"+f+" "+c}b=$A(a.querySelectorAll(c)).map(Element.extend);a.id=d;return b;case"xpath":return document._getElementsByXPath(this.xpath,a);default:return this.matcher(a)}},match:function(k){this.tokens=[];var q=this.expression,a=Selector.patterns,f=Selector.assertions;var b,d,g,o=a.length,c;while(q&&b!==q&&(/\S/).test(q)){b=q;for(var j=0;j<o;j++){d=a[j].re;c=a[j].name;if(g=q.match(d)){if(f[c]){this.tokens.push([c,Object.clone(g)]);q=q.replace(g[0],"")}else{return this.findElements(document).include(k)}}}}var n=true,c,l;for(var j=0,h;h=this.tokens[j];j++){c=h[0],l=h[1];if(!Selector.assertions[c](k,l)){n=false;break}}return n},toString:function(){return this.expression},inspect:function(){return"#<Selector:"+this.expression.inspect()+">"}});if(Prototype.BrowserFeatures.SelectorsAPI&&document.compatMode==="BackCompat"){Selector.CASE_INSENSITIVE_CLASS_NAMES=(function(){var c=document.createElement("div"),a=document.createElement("span");c.id="prototype_test_id";a.className="Test";c.appendChild(a);var b=(c.querySelector("#prototype_test_id .test")!==null);c=a=null;return b})()}Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:"/following-sibling::*",tagName:function(a){if(a[1]=="*"){return""}return"[local-name()='"+a[1].toLowerCase()+"' or local-name()='"+a[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(a){a[1]=a[1].toLowerCase();return new Template("[@#{1}]").evaluate(a)},attr:function(a){a[1]=a[1].toLowerCase();a[3]=a[5]||a[6];return new Template(Selector.xpath.operators[a[2]]).evaluate(a)},pseudo:function(a){var b=Selector.xpath.pseudos[a[1]];if(!b){return""}if(Object.isFunction(b)){return b(a)}return new Template(Selector.xpath.pseudos[a[1]]).evaluate(a)},operators:{"=":"[@#{1}='#{3}']","!=":"[@#{1}!='#{3}']","^=":"[starts-with(@#{1}, '#{3}')]","$=":"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']","*=":"[contains(@#{1}, '#{3}')]","~=":"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]","|=":"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{"first-child":"[not(preceding-sibling::*)]","last-child":"[not(following-sibling::*)]","only-child":"[not(preceding-sibling::* or following-sibling::*)]",empty:"[count(*) = 0 and (count(text()) = 0)]",checked:"[@checked]",disabled:"[(@disabled) and (@type!='hidden')]",enabled:"[not(@disabled) and (@type!='hidden')]",not:function(f){var j=f[6],c=Selector.patterns,k=Selector.xpath,a,l,h=c.length,b;var d=[];while(j&&a!=j&&(/\S/).test(j)){a=j;for(var g=0;g<h;g++){b=c[g].name;if(f=j.match(c[g].re)){l=Object.isFunction(k[b])?k[b](f):new Template(k[b]).evaluate(f);d.push("("+l.substring(1,l.length-1)+")");j=j.replace(f[0],"");break}}}return"[not("+d.join(" and ")+")]"},"nth-child":function(a){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",a)},"nth-last-child":function(a){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",a)},"nth-of-type":function(a){return Selector.xpath.pseudos.nth("position() ",a)},"nth-last-of-type":function(a){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",a)},"first-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-of-type"](a)},"last-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-last-of-type"](a)},"only-of-type":function(a){var b=Selector.xpath.pseudos;return b["first-of-type"](a)+b["last-of-type"](a)},nth:function(g,e){var h,i=e[6],d;if(i=="even"){i="2n+0"}if(i=="odd"){i="2n+1"}if(h=i.match(/^(\d+)$/)){return"["+g+"= "+h[1]+"]"}if(h=i.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(h[1]=="-"){h[1]=-1}var f=h[1]?Number(h[1]):1;var c=h[2]?Number(h[2]):0;d="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(d).evaluate({fragment:g,a:f,b:c})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c); c = false;',className:'n = h.className(n, r, "#{1}", c); c = false;',id:'n = h.id(n, r, "#{1}", c); c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(a){a[3]=(a[5]||a[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(a)},pseudo:function(a){if(a[6]){a[6]=a[6].replace(/"/g,'\\"')}return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(a)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:[{name:"laterSibling",re:/^\s*~\s*/},{name:"child",re:/^\s*>\s*/},{name:"adjacent",re:/^\s*\+\s*/},{name:"descendant",re:/^\s/},{name:"tagName",re:/^\s*(\*|[\w\-]+)(\b|$)?/},{name:"id",re:/^#([\w\-\*]+)(\b|$)/},{name:"className",re:/^\.([\w\-\*]+)(\b|$)/},{name:"pseudo",re:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/},{name:"attrPresence",re:/^\[((?:[\w-]+:)?[\w-]+)\]/},{name:"attr",re:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/}],assertions:{tagName:function(a,b){return b[1].toUpperCase()==a.tagName.toUpperCase()},className:function(a,b){return Element.hasClassName(a,b[1])},id:function(a,b){return a.id===b[1]},attrPresence:function(a,b){return Element.hasAttribute(a,b[1])},attr:function(b,c){var a=Element.readAttribute(b,c[1]);return a&&Selector.operators[c[2]](a,c[5]||c[6])}},handlers:{concat:function(d,c){for(var e=0,f;f=c[e];e++){d.push(f)}return d},mark:function(a){var d=Prototype.emptyFunction;for(var b=0,c;c=a[b];b++){c._countedByPrototype=d}return a},unmark:(function(){var a=(function(){var b=document.createElement("div"),e=false,d="_countedByPrototype",c="x";b[d]=c;e=(b.getAttribute(d)===c);b=null;return e})();return a?function(b){for(var c=0,d;d=b[c];c++){d.removeAttribute("_countedByPrototype")}return b}:function(b){for(var c=0,d;d=b[c];c++){d._countedByPrototype=void 0}return b}})(),index:function(a,d,g){a._countedByPrototype=Prototype.emptyFunction;if(d){for(var b=a.childNodes,e=b.length-1,c=1;e>=0;e--){var f=b[e];if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}else{for(var e=0,c=1,b=a.childNodes;f=b[e];e++){if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}},unique:function(b){if(b.length==0){return b}var d=[],e;for(var c=0,a=b.length;c<a;c++){if(typeof(e=b[c])._countedByPrototype=="undefined"){e._countedByPrototype=Prototype.emptyFunction;d.push(Element.extend(e))}}return Selector.handlers.unmark(d)},descendant:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,e.getElementsByTagName("*"))}return b},child:function(a){var e=Selector.handlers;for(var d=0,c=[],f;f=a[d];d++){for(var b=0,g;g=f.childNodes[b];b++){if(g.nodeType==1&&g.tagName!="!"){c.push(g)}}}return c},adjacent:function(a){for(var c=0,b=[],e;e=a[c];c++){var d=this.nextElementSibling(e);if(d){b.push(d)}}return b},laterSibling:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,Element.nextSiblings(e))}return b},nextElementSibling:function(a){while(a=a.nextSibling){if(a.nodeType==1){return a}}return null},previousElementSibling:function(a){while(a=a.previousSibling){if(a.nodeType==1){return a}}return null},tagName:function(a,j,c,b){var k=c.toUpperCase();var e=[],g=Selector.handlers;if(a){if(b){if(b=="descendant"){for(var f=0,d;d=a[f];f++){g.concat(e,d.getElementsByTagName(c))}return e}else{a=this[b](a)}if(c=="*"){return a}}for(var f=0,d;d=a[f];f++){if(d.tagName.toUpperCase()===k){e.push(d)}}return e}else{return j.getElementsByTagName(c)}},id:function(a,l,b,c){var k=$(b),g=Selector.handlers;if(l==document){if(!k){return[]}if(!a){return[k]}}else{if(!l.sourceIndex||l.sourceIndex<1){var a=l.getElementsByTagName("*");for(var e=0,d;d=a[e];e++){if(d.id===b){return[d]}}}}if(a){if(c){if(c=="child"){for(var f=0,d;d=a[f];f++){if(k.parentNode==d){return[k]}}}else{if(c=="descendant"){for(var f=0,d;d=a[f];f++){if(Element.descendantOf(k,d)){return[k]}}}else{if(c=="adjacent"){for(var f=0,d;d=a[f];f++){if(Selector.handlers.previousElementSibling(k)==d){return[k]}}}else{a=g[c](a)}}}}for(var f=0,d;d=a[f];f++){if(d==k){return[k]}}return[]}return(k&&Element.descendantOf(k,l))?[k]:[]},className:function(b,a,c,d){if(b&&d){b=this[d](b)}return Selector.handlers.byClassName(b,a,c)},byClassName:function(c,b,f){if(!c){c=Selector.handlers.descendant([b])}var h=" "+f+" ";for(var e=0,d=[],g,a;g=c[e];e++){a=g.className;if(a.length==0){continue}if(a==f||(" "+a+" ").include(h)){d.push(g)}}return d},attrPresence:function(c,b,a,g){if(!c){c=b.getElementsByTagName("*")}if(c&&g){c=this[g](c)}var e=[];for(var d=0,f;f=c[d];d++){if(Element.hasAttribute(f,a)){e.push(f)}}return e},attr:function(a,j,h,k,c,b){if(!a){a=j.getElementsByTagName("*")}if(a&&b){a=this[b](a)}var l=Selector.operators[c],f=[];for(var e=0,d;d=a[e];e++){var g=Element.readAttribute(d,h);if(g===null){continue}if(l(g,k)){f.push(d)}}return f},pseudo:function(b,c,e,a,d){if(b&&d){b=this[d](b)}if(!b){b=a.getElementsByTagName("*")}return Selector.pseudos[c](b,e,a)}},pseudos:{"first-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.previousElementSibling(e)){continue}c.push(e)}return c},"last-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.nextElementSibling(e)){continue}c.push(e)}return c},"only-child":function(b,g,a){var e=Selector.handlers;for(var d=0,c=[],f;f=b[d];d++){if(!e.previousElementSibling(f)&&!e.nextElementSibling(f)){c.push(f)}}return c},"nth-child":function(b,c,a){return Selector.pseudos.nth(b,c,a)},"nth-last-child":function(b,c,a){return Selector.pseudos.nth(b,c,a,true)},"nth-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,false,true)},"nth-last-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,true,true)},"first-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,false,true)},"last-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,true,true)},"only-of-type":function(b,d,a){var c=Selector.pseudos;return c["last-of-type"](c["first-of-type"](b,d,a),d,a)},getIndices:function(d,c,e){if(d==0){return c>0?[c]:[]}return $R(1,e).inject([],function(a,b){if(0==(b-c)%d&&(b-c)/d>=0){a.push(b)}return a})},nth:function(c,s,u,r,e){if(c.length==0){return[]}if(s=="even"){s="2n+0"}if(s=="odd"){s="2n+1"}var q=Selector.handlers,p=[],d=[],g;q.mark(c);for(var o=0,f;f=c[o];o++){if(!f.parentNode._countedByPrototype){q.index(f.parentNode,r,e);d.push(f.parentNode)}}if(s.match(/^\d+$/)){s=Number(s);for(var o=0,f;f=c[o];o++){if(f.nodeIndex==s){p.push(f)}}}else{if(g=s.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(g[1]=="-"){g[1]=-1}var v=g[1]?Number(g[1]):1;var t=g[2]?Number(g[2]):0;var w=Selector.pseudos.getIndices(v,t,c.length);for(var o=0,f,k=w.length;f=c[o];o++){for(var n=0;n<k;n++){if(f.nodeIndex==w[n]){p.push(f)}}}}}q.unmark(c);q.unmark(d);return p},empty:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.tagName=="!"||e.firstChild){continue}c.push(e)}return c},not:function(a,d,k){var g=Selector.handlers,l,c;var j=new Selector(d).findElements(k);g.mark(j);for(var f=0,e=[],b;b=a[f];f++){if(!b._countedByPrototype){e.push(b)}}g.unmark(j);return e},enabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(!e.disabled&&(!e.type||e.type!=="hidden")){c.push(e)}}return c},disabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.disabled){c.push(e)}}return c},checked:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.checked){c.push(e)}}return c}},operators:{"=":function(b,a){return b==a},"!=":function(b,a){return b!=a},"^=":function(b,a){return b==a||b&&b.startsWith(a)},"$=":function(b,a){return b==a||b&&b.endsWith(a)},"*=":function(b,a){return b==a||b&&b.include(a)},"~=":function(b,a){return(" "+b+" ").include(" "+a+" ")},"|=":function(b,a){return("-"+(b||"").toUpperCase()+"-").include("-"+(a||"").toUpperCase()+"-")}},split:function(b){var a=[];b.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(c){a.push(c[1].strip())});return a},matchElements:function(f,g){var e=$$(g),d=Selector.handlers;d.mark(e);for(var c=0,b=[],a;a=f[c];c++){if(a._countedByPrototype){b.push(a)}}d.unmark(e);return b},findElement:function(b,c,a){if(Object.isNumber(c)){a=c;c=false}return Selector.matchElements(b,c||"*")[a||0]},findChildElements:function(e,g){g=Selector.split(g.join(","));var d=[],f=Selector.handlers;for(var c=0,b=g.length,a;c<b;c++){a=new Selector(g[c].strip());f.concat(d,a.findElements(e))}return(b>1)?f.unique(d):d}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(d,c){for(var e=0,f;f=c[e];e++){if(f.tagName!=="!"){d.push(f)}}return d}})}function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(a){a=$(a);a.reset();return a},serializeElements:function(g,b){if(typeof b!="object"){b={hash:!!b}}else{if(Object.isUndefined(b.hash)){b.hash=true}}var c,f,a=false,e=b.submit;var d=g.inject({},function(h,i){if(!i.disabled&&i.name){c=i.name;f=$(i).getValue();if(f!=null&&i.type!="file"&&(i.type!="submit"||(!a&&e!==false&&(!e||c==e)&&(a=true)))){if(c in h){if(!Object.isArray(h[c])){h[c]=[h[c]]}h[c].push(f)}else{h[c]=f}}}return h});return b.hash?d:Object.toQueryString(d)}};Form.Methods={serialize:function(b,a){return Form.serializeElements(Form.getElements(b),a)},getElements:function(e){var f=$(e).getElementsByTagName("*"),d,a=[],c=Form.Element.Serializers;for(var b=0;d=f[b];b++){a.push(d)}return a.inject([],function(g,h){if(c[h.tagName.toLowerCase()]){g.push(Element.extend(h))}return g})},getInputs:function(g,c,d){g=$(g);var a=g.getElementsByTagName("input");if(!c&&!d){return $A(a).map(Element.extend)}for(var e=0,h=[],f=a.length;e<f;e++){var b=a[e];if((c&&b.type!=c)||(d&&b.name!=d)){continue}h.push(Element.extend(b))}return h},disable:function(a){a=$(a);Form.getElements(a).invoke("disable");return a},enable:function(a){a=$(a);Form.getElements(a).invoke("enable");return a},findFirstElement:function(b){var c=$(b).getElements().findAll(function(d){return"hidden"!=d.type&&!d.disabled});var a=c.findAll(function(d){return d.hasAttribute("tabIndex")&&d.tabIndex>=0}).sortBy(function(d){return d.tabIndex}).first();return a?a:c.find(function(d){return/^(?:input|select|textarea)$/i.test(d.tagName)})},focusFirstElement:function(a){a=$(a);a.findFirstElement().activate();return a},request:function(b,a){b=$(b),a=Object.clone(a||{});var d=a.parameters,c=b.readAttribute("action")||"";if(c.blank()){c=window.location.href}a.parameters=b.serialize(true);if(d){if(Object.isString(d)){d=d.toQueryParams()}Object.extend(a.parameters,d)}if(b.hasAttribute("method")&&!a.method){a.method=b.method}return new Ajax.Request(c,a)}};Form.Element={focus:function(a){$(a).focus();return a},select:function(a){$(a).select();return a}};Form.Element.Methods={serialize:function(a){a=$(a);if(!a.disabled&&a.name){var b=a.getValue();if(b!=undefined){var c={};c[a.name]=b;return Object.toQueryString(c)}}return""},getValue:function(a){a=$(a);var b=a.tagName.toLowerCase();return Form.Element.Serializers[b](a)},setValue:function(a,b){a=$(a);var c=a.tagName.toLowerCase();Form.Element.Serializers[c](a,b);return a},clear:function(a){$(a).value="";return a},present:function(a){return $(a).value!=""},activate:function(a){a=$(a);try{a.focus();if(a.select&&(a.tagName.toLowerCase()!="input"||!(/^(?:button|reset|submit)$/i.test(a.type)))){a.select()}}catch(b){}return a},disable:function(a){a=$(a);a.disabled=true;return a},enable:function(a){a=$(a);a.disabled=false;return a}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(a,b){switch(a.type.toLowerCase()){case"checkbox":case"radio":return Form.Element.Serializers.inputSelector(a,b);default:return Form.Element.Serializers.textarea(a,b)}},inputSelector:function(a,b){if(Object.isUndefined(b)){return a.checked?a.value:null}else{a.checked=!!b}},textarea:function(a,b){if(Object.isUndefined(b)){return a.value}else{a.value=b}},select:function(c,f){if(Object.isUndefined(f)){return this[c.type=="select-one"?"selectOne":"selectMany"](c)}else{var b,d,g=!Object.isArray(f);for(var a=0,e=c.length;a<e;a++){b=c.options[a];d=this.optionValue(b);if(g){if(d==f){b.selected=true;return}}else{b.selected=f.include(d)}}}},selectOne:function(b){var a=b.selectedIndex;return a>=0?this.optionValue(b.options[a]):null},selectMany:function(d){var a,e=d.length;if(!e){return null}for(var c=0,a=[];c<e;c++){var b=d.options[c];if(b.selected){a.push(this.optionValue(b))}}return a},optionValue:function(a){return Element.extend(a).hasAttribute("value")?a.value:a.text}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,a,b,c){$super(c,b);this.element=$(a);this.lastValue=this.getValue()},execute:function(){var a=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(a)?this.lastValue!=a:String(this.lastValue)!=String(a)){this.callback(this.element,a);this.lastValue=a}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(a,b){this.element=$(a);this.callback=b;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var a=this.getValue();if(this.lastValue!=a){this.callback(this.element,a);this.lastValue=a}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(a){if(a.type){switch(a.type.toLowerCase()){case"checkbox":case"radio":Event.observe(a,"click",this.onElementEvent.bind(this));break;default:Event.observe(a,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});(function(){var v={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,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{}};var e=document.documentElement;var w="onmouseenter"in e&&"onmouseleave"in e;var o;if(Prototype.Browser.IE){var h={0:1,1:4,2:2};o=function(y,x){return y.button===h[x]}}else{if(Prototype.Browser.WebKit){o=function(y,x){switch(x){case 0:return y.which==1&&!y.metaKey;case 1:return y.which==1&&y.metaKey;default:return false}}}else{o=function(y,x){return y.which?(y.which===x+1):(y.button===x)}}}function r(x){return o(x,0)}function q(x){return o(x,1)}function k(x){return o(x,2)}function c(z){z=v.extend(z);var y=z.target,x=z.type,A=z.currentTarget;if(A&&A.tagName){if(x==="load"||x==="error"||(x==="click"&&A.tagName.toLowerCase()==="input"&&A.type==="radio")){y=A}}if(y.nodeType==Node.TEXT_NODE){y=y.parentNode}return Element.extend(y)}function m(y,A){var x=v.element(y);if(!A){return x}var z=[x].concat(x.ancestors());return Selector.findElement(z,A,0)}function p(x){return{x:b(x),y:a(x)}}function b(z){var y=document.documentElement,x=document.body||{scrollLeft:0};return z.pageX||(z.clientX+(y.scrollLeft||x.scrollLeft)-(y.clientLeft||0))}function a(z){var y=document.documentElement,x=document.body||{scrollTop:0};return z.pageY||(z.clientY+(y.scrollTop||x.scrollTop)-(y.clientTop||0))}function n(x){v.extend(x);x.preventDefault();x.stopPropagation();x.stopped=true}v.Methods={isLeftClick:r,isMiddleClick:q,isRightClick:k,element:c,findElement:m,pointer:p,pointerX:b,pointerY:a,stop:n};var t=Object.keys(v.Methods).inject({},function(x,y){x[y]=v.Methods[y].methodize();return x});if(Prototype.Browser.IE){function g(y){var x;switch(y.type){case"mouseover":x=y.fromElement;break;case"mouseout":x=y.toElement;break;default:return null}return Element.extend(x)}Object.extend(t,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});v.extend=function(y,x){if(!y){return false}if(y._extendedByPrototype){return y}y._extendedByPrototype=Prototype.emptyFunction;var z=v.pointer(y);Object.extend(y,{target:y.srcElement||x,relatedTarget:g(y),pageX:z.x,pageY:z.y});return Object.extend(y,t)}}else{v.prototype=window.Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(v.prototype,t);v.extend=Prototype.K}function l(B,A,C){var z=Element.retrieve(B,"prototype_event_registry");if(Object.isUndefined(z)){d.push(B);z=Element.retrieve(B,"prototype_event_registry",$H())}var x=z.get(A);if(Object.isUndefined(x)){x=[];z.set(A,x)}if(x.pluck("handler").include(C)){return false}var y;if(A.include(":")){y=function(D){if(Object.isUndefined(D.eventName)){return false}if(D.eventName!==A){return false}v.extend(D,B);C.call(B,D)}}else{if(!w&&(A==="mouseenter"||A==="mouseleave")){if(A==="mouseenter"||A==="mouseleave"){y=function(E){v.extend(E,B);var D=E.relatedTarget;while(D&&D!==B){try{D=D.parentNode}catch(F){D=B}}if(D===B){return}C.call(B,E)}}}else{y=function(D){v.extend(D,B);C.call(B,D)}}}y.handler=C;x.push(y);return y}function f(){for(var x=0,y=d.length;x<y;x++){v.stopObserving(d[x]);d[x]=null}}var d=[];if(Prototype.Browser.IE){window.attachEvent("onunload",f)}if(Prototype.Browser.WebKit){window.addEventListener("unload",Prototype.emptyFunction,false)}var j=Prototype.K;if(!w){j=function(y){var x={mouseenter:"mouseover",mouseleave:"mouseout"};return y in x?x[y]:y}}function s(A,z,B){A=$(A);var y=l(A,z,B);if(!y){return A}if(z.include(":")){if(A.addEventListener){A.addEventListener("dataavailable",y,false)}else{A.attachEvent("ondataavailable",y);A.attachEvent("onfilterchange",y)}}else{var x=j(z);if(A.addEventListener){A.addEventListener(x,y,false)}else{A.attachEvent("on"+x,y)}}return A}function i(C,A,D){C=$(C);var z=Element.retrieve(C,"prototype_event_registry");if(Object.isUndefined(z)){return C}if(A&&!D){var B=z.get(A);if(Object.isUndefined(B)){return C}B.each(function(E){Element.stopObserving(C,A,E.handler)});return C}else{if(!A){z.each(function(G){var E=G.key,F=G.value;F.each(function(H){Element.stopObserving(C,E,H.handler)})});return C}}var B=z.get(A);if(!B){return}var y=B.find(function(E){return E.handler===D});if(!y){return C}var x=j(A);if(A.include(":")){if(C.removeEventListener){C.removeEventListener("dataavailable",y,false)}else{C.detachEvent("ondataavailable",y);C.detachEvent("onfilterchange",y)}}else{if(C.removeEventListener){C.removeEventListener(x,y,false)}else{C.detachEvent("on"+x,y)}}z.set(A,B.without(y));return C}function u(A,z,y,x){A=$(A);if(Object.isUndefined(x)){x=true}if(A==document&&document.createEvent&&!A.dispatchEvent){A=document.documentElement}var B;if(document.createEvent){B=document.createEvent("HTMLEvents");B.initEvent("dataavailable",true,true)}else{B=document.createEventObject();B.eventType=x?"ondataavailable":"onfilterchange"}B.eventName=z;B.memo=y||{};if(document.createEvent){A.dispatchEvent(B)}else{A.fireEvent(B.eventType,B)}return v.extend(B)}Object.extend(v,v.Methods);Object.extend(v,{fire:u,observe:s,stopObserving:i});Element.addMethods({fire:u,observe:s,stopObserving:i});Object.extend(document,{fire:u.methodize(),observe:s.methodize(),stopObserving:i.methodize(),loaded:false});if(window.Event){Object.extend(window.Event,v)}else{window.Event=v}})();(function(){var d;function a(){if(document.loaded){return}if(d){window.clearTimeout(d)}document.loaded=true;document.fire("dom:loaded")}function c(){if(document.readyState==="complete"){document.stopObserving("readystatechange",c);a()}}function b(){try{document.documentElement.doScroll("left")}catch(f){d=b.defer();return}a()}if(document.addEventListener){document.addEventListener("DOMContentLoaded",a,false)}else{document.observe("readystatechange",c);if(window==top){d=b.defer()}}Event.observe(window,"load",a)})();Element.addMethods();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(a,b){return Element.insert(a,{before:b})},Top:function(a,b){return Element.insert(a,{top:b})},Bottom:function(a,b){return Element.insert(a,{bottom:b})},After:function(a,b){return Element.insert(a,{after:b})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(b,a,c){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(b,a,c)}this.xcomp=a;this.ycomp=c;this.offset=Element.cumulativeOffset(b);return(c>=this.offset[1]&&c<this.offset[1]+b.offsetHeight&&a>=this.offset[0]&&a<this.offset[0]+b.offsetWidth)},withinIncludingScrolloffsets:function(b,a,d){var c=Element.cumulativeScrollOffset(b);this.xcomp=a+c[0]-this.deltaX;this.ycomp=d+c[1]-this.deltaY;this.offset=Element.cumulativeOffset(b);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+b.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+b.offsetWidth)},overlap:function(b,a){if(!b){return 0}if(b=="vertical"){return((this.offset[1]+a.offsetHeight)-this.ycomp)/a.offsetHeight}if(b=="horizontal"){return((this.offset[0]+a.offsetWidth)-this.xcomp)/a.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(a){Position.prepare();return Element.absolutize(a)},relativize:function(a){Position.prepare();return Element.relativize(a)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(b,c,a){a=a||{};return Element.clonePosition(c,b,a)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(b){function a(c){return c.blank()?null:"[contains(concat(' ', @class, ' '), ' "+c+" ')]"}b.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(c,e){e=e.toString().strip();var d=/\s/.test(e)?$w(e).map(a).join(""):a(e);return d?document._getElementsByXPath(".//*"+d,c):[]}:function(e,f){f=f.toString().strip();var g=[],h=(/\s/.test(f)?$w(f):null);if(!h&&!f){return g}var c=$(e).getElementsByTagName("*");f=" "+f+" ";for(var d=0,k,j;k=c[d];d++){if(k.className&&(j=" "+k.className+" ")&&(j.include(f)||(h&&h.all(function(i){return!i.toString().blank()&&j.include(" "+i+" ")})))){g.push(Element.extend(k))}}return g};return function(d,c){return $(c||document.body).getElementsByClassName(d)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(a){this.element=$(a)},_each:function(a){this.element.className.split(/\s+/).select(function(b){return b.length>0})._each(a)},set:function(a){this.element.className=a},add:function(a){if(this.include(a)){return}this.set($A(this).concat(a).join(" "))},remove:function(a){if(!this.include(a)){return}this.set($A(this).without(a).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);
\ No newline at end of file
diff --git a/js/src/QuickFinder.js b/js/src/QuickFinder.js
index da8594d..dd115b7 100644
--- a/js/src/QuickFinder.js
+++ b/js/src/QuickFinder.js
@@ -15,7 +15,7 @@
*
* @author Chuck Hagenbuch <chuck at horde.org>
*
- * $Horde: mnemo/js/src/QuickFinder.js,v 1.1.2.2 2007/12/22 05:24:23 chuck Exp $
+ * $Horde: mnemo/js/src/QuickFinder.js,v 1.1.2.2 2007-12-22 05:24:23 chuck Exp $
*/
var QuickFinder = {
diff --git a/js/src/prototype.js b/js/src/prototype.js
index 0bb8807..8fc1415 100644
--- a/js/src/prototype.js
+++ b/js/src/prototype.js
@@ -1,5 +1,5 @@
-/* Prototype JavaScript framework, version 1.6.0.2
- * (c) 2005-2008 Sam Stephenson
+/* Prototype JavaScript framework, version 1.6.1
+ * (c) 2005-2009 Sam Stephenson
*
* Prototype is freely distributable under the terms of an MIT-style license.
* For details, see the Prototype web site: http://www.prototypejs.org/
@@ -7,23 +7,43 @@
*--------------------------------------------------------------------------*/
var Prototype = {
- Version: '1.6.0.2',
-
- Browser: {
- IE: !!(window.attachEvent && !window.opera),
- Opera: !!window.opera,
- WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
- Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
- MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
- },
+ Version: '1.6.1',
+
+ Browser: (function(){
+ var ua = navigator.userAgent;
+ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+ return {
+ IE: !!window.attachEvent && !isOpera,
+ Opera: isOpera,
+ WebKit: ua.indexOf('AppleWebKit/') > -1,
+ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+ MobileSafari: /Apple.*Mobile.*Safari/.test(ua)
+ }
+ })(),
BrowserFeatures: {
XPath: !!document.evaluate,
- ElementExtensions: !!window.HTMLElement,
- SpecificElementExtensions:
- document.createElement('div').__proto__ &&
- document.createElement('div').__proto__ !==
- document.createElement('form').__proto__
+ SelectorsAPI: !!document.querySelector,
+ ElementExtensions: (function() {
+ var constructor = window.Element || window.HTMLElement;
+ return !!(constructor && constructor.prototype);
+ })(),
+ SpecificElementExtensions: (function() {
+ if (typeof window.HTMLDivElement !== 'undefined')
+ return true;
+
+ var div = document.createElement('div');
+ var form = document.createElement('form');
+ var isSupported = false;
+
+ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+ isSupported = true;
+ }
+
+ div = form = null;
+
+ return isSupported;
+ })()
},
ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
@@ -37,9 +57,30 @@ if (Prototype.Browser.MobileSafari)
Prototype.BrowserFeatures.SpecificElementExtensions = false;
+var Abstract = { };
+
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
/* Based on Alex Arnell's inheritance implementation. */
-var Class = {
- create: function() {
+
+var Class = (function() {
+ function subclass() {};
+ function create() {
var parent = null, properties = $A(arguments);
if (Object.isFunction(properties[0]))
parent = properties.shift();
@@ -53,7 +94,6 @@ var Class = {
klass.subclasses = [];
if (parent) {
- var subclass = function() { };
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
parent.subclasses.push(klass);
@@ -66,58 +106,67 @@ var Class = {
klass.prototype.initialize = Prototype.emptyFunction;
klass.prototype.constructor = klass;
-
return klass;
}
-};
-Class.Methods = {
- addMethods: function(source) {
+ function addMethods(source) {
var ancestor = this.superclass && this.superclass.prototype;
var properties = Object.keys(source);
- if (!Object.keys({ toString: true }).length)
- properties.push("toString", "valueOf");
+ if (!Object.keys({ toString: true }).length) {
+ if (source.toString != Object.prototype.toString)
+ properties.push("toString");
+ if (source.valueOf != Object.prototype.valueOf)
+ properties.push("valueOf");
+ }
for (var i = 0, length = properties.length; i < length; i++) {
var property = properties[i], value = source[property];
if (ancestor && Object.isFunction(value) &&
value.argumentNames().first() == "$super") {
- var method = value, value = Object.extend((function(m) {
- return function() { return ancestor[m].apply(this, arguments) };
- })(property).wrap(method), {
- valueOf: function() { return method },
- toString: function() { return method.toString() }
- });
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments); };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
}
this.prototype[property] = value;
}
return this;
}
-};
-var Abstract = { };
+ return {
+ create: create,
+ Methods: {
+ addMethods: addMethods
+ }
+ };
+})();
+(function() {
-Object.extend = function(destination, source) {
- for (var property in source)
- destination[property] = source[property];
- return destination;
-};
+ var _toString = Object.prototype.toString;
-Object.extend(Object, {
- inspect: function(object) {
+ function extend(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+ }
+
+ function inspect(object) {
try {
- if (Object.isUndefined(object)) return 'undefined';
+ if (isUndefined(object)) return 'undefined';
if (object === null) return 'null';
return object.inspect ? object.inspect() : String(object);
} catch (e) {
if (e instanceof RangeError) return '...';
throw e;
}
- },
+ }
- toJSON: function(object) {
+ function toJSON(object) {
var type = typeof object;
switch (type) {
case 'undefined':
@@ -128,127 +177,180 @@ Object.extend(Object, {
if (object === null) return 'null';
if (object.toJSON) return object.toJSON();
- if (Object.isElement(object)) return;
+ if (isElement(object)) return;
var results = [];
for (var property in object) {
- var value = Object.toJSON(object[property]);
- if (!Object.isUndefined(value))
+ var value = toJSON(object[property]);
+ if (!isUndefined(value))
results.push(property.toJSON() + ': ' + value);
}
return '{' + results.join(', ') + '}';
- },
+ }
- toQueryString: function(object) {
+ function toQueryString(object) {
return $H(object).toQueryString();
- },
+ }
- toHTML: function(object) {
+ function toHTML(object) {
return object && object.toHTML ? object.toHTML() : String.interpret(object);
- },
+ }
- keys: function(object) {
- var keys = [];
+ function keys(object) {
+ var results = [];
for (var property in object)
- keys.push(property);
- return keys;
- },
+ results.push(property);
+ return results;
+ }
- values: function(object) {
- var values = [];
+ function values(object) {
+ var results = [];
for (var property in object)
- values.push(object[property]);
- return values;
- },
+ results.push(object[property]);
+ return results;
+ }
- clone: function(object) {
- return Object.extend({ }, object);
- },
+ function clone(object) {
+ return extend({ }, object);
+ }
- isElement: function(object) {
- return object && object.nodeType == 1;
- },
+ function isElement(object) {
+ return !!(object && object.nodeType == 1);
+ }
+
+ function isArray(object) {
+ return _toString.call(object) == "[object Array]";
+ }
- isArray: function(object) {
- return object != null && typeof object == "object" &&
- 'splice' in object && 'join' in object;
- },
- isHash: function(object) {
+ function isHash(object) {
return object instanceof Hash;
- },
+ }
- isFunction: function(object) {
- return typeof object == "function";
- },
+ function isFunction(object) {
+ return typeof object === "function";
+ }
- isString: function(object) {
- return typeof object == "string";
- },
+ function isString(object) {
+ return _toString.call(object) == "[object String]";
+ }
- isNumber: function(object) {
- return typeof object == "number";
- },
+ function isNumber(object) {
+ return _toString.call(object) == "[object Number]";
+ }
- isUndefined: function(object) {
- return typeof object == "undefined";
+ function isUndefined(object) {
+ return typeof object === "undefined";
}
-});
-Object.extend(Function.prototype, {
- argumentNames: function() {
- var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
+ extend(Object, {
+ extend: extend,
+ inspect: inspect,
+ toJSON: toJSON,
+ toQueryString: toQueryString,
+ toHTML: toHTML,
+ keys: keys,
+ values: values,
+ clone: clone,
+ isElement: isElement,
+ isArray: isArray,
+ isHash: isHash,
+ isFunction: isFunction,
+ isString: isString,
+ isNumber: isNumber,
+ isUndefined: isUndefined
+ });
+})();
+Object.extend(Function.prototype, (function() {
+ var slice = Array.prototype.slice;
+
+ function update(array, args) {
+ var arrayLength = array.length, length = args.length;
+ while (length--) array[arrayLength + length] = args[length];
+ return array;
+ }
+
+ function merge(array, args) {
+ array = slice.call(array, 0);
+ return update(array, args);
+ }
+
+ function argumentNames() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+ .replace(/\s+/g, '').split(',');
return names.length == 1 && !names[0] ? [] : names;
- },
+ }
- bind: function() {
+ function bind(context) {
if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
- var __method = this, args = $A(arguments), object = args.shift();
+ var __method = this, args = slice.call(arguments, 1);
return function() {
- return __method.apply(object, args.concat($A(arguments)));
+ var a = merge(args, arguments);
+ return __method.apply(context, a);
}
- },
+ }
- bindAsEventListener: function() {
- var __method = this, args = $A(arguments), object = args.shift();
+ function bindAsEventListener(context) {
+ var __method = this, args = slice.call(arguments, 1);
return function(event) {
- return __method.apply(object, [event || window.event].concat(args));
+ var a = update([event || window.event], args);
+ return __method.apply(context, a);
}
- },
+ }
- curry: function() {
+ function curry() {
if (!arguments.length) return this;
- var __method = this, args = $A(arguments);
+ var __method = this, args = slice.call(arguments, 0);
return function() {
- return __method.apply(this, args.concat($A(arguments)));
+ var a = merge(args, arguments);
+ return __method.apply(this, a);
}
- },
+ }
- delay: function() {
- var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+ function delay(timeout) {
+ var __method = this, args = slice.call(arguments, 1);
+ timeout = timeout * 1000
return window.setTimeout(function() {
return __method.apply(__method, args);
}, timeout);
- },
+ }
+
+ function defer() {
+ var args = update([0.01], arguments);
+ return this.delay.apply(this, args);
+ }
- wrap: function(wrapper) {
+ function wrap(wrapper) {
var __method = this;
return function() {
- return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+ var a = update([__method.bind(this)], arguments);
+ return wrapper.apply(this, a);
}
- },
+ }
- methodize: function() {
+ function methodize() {
if (this._methodized) return this._methodized;
var __method = this;
return this._methodized = function() {
- return __method.apply(null, [this].concat($A(arguments)));
+ var a = update([this], arguments);
+ return __method.apply(null, a);
};
}
-});
-Function.prototype.defer = Function.prototype.delay.curry(0.01);
+ return {
+ argumentNames: argumentNames,
+ bind: bind,
+ bindAsEventListener: bindAsEventListener,
+ curry: curry,
+ delay: delay,
+ defer: defer,
+ wrap: wrap,
+ methodize: methodize
+ }
+})());
+
Date.prototype.toJSON = function() {
return '"' + this.getUTCFullYear() + '-' +
@@ -259,30 +361,12 @@ Date.prototype.toJSON = function() {
this.getUTCSeconds().toPaddedString(2) + 'Z"';
};
-var Try = {
- these: function() {
- var returnValue;
-
- for (var i = 0, length = arguments.length; i < length; i++) {
- var lambda = arguments[i];
- try {
- returnValue = lambda();
- break;
- } catch (e) { }
- }
-
- return returnValue;
- }
-};
RegExp.prototype.match = RegExp.prototype.test;
RegExp.escape = function(str) {
return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};
-
-/*--------------------------------------------------------------------------*/
-
var PeriodicalExecuter = Class.create({
initialize: function(callback, frequency) {
this.callback = callback;
@@ -311,8 +395,10 @@ var PeriodicalExecuter = Class.create({
try {
this.currentlyExecuting = true;
this.execute();
- } finally {
this.currentlyExecuting = false;
+ } catch(e) {
+ this.currentlyExecuting = false;
+ throw e;
}
}
}
@@ -331,10 +417,25 @@ Object.extend(String, {
}
});
-Object.extend(String.prototype, {
- gsub: function(pattern, replacement) {
+Object.extend(String.prototype, (function() {
+
+ function prepareReplacement(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+ }
+
+ function gsub(pattern, replacement) {
var result = '', source = this, match;
- replacement = arguments.callee.prepareReplacement(replacement);
+ replacement = prepareReplacement(replacement);
+
+ if (Object.isString(pattern))
+ pattern = RegExp.escape(pattern);
+
+ if (!(pattern.length || pattern.source)) {
+ replacement = replacement('');
+ return replacement + source.split('').join(replacement) + replacement;
+ }
while (source.length > 0) {
if (match = source.match(pattern)) {
@@ -346,69 +447,64 @@ Object.extend(String.prototype, {
}
}
return result;
- },
+ }
- sub: function(pattern, replacement, count) {
- replacement = this.gsub.prepareReplacement(replacement);
+ function sub(pattern, replacement, count) {
+ replacement = prepareReplacement(replacement);
count = Object.isUndefined(count) ? 1 : count;
return this.gsub(pattern, function(match) {
if (--count < 0) return match[0];
return replacement(match);
});
- },
+ }
- scan: function(pattern, iterator) {
+ function scan(pattern, iterator) {
this.gsub(pattern, iterator);
return String(this);
- },
+ }
- truncate: function(length, truncation) {
+ function truncate(length, truncation) {
length = length || 30;
truncation = Object.isUndefined(truncation) ? '...' : truncation;
return this.length > length ?
this.slice(0, length - truncation.length) + truncation : String(this);
- },
+ }
- strip: function() {
+ function strip() {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
- },
+ }
- stripTags: function() {
- return this.replace(/<\/?[^>]+>/gi, '');
- },
+ function stripTags() {
+ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+ }
- stripScripts: function() {
+ function stripScripts() {
return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
- },
+ }
- extractScripts: function() {
+ function extractScripts() {
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() {
+ function evalScripts() {
return this.extractScripts().map(function(script) { return eval(script) });
- },
+ }
- escapeHTML: function() {
- var self = arguments.callee;
- self.text.data = this;
- return self.div.innerHTML;
- },
+ function escapeHTML() {
+ return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
+ }
- unescapeHTML: function() {
- var div = new Element('div');
- div.innerHTML = this.stripTags();
- return div.childNodes[0] ? (div.childNodes.length > 1 ?
- $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
- div.childNodes[0].nodeValue) : '';
- },
+ function unescapeHTML() {
+ return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');
+ }
- toQueryParams: function(separator) {
+
+ function toQueryParams(separator) {
var match = this.strip().match(/([^?#]*)(#.*)?$/);
if (!match) return { };
@@ -426,22 +522,22 @@ Object.extend(String.prototype, {
}
return hash;
});
- },
+ }
- toArray: function() {
+ function toArray() {
return this.split('');
- },
+ }
- succ: function() {
+ function succ() {
return this.slice(0, this.length - 1) +
String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
- },
+ }
- times: function(count) {
+ function times(count) {
return count < 1 ? '' : new Array(count + 1).join(this);
- },
+ }
- camelize: function() {
+ function camelize() {
var parts = this.split('-'), len = parts.length;
if (len == 1) return parts[0];
@@ -453,101 +549,117 @@ Object.extend(String.prototype, {
camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
return camelized;
- },
+ }
- capitalize: function() {
+ function capitalize() {
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
- },
+ }
- underscore: function() {
- return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
- },
+ function underscore() {
+ return this.replace(/::/g, '/')
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+ .replace(/-/g, '_')
+ .toLowerCase();
+ }
- dasherize: function() {
- return this.gsub(/_/,'-');
- },
+ function dasherize() {
+ return this.replace(/_/g, '-');
+ }
- inspect: function(useDoubleQuotes) {
- var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
- var character = String.specialChar[match[0]];
- return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+ function inspect(useDoubleQuotes) {
+ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+ if (character in String.specialChar) {
+ return String.specialChar[character];
+ }
+ return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
});
if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
return "'" + escapedString.replace(/'/g, '\\\'') + "'";
- },
+ }
- toJSON: function() {
+ function toJSON() {
return this.inspect(true);
- },
+ }
- unfilterJSON: function(filter) {
- return this.sub(filter || Prototype.JSONFilter, '#{1}');
- },
+ function unfilterJSON(filter) {
+ return this.replace(filter || Prototype.JSONFilter, '$1');
+ }
- isJSON: function() {
+ function isJSON() {
var str = this;
if (str.blank()) return false;
str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
- },
+ }
- evalJSON: function(sanitize) {
+ function evalJSON(sanitize) {
var json = this.unfilterJSON();
try {
if (!sanitize || json.isJSON()) return eval('(' + json + ')');
} catch (e) { }
throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
- },
+ }
- include: function(pattern) {
+ function include(pattern) {
return this.indexOf(pattern) > -1;
- },
+ }
- startsWith: function(pattern) {
+ function startsWith(pattern) {
return this.indexOf(pattern) === 0;
- },
+ }
- endsWith: function(pattern) {
+ function endsWith(pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
- },
+ }
- empty: function() {
+ function empty() {
return this == '';
- },
+ }
- blank: function() {
+ function blank() {
return /^\s*$/.test(this);
- },
-
- interpolate: function(object, pattern) {
- return new Template(this, pattern).evaluate(object);
}
-});
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
- escapeHTML: function() {
- return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
- },
- unescapeHTML: function() {
- return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
+ function interpolate(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
}
-});
-String.prototype.gsub.prepareReplacement = function(replacement) {
- if (Object.isFunction(replacement)) return replacement;
- var template = new Template(replacement);
- return function(match) { return template.evaluate(match) };
-};
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
- div: document.createElement('div'),
- text: document.createTextNode('')
-});
-
-with (String.prototype.escapeHTML) div.appendChild(text);
+ return {
+ gsub: gsub,
+ sub: sub,
+ scan: scan,
+ truncate: truncate,
+ strip: String.prototype.trim ? String.prototype.trim : strip,
+ stripTags: stripTags,
+ stripScripts: stripScripts,
+ extractScripts: extractScripts,
+ evalScripts: evalScripts,
+ escapeHTML: escapeHTML,
+ unescapeHTML: unescapeHTML,
+ toQueryParams: toQueryParams,
+ parseQuery: toQueryParams,
+ toArray: toArray,
+ succ: succ,
+ times: times,
+ camelize: camelize,
+ capitalize: capitalize,
+ underscore: underscore,
+ dasherize: dasherize,
+ inspect: inspect,
+ toJSON: toJSON,
+ unfilterJSON: unfilterJSON,
+ isJSON: isJSON,
+ evalJSON: evalJSON,
+ include: include,
+ startsWith: startsWith,
+ endsWith: endsWith,
+ empty: empty,
+ blank: blank,
+ interpolate: interpolate
+ };
+})());
var Template = Class.create({
initialize: function(template, pattern) {
@@ -556,11 +668,11 @@ var Template = Class.create({
},
evaluate: function(object) {
- if (Object.isFunction(object.toTemplateReplacements))
+ if (object && Object.isFunction(object.toTemplateReplacements))
object = object.toTemplateReplacements();
return this.template.gsub(this.pattern, function(match) {
- if (object == null) return '';
+ if (object == null) return (match[1] + '');
var before = match[1] || '';
if (before == '\\') return match[2];
@@ -571,7 +683,7 @@ var Template = Class.create({
if (match == null) return before;
while (match != null) {
- var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+ var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
ctx = ctx[comp];
if (null == ctx || '' == match[3]) break;
expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
@@ -586,94 +698,91 @@ Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
var $break = { };
-var Enumerable = {
- each: function(iterator, context) {
+var Enumerable = (function() {
+ function each(iterator, context) {
var index = 0;
- iterator = iterator.bind(context);
try {
this._each(function(value) {
- iterator(value, index++);
+ iterator.call(context, value, index++);
});
} catch (e) {
if (e != $break) throw e;
}
return this;
- },
+ }
- eachSlice: function(number, iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function eachSlice(number, iterator, context) {
var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
while ((index += number) < array.length)
slices.push(array.slice(index, index+number));
return slices.collect(iterator, context);
- },
+ }
- all: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function all(iterator, context) {
+ iterator = iterator || Prototype.K;
var result = true;
this.each(function(value, index) {
- result = result && !!iterator(value, index);
+ result = result && !!iterator.call(context, value, index);
if (!result) throw $break;
});
return result;
- },
+ }
- any: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function any(iterator, context) {
+ iterator = iterator || Prototype.K;
var result = false;
this.each(function(value, index) {
- if (result = !!iterator(value, index))
+ if (result = !!iterator.call(context, value, index))
throw $break;
});
return result;
- },
+ }
- collect: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function collect(iterator, context) {
+ iterator = iterator || Prototype.K;
var results = [];
this.each(function(value, index) {
- results.push(iterator(value, index));
+ results.push(iterator.call(context, value, index));
});
return results;
- },
+ }
- detect: function(iterator, context) {
- iterator = iterator.bind(context);
+ function detect(iterator, context) {
var result;
this.each(function(value, index) {
- if (iterator(value, index)) {
+ if (iterator.call(context, value, index)) {
result = value;
throw $break;
}
});
return result;
- },
+ }
- findAll: function(iterator, context) {
- iterator = iterator.bind(context);
+ function findAll(iterator, context) {
var results = [];
this.each(function(value, index) {
- if (iterator(value, index))
+ if (iterator.call(context, value, index))
results.push(value);
});
return results;
- },
+ }
- grep: function(filter, iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function grep(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
var results = [];
if (Object.isString(filter))
- filter = new RegExp(filter);
+ filter = new RegExp(RegExp.escape(filter));
this.each(function(value, index) {
if (filter.match(value))
- results.push(iterator(value, index));
+ results.push(iterator.call(context, value, index));
});
return results;
- },
+ }
- include: function(object) {
+ function include(object) {
if (Object.isFunction(this.indexOf))
if (this.indexOf(object) != -1) return true;
@@ -685,96 +794,96 @@ var Enumerable = {
}
});
return found;
- },
+ }
- inGroupsOf: function(number, fillWith) {
+ function inGroupsOf(number, fillWith) {
fillWith = Object.isUndefined(fillWith) ? null : fillWith;
return this.eachSlice(number, function(slice) {
while(slice.length < number) slice.push(fillWith);
return slice;
});
- },
+ }
- inject: function(memo, iterator, context) {
- iterator = iterator.bind(context);
+ function inject(memo, iterator, context) {
this.each(function(value, index) {
- memo = iterator(memo, value, index);
+ memo = iterator.call(context, memo, value, index);
});
return memo;
- },
+ }
- invoke: function(method) {
+ function invoke(method) {
var args = $A(arguments).slice(1);
return this.map(function(value) {
return value[method].apply(value, args);
});
- },
+ }
- max: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function max(iterator, context) {
+ iterator = iterator || Prototype.K;
var result;
this.each(function(value, index) {
- value = iterator(value, index);
+ value = iterator.call(context, value, index);
if (result == null || value >= result)
result = value;
});
return result;
- },
+ }
- min: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function min(iterator, context) {
+ iterator = iterator || Prototype.K;
var result;
this.each(function(value, index) {
- value = iterator(value, index);
+ value = iterator.call(context, value, index);
if (result == null || value < result)
result = value;
});
return result;
- },
+ }
- partition: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ function partition(iterator, context) {
+ iterator = iterator || Prototype.K;
var trues = [], falses = [];
this.each(function(value, index) {
- (iterator(value, index) ?
+ (iterator.call(context, value, index) ?
trues : falses).push(value);
});
return [trues, falses];
- },
+ }
- pluck: function(property) {
+ function pluck(property) {
var results = [];
this.each(function(value) {
results.push(value[property]);
});
return results;
- },
+ }
- reject: function(iterator, context) {
- iterator = iterator.bind(context);
+ function reject(iterator, context) {
var results = [];
this.each(function(value, index) {
- if (!iterator(value, index))
+ if (!iterator.call(context, value, index))
results.push(value);
});
return results;
- },
+ }
- sortBy: function(iterator, context) {
- iterator = iterator.bind(context);
+ function sortBy(iterator, context) {
return this.map(function(value, index) {
- return {value: value, criteria: iterator(value, index)};
+ return {
+ value: value,
+ criteria: iterator.call(context, 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() {
+ function toArray() {
return this.map();
- },
+ }
- zip: function() {
+ function zip() {
var iterator = Prototype.K, args = $A(arguments);
if (Object.isFunction(args.last()))
iterator = args.pop();
@@ -783,126 +892,152 @@ var Enumerable = {
return this.map(function(value, index) {
return iterator(collections.pluck(index));
});
- },
+ }
- size: function() {
+ function size() {
return this.toArray().length;
- },
+ }
- inspect: function() {
+ function inspect() {
return '#<Enumerable:' + this.toArray().inspect() + '>';
}
-};
-Object.extend(Enumerable, {
- map: Enumerable.collect,
- find: Enumerable.detect,
- select: Enumerable.findAll,
- filter: Enumerable.findAll,
- member: Enumerable.include,
- entries: Enumerable.toArray,
- every: Enumerable.all,
- some: Enumerable.any
-});
+
+
+
+
+
+
+
+
+ return {
+ each: each,
+ eachSlice: eachSlice,
+ all: all,
+ every: all,
+ any: any,
+ some: any,
+ collect: collect,
+ map: collect,
+ detect: detect,
+ findAll: findAll,
+ select: findAll,
+ filter: findAll,
+ grep: grep,
+ include: include,
+ member: include,
+ inGroupsOf: inGroupsOf,
+ inject: inject,
+ invoke: invoke,
+ max: max,
+ min: min,
+ partition: partition,
+ pluck: pluck,
+ reject: reject,
+ sortBy: sortBy,
+ toArray: toArray,
+ entries: toArray,
+ zip: zip,
+ size: size,
+ inspect: inspect,
+ find: detect
+ };
+})();
function $A(iterable) {
if (!iterable) return [];
- if (iterable.toArray) return iterable.toArray();
+ if ('toArray' in Object(iterable)) return iterable.toArray();
var length = iterable.length || 0, results = new Array(length);
while (length--) results[length] = iterable[length];
return results;
}
-if (Prototype.Browser.WebKit) {
- $A = function(iterable) {
- if (!iterable) return [];
- if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
- iterable.toArray) return iterable.toArray();
- var length = iterable.length || 0, results = new Array(length);
- while (length--) results[length] = iterable[length];
- return results;
- };
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
}
Array.from = $A;
-Object.extend(Array.prototype, Enumerable);
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+(function() {
+ var arrayProto = Array.prototype,
+ slice = arrayProto.slice,
+ _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
-Object.extend(Array.prototype, {
- _each: function(iterator) {
+ function each(iterator) {
for (var i = 0, length = this.length; i < length; i++)
iterator(this[i]);
- },
+ }
+ if (!_each) _each = each;
- clear: function() {
+ function clear() {
this.length = 0;
return this;
- },
+ }
- first: function() {
+ function first() {
return this[0];
- },
+ }
- last: function() {
+ function last() {
return this[this.length - 1];
- },
+ }
- compact: function() {
+ function compact() {
return this.select(function(value) {
return value != null;
});
- },
+ }
- flatten: function() {
+ function flatten() {
return this.inject([], function(array, value) {
- return array.concat(Object.isArray(value) ?
- value.flatten() : [value]);
+ if (Object.isArray(value))
+ return array.concat(value.flatten());
+ array.push(value);
+ return array;
});
- },
+ }
- without: function() {
- var values = $A(arguments);
+ function without() {
+ var values = slice.call(arguments, 0);
return this.select(function(value) {
return !values.include(value);
});
- },
+ }
- reverse: function(inline) {
+ function reverse(inline) {
return (inline !== false ? this : this.toArray())._reverse();
- },
-
- reduce: function() {
- return this.length > 1 ? this : this[0];
- },
+ }
- uniq: function(sorted) {
+ function uniq(sorted) {
return this.inject([], function(array, value, index) {
if (0 == index || (sorted ? array.last() != value : !array.include(value)))
array.push(value);
return array;
});
- },
+ }
- intersect: function(array) {
+ function intersect(array) {
return this.uniq().findAll(function(item) {
return array.detect(function(value) { return item === value });
});
- },
+ }
- clone: function() {
- return [].concat(this);
- },
- size: function() {
+ function clone() {
+ return slice.call(this, 0);
+ }
+
+ function size() {
return this.length;
- },
+ }
- inspect: function() {
+ function inspect() {
return '[' + this.map(Object.inspect).join(', ') + ']';
- },
+ }
- toJSON: function() {
+ function toJSON() {
var results = [];
this.each(function(object) {
var value = Object.toJSON(object);
@@ -910,203 +1045,270 @@ Object.extend(Array.prototype, {
});
return '[' + results.join(', ') + ']';
}
-});
-
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
- Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
- i || (i = 0);
- var length = this.length;
- if (i < 0) i = length + i;
- for (; i < length; i++)
- if (this[i] === item) return i;
- return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
- i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
- var n = this.slice(0, i).reverse().indexOf(item);
- return (n < 0) ? n : i - n - 1;
-};
-Array.prototype.toArray = Array.prototype.clone;
+ function indexOf(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+ }
-function $w(string) {
- if (!Object.isString(string)) return [];
- string = string.strip();
- return string ? string.split(/\s+/) : [];
-}
+ function lastIndexOf(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+ }
-if (Prototype.Browser.Opera){
- Array.prototype.concat = function() {
- var array = [];
- for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ function concat() {
+ var array = slice.call(this, 0), item;
for (var i = 0, length = arguments.length; i < length; i++) {
- if (Object.isArray(arguments[i])) {
- for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
- array.push(arguments[i][j]);
+ item = arguments[i];
+ if (Object.isArray(item) && !('callee' in item)) {
+ for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
+ array.push(item[j]);
} else {
- array.push(arguments[i]);
+ array.push(item);
}
}
return array;
- };
-}
-Object.extend(Number.prototype, {
- toColorPart: function() {
- return this.toPaddedString(2, 16);
- },
-
- succ: function() {
- return this + 1;
- },
+ }
- times: function(iterator) {
- $R(0, this, true).each(iterator);
- return this;
- },
+ Object.extend(arrayProto, Enumerable);
+
+ if (!arrayProto._reverse)
+ arrayProto._reverse = arrayProto.reverse;
+
+ Object.extend(arrayProto, {
+ _each: _each,
+ clear: clear,
+ first: first,
+ last: last,
+ compact: compact,
+ flatten: flatten,
+ without: without,
+ reverse: reverse,
+ uniq: uniq,
+ intersect: intersect,
+ clone: clone,
+ toArray: clone,
+ size: size,
+ inspect: inspect,
+ toJSON: toJSON
+ });
- toPaddedString: function(length, radix) {
- var string = this.toString(radix || 10);
- return '0'.times(length - string.length) + string;
- },
+ var CONCAT_ARGUMENTS_BUGGY = (function() {
+ return [].concat(arguments)[0][0] !== 1;
+ })(1,2)
- toJSON: function() {
- return isFinite(this) ? this.toString() : 'null';
- }
-});
+ if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
-$w('abs round ceil floor').each(function(method){
- Number.prototype[method] = Math[method].methodize();
-});
+ if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
+ if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
+})();
function $H(object) {
return new Hash(object);
};
var Hash = Class.create(Enumerable, (function() {
+ function initialize(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ }
+
+ function _each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+
+ function set(key, value) {
+ return this._object[key] = value;
+ }
+
+ function get(key) {
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ }
+
+ function unset(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ }
+
+ function toObject() {
+ return Object.clone(this._object);
+ }
+
+ function keys() {
+ return this.pluck('key');
+ }
+
+ function values() {
+ return this.pluck('value');
+ }
+
+ function index(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ }
+
+ function merge(object) {
+ return this.clone().update(object);
+ }
+
+ function update(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ }
function toQueryPair(key, value) {
if (Object.isUndefined(value)) return key;
return key + '=' + encodeURIComponent(String.interpret(value));
}
- return {
- initialize: function(object) {
- this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
- },
-
- _each: function(iterator) {
- for (var key in this._object) {
- var value = this._object[key], pair = [key, value];
- pair.key = key;
- pair.value = value;
- iterator(pair);
- }
- },
+ function toQueryString() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
- set: function(key, value) {
- return this._object[key] = value;
- },
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return results.concat(values.map(toQueryPair.curry(key)));
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ }
- get: function(key) {
- return this._object[key];
- },
+ function inspect() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ }
- unset: function(key) {
- var value = this._object[key];
- delete this._object[key];
- return value;
- },
+ function toJSON() {
+ return Object.toJSON(this.toObject());
+ }
- toObject: function() {
- return Object.clone(this._object);
- },
+ function clone() {
+ return new Hash(this);
+ }
- keys: function() {
- return this.pluck('key');
- },
+ return {
+ initialize: initialize,
+ _each: _each,
+ set: set,
+ get: get,
+ unset: unset,
+ toObject: toObject,
+ toTemplateReplacements: toObject,
+ keys: keys,
+ values: values,
+ index: index,
+ merge: merge,
+ update: update,
+ toQueryString: toQueryString,
+ inspect: inspect,
+ toJSON: toJSON,
+ clone: clone
+ };
+})());
- values: function() {
- return this.pluck('value');
- },
+Hash.from = $H;
+Object.extend(Number.prototype, (function() {
+ function toColorPart() {
+ return this.toPaddedString(2, 16);
+ }
- index: function(value) {
- var match = this.detect(function(pair) {
- return pair.value === value;
- });
- return match && match.key;
- },
+ function succ() {
+ return this + 1;
+ }
- merge: function(object) {
- return this.clone().update(object);
- },
+ function times(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ }
- update: function(object) {
- return new Hash(object).inject(this, function(result, pair) {
- result.set(pair.key, pair.value);
- return result;
- });
- },
+ function toPaddedString(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ }
- toQueryString: function() {
- return this.map(function(pair) {
- var key = encodeURIComponent(pair.key), values = pair.value;
+ function toJSON() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
- if (values && typeof values == 'object') {
- if (Object.isArray(values))
- return values.map(toQueryPair.curry(key)).join('&');
- }
- return toQueryPair(key, values);
- }).join('&');
- },
+ function abs() {
+ return Math.abs(this);
+ }
- inspect: function() {
- return '#<Hash:{' + this.map(function(pair) {
- return pair.map(Object.inspect).join(': ');
- }).join(', ') + '}>';
- },
+ function round() {
+ return Math.round(this);
+ }
- toJSON: function() {
- return Object.toJSON(this.toObject());
- },
+ function ceil() {
+ return Math.ceil(this);
+ }
- clone: function() {
- return new Hash(this);
- }
+ function floor() {
+ return Math.floor(this);
}
+
+ return {
+ toColorPart: toColorPart,
+ succ: succ,
+ times: times,
+ toPaddedString: toPaddedString,
+ toJSON: toJSON,
+ abs: abs,
+ round: round,
+ ceil: ceil,
+ floor: floor
+ };
})());
-Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
-Hash.from = $H;
-var ObjectRange = Class.create(Enumerable, {
- initialize: function(start, end, exclusive) {
+function $R(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+}
+
+var ObjectRange = Class.create(Enumerable, (function() {
+ function initialize(start, end, exclusive) {
this.start = start;
this.end = end;
this.exclusive = exclusive;
- },
+ }
- _each: function(iterator) {
+ function _each(iterator) {
var value = this.start;
while (this.include(value)) {
iterator(value);
value = value.succ();
}
- },
+ }
- include: function(value) {
+ function include(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);
-};
+ return {
+ initialize: initialize,
+ _each: _each,
+ include: include
+ };
+})());
+
+
var Ajax = {
getTransport: function() {
@@ -1153,7 +1355,6 @@ Ajax.Responders.register({
onCreate: function() { Ajax.activeRequestCount++ },
onComplete: function() { Ajax.activeRequestCount-- }
});
-
Ajax.Base = Class.create({
initialize: function(options) {
this.options = {
@@ -1175,7 +1376,6 @@ Ajax.Base = Class.create({
this.options.parameters = this.options.parameters.toObject();
}
});
-
Ajax.Request = Class.create(Ajax.Base, {
_complete: false,
@@ -1191,7 +1391,6 @@ Ajax.Request = Class.create(Ajax.Base, {
var params = Object.clone(this.options.parameters);
if (!['get', 'post'].include(this.method)) {
- // simulate other verbs over post
params['_method'] = this.method;
this.method = 'post';
}
@@ -1199,7 +1398,6 @@ Ajax.Request = Class.create(Ajax.Base, {
this.parameters = params;
if (params = Object.toQueryString(params)) {
- // when GET, append parameters to URL
if (this.method == 'get')
this.url += (this.url.include('?') ? '&' : '?') + params;
else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
@@ -1258,7 +1456,6 @@ Ajax.Request = Class.create(Ajax.Base, {
headers['Connection'] = 'close';
}
- // user-defined headers
if (typeof this.options.requestHeaders == 'object') {
var extras = this.options.requestHeaders;
@@ -1312,7 +1509,6 @@ Ajax.Request = Class.create(Ajax.Base, {
}
if (state == 'Complete') {
- // avoid memory leak in MSIE: clean up
this.transport.onreadystatechange = Prototype.emptyFunction;
}
},
@@ -1329,7 +1525,7 @@ Ajax.Request = Class.create(Ajax.Base, {
getHeader: function(name) {
try {
return this.transport.getResponseHeader(name) || null;
- } catch (e) { return null }
+ } catch (e) { return null; }
},
evalResponse: function() {
@@ -1349,6 +1545,13 @@ Ajax.Request = Class.create(Ajax.Base, {
Ajax.Request.Events =
['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+
+
+
+
+
+
Ajax.Response = Class.create({
initialize: function(request){
this.request = request;
@@ -1370,6 +1573,7 @@ Ajax.Response = Class.create({
},
status: 0,
+
statusText: '',
getStatus: Ajax.Request.prototype.getStatus,
@@ -1499,6 +1703,9 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
this.updater = new Ajax.Updater(this.container, this.url, this.options);
}
});
+
+
+
function $(element) {
if (arguments.length > 1) {
for (var i = 0, elements = [], length = arguments.length; i < length; i++)
@@ -1526,7 +1733,6 @@ if (Prototype.BrowserFeatures.XPath) {
if (!window.Node) var Node = { };
if (!Node.ELEMENT_NODE) {
- // DOM level 2 ECMAScript Language Binding
Object.extend(Node, {
ELEMENT_NODE: 1,
ATTRIBUTE_NODE: 2,
@@ -1543,13 +1749,30 @@ if (!Node.ELEMENT_NODE) {
});
}
-(function() {
- var element = this.Element;
- this.Element = function(tagName, attributes) {
+
+(function(global) {
+
+ var SETATTRIBUTE_IGNORES_NAME = (function(){
+ var elForm = document.createElement("form");
+ var elInput = document.createElement("input");
+ var root = document.documentElement;
+ elInput.setAttribute("name", "test");
+ elForm.appendChild(elInput);
+ root.appendChild(elForm);
+ var isBuggy = elForm.elements
+ ? (typeof elForm.elements.test == "undefined")
+ : null;
+ root.removeChild(elForm);
+ elForm = elInput = null;
+ return isBuggy;
+ })();
+
+ var element = global.Element;
+ global.Element = function(tagName, attributes) {
attributes = attributes || { };
tagName = tagName.toLowerCase();
var cache = Element.cache;
- if (Prototype.Browser.IE && attributes.name) {
+ if (SETATTRIBUTE_IGNORES_NAME && attributes.name) {
tagName = '<' + tagName + ' name="' + attributes.name + '">';
delete attributes.name;
return Element.writeAttribute(document.createElement(tagName), attributes);
@@ -1557,10 +1780,12 @@ if (!Node.ELEMENT_NODE) {
if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
};
- Object.extend(this.Element, element || { });
-}).call(window);
+ Object.extend(global.Element, element || { });
+ if (element) global.Element.prototype = element.prototype;
+})(this);
Element.cache = { };
+Element.idCounter = 1;
Element.Methods = {
visible: function(element) {
@@ -1573,13 +1798,16 @@ Element.Methods = {
return element;
},
+
hide: function(element) {
- $(element).style.display = 'none';
+ element = $(element);
+ element.style.display = 'none';
return element;
},
show: function(element) {
- $(element).style.display = '';
+ element = $(element);
+ element.style.display = '';
return element;
},
@@ -1589,15 +1817,89 @@ Element.Methods = {
return element;
},
- update: function(element, content) {
- element = $(element);
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) return element.update().insert(content);
- content = Object.toHTML(content);
- element.innerHTML = content.stripScripts();
- content.evalScripts.bind(content).defer();
- return element;
- },
+ update: (function(){
+
+ var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
+ var el = document.createElement("select"),
+ isBuggy = true;
+ el.innerHTML = "<option value=\"test\">test</option>";
+ if (el.options && el.options[0]) {
+ isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
+ }
+ el = null;
+ return isBuggy;
+ })();
+
+ var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
+ try {
+ var el = document.createElement("table");
+ if (el && el.tBodies) {
+ el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
+ var isBuggy = typeof el.tBodies[0] == "undefined";
+ el = null;
+ return isBuggy;
+ }
+ } catch (e) {
+ return true;
+ }
+ })();
+
+ var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
+ var s = document.createElement("script"),
+ isBuggy = false;
+ try {
+ s.appendChild(document.createTextNode(""));
+ isBuggy = !s.firstChild ||
+ s.firstChild && s.firstChild.nodeType !== 3;
+ } catch (e) {
+ isBuggy = true;
+ }
+ s = null;
+ return isBuggy;
+ })();
+
+ function update(element, content) {
+ element = $(element);
+
+ if (content && content.toElement)
+ content = content.toElement();
+
+ if (Object.isElement(content))
+ return element.update().insert(content);
+
+ content = Object.toHTML(content);
+
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
+ element.text = content;
+ return element;
+ }
+
+ if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) {
+ if (tagName in Element._insertionTranslations.tags) {
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) {
+ element.appendChild(node)
+ });
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ }
+
+ return update;
+ })(),
replace: function(element, content) {
element = $(element);
@@ -1682,11 +1984,11 @@ Element.Methods = {
},
ancestors: function(element) {
- return $(element).recursivelyCollect('parentNode');
+ return Element.recursivelyCollect(element, 'parentNode');
},
descendants: function(element) {
- return $(element).select("*");
+ return Element.select(element, "*");
},
firstDescendant: function(element) {
@@ -1703,16 +2005,17 @@ Element.Methods = {
},
previousSiblings: function(element) {
- return $(element).recursivelyCollect('previousSibling');
+ return Element.recursivelyCollect(element, 'previousSibling');
},
nextSiblings: function(element) {
- return $(element).recursivelyCollect('nextSibling');
+ return Element.recursivelyCollect(element, 'nextSibling');
},
siblings: function(element) {
element = $(element);
- return element.previousSiblings().reverse().concat(element.nextSiblings());
+ return Element.previousSiblings(element).reverse()
+ .concat(Element.nextSiblings(element));
},
match: function(element, selector) {
@@ -1724,22 +2027,22 @@ Element.Methods = {
up: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(element.parentNode);
- var ancestors = element.ancestors();
+ var ancestors = Element.ancestors(element);
return Object.isNumber(expression) ? ancestors[expression] :
Selector.findElement(ancestors, expression, index);
},
down: function(element, expression, index) {
element = $(element);
- if (arguments.length == 1) return element.firstDescendant();
- return Object.isNumber(expression) ? element.descendants()[expression] :
- element.select(expression)[index || 0];
+ if (arguments.length == 1) return Element.firstDescendant(element);
+ return Object.isNumber(expression) ? Element.descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
},
previous: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
- var previousSiblings = element.previousSiblings();
+ var previousSiblings = Element.previousSiblings(element);
return Object.isNumber(expression) ? previousSiblings[expression] :
Selector.findElement(previousSiblings, expression, index);
},
@@ -1747,27 +2050,28 @@ Element.Methods = {
next: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
- var nextSiblings = element.nextSiblings();
+ var nextSiblings = Element.nextSiblings(element);
return Object.isNumber(expression) ? nextSiblings[expression] :
Selector.findElement(nextSiblings, expression, index);
},
- select: function() {
- var args = $A(arguments), element = $(args.shift());
+
+ select: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
return Selector.findChildElements(element, args);
},
- adjacent: function() {
- var args = $A(arguments), element = $(args.shift());
+ adjacent: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
return Selector.findChildElements(element.parentNode, args).without(element);
},
identify: function(element) {
element = $(element);
- var id = element.readAttribute('id'), self = arguments.callee;
+ var id = Element.readAttribute(element, 'id');
if (id) return id;
- do { id = 'anonymous_element_' + self.counter++ } while ($(id));
- element.writeAttribute('id', id);
+ do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));
+ Element.writeAttribute(element, 'id', id);
return id;
},
@@ -1806,11 +2110,11 @@ Element.Methods = {
},
getHeight: function(element) {
- return $(element).getDimensions().height;
+ return Element.getDimensions(element).height;
},
getWidth: function(element) {
- return $(element).getDimensions().width;
+ return Element.getDimensions(element).width;
},
classNames: function(element) {
@@ -1826,7 +2130,7 @@ Element.Methods = {
addClassName: function(element, className) {
if (!(element = $(element))) return;
- if (!element.hasClassName(className))
+ if (!Element.hasClassName(element, className))
element.className += (element.className ? ' ' : '') + className;
return element;
},
@@ -1840,11 +2144,10 @@ Element.Methods = {
toggleClassName: function(element, className) {
if (!(element = $(element))) return;
- return element[element.hasClassName(className) ?
- 'removeClassName' : 'addClassName'](className);
+ return Element[Element.hasClassName(element, className) ?
+ 'removeClassName' : 'addClassName'](element, className);
},
- // removes whitespace-only text node children
cleanWhitespace: function(element) {
element = $(element);
var node = element.firstChild;
@@ -1863,30 +2166,22 @@ Element.Methods = {
descendantOf: function(element, ancestor) {
element = $(element), ancestor = $(ancestor);
- var originalAncestor = ancestor;
if (element.compareDocumentPosition)
return (element.compareDocumentPosition(ancestor) & 8) === 8;
- if (element.sourceIndex && !Prototype.Browser.Opera) {
- var e = element.sourceIndex, a = ancestor.sourceIndex,
- nextAncestor = ancestor.nextSibling;
- if (!nextAncestor) {
- do { ancestor = ancestor.parentNode; }
- while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
- }
- if (nextAncestor && nextAncestor.sourceIndex)
- return (e > a && e < nextAncestor.sourceIndex);
- }
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
while (element = element.parentNode)
- if (element == originalAncestor) return true;
+ if (element == ancestor) return true;
+
return false;
},
scrollTo: function(element) {
element = $(element);
- var pos = element.cumulativeOffset();
+ var pos = Element.cumulativeOffset(element);
window.scrollTo(pos[0], pos[1]);
return element;
},
@@ -1895,7 +2190,7 @@ Element.Methods = {
element = $(element);
style = style == 'float' ? 'cssFloat' : style.camelize();
var value = element.style[style];
- if (!value) {
+ if (!value || value == 'auto') {
var css = document.defaultView.getComputedStyle(element, null);
value = css ? css[style] : null;
}
@@ -1934,18 +2229,17 @@ Element.Methods = {
getDimensions: function(element) {
element = $(element);
- var display = $(element).getStyle('display');
+ var display = Element.getStyle(element, 'display');
if (display != 'none' && display != null) // Safari bug
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;
var originalDisplay = els.display;
els.visibility = 'hidden';
- els.position = 'absolute';
+ if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari
+ els.position = 'absolute';
els.display = 'block';
var originalWidth = element.clientWidth;
var originalHeight = element.clientHeight;
@@ -1961,9 +2255,7 @@ Element.Methods = {
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) {
+ if (Prototype.Browser.Opera) {
element.style.top = 0;
element.style.left = 0;
}
@@ -2018,7 +2310,7 @@ Element.Methods = {
valueL += element.offsetLeft || 0;
element = element.offsetParent;
if (element) {
- if (element.tagName == 'BODY') break;
+ if (element.tagName.toUpperCase() == 'BODY') break;
var p = Element.getStyle(element, 'position');
if (p !== 'static') break;
}
@@ -2028,10 +2320,9 @@ Element.Methods = {
absolutize: function(element) {
element = $(element);
- if (element.getStyle('position') == 'absolute') return;
- // Position.prepare(); // To be done manually by Scripty when it needs it.
+ if (Element.getStyle(element, 'position') == 'absolute') return element;
- var offsets = element.positionedOffset();
+ var offsets = Element.positionedOffset(element);
var top = offsets[1];
var left = offsets[0];
var width = element.clientWidth;
@@ -2052,8 +2343,7 @@ Element.Methods = {
relativize: function(element) {
element = $(element);
- if (element.getStyle('position') == 'relative') return;
- // Position.prepare(); // To be done manually by Scripty when it needs it.
+ if (Element.getStyle(element, 'position') == 'relative') return element;
element.style.position = 'relative';
var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
@@ -2077,33 +2367,32 @@ Element.Methods = {
},
getOffsetParent: function(element) {
- element = $(element);
- var op = element.offsetParent, body = document.body, docEl = document.documentElement;
-
- /* IE with strict doctype may try to return documentElement as offsetParent
- on relatively positioned elements, we will return body instead */
- if (op && op !== docEl) return $(op);
- if (op === docEl || element === docEl || element === body) return $(body);
-
- while ((element = element.parentNode) && element !== body)
+ if (element.offsetParent) return $(element.offsetParent);
+ if (element == document.body) return $(element);
+
+ while ((element = element.parentNode) && element != document.body && element != document)
if (Element.getStyle(element, 'position') != 'static')
return $(element);
- return $(body);
+ return $(document.body);
},
viewportOffset: function(forElement) {
- forElement = $(forElement);
+ var valueT = 0, valueL = 0;
- var element = forElement, valueT = 0, valueL = 0;
+ var element = forElement;
do {
valueT += element.offsetTop || 0;
valueL += element.offsetLeft || 0;
- } while ((element = element.getOffsetParent()) != document.body);
+
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
element = forElement;
do {
- if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
+ if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
valueT -= element.scrollTop || 0;
valueL -= element.scrollLeft || 0;
}
@@ -2122,28 +2411,22 @@ Element.Methods = {
offsetLeft: 0
}, arguments[2] || { });
- // find page position of source
source = $(source);
- var p = source.viewportOffset();
+ var p = Element.viewportOffset(source);
- // find coordinate system to use
element = $(element);
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(element, 'position') == 'absolute') {
- parent = element.getOffsetParent();
- delta = parent.viewportOffset();
+ parent = Element.getOffsetParent(element);
+ delta = Element.viewportOffset(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) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
if (options.setWidth) element.style.width = source.offsetWidth + 'px';
@@ -2152,10 +2435,9 @@ Element.Methods = {
}
};
-Element.Methods.identify.counter = 1;
-
Object.extend(Element.Methods, {
getElementsBySelector: Element.Methods.select,
+
childElements: Element.Methods.immediateDescendants
});
@@ -2176,11 +2458,8 @@ if (Prototype.Browser.Opera) {
case 'left': case 'top': case 'right': case 'bottom':
if (proceed(element, 'position') === 'static') return null;
case 'height': case 'width':
- // returns '0px' for hidden elements; we want it to return null
if (!Element.visible(element)) return null;
- // returns the border-box dimensions rather than the content-box
- // dimensions, so we subtract padding and borders from the value
var dim = parseInt(proceed(element, style), 10);
if (dim !== element['offset' + style.capitalize()])
@@ -2213,11 +2492,11 @@ if (Prototype.Browser.Opera) {
}
else if (Prototype.Browser.IE) {
- // IE doesn't report offsets correctly for static elements, so we change them
- // to "relative" to get the values, then change them back.
Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
function(proceed, element) {
element = $(element);
+ try { element.offsetParent }
+ catch(e) { return $(document.body) }
var position = element.getStyle('position');
if (position !== 'static') return proceed(element);
element.setStyle({ position: 'relative' });
@@ -2231,10 +2510,10 @@ else if (Prototype.Browser.IE) {
Element.Methods[method] = Element.Methods[method].wrap(
function(proceed, element) {
element = $(element);
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
var position = element.getStyle('position');
if (position !== 'static') return proceed(element);
- // Trigger hasLayout on the offset parent so that IE6 reports
- // accurate offsetTop and offsetLeft values for position: fixed.
var offsetParent = element.getOffsetParent();
if (offsetParent && offsetParent.getStyle('position') === 'fixed')
offsetParent.setStyle({ zoom: 1 });
@@ -2246,6 +2525,14 @@ else if (Prototype.Browser.IE) {
);
});
+ Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+ function(proceed, element) {
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ return proceed(element);
+ }
+ );
+
Element.Methods.getStyle = function(element, style) {
element = $(element);
style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
@@ -2287,36 +2574,92 @@ else if (Prototype.Browser.IE) {
return element;
};
- Element._attributeTranslations = {
- read: {
- names: {
- 'class': 'className',
- 'for': 'htmlFor'
- },
- values: {
- _getAttr: function(element, attribute) {
- return element.getAttribute(attribute, 2);
- },
- _getAttrNode: function(element, attribute) {
- var node = element.getAttributeNode(attribute);
- return node ? node.value : "";
- },
- _getEv: function(element, attribute) {
- attribute = element.getAttribute(attribute);
- return attribute ? attribute.toString().slice(23, -2) : null;
- },
- _flag: function(element, attribute) {
- return $(element).hasAttribute(attribute) ? attribute : null;
- },
- style: function(element) {
- return element.style.cssText.toLowerCase();
+ Element._attributeTranslations = (function(){
+
+ var classProp = 'className';
+ var forProp = 'for';
+
+ var el = document.createElement('div');
+
+ el.setAttribute(classProp, 'x');
+
+ if (el.className !== 'x') {
+ el.setAttribute('class', 'x');
+ if (el.className === 'x') {
+ classProp = 'class';
+ }
+ }
+ el = null;
+
+ el = document.createElement('label');
+ el.setAttribute(forProp, 'x');
+ if (el.htmlFor !== 'x') {
+ el.setAttribute('htmlFor', 'x');
+ if (el.htmlFor === 'x') {
+ forProp = 'htmlFor';
+ }
+ }
+ el = null;
+
+ return {
+ read: {
+ names: {
+ 'class': classProp,
+ 'className': classProp,
+ 'for': forProp,
+ 'htmlFor': forProp
},
- title: function(element) {
- return element.title;
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute);
+ },
+ _getAttr2: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: (function(){
+
+ var el = document.createElement('div');
+ el.onclick = Prototype.emptyFunction;
+ var value = el.getAttribute('onclick');
+ var f;
+
+ if (String(value).indexOf('{') > -1) {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ attribute = attribute.toString();
+ attribute = attribute.split('{')[1];
+ attribute = attribute.split('}')[0];
+ return attribute.strip();
+ };
+ }
+ else if (value === '') {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ return attribute.strip();
+ };
+ }
+ el = null;
+ return f;
+ })(),
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
}
}
}
- };
+ })();
Element._attributeTranslations.write = {
names: Object.extend({
@@ -2337,15 +2680,15 @@ else if (Prototype.Browser.IE) {
Element._attributeTranslations.has = {};
$w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
- 'encType maxLength readOnly longDesc').each(function(attr) {
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
Element._attributeTranslations.has[attr.toLowerCase()] = attr;
});
(function(v) {
Object.extend(v, {
- href: v._getAttr,
- src: v._getAttr,
+ href: v._getAttr2,
+ src: v._getAttr2,
type: v._getAttr,
action: v._getAttrNode,
disabled: v._flag,
@@ -2372,6 +2715,26 @@ else if (Prototype.Browser.IE) {
onchange: v._getEv
});
})(Element._attributeTranslations.read.values);
+
+ if (Prototype.BrowserFeatures.ElementExtensions) {
+ (function() {
+ function _descendants(element) {
+ var nodes = element.getElementsByTagName('*'), results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName !== "!") // Filter out comment nodes.
+ results.push(node);
+ return results;
+ }
+
+ Element.Methods.down = function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? _descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ }
+ })();
+ }
+
}
else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
@@ -2390,7 +2753,7 @@ else if (Prototype.Browser.WebKit) {
(value < 0.00001) ? 0 : value;
if (value == 1)
- if(element.tagName == 'IMG' && element.width) {
+ if(element.tagName.toUpperCase() == 'IMG' && element.width) {
element.width++; element.width--;
} else try {
var n = document.createTextNode(' ');
@@ -2401,9 +2764,6 @@ else if (Prototype.Browser.WebKit) {
return element;
};
- // Safari returns margins on body which is incorrect if the child is absolutely
- // positioned. For performance reasons, redefine Element#cumulativeOffset for
- // KHTML/WebKit only.
Element.Methods.cumulativeOffset = function(element) {
var valueT = 0, valueL = 0;
do {
@@ -2419,30 +2779,7 @@ else if (Prototype.Browser.WebKit) {
};
}
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
- // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
- Element.Methods.update = function(element, content) {
- element = $(element);
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) return element.update().insert(content);
-
- content = Object.toHTML(content);
- var tagName = element.tagName.toUpperCase();
-
- if (tagName in Element._insertionTranslations.tags) {
- $A(element.childNodes).each(function(node) { element.removeChild(node) });
- Element._getContentFromAnonymousElement(tagName, content.stripScripts())
- .each(function(node) { element.appendChild(node) });
- }
- else element.innerHTML = content.stripScripts();
-
- content.evalScripts.bind(content).defer();
- return element;
- };
-}
-
-if ('outerHTML' in document.createElement('div')) {
+if ('outerHTML' in document.documentElement) {
Element.Methods.replace = function(element, content) {
element = $(element);
@@ -2510,18 +2847,19 @@ Element._insertionTranslations = {
};
(function() {
- Object.extend(this.tags, {
- THEAD: this.tags.TBODY,
- TFOOT: this.tags.TBODY,
- TH: this.tags.TD
+ var tags = Element._insertionTranslations.tags;
+ Object.extend(tags, {
+ THEAD: tags.TBODY,
+ TFOOT: tags.TBODY,
+ TH: tags.TD
});
-}).call(Element._insertionTranslations);
+})();
Element.Methods.Simulated = {
hasAttribute: function(element, attribute) {
attribute = Element._attributeTranslations.has[attribute] || attribute;
var node = $(element).getAttributeNode(attribute);
- return node && node.specified;
+ return !!(node && node.specified);
}
};
@@ -2529,41 +2867,81 @@ Element.Methods.ByTag = { };
Object.extend(Element, Element.Methods);
-if (!Prototype.BrowserFeatures.ElementExtensions &&
- document.createElement('div').__proto__) {
- window.HTMLElement = { };
- window.HTMLElement.prototype = document.createElement('div').__proto__;
- Prototype.BrowserFeatures.ElementExtensions = true;
-}
+(function(div) {
+
+ if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = div['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+ }
+
+ div = null;
+
+})(document.createElement('div'))
Element.extend = (function() {
- if (Prototype.BrowserFeatures.SpecificElementExtensions)
+
+ function checkDeficiency(tagName) {
+ if (typeof window.Element != 'undefined') {
+ var proto = window.Element.prototype;
+ if (proto) {
+ var id = '_' + (Math.random()+'').slice(2);
+ var el = document.createElement(tagName);
+ proto[id] = 'x';
+ var isBuggy = (el[id] !== 'x');
+ delete proto[id];
+ el = null;
+ return isBuggy;
+ }
+ }
+ return false;
+ }
+
+ function extendElementWith(element, methods) {
+ for (var property in methods) {
+ var value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+ }
+
+ var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
+
+ if (Prototype.BrowserFeatures.SpecificElementExtensions) {
+ if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
+ return function(element) {
+ if (element && typeof element._extendedByPrototype == 'undefined') {
+ var t = element.tagName;
+ if (t && (/^(?:object|applet|embed)$/i.test(t))) {
+ extendElementWith(element, Element.Methods);
+ extendElementWith(element, Element.Methods.Simulated);
+ extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
+ }
+ }
+ return element;
+ }
+ }
return Prototype.K;
+ }
var Methods = { }, ByTag = Element.Methods.ByTag;
var extend = Object.extend(function(element) {
- if (!element || element._extendedByPrototype ||
+ if (!element || typeof element._extendedByPrototype != 'undefined' ||
element.nodeType != 1 || element == window) return element;
var methods = Object.clone(Methods),
- tagName = element.tagName, property, value;
+ tagName = element.tagName.toUpperCase();
- // extend methods for specific tags
if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
- for (property in methods) {
- value = methods[property];
- if (Object.isFunction(value) && !(property in element))
- element[property] = value.methodize();
- }
+ extendElementWith(element, methods);
element._extendedByPrototype = Prototype.emptyFunction;
return element;
}, {
refresh: function() {
- // extend methods for all tags (Safari doesn't need this)
if (!Prototype.BrowserFeatures.ElementExtensions) {
Object.extend(Methods, Element.Methods);
Object.extend(Methods, Element.Methods.Simulated);
@@ -2642,14 +3020,18 @@ Element.addMethods = function(methods) {
klass = 'HTML' + tagName.capitalize() + 'Element';
if (window[klass]) return window[klass];
- window[klass] = { };
- window[klass].prototype = document.createElement(tagName).__proto__;
- return window[klass];
+ var element = document.createElement(tagName);
+ var proto = element['__proto__'] || element.constructor.prototype;
+ element = null;
+ return proto;
}
+ var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
+ Element.prototype;
+
if (F.ElementExtensions) {
- copy(Element.Methods, HTMLElement.prototype);
- copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ copy(Element.Methods, elementPrototype);
+ copy(Element.Methods.Simulated, elementPrototype, true);
}
if (F.SpecificElementExtensions) {
@@ -2667,66 +3049,187 @@ Element.addMethods = function(methods) {
Element.cache = { };
};
-document.viewport = {
- getDimensions: function() {
- var dimensions = { };
- var B = Prototype.Browser;
- $w('width height').each(function(d) {
- var D = d.capitalize();
- dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] :
- (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D];
- });
- return dimensions;
- },
- getWidth: function() {
- return this.getDimensions().width;
- },
+document.viewport = {
- getHeight: function() {
- return this.getDimensions().height;
+ getDimensions: function() {
+ return { width: this.getWidth(), height: this.getHeight() };
},
getScrollOffsets: function() {
return Element._returnOffset(
window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
- window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
}
};
-/* Portions of the Selector class are derived from Jack Slocumâs DomQuery,
+
+(function(viewport) {
+ var B = Prototype.Browser, doc = document, element, property = {};
+
+ function getRootElement() {
+ if (B.WebKit && !doc.evaluate)
+ return document;
+
+ if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
+ return document.body;
+
+ return document.documentElement;
+ }
+
+ function define(D) {
+ if (!element) element = getRootElement();
+
+ property[D] = 'client' + D;
+
+ viewport['get' + D] = function() { return element[property[D]] };
+ return viewport['get' + D]();
+ }
+
+ viewport.getWidth = define.curry('Width');
+
+ viewport.getHeight = define.curry('Height');
+})(document.viewport);
+
+
+Element.Storage = {
+ UID: 1
+};
+
+Element.addMethods({
+ getStorage: function(element) {
+ if (!(element = $(element))) return;
+
+ var uid;
+ if (element === window) {
+ uid = 0;
+ } else {
+ if (typeof element._prototypeUID === "undefined")
+ element._prototypeUID = [Element.Storage.UID++];
+ uid = element._prototypeUID[0];
+ }
+
+ if (!Element.Storage[uid])
+ Element.Storage[uid] = $H();
+
+ return Element.Storage[uid];
+ },
+
+ store: function(element, key, value) {
+ if (!(element = $(element))) return;
+
+ if (arguments.length === 2) {
+ Element.getStorage(element).update(key);
+ } else {
+ Element.getStorage(element).set(key, value);
+ }
+
+ return element;
+ },
+
+ retrieve: function(element, key, defaultValue) {
+ if (!(element = $(element))) return;
+ var hash = Element.getStorage(element), value = hash.get(key);
+
+ if (Object.isUndefined(value)) {
+ hash.set(key, defaultValue);
+ value = defaultValue;
+ }
+
+ return value;
+ },
+
+ clone: function(element, deep) {
+ if (!(element = $(element))) return;
+ var clone = element.cloneNode(deep);
+ clone._prototypeUID = void 0;
+ if (deep) {
+ var descendants = Element.select(clone, '*'),
+ i = descendants.length;
+ while (i--) {
+ descendants[i]._prototypeUID = void 0;
+ }
+ }
+ return Element.extend(clone);
+ }
+});
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
* part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
* license. Please see http://www.yui-ext.com/ for more information. */
var Selector = Class.create({
initialize: function(expression) {
this.expression = expression.strip();
- this.compileMatcher();
+
+ if (this.shouldUseSelectorsAPI()) {
+ this.mode = 'selectorsAPI';
+ } else if (this.shouldUseXPath()) {
+ this.mode = 'xpath';
+ this.compileXPathMatcher();
+ } else {
+ this.mode = "normal";
+ this.compileMatcher();
+ }
+
},
- shouldUseXPath: function() {
- if (!Prototype.BrowserFeatures.XPath) return false;
+ shouldUseXPath: (function() {
- var e = this.expression;
+ var IS_DESCENDANT_SELECTOR_BUGGY = (function(){
+ var isBuggy = false;
+ if (document.evaluate && window.XPathResult) {
+ var el = document.createElement('div');
+ el.innerHTML = '<ul><li></li></ul><div><ul><li></li></ul></div>';
- // Safari 3 chokes on :*-of-type and :empty
- if (Prototype.Browser.WebKit &&
- (e.include("-of-type") || e.include(":empty")))
- return false;
+ var xpath = ".//*[local-name()='ul' or local-name()='UL']" +
+ "//*[local-name()='li' or local-name()='LI']";
- // XPath can't do namespaced attributes, nor can it read
- // the "checked" property from DOM nodes
- if ((/(\[[\w-]*?:|:checked)/).test(this.expression))
+ var result = document.evaluate(xpath, el, null,
+ XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+
+ isBuggy = (result.snapshotLength !== 2);
+ el = null;
+ }
+ return isBuggy;
+ })();
+
+ return function() {
+ if (!Prototype.BrowserFeatures.XPath) return false;
+
+ var e = this.expression;
+
+ if (Prototype.Browser.WebKit &&
+ (e.include("-of-type") || e.include(":empty")))
+ return false;
+
+ if ((/(\[[\w-]*?:|:checked)/).test(e))
+ return false;
+
+ if (IS_DESCENDANT_SELECTOR_BUGGY) return false;
+
+ return true;
+ }
+
+ })(),
+
+ shouldUseSelectorsAPI: function() {
+ if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+ if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false;
+
+ if (!Selector._div) Selector._div = new Element('div');
+
+ try {
+ Selector._div.querySelector(this.expression);
+ } catch(e) {
return false;
+ }
return true;
},
compileMatcher: function() {
- if (this.shouldUseXPath())
- return this.compileXPathMatcher();
-
var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
- c = Selector.criteria, le, p, m;
+ c = Selector.criteria, le, p, m, len = ps.length, name;
if (Selector._cache[e]) {
this.matcher = Selector._cache[e];
@@ -2738,11 +3241,12 @@ var Selector = Class.create({
while (e && le != e && (/\S/).test(e)) {
le = e;
- for (var i in ps) {
- p = ps[i];
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
if (m = e.match(p)) {
- this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
- new Template(c[i]).evaluate(m));
+ this.matcher.push(Object.isFunction(c[name]) ? c[name](m) :
+ new Template(c[name]).evaluate(m));
e = e.replace(m[0], '');
break;
}
@@ -2756,7 +3260,7 @@ var Selector = Class.create({
compileXPathMatcher: function() {
var e = this.expression, ps = Selector.patterns,
- x = Selector.xpath, le, m;
+ x = Selector.xpath, le, m, len = ps.length, name;
if (Selector._cache[e]) {
this.xpath = Selector._cache[e]; return;
@@ -2765,10 +3269,11 @@ var Selector = Class.create({
this.matcher = ['.//*'];
while (e && le != e && (/\S/).test(e)) {
le = e;
- for (var i in ps) {
- if (m = e.match(ps[i])) {
- this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
- new Template(x[i]).evaluate(m));
+ for (var i = 0; i<len; i++) {
+ name = ps[i].name;
+ if (m = e.match(ps[i].re)) {
+ this.matcher.push(Object.isFunction(x[name]) ? x[name](m) :
+ new Template(x[name]).evaluate(m));
e = e.replace(m[0], '');
break;
}
@@ -2781,29 +3286,43 @@ var Selector = Class.create({
findElements: function(root) {
root = root || document;
- if (this.xpath) return document._getElementsByXPath(this.xpath, root);
- return this.matcher(root);
+ var e = this.expression, results;
+
+ switch (this.mode) {
+ case 'selectorsAPI':
+ if (root !== document) {
+ var oldId = root.id, id = $(root).identify();
+ id = id.replace(/([\.:])/g, "\\$1");
+ e = "#" + id + " " + e;
+ }
+
+ results = $A(root.querySelectorAll(e)).map(Element.extend);
+ root.id = oldId;
+
+ return results;
+ case 'xpath':
+ return document._getElementsByXPath(this.xpath, root);
+ default:
+ return this.matcher(root);
+ }
},
match: function(element) {
this.tokens = [];
var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
- var le, p, m;
+ var le, p, m, len = ps.length, name;
while (e && le !== e && (/\S/).test(e)) {
le = e;
- for (var i in ps) {
- p = ps[i];
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
if (m = e.match(p)) {
- // use the Selector.assertions methods unless the selector
- // is too complex.
- if (as[i]) {
- this.tokens.push([i, Object.clone(m)]);
+ if (as[name]) {
+ this.tokens.push([name, Object.clone(m)]);
e = e.replace(m[0], '');
} else {
- // reluctantly do a document-wide search
- // and look for a match in the array
return this.findElements(document).include(element);
}
}
@@ -2830,6 +3349,21 @@ var Selector = Class.create({
}
});
+if (Prototype.BrowserFeatures.SelectorsAPI &&
+ document.compatMode === 'BackCompat') {
+ Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){
+ var div = document.createElement('div'),
+ span = document.createElement('span');
+
+ div.id = "prototype_test_id";
+ span.className = 'Test';
+ div.appendChild(span);
+ var isIgnored = (div.querySelector('#prototype_test_id .test') !== null);
+ div = span = null;
+ return isIgnored;
+ })();
+}
+
Object.extend(Selector, {
_cache: { },
@@ -2873,20 +3407,21 @@ Object.extend(Selector, {
'first-child': '[not(preceding-sibling::*)]',
'last-child': '[not(following-sibling::*)]',
'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
- 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
+ 'empty': "[count(*) = 0 and (count(text()) = 0)]",
'checked': "[@checked]",
- 'disabled': "[@disabled]",
- 'enabled': "[not(@disabled)]",
+ 'disabled': "[(@disabled) and (@type!='hidden')]",
+ 'enabled': "[not(@disabled) and (@type!='hidden')]",
'not': function(m) {
var e = m[6], p = Selector.patterns,
- x = Selector.xpath, le, v;
+ x = Selector.xpath, le, v, len = p.length, name;
var exclusion = [];
while (e && le != e && (/\S/).test(e)) {
le = e;
- for (var i in p) {
- if (m = e.match(p[i])) {
- v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ for (var i = 0; i<len; i++) {
+ name = p[i].name
+ if (m = e.match(p[i].re)) {
+ v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m);
exclusion.push("(" + v.substring(1, v.length - 1) + ")");
e = e.replace(m[0], '');
break;
@@ -2954,25 +3489,20 @@ Object.extend(Selector, {
laterSibling: 'c = "laterSibling";'
},
- patterns: {
- // combinators must be listed first
- // (and descendant needs to be last combinator)
- laterSibling: /^\s*~\s*/,
- child: /^\s*>\s*/,
- adjacent: /^\s*\+\s*/,
- descendant: /^\s/,
+ patterns: [
+ { name: 'laterSibling', re: /^\s*~\s*/ },
+ { name: 'child', re: /^\s*>\s*/ },
+ { name: 'adjacent', re: /^\s*\+\s*/ },
+ { name: 'descendant', re: /^\s/ },
- // selectors follow
- tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
- id: /^#([\w\-\*]+)(\b|$)/,
- className: /^\.([\w\-\*]+)(\b|$)/,
- pseudo:
-/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
- attrPresence: /^\[([\w]+)\]/,
- attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
- },
+ { name: 'tagName', re: /^\s*(\*|[\w\-]+)(\b|$)?/ },
+ { name: 'id', re: /^#([\w\-\*]+)(\b|$)/ },
+ { name: 'className', re: /^\.([\w\-\*]+)(\b|$)/ },
+ { name: 'pseudo', re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ },
+ { name: 'attrPresence', re: /^\[((?:[\w-]+:)?[\w-]+)\]/ },
+ { name: 'attr', re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }
+ ],
- // for Selector.match and Element#match
assertions: {
tagName: function(element, matches) {
return matches[1].toUpperCase() == element.tagName.toUpperCase();
@@ -2997,15 +3527,12 @@ Object.extend(Selector, {
},
handlers: {
- // UTILITY FUNCTIONS
- // joins two collections
concat: function(a, b) {
for (var i = 0, node; node = b[i]; i++)
a.push(node);
return a;
},
- // marks an array of nodes for counting
mark: function(nodes) {
var _true = Prototype.emptyFunction;
for (var i = 0, node; node = nodes[i]; i++)
@@ -3013,15 +3540,32 @@ Object.extend(Selector, {
return nodes;
},
- unmark: function(nodes) {
- for (var i = 0, node; node = nodes[i]; i++)
- node._countedByPrototype = undefined;
- return nodes;
- },
+ unmark: (function(){
+
+ var PROPERTIES_ATTRIBUTES_MAP = (function(){
+ var el = document.createElement('div'),
+ isBuggy = false,
+ propName = '_countedByPrototype',
+ value = 'x'
+ el[propName] = value;
+ isBuggy = (el.getAttribute(propName) === value);
+ el = null;
+ return isBuggy;
+ })();
+
+ return PROPERTIES_ATTRIBUTES_MAP ?
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node.removeAttribute('_countedByPrototype');
+ return nodes;
+ } :
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = void 0;
+ return nodes;
+ }
+ })(),
- // mark each child node with its position (for nth calls)
- // "ofType" flag indicates whether we're indexing for nth-of-type
- // rather than nth-child
index: function(parentNode, reverse, ofType) {
parentNode._countedByPrototype = Prototype.emptyFunction;
if (reverse) {
@@ -3035,19 +3579,17 @@ Object.extend(Selector, {
}
},
- // filters out duplicates and extends all nodes
unique: function(nodes) {
if (nodes.length == 0) return nodes;
var results = [], n;
for (var i = 0, l = nodes.length; i < l; i++)
- if (!(n = nodes[i])._countedByPrototype) {
+ if (typeof (n = nodes[i])._countedByPrototype == 'undefined') {
n._countedByPrototype = Prototype.emptyFunction;
results.push(Element.extend(n));
}
return Selector.handlers.unmark(results);
},
- // COMBINATOR FUNCTIONS
descendant: function(nodes) {
var h = Selector.handlers;
for (var i = 0, results = [], node; node = nodes[i]; i++)
@@ -3081,7 +3623,7 @@ Object.extend(Selector, {
nextElementSibling: function(node) {
while (node = node.nextSibling)
- if (node.nodeType == 1) return node;
+ if (node.nodeType == 1) return node;
return null;
},
@@ -3091,13 +3633,11 @@ Object.extend(Selector, {
return null;
},
- // TOKEN FUNCTIONS
tagName: function(nodes, root, tagName, combinator) {
var uTagName = tagName.toUpperCase();
var results = [], h = Selector.handlers;
if (nodes) {
if (combinator) {
- // fastlane for ordinary descendant combinators
if (combinator == "descendant") {
for (var i = 0, node; node = nodes[i]; i++)
h.concat(results, node.getElementsByTagName(tagName));
@@ -3113,8 +3653,19 @@ Object.extend(Selector, {
id: function(nodes, root, id, combinator) {
var targetNode = $(id), h = Selector.handlers;
- if (!targetNode) return [];
- if (!nodes && root == document) return [targetNode];
+
+ if (root == document) {
+ if (!targetNode) return [];
+ if (!nodes) return [targetNode];
+ } else {
+ if (!root.sourceIndex || root.sourceIndex < 1) {
+ var nodes = root.getElementsByTagName('*');
+ for (var j = 0, node; node = nodes[j]; j++) {
+ if (node.id === id) return [node];
+ }
+ }
+ }
+
if (nodes) {
if (combinator) {
if (combinator == 'child') {
@@ -3226,7 +3777,6 @@ Object.extend(Selector, {
return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
},
- // handles the an+b logic
getIndices: function(a, b, total) {
if (a == 0) return b > 0 ? [b] : [];
return $R(1, total).inject([], function(memo, i) {
@@ -3235,7 +3785,6 @@ Object.extend(Selector, {
});
},
- // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
nth: function(nodes, formula, root, reverse, ofType) {
if (nodes.length == 0) return [];
if (formula == 'even') formula = '2n+0';
@@ -3269,8 +3818,7 @@ Object.extend(Selector, {
'empty': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++) {
- // IE treats comments as element nodes
- if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
+ if (node.tagName == '!' || node.firstChild) continue;
results.push(node);
}
return results;
@@ -3288,7 +3836,8 @@ Object.extend(Selector, {
'enabled': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++)
- if (!node.disabled) results.push(node);
+ if (!node.disabled && (!node.type || node.type !== 'hidden'))
+ results.push(node);
return results;
},
@@ -3308,11 +3857,12 @@ Object.extend(Selector, {
operators: {
'=': function(nv, v) { return nv == v; },
'!=': function(nv, v) { return nv != v; },
- '^=': function(nv, v) { return nv.startsWith(v); },
- '$=': function(nv, v) { return nv.endsWith(v); },
- '*=': function(nv, v) { return nv.include(v); },
+ '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+ '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+ '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
'~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
- '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
+ '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+ '-').include('-' + (v || "").toUpperCase() + '-'); }
},
split: function(expression) {
@@ -3352,19 +3902,10 @@ Object.extend(Selector, {
if (Prototype.Browser.IE) {
Object.extend(Selector.handlers, {
- // IE returns comment nodes on getElementsByTagName("*").
- // Filter them out.
concat: function(a, b) {
for (var i = 0, node; node = b[i]; i++)
if (node.tagName !== "!") a.push(node);
return a;
- },
-
- // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
- unmark: function(nodes) {
- for (var i = 0, node; node = nodes[i]; i++)
- node.removeAttribute('_countedByPrototype');
- return nodes;
}
});
}
@@ -3372,9 +3913,11 @@ if (Prototype.Browser.IE) {
function $$() {
return Selector.findChildElements(document, $A(arguments));
}
+
var Form = {
reset: function(form) {
- $(form).reset();
+ form = $(form);
+ form.reset();
return form;
},
@@ -3386,10 +3929,9 @@ var Form = {
var data = elements.inject({ }, function(result, element) {
if (!element.disabled && element.name) {
key = element.name; value = $(element).getValue();
- if (value != null && (element.type != 'submit' || (!submitted &&
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
submit !== false && (!submit || key == submit) && (submitted = true)))) {
if (key in result) {
- // a key is already present; construct an array of values
if (!Object.isArray(result[key])) result[key] = [result[key]];
result[key].push(value);
}
@@ -3409,13 +3951,18 @@ Form.Methods = {
},
getElements: function(form) {
- return $A($(form).getElementsByTagName('*')).inject([],
- function(elements, child) {
- if (Form.Element.Serializers[child.tagName.toLowerCase()])
- elements.push(Element.extend(child));
- return elements;
- }
- );
+ var elements = $(form).getElementsByTagName('*'),
+ element,
+ arr = [ ],
+ serializers = Form.Element.Serializers;
+ for (var i = 0; element = elements[i]; i++) {
+ arr.push(element);
+ }
+ return arr.inject([], function(elements, child) {
+ if (serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ })
},
getInputs: function(form, typeName, name) {
@@ -3455,7 +4002,7 @@ Form.Methods = {
}).sortBy(function(element) { return element.tabIndex }).first();
return firstByIndex ? firstByIndex : elements.find(function(element) {
- return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ return /^(?:input|select|textarea)$/i.test(element.tagName);
});
},
@@ -3486,6 +4033,7 @@ Form.Methods = {
/*--------------------------------------------------------------------------*/
+
Form.Element = {
focus: function(element) {
$(element).focus();
@@ -3499,6 +4047,7 @@ Form.Element = {
};
Form.Element.Methods = {
+
serialize: function(element) {
element = $(element);
if (!element.disabled && element.name) {
@@ -3539,7 +4088,7 @@ Form.Element.Methods = {
try {
element.focus();
if (element.select && (element.tagName.toLowerCase() != 'input' ||
- !['button', 'reset', 'submit'].include(element.type)))
+ !(/^(?:button|reset|submit)$/i.test(element.type))))
element.select();
} catch (e) { }
return element;
@@ -3547,7 +4096,6 @@ Form.Element.Methods = {
disable: function(element) {
element = $(element);
- element.blur();
element.disabled = true;
return element;
},
@@ -3562,6 +4110,7 @@ Form.Element.Methods = {
/*--------------------------------------------------------------------------*/
var Field = Form.Element;
+
var $F = Form.Element.Methods.getValue;
/*--------------------------------------------------------------------------*/
@@ -3587,22 +4136,22 @@ Form.Element.Serializers = {
else element.value = value;
},
- select: function(element, index) {
- if (Object.isUndefined(index))
+ select: function(element, value) {
+ if (Object.isUndefined(value))
return this[element.type == 'select-one' ?
'selectOne' : 'selectMany'](element);
else {
- var opt, value, single = !Object.isArray(index);
+ var opt, currentValue, single = !Object.isArray(value);
for (var i = 0, length = element.length; i < length; i++) {
opt = element.options[i];
- value = this.optionValue(opt);
+ currentValue = this.optionValue(opt);
if (single) {
- if (value == index) {
+ if (currentValue == value) {
opt.selected = true;
return;
}
}
- else opt.selected = index.include(value);
+ else opt.selected = value.include(currentValue);
}
}
},
@@ -3624,13 +4173,13 @@ Form.Element.Serializers = {
},
optionValue: function(opt) {
- // extend element because hasAttribute may not be native
return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
}
};
/*--------------------------------------------------------------------------*/
+
Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
initialize: function($super, element, frequency, callback) {
$super(callback, frequency);
@@ -3712,325 +4261,441 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
return Form.serialize(this.element);
}
});
-if (!window.Event) var Event = { };
-
-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,
- KEY_HOME: 36,
- KEY_END: 35,
- KEY_PAGEUP: 33,
- KEY_PAGEDOWN: 34,
- KEY_INSERT: 45,
-
- cache: { },
-
- relatedTarget: function(event) {
- var element;
- switch(event.type) {
- case 'mouseover': element = event.fromElement; break;
- case 'mouseout': element = event.toElement; break;
- default: return null;
- }
- return Element.extend(element);
- }
-});
+(function() {
+
+ var 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,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: {}
+ };
-Event.Methods = (function() {
- var isButton;
+ var docEl = document.documentElement;
+ var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
+ && 'onmouseleave' in docEl;
+ var _isButton;
if (Prototype.Browser.IE) {
var buttonMap = { 0: 1, 1: 4, 2: 2 };
- isButton = function(event, code) {
- return event.button == buttonMap[code];
+ _isButton = function(event, code) {
+ return event.button === buttonMap[code];
};
-
} else if (Prototype.Browser.WebKit) {
- isButton = function(event, code) {
+ _isButton = function(event, code) {
switch (code) {
case 0: return event.which == 1 && !event.metaKey;
case 1: return event.which == 1 && event.metaKey;
default: return false;
}
};
-
} else {
- isButton = function(event, code) {
+ _isButton = function(event, code) {
return event.which ? (event.which === code + 1) : (event.button === code);
};
}
- return {
- isLeftClick: function(event) { return isButton(event, 0) },
- isMiddleClick: function(event) { return isButton(event, 1) },
- isRightClick: function(event) { return isButton(event, 2) },
+ function isLeftClick(event) { return _isButton(event, 0) }
- element: function(event) {
- var node = Event.extend(event).target;
- return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
- },
+ function isMiddleClick(event) { return _isButton(event, 1) }
- findElement: function(event, expression) {
- var element = Event.element(event);
- if (!expression) return element;
- var elements = [element].concat(element.ancestors());
- return Selector.findElement(elements, expression, 0);
- },
+ function isRightClick(event) { return _isButton(event, 2) }
- pointer: function(event) {
- return {
- x: event.pageX || (event.clientX +
- (document.documentElement.scrollLeft || document.body.scrollLeft)),
- y: event.pageY || (event.clientY +
- (document.documentElement.scrollTop || document.body.scrollTop))
- };
- },
+ function element(event) {
+ event = Event.extend(event);
- pointerX: function(event) { return Event.pointer(event).x },
- pointerY: function(event) { return Event.pointer(event).y },
+ var node = event.target, type = event.type,
+ currentTarget = event.currentTarget;
- stop: function(event) {
- Event.extend(event);
- event.preventDefault();
- event.stopPropagation();
- event.stopped = true;
+ if (currentTarget && currentTarget.tagName) {
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
}
+
+ if (node.nodeType == Node.TEXT_NODE)
+ node = node.parentNode;
+
+ return Element.extend(node);
+ }
+
+ function findElement(event, expression) {
+ var element = Event.element(event);
+ if (!expression) return element;
+ var elements = [element].concat(element.ancestors());
+ return Selector.findElement(elements, expression, 0);
+ }
+
+ function pointer(event) {
+ return { x: pointerX(event), y: pointerY(event) };
+ }
+
+ function pointerX(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0 };
+
+ return event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0));
+ }
+
+ function pointerY(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollTop: 0 };
+
+ return event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0));
+ }
+
+
+ function stop(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+
+ event.stopped = true;
+ }
+
+ Event.Methods = {
+ isLeftClick: isLeftClick,
+ isMiddleClick: isMiddleClick,
+ isRightClick: isRightClick,
+
+ element: element,
+ findElement: findElement,
+
+ pointer: pointer,
+ pointerX: pointerX,
+ pointerY: pointerY,
+
+ stop: stop
};
-})();
-Event.extend = (function() {
+
var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
m[name] = Event.Methods[name].methodize();
return m;
});
if (Prototype.Browser.IE) {
+ function _relatedTarget(event) {
+ var element;
+ switch (event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+
Object.extend(methods, {
stopPropagation: function() { this.cancelBubble = true },
preventDefault: function() { this.returnValue = false },
- inspect: function() { return "[object Event]" }
+ inspect: function() { return '[object Event]' }
});
- return function(event) {
+ Event.extend = function(event, element) {
if (!event) return false;
if (event._extendedByPrototype) return event;
event._extendedByPrototype = Prototype.emptyFunction;
var pointer = Event.pointer(event);
+
Object.extend(event, {
- target: event.srcElement,
- relatedTarget: Event.relatedTarget(event),
+ target: event.srcElement || element,
+ relatedTarget: _relatedTarget(event),
pageX: pointer.x,
pageY: pointer.y
});
+
return Object.extend(event, methods);
};
-
} else {
- Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
+ Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
Object.extend(Event.prototype, methods);
- return Prototype.K;
+ Event.extend = Prototype.K;
}
-})();
-
-Object.extend(Event, (function() {
- var cache = Event.cache;
- function getEventID(element) {
- if (element._prototypeEventID) return element._prototypeEventID[0];
- arguments.callee.id = arguments.callee.id || 1;
- return element._prototypeEventID = [++arguments.callee.id];
- }
+ function _createResponder(element, eventName, handler) {
+ var registry = Element.retrieve(element, 'prototype_event_registry');
- function getDOMEventName(eventName) {
- if (eventName && eventName.include(':')) return "dataavailable";
- return eventName;
- }
+ if (Object.isUndefined(registry)) {
+ CACHE.push(element);
+ registry = Element.retrieve(element, 'prototype_event_registry', $H());
+ }
- function getCacheForID(id) {
- return cache[id] = cache[id] || { };
- }
+ var respondersForEvent = registry.get(eventName);
+ if (Object.isUndefined(respondersForEvent)) {
+ respondersForEvent = [];
+ registry.set(eventName, respondersForEvent);
+ }
- function getWrappersForEventName(id, eventName) {
- var c = getCacheForID(id);
- return c[eventName] = c[eventName] || [];
- }
+ if (respondersForEvent.pluck('handler').include(handler)) return false;
- function createWrapper(element, eventName, handler) {
- var id = getEventID(element);
- var c = getWrappersForEventName(id, eventName);
- if (c.pluck("handler").include(handler)) return false;
+ var responder;
+ if (eventName.include(":")) {
+ responder = function(event) {
+ if (Object.isUndefined(event.eventName))
+ return false;
- var wrapper = function(event) {
- if (!Event || !Event.extend ||
- (event.eventName && event.eventName != eventName))
+ if (event.eventName !== eventName)
return false;
- Event.extend(event);
- handler.call(element, event);
- };
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ } else {
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
+ (eventName === "mouseenter" || eventName === "mouseleave")) {
+ if (eventName === "mouseenter" || eventName === "mouseleave") {
+ responder = function(event) {
+ Event.extend(event, element);
+
+ var parent = event.relatedTarget;
+ while (parent && parent !== element) {
+ try { parent = parent.parentNode; }
+ catch(e) { parent = element; }
+ }
- wrapper.handler = handler;
- c.push(wrapper);
- return wrapper;
- }
+ if (parent === element) return;
- function findWrapper(id, eventName, handler) {
- var c = getWrappersForEventName(id, eventName);
- return c.find(function(wrapper) { return wrapper.handler == handler });
- }
+ handler.call(element, event);
+ };
+ }
+ } else {
+ responder = function(event) {
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ }
+ }
- function destroyWrapper(id, eventName, handler) {
- var c = getCacheForID(id);
- if (!c[eventName]) return false;
- c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+ responder.handler = handler;
+ respondersForEvent.push(responder);
+ return responder;
}
- function destroyCache() {
- for (var id in cache)
- for (var eventName in cache[id])
- cache[id][eventName] = null;
+ function _destroyCache() {
+ for (var i = 0, length = CACHE.length; i < length; i++) {
+ Event.stopObserving(CACHE[i]);
+ CACHE[i] = null;
+ }
}
- if (window.attachEvent) {
- window.attachEvent("onunload", destroyCache);
+ var CACHE = [];
+
+ if (Prototype.Browser.IE)
+ window.attachEvent('onunload', _destroyCache);
+
+ if (Prototype.Browser.WebKit)
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+
+
+ var _getDOMEventName = Prototype.K;
+
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
+ _getDOMEventName = function(eventName) {
+ var translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
+ return eventName in translations ? translations[eventName] : eventName;
+ };
}
- return {
- observe: function(element, eventName, handler) {
- element = $(element);
- var name = getDOMEventName(eventName);
+ function observe(element, eventName, handler) {
+ element = $(element);
- var wrapper = createWrapper(element, eventName, handler);
- if (!wrapper) return element;
+ var responder = _createResponder(element, eventName, handler);
- if (element.addEventListener) {
- element.addEventListener(name, wrapper, false);
- } else {
- element.attachEvent("on" + name, wrapper);
+ if (!responder) return element;
+
+ if (eventName.include(':')) {
+ if (element.addEventListener)
+ element.addEventListener("dataavailable", responder, false);
+ else {
+ element.attachEvent("ondataavailable", responder);
+ element.attachEvent("onfilterchange", responder);
}
+ } else {
+ var actualEventName = _getDOMEventName(eventName);
- return element;
- },
+ if (element.addEventListener)
+ element.addEventListener(actualEventName, responder, false);
+ else
+ element.attachEvent("on" + actualEventName, responder);
+ }
- stopObserving: function(element, eventName, handler) {
- element = $(element);
- var id = getEventID(element), name = getDOMEventName(eventName);
+ return element;
+ }
- if (!handler && eventName) {
- getWrappersForEventName(id, eventName).each(function(wrapper) {
- element.stopObserving(eventName, wrapper.handler);
- });
- return element;
+ function stopObserving(element, eventName, handler) {
+ element = $(element);
- } else if (!eventName) {
- Object.keys(getCacheForID(id)).each(function(eventName) {
- element.stopObserving(eventName);
- });
- return element;
- }
+ var registry = Element.retrieve(element, 'prototype_event_registry');
- var wrapper = findWrapper(id, eventName, handler);
- if (!wrapper) return element;
+ if (Object.isUndefined(registry)) return element;
- if (element.removeEventListener) {
- element.removeEventListener(name, wrapper, false);
- } else {
- element.detachEvent("on" + name, wrapper);
- }
+ if (eventName && !handler) {
+ var responders = registry.get(eventName);
- destroyWrapper(id, eventName, handler);
+ if (Object.isUndefined(responders)) return element;
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
return element;
- },
+ } else if (!eventName) {
+ registry.each( function(pair) {
+ var eventName = pair.key, responders = pair.value;
- fire: function(element, eventName, memo) {
- element = $(element);
- if (element == document && document.createEvent && !element.dispatchEvent)
- element = document.documentElement;
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
+ });
+ return element;
+ }
- var event;
- if (document.createEvent) {
- event = document.createEvent("HTMLEvents");
- event.initEvent("dataavailable", true, true);
- } else {
- event = document.createEventObject();
- event.eventType = "ondataavailable";
- }
+ var responders = registry.get(eventName);
- event.eventName = eventName;
- event.memo = memo || { };
+ if (!responders) return;
- if (document.createEvent) {
- element.dispatchEvent(event);
- } else {
- element.fireEvent(event.eventType, event);
+ var responder = responders.find( function(r) { return r.handler === handler; });
+ if (!responder) return element;
+
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (eventName.include(':')) {
+ if (element.removeEventListener)
+ element.removeEventListener("dataavailable", responder, false);
+ else {
+ element.detachEvent("ondataavailable", responder);
+ element.detachEvent("onfilterchange", responder);
}
+ } else {
+ if (element.removeEventListener)
+ element.removeEventListener(actualEventName, responder, false);
+ else
+ element.detachEvent('on' + actualEventName, responder);
+ }
+
+ registry.set(eventName, responders.without(responder));
+
+ return element;
+ }
+
+ function fire(element, eventName, memo, bubble) {
+ element = $(element);
+
+ if (Object.isUndefined(bubble))
+ bubble = true;
- return Event.extend(event);
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent('HTMLEvents');
+ event.initEvent('dataavailable', true, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = bubble ? 'ondataavailable' : 'onfilterchange';
}
- };
-})());
-Object.extend(Event, Event.Methods);
+ event.eventName = eventName;
+ event.memo = memo || { };
-Element.addMethods({
- fire: Event.fire,
- observe: Event.observe,
- stopObserving: Event.stopObserving
-});
+ if (document.createEvent)
+ element.dispatchEvent(event);
+ else
+ element.fireEvent(event.eventType, event);
-Object.extend(document, {
- fire: Element.Methods.fire.methodize(),
- observe: Element.Methods.observe.methodize(),
- stopObserving: Element.Methods.stopObserving.methodize(),
- loaded: false
-});
+ return Event.extend(event);
+ }
+
+
+ Object.extend(Event, Event.Methods);
+
+ Object.extend(Event, {
+ fire: fire,
+ observe: observe,
+ stopObserving: stopObserving
+ });
+
+ Element.addMethods({
+ fire: fire,
+
+ observe: observe,
+
+ stopObserving: stopObserving
+ });
+
+ Object.extend(document, {
+ fire: fire.methodize(),
+
+ observe: observe.methodize(),
+
+ stopObserving: stopObserving.methodize(),
+
+ loaded: false
+ });
+
+ if (window.Event) Object.extend(window.Event, Event);
+ else window.Event = Event;
+})();
(function() {
/* Support for the DOMContentLoaded event is based on work by Dan Webb,
- Matthias Miller, Dean Edwards and John Resig. */
+ Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
var timer;
function fireContentLoadedEvent() {
if (document.loaded) return;
- if (timer) window.clearInterval(timer);
- document.fire("dom:loaded");
+ if (timer) window.clearTimeout(timer);
document.loaded = true;
+ document.fire('dom:loaded');
}
- if (document.addEventListener) {
- if (Prototype.Browser.WebKit) {
- timer = window.setInterval(function() {
- if (/loaded|complete/.test(document.readyState))
- fireContentLoadedEvent();
- }, 0);
-
- Event.observe(window, "load", fireContentLoadedEvent);
+ function checkReadyState() {
+ if (document.readyState === 'complete') {
+ document.stopObserving('readystatechange', checkReadyState);
+ fireContentLoadedEvent();
+ }
+ }
- } else {
- document.addEventListener("DOMContentLoaded",
- fireContentLoadedEvent, false);
+ function pollDoScroll() {
+ try { document.documentElement.doScroll('left'); }
+ catch(e) {
+ timer = pollDoScroll.defer();
+ return;
}
+ fireContentLoadedEvent();
+ }
+ if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
} else {
- document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
- $("__onDOMContentLoaded").onreadystatechange = function() {
- if (this.readyState == "complete") {
- this.onreadystatechange = null;
- fireContentLoadedEvent();
- }
- };
+ document.observe('readystatechange', checkReadyState);
+ if (window == top)
+ timer = pollDoScroll.defer();
}
+
+ Event.observe(window, 'load', fireContentLoadedEvent);
})();
+
+Element.addMethods();
+
/*------------------------------- DEPRECATED -------------------------------*/
Hash.toQueryString = Object.toQueryString;
@@ -4059,16 +4724,9 @@ var Insertion = {
var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
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
@@ -4080,7 +4738,6 @@ var Position = {
|| 0;
},
- // caches x/y coordinate pair to use with overlap
within: function(element, x, y) {
if (this.includeScrollOffsets)
return this.withinIncludingScrolloffsets(element, x, y);
@@ -4107,7 +4764,6 @@ var Position = {
this.xcomp < this.offset[0] + element.offsetWidth);
},
- // within must be called directly before
overlap: function(mode, element) {
if (!mode) return 0;
if (mode == 'vertical')
@@ -4118,7 +4774,6 @@ var Position = {
element.offsetWidth;
},
- // Deprecation layer -- use newer Element methods now (1.5.2).
cumulativeOffset: Element.Methods.cumulativeOffset,
@@ -4217,5 +4872,3 @@ Element.ClassNames.prototype = {
Object.extend(Element.ClassNames.prototype, Enumerable);
/*--------------------------------------------------------------------------*/
-
-Element.addMethods();
\ No newline at end of file
diff --git a/js/src/tables.js b/js/src/tables.js
index 4ae1cbf..6dc27d9 100644
--- a/js/src/tables.js
+++ b/js/src/tables.js
@@ -8,7 +8,7 @@
* http://tablesorter.com/docs/, and
* http://www.millstream.com.au/view/code/tablekit/
*
- * $Horde: mnemo/js/src/tables.js,v 1.4.2.1 2007/12/20 14:17:41 jan Exp $
+ * $Horde: mnemo/js/src/tables.js,v 1.4.2.1 2007-12-20 14:17:41 jan Exp $
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
diff --git a/js/tables.js b/js/tables.js
index e7a12ca..2864ebc 100644
--- a/js/tables.js
+++ b/js/tables.js
@@ -1 +1 @@
-if(window.addEventListener){window.addEventListener("load",table_init,false)}else{if(window.attachEvent){window.attachEvent("onload",table_init)}else{if(window.onload!=null){var old_onload=window.onload;window.onload=function(A){old_onload(A);table_init()}}else{window.onload=table_init}}}var SORT_COLUMN_INDEX;function table_init(){if(!document.getElementsByTagName){return }tables=document.getElementsByTagName("table");for(var A=0;A<tables.length;++A){if(hasClass(tables[A],"striped")){table_stripe(tables[A])}if(hasClass(tables[A],"sortable")&&tables[A].id){table_makeSortable(tables[A])}}}function table_stripe(D){var E=false;var B=D.childNodes;for(var F=0;F<B.length;++F){if(B[F].tagName!="TBODY"){continue}var A=B[F].childNodes;for(var C=0;C<A.length;++C){if(A[C].tagName=="TR"){removeClass(A[C],"rowEven");removeClass(A[C],"rowOdd");addClass(A[C],E?"rowEven":"rowOdd");E=!E}}}}function table_makeSortable(C){if(C.rows&&C.rows.length>0){var D=C.rows[0]}if(!D){return }for(var B=0;B<D.cells.length;++B){var A=D.cells[B];if(hasClass(A,"nosort")){continue}A.columnIndex=B;A.style.cursor="pointer";A.onclick=function(E){var E=E||window.event;if(E.target){if(E.target.nodeType==3){E.target=E.target.parentNode}}else{if(E.srcElement){E.target=E.srcElement}}el=hasParent(E.target,"A","TH");if(el&&!hasClass(el,"sortlink")){return true}table_resortTable(getParent(E.target,"TH"));return false}}}function table_getSortValue(D){if(typeof D=="string"){return D.replace(/^\s+/,"").replace(/\s+$/,"")}if(typeof D=="undefined"){return D}if((D.hasAttribute&&D.hasAttribute("sortval"))||typeof D.sortval!="undefined"){return D.getAttribute("sortval")}if(D.innerText){return D.innerText.replace(/^\s+/,"").replace(/\s+$/,"")}var E="";var C=D.childNodes;var A=C.length;for(var B=0;B<A;++B){switch(C[B].nodeType){case 1:E+=table_getSortValue(C[B]);break;case 3:E+=C[B].nodeValue;break}}return E.replace(/^\s+/,"").replace(/\s+$/,"")}function table_resortTable(C){table=getParent(C,"TABLE");sortColumn=C.columnIndex;sortDown=0;theads=table.tHead.getElementsByTagName("th");for(var B=0;B<theads.length;++B){if(C==theads[B]){if(hasClass(theads[B],"sortup")){removeClass(theads[B],"sortup");addClass(theads[B],"sortdown")}else{if(hasClass(theads[B],"sortdown")){removeClass(theads[B],"sortdown");addClass(theads[B],"sortup");sortDown=1}else{addClass(theads[B],"sortdown")}}}else{removeClass(theads[B],"sortup");removeClass(theads[B],"sortdown")}}if(table.rows.length<=1){return }var D=table_getSortValue(table.rows[1].cells[sortColumn]);sortfn=table_sort_caseinsensitive;if(D.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d(\d\d)?$/)){sortfn=table_sort_date}else{if(D.match(/^[??$?????]/)){sortfn=table_sort_currency}else{if(D.match(/^[\d\.]+$/)){sortfn=table_sort_numeric}}}SORT_COLUMN_INDEX=sortColumn;for(var B=0;B<table.tBodies.length;++B){trs=table.tBodies[B].getElementsByTagName("tr");newRows=[];for(var A=0;A<trs.length;++A){newRows[A]=trs[A]}newRows.sort(sortfn);if(sortDown){newRows.reverse()}for(var A=0;A<newRows.length;++A){if(!hasClass(newRows[A],"sortbottom")){table.tBodies[B].appendChild(newRows[A])}}for(var A=0;A<newRows.length;++A){if(hasClass(newRows[A],"sortbottom")){table.tBodies[B].appendChild(newRows[A])}}}if(hasClass(table,"striped")){table_stripe(table)}if(typeof (table_sortCallback)=="function"){table_sortCallback(table.id,C.id,sortDown)}}function getParent(B,A){if(B==null){return null}else{if(A==null){return B.parentNode}else{if(B.nodeType==1&&B.tagName.toLowerCase()==A.toLowerCase()){return B}else{return getParent(B.parentNode,A)}}}}function table_sort_date(B,A){aa=table_getSortValue(B.cells[SORT_COLUMN_INDEX]);bb=table_getSortValue(A.cells[SORT_COLUMN_INDEX]);if(aa.length==10){dt1=aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2)}else{yr=aa.substr(6,2);if(parseInt(yr)<50){yr="20"+yr}else{yr="19"+yr}dt1=yr+aa.substr(3,2)+aa.substr(0,2)}if(bb.length==10){dt2=bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2)}else{yr=bb.substr(6,2);if(parseInt(yr)<50){yr="20"+yr}else{yr="19"+yr}dt2=yr+bb.substr(3,2)+bb.substr(0,2)}if(dt1==dt2){return 0}else{if(dt1<dt2){return -1}}return 1}function table_sort_currency(B,A){aa=table_getSortValue(B.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,"");bb=table_getSortValue(A.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,"");return parseFloat(aa)-parseFloat(bb)}function table_sort_numeric(B,A){aa=parseFloat(table_getSortValue(B.cells[SORT_COLUMN_INDEX]));if(isNaN(aa)){aa=0}bb=parseFloat(table_getSortValue(A.cells[SORT_COLUMN_INDEX]));if(isNaN(bb)){bb=0}return aa-bb}function table_sort_caseinsensitive(B,A){aa=table_getSortValue(B.cells[SORT_COLUMN_INDEX]).toLowerCase();bb=table_getSortValue(A.cells[SORT_COLUMN_INDEX]).toLowerCase();if(aa==bb){return 0}else{if(aa<bb){return -1}}return 1}function table_sort_default(B,A){aa=table_getSortValue(B.cells[SORT_COLUMN_INDEX]);bb=table_getSortValue(A.cells[SORT_COLUMN_INDEX]);if(aa==bb){return 0}else{if(aa<bb){return -1}}return 1}function hasParent(C,A,B){if(C.tagName==A){return C}else{if(B!=null&&C.tagName==B){return false}else{return hasParent(getParent(C),A,B)}}}function addClass(B,A){B.className+=B.className?" "+A:A}function removeClass(B,A){B.className=B.className.replace(new RegExp(" ?"+A+" ?"),"")}function hasClass(B,A){return(B.className.indexOf(A)!=-1)};
\ No newline at end of file
+if(window.addEventListener){window.addEventListener("load",table_init,false)}else{if(window.attachEvent){window.attachEvent("onload",table_init)}else{if(window.onload!=null){var old_onload=window.onload;window.onload=function(a){old_onload(a);table_init()}}else{window.onload=table_init}}}var SORT_COLUMN_INDEX;function table_init(){if(!document.getElementsByTagName){return}tables=document.getElementsByTagName("table");for(var a=0;a<tables.length;++a){if(hasClass(tables[a],"striped")){table_stripe(tables[a])}if(hasClass(tables[a],"sortable")&&tables[a].id){table_makeSortable(tables[a])}}}function table_stripe(e){var f=false;var b=e.childNodes;for(var g=0;g<b.length;++g){if(b[g].tagName!="TBODY"){continue}var a=b[g].childNodes;for(var d=0;d<a.length;++d){if(a[d].tagName=="TR"){removeClass(a[d],"rowEven");removeClass(a[d],"rowOdd");addClass(a[d],f?"rowEven":"rowOdd");f=!f}}}}function table_makeSortable(c){if(c.rows&&c.rows.length>0){var d=c.rows[0]}if(!d){return}for(var b=0;b<d.cells.length;++b){var a=d.cells[b];if(hasClass(a,"nosort")){continue}a.columnIndex=b;a.style.cursor="pointer";a.onclick=function(f){var f=f||window.event;if(f.target){if(f.target.nodeType==3){f.target=f.target.parentNode}}else{if(f.srcElement){f.target=f.srcElement}}el=hasParent(f.target,"A","TH");if(el&&!hasClass(el,"sortlink")){return true}table_resortTable(getParent(f.target,"TH"));return false}}}function table_getSortValue(d){if(typeof d=="string"){return d.replace(/^\s+/,"").replace(/\s+$/,"")}if(typeof d=="undefined"){return d}if((d.hasAttribute&&d.hasAttribute("sortval"))||typeof d.sortval!="undefined"){return d.getAttribute("sortval")}if(d.innerText){return d.innerText.replace(/^\s+/,"").replace(/\s+$/,"")}var e="";var c=d.childNodes;var a=c.length;for(var b=0;b<a;++b){switch(c[b].nodeType){case 1:e+=table_getSortValue(c[b]);break;case 3:e+=c[b].nodeValue;break}}return e.replace(/^\s+/,"").replace(/\s+$/,"")}function table_resortTable(c){table=getParent(c,"TABLE");sortColumn=c.columnIndex;sortDown=0;theads=table.tHead.getElementsByTagName("th");for(var b=0;b<theads.length;++b){if(c==theads[b]){if(hasClass(theads[b],"sortup")){removeClass(theads[b],"sortup");addClass(theads[b],"sortdown")}else{if(hasClass(theads[b],"sortdown")){removeClass(theads[b],"sortdown");addClass(theads[b],"sortup");sortDown=1}else{addClass(theads[b],"sortdown")}}}else{removeClass(theads[b],"sortup");removeClass(theads[b],"sortdown")}}if(table.rows.length<=1){return}var d=table_getSortValue(table.rows[1].cells[sortColumn]);sortfn=table_sort_caseinsensitive;if(d.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d(\d\d)?$/)){sortfn=table_sort_date}else{if(d.match(/^[£$â¬Â¥]/)){sortfn=table_sort_currency}else{if(d.match(/^[\d\.]+$/)){sortfn=table_sort_numeric}}}SORT_COLUMN_INDEX=sortColumn;for(var b=0;b<table.tBodies.length;++b){trs=table.tBodies[b].getElementsByTagName("tr");newRows=[];for(var a=0;a<trs.length;++a){newRows[a]=trs[a]}newRows.sort(sortfn);if(sortDown){newRows.reverse()}for(var a=0;a<newRows.length;++a){if(!hasClass(newRows[a],"sortbottom")){table.tBodies[b].appendChild(newRows[a])}}for(var a=0;a<newRows.length;++a){if(hasClass(newRows[a],"sortbottom")){table.tBodies[b].appendChild(newRows[a])}}}if(hasClass(table,"striped")){table_stripe(table)}if(typeof(table_sortCallback)=="function"){table_sortCallback(table.id,c.id,sortDown)}}function getParent(b,a){if(b==null){return null}else{if(a==null){return b.parentNode}else{if(b.nodeType==1&&b.tagName.toLowerCase()==a.toLowerCase()){return b}else{return getParent(b.parentNode,a)}}}}function table_sort_date(d,c){aa=table_getSortValue(d.cells[SORT_COLUMN_INDEX]);bb=table_getSortValue(c.cells[SORT_COLUMN_INDEX]);if(aa.length==10){dt1=aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2)}else{yr=aa.substr(6,2);if(parseInt(yr)<50){yr="20"+yr}else{yr="19"+yr}dt1=yr+aa.substr(3,2)+aa.substr(0,2)}if(bb.length==10){dt2=bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2)}else{yr=bb.substr(6,2);if(parseInt(yr)<50){yr="20"+yr}else{yr="19"+yr}dt2=yr+bb.substr(3,2)+bb.substr(0,2)}if(dt1==dt2){return 0}else{if(dt1<dt2){return-1}}return 1}function table_sort_currency(d,c){aa=table_getSortValue(d.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,"");bb=table_getSortValue(c.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,"");return parseFloat(aa)-parseFloat(bb)}function table_sort_numeric(d,c){aa=parseFloat(table_getSortValue(d.cells[SORT_COLUMN_INDEX]));if(isNaN(aa)){aa=0}bb=parseFloat(table_getSortValue(c.cells[SORT_COLUMN_INDEX]));if(isNaN(bb)){bb=0}return aa-bb}function table_sort_caseinsensitive(d,c){aa=table_getSortValue(d.cells[SORT_COLUMN_INDEX]).toLowerCase();bb=table_getSortValue(c.cells[SORT_COLUMN_INDEX]).toLowerCase();if(aa==bb){return 0}else{if(aa<bb){return-1}}return 1}function table_sort_default(d,c){aa=table_getSortValue(d.cells[SORT_COLUMN_INDEX]);bb=table_getSortValue(c.cells[SORT_COLUMN_INDEX]);if(aa==bb){return 0}else{if(aa<bb){return-1}}return 1}function hasParent(c,a,b){if(c.tagName==a){return c}else{if(b!=null&&c.tagName==b){return false}else{return hasParent(getParent(c),a,b)}}}function addClass(b,a){b.className+=b.className?" "+a:a}function removeClass(b,a){b.className=b.className.replace(new RegExp(" ?"+a+" ?"),"")}function hasClass(b,a){return(b.className.indexOf(a)!=-1)};
\ No newline at end of file
diff --git a/lib/Block/summary.php b/lib/Block/summary.php
index 46e227c..8116581 100644
--- a/lib/Block/summary.php
+++ b/lib/Block/summary.php
@@ -5,7 +5,7 @@ $block_name = _("Notes Summary");
/**
* Implementation of Horde_Block api to show notes summary.
*
- * $Horde: mnemo/lib/Block/summary.php,v 1.22.8.9 2008/05/20 22:02:10 jan Exp $
+ * $Horde: mnemo/lib/Block/summary.php,v 1.22.8.9 2008-05-20 22:02:10 jan Exp $
*
* @package Horde_Block
*/
diff --git a/lib/Block/tree_menu.php b/lib/Block/tree_menu.php
index 6bff35d..0f0c14e 100644
--- a/lib/Block/tree_menu.php
+++ b/lib/Block/tree_menu.php
@@ -4,7 +4,7 @@ $block_name = _("Menu List");
$block_type = 'tree';
/**
- * $Horde: mnemo/lib/Block/tree_menu.php,v 1.4.2.2 2008/01/02 16:50:49 chuck Exp $
+ * $Horde: mnemo/lib/Block/tree_menu.php,v 1.4.2.2 2008-01-02 16:50:49 chuck Exp $
*
* @package Horde_Block
*/
diff --git a/lib/Driver.php b/lib/Driver.php
index 89fa643..c1d901a 100644
--- a/lib/Driver.php
+++ b/lib/Driver.php
@@ -2,9 +2,9 @@
/**
* Mnemo_Driver:: defines an API for implementing storage backends for Mnemo.
*
- * $Horde: mnemo/lib/Driver.php,v 1.25.2.13 2008/06/09 03:28:06 chuck Exp $
+ * $Horde: mnemo/lib/Driver.php,v 1.25.2.14 2009-01-06 15:24:58 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/lib/Driver/kolab.php b/lib/Driver/kolab.php
index dcf2673..41225d7 100644
--- a/lib/Driver/kolab.php
+++ b/lib/Driver/kolab.php
@@ -5,9 +5,9 @@ require_once 'Horde/Kolab.php';
/**
* Horde Mnemo driver for the Kolab IMAP server.
*
- * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.11 2008/03/12 08:16:03 wrobel Exp $
+ * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.12 2009-01-06 15:24:59 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -181,9 +181,9 @@ class Mnemo_Driver_kolab extends Mnemo_Driver {
/**
* Horde Mnemo wrapper to distinguish between both Kolab driver implementations.
*
- * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.11 2008/03/12 08:16:03 wrobel Exp $
+ * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.12 2009-01-06 15:24:59 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -291,9 +291,9 @@ class Mnemo_Driver_kolab_wrapper {
/**
* Old Horde Mnemo driver for the Kolab IMAP server.
*
- * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.11 2008/03/12 08:16:03 wrobel Exp $
+ * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.12 2009-01-06 15:24:59 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -458,9 +458,9 @@ class Mnemo_Driver_kolab_wrapper_old extends Mnemo_Driver_kolab_wrapper {
/**
* New Horde Mnemo driver for the Kolab IMAP server.
*
- * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.11 2008/03/12 08:16:03 wrobel Exp $
+ * $Horde: mnemo/lib/Driver/kolab.php,v 1.7.2.12 2009-01-06 15:24:59 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/lib/Driver/sql.php b/lib/Driver/sql.php
index dbc32a3..86ff9e0 100644
--- a/lib/Driver/sql.php
+++ b/lib/Driver/sql.php
@@ -23,9 +23,9 @@
*
* The table structure is defined in scripts/drivers/mnemo_memos.sql.
*
- * $Horde: mnemo/lib/Driver/sql.php,v 1.28.2.17 2008/08/20 17:14:56 jan Exp $
+ * $Horde: mnemo/lib/Driver/sql.php,v 1.28.2.20 2009-02-17 18:42:26 chuck Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -95,8 +95,10 @@ class Mnemo_Driver_sql extends Mnemo_Driver {
}
/* Connect to the SQL server using the supplied parameters. */
+ require_once 'DB.php';
$this->_write_db = &DB::connect($this->_params,
- array('persistent' => !empty($this->_params['persistent'])));
+ array('persistent' => !empty($this->_params['persistent']),
+ 'ssl' => !empty($this->_params['ssl'])));
if (is_a($this->_write_db, 'PEAR_Error')) {
Horde::fatal($this->_write_db, __FILE__, __LINE__);
}
@@ -115,7 +117,8 @@ class Mnemo_Driver_sql extends Mnemo_Driver {
if (!empty($this->_params['splitread'])) {
$params = array_merge($this->_params, $this->_params['read']);
$this->_db = &DB::connect($params,
- array('persistent' => !empty($params['persistent'])));
+ array('persistent' => !empty($params['persistent']),
+ 'ssl' => !empty($params['ssl'])));
if (is_a($this->_db, 'PEAR_Error')) {
Horde::fatal($this->_db, __FILE__, __LINE__);
}
diff --git a/lib/Forms/CreateNotepad.php b/lib/Forms/CreateNotepad.php
index 20ecba8..342936b 100644
--- a/lib/Forms/CreateNotepad.php
+++ b/lib/Forms/CreateNotepad.php
@@ -2,7 +2,7 @@
/**
* Horde_Form for creating notepads.
*
- * $Horde: mnemo/lib/Forms/CreateNotepad.php,v 1.1.2.1 2007/12/20 14:17:46 jan Exp $
+ * $Horde: mnemo/lib/Forms/CreateNotepad.php,v 1.1.2.1 2007-12-20 14:17:46 jan Exp $
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/lib/Forms/DeleteNotepad.php b/lib/Forms/DeleteNotepad.php
index c06111d..c303e95 100644
--- a/lib/Forms/DeleteNotepad.php
+++ b/lib/Forms/DeleteNotepad.php
@@ -2,7 +2,7 @@
/**
* Horde_Form for deleting notepads.
*
- * $Horde: mnemo/lib/Forms/DeleteNotepad.php,v 1.4.2.1 2007/12/20 14:17:46 jan Exp $
+ * $Horde: mnemo/lib/Forms/DeleteNotepad.php,v 1.4.2.1 2007-12-20 14:17:46 jan Exp $
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/lib/Forms/EditNotepad.php b/lib/Forms/EditNotepad.php
index 83bb8d3..3a0a722 100644
--- a/lib/Forms/EditNotepad.php
+++ b/lib/Forms/EditNotepad.php
@@ -2,7 +2,7 @@
/**
* Horde_Form for editing notepads.
*
- * $Horde: mnemo/lib/Forms/EditNotepad.php,v 1.2.2.1 2007/12/20 14:17:46 jan Exp $
+ * $Horde: mnemo/lib/Forms/EditNotepad.php,v 1.2.2.1 2007-12-20 14:17:46 jan Exp $
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/lib/Mnemo.php b/lib/Mnemo.php
index 2f1d431..f133073 100644
--- a/lib/Mnemo.php
+++ b/lib/Mnemo.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/lib/Mnemo.php,v 1.52.2.13 2008/05/02 20:21:52 chuck Exp $
+ * $Horde: mnemo/lib/Mnemo.php,v 1.52.2.15 2009-01-13 15:47:33 chuck Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -112,7 +112,7 @@ class Mnemo {
return $count;
}
- $notepads = &Mnemo::listNotepads(true, PERMS_ALL);
+ $notepads = Mnemo::listNotepads(true, PERMS_ALL);
$count = 0;
foreach (array_keys($notepads) as $notepad) {
@@ -169,9 +169,15 @@ class Mnemo {
*
* @return array The memo lists.
*/
- function &listNotepads($owneronly = false, $permission = PERMS_SHOW)
+ function listNotepads($owneronly = false, $permission = PERMS_SHOW)
{
- $notepads = &$GLOBALS['mnemo_shares']->listShares(Auth::getAuth(), $permission, $owneronly ? Auth::getAuth() : null, 0, 0, 'name');
+ // Work around BC break in listShares() parameters (http://bugs.horde.org/ticket/7820)
+ include_once $GLOBALS['registry']->get('fileroot', 'horde') . '/lib/version.php';
+ if (version_compare(HORDE_VERSION, '3.2', '<')) {
+ $notepads = $GLOBALS['mnemo_shares']->listShares(Auth::getAuth(), $permission, $owneronly ? Auth::getAuth() : null, DATATREE_ROOT, true, 0, 0, 'name');
+ } else {
+ $notepads = $GLOBALS['mnemo_shares']->listShares(Auth::getAuth(), $permission, $owneronly ? Auth::getAuth() : null, 0, 0, 'name');
+ }
if (is_a($notepads, 'PEAR_Error')) {
Horde::logMessage($notepads, __FILE__, __LINE__, PEAR_LOG_ERR);
$empty = array();
@@ -190,7 +196,7 @@ class Mnemo {
global $prefs;
$default_notepad = $prefs->getValue('default_notepad');
- $notepads = &Mnemo::listNotepads(false, $permission);
+ $notepads = Mnemo::listNotepads(false, $permission);
if (isset($notepads[$default_notepad])) {
return $default_notepad;
@@ -419,7 +425,7 @@ class Mnemo {
// Make sure all notepads exist now, to save on checking later.
$_temp = $GLOBALS['display_notepads'];
- $_all = &Mnemo::listNotepads();
+ $_all = Mnemo::listNotepads();
$GLOBALS['display_notepads'] = array();
foreach ($_temp as $id) {
if (isset($_all[$id])) {
@@ -428,7 +434,7 @@ class Mnemo {
}
if (count($GLOBALS['display_notepads']) == 0) {
- $lists = &Mnemo::listNotepads(true);
+ $lists = Mnemo::listNotepads(true);
if (!Auth::getAuth()) {
/* All notepads for guests. */
$GLOBALS['display_notepads'] = array_keys($lists);
diff --git a/lib/api.php b/lib/api.php
index 05c28c6..a2416c2 100644
--- a/lib/api.php
+++ b/lib/api.php
@@ -5,9 +5,9 @@
* This file defines Mnemo's external API interface. Other applications can
* interact with Mnemo through this API.
*
- * $Horde: mnemo/lib/api.php,v 1.53.2.29 2008/08/13 20:32:44 chuck Exp $
+ * $Horde: mnemo/lib/api.php,v 1.53.2.35 2009-09-04 10:38:37 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -41,18 +41,18 @@ $_services['list'] = array(
);
$_services['listBy'] = array(
- 'args' => array('action' => 'string', 'timestamp' => 'int'),
+ 'args' => array('action' => 'string', 'timestamp' => 'int', 'notepad' => 'string'),
'type' => '{urn:horde}stringArray'
);
$_services['getActionTimestamp'] = array(
- 'args' => array('uid' => 'string', 'timestamp' => 'int'),
+ 'args' => array('uid' => 'string', 'action' => 'string', 'notepad' => 'string'),
'type' => 'int',
);
$_services['import'] = array(
'args' => array('content' => 'string', 'contentType' => 'string'),
- 'type' => 'int'
+ 'type' => 'string'
);
$_services['export'] = array(
@@ -178,7 +178,7 @@ function _mnemo_removeUserData($user)
*
* @return array The notepads.
*/
-function &_mnemo_listNotepads($owneronly, $permission)
+function _mnemo_listNotepads($owneronly, $permission)
{
require_once dirname(__FILE__) . '/base.php';
@@ -504,20 +504,27 @@ function _mnemo_replace($uid, $content, $contentType)
return $storage->modify($memo['memo_id'], $storage->getMemoDescription($content), $content, null);
case 'text/x-vnote':
- require_once 'Horde/iCalendar.php';
+ if (!is_a($content, 'Horde_iCalendar_vnote')) {
+ require_once 'Horde/iCalendar.php';
+ $iCal = new Horde_iCalendar();
+ if (!$iCal->parsevCalendar($content)) {
+ return PEAR::raiseError(_("There was an error importing the iCalendar data."));
+ }
- // Create the new iCalendar container.
- $iCal = &new Horde_iCalendar();
- $iCal->setAttribute('PRODID', '-//The Horde Project//Mnemo //EN');
- $iCal->setAttribute('METHOD', 'PUBLISH');
+ $components = $iCal->getComponents();
+ switch (count($components)) {
+ case 0:
+ return PEAR::raiseError(_("No iCalendar data was found."));
- // Create a new vNote.
- $vNote = &Horde_iCalendar::newComponent('vnote', $iCal);
+ case 1:
+ $content = $components[0];
+ break;
- if (!$vNote->parsevCalendar($content)) {
- return PEAR::raiseError(_("There was an error importing the vNote data."));
+ default:
+ return PEAR::raiseError(_("Multiple iCalendar components found; only one vNote is supported."));
+ }
}
- $note = $storage->fromiCalendar($vNote);
+ $note = $storage->fromiCalendar($content);
return $storage->modify($memo['memo_id'], $note['desc'],
$note['body'],!empty($note['category']) ? $note['category'] : '');
diff --git a/lib/base.php b/lib/base.php
index 8044717..969b813 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -5,9 +5,12 @@
* This file brings in all of the dependencies that every Mnemo
* script will need and sets up objects that all scripts use.
*
- * $Horde: mnemo/lib/base.php,v 1.46.10.12 2008/01/02 16:50:49 chuck Exp $
+ * The following global variables are used:
+ * $no_compress - Controls whether the page should be compressed
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * $Horde: mnemo/lib/base.php,v 1.46.10.14 2009-08-12 22:28:13 jan Exp $
+ *
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -54,7 +57,9 @@ require_once 'Horde/Text/Filter.php';
require_once 'Horde/History.php';
// Start compression, if requested.
-Horde::compressOutput();
+if (!Util::nonInputVar('no_compress')) {
+ Horde::compressOutput();
+}
// Create a share instance.
require_once 'Horde/Share.php';
diff --git a/lib/prefs.php b/lib/prefs.php
index 0f0a939..c13dc88 100644
--- a/lib/prefs.php
+++ b/lib/prefs.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/lib/prefs.php,v 1.2.10.8 2008/01/02 11:32:27 jan Exp $
+ * $Horde: mnemo/lib/prefs.php,v 1.2.10.10 2009-01-13 15:47:33 chuck Exp $
*
- * Copyright 2002-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -18,7 +18,7 @@ function handle_notepadselect($updated)
$default_notepad = Util::getFormData('default_notepad');
if (!is_null($default_notepad)) {
- $notepads = &Mnemo::listNotepads();
+ $notepads = Mnemo::listNotepads();
if (is_array($notepads) && array_key_exists($default_notepad, $notepads)) {
$prefs->setValue('default_notepad', $default_notepad);
$updated = true;
diff --git a/lib/version.php b/lib/version.php
index 493a453..c736a16 100644
--- a/lib/version.php
+++ b/lib/version.php
@@ -1 +1 @@
-<?php define('MNEMO_VERSION', 'H3 (2.2.1)') ?>
+<?php define('MNEMO_VERSION', 'H3 (2.2.3)') ?>
diff --git a/list.php b/list.php
index c9902fa..d90a97c 100644
--- a/list.php
+++ b/list.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/list.php,v 1.35.8.10 2008/05/20 22:02:10 jan Exp $
+ * $Horde: mnemo/list.php,v 1.35.8.11 2009-01-06 15:24:57 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/locale/da_DK/LC_MESSAGES/mnemo.mo b/locale/da_DK/LC_MESSAGES/mnemo.mo
index fa739b4..8f84ce7 100644
Binary files a/locale/da_DK/LC_MESSAGES/mnemo.mo and b/locale/da_DK/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/da_DK/help.xml b/locale/da_DK/help.xml
index 2a4c014..7ab3431 100644
--- a/locale/da_DK/help.xml
+++ b/locale/da_DK/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Horde: mnemo/locale/da_DK/help.xml,v 1.2 2002/10/20 16:31:02 jan Exp $ -->
+<!-- $Horde: mnemo/locale/da_DK/help.xml,v 1.2 2002-10-20 16:31:02 jan Exp $ -->
<help>
<entry id="Overview" state="new">
<title>Overview</title>
diff --git a/locale/de_DE/LC_MESSAGES/mnemo.mo b/locale/de_DE/LC_MESSAGES/mnemo.mo
index 12e4568..9f87061 100644
Binary files a/locale/de_DE/LC_MESSAGES/mnemo.mo and b/locale/de_DE/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/de_DE/help.xml b/locale/de_DE/help.xml
index b7d2190..ec116c9 100644
--- a/locale/de_DE/help.xml
+++ b/locale/de_DE/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Horde: mnemo/locale/de_DE/help.xml,v 1.3 2004/12/03 02:03:16 jan Exp $ -->
+<!-- $Horde: mnemo/locale/de_DE/help.xml,v 1.3 2004-12-03 02:03:16 jan Exp $ -->
<help>
<entry id="Overview" md5="50ee76138fb08b04b029006053bbadbc" state="uptodate">
<title>Übersicht</title>
diff --git a/locale/en_US/help.xml b/locale/en_US/help.xml
index 6231d03..8e3198e 100644
--- a/locale/en_US/help.xml
+++ b/locale/en_US/help.xml
@@ -1,5 +1,5 @@
<?xml version='1.0'?>
-<!-- $Horde: mnemo/locale/en_US/help.xml,v 1.6 2004/11/30 22:25:43 jan Exp $ -->
+<!-- $Horde: mnemo/locale/en_US/help.xml,v 1.6 2004-11-30 22:25:43 jan Exp $ -->
<help>
<entry id="Overview">
diff --git a/locale/es_ES/LC_MESSAGES/mnemo.mo b/locale/es_ES/LC_MESSAGES/mnemo.mo
index 2601b62..005911f 100644
Binary files a/locale/es_ES/LC_MESSAGES/mnemo.mo and b/locale/es_ES/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/es_ES/help.xml b/locale/es_ES/help.xml
index 20842ea..f83f20c 100644
--- a/locale/es_ES/help.xml
+++ b/locale/es_ES/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Horde: mnemo/locale/es_ES/help.xml,v 1.1 2004/12/11 11:55:56 jan Exp $ -->
+<!-- $Horde: mnemo/locale/es_ES/help.xml,v 1.1 2004-12-11 11:55:56 jan Exp $ -->
<help>
<entry id="Overview" md5="50ee76138fb08b04b029006053bbadbc" state="uptodate">
diff --git a/locale/eu_ES/LC_MESSAGES/mnemo.mo b/locale/eu_ES/LC_MESSAGES/mnemo.mo
index 6c52606..359d98f 100644
Binary files a/locale/eu_ES/LC_MESSAGES/mnemo.mo and b/locale/eu_ES/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/eu_ES/help.xml b/locale/eu_ES/help.xml
index 67749ba..2af5b82 100644
--- a/locale/eu_ES/help.xml
+++ b/locale/eu_ES/help.xml
@@ -1,13 +1,13 @@
<?xml version="1.0"?>
-<!-- $Horde: mnemo/locale/eu_ES/help.xml,v 1.1.2.1 2008/07/17 21:09:26 jan Exp $ -->
+<!-- $Horde: mnemo/locale/eu_ES/help.xml,v 1.1.2.2 2009-11-18 14:05:06 jan Exp $ -->
<help>
<entry id="Overview" md5="50ee76138fb08b04b029006053bbadbc" state="uptodate">
- <title>Informazio orokorra</title>
- <heading>Sarrera</heading> <para><i>Oharrak</i> aplikazioaren bidez, ordenagailuak ohar itsaskorren antzeko funtzioa izan dezake. Oharrak sortu, aldatu, ezabatu eta inprima daitezke. Bilaketak ere egin ditzakezu oharretan informazioa topatzeko. Inporta eta esportatu ere egin daitezke.</para> <para>Benetako ohar itsaskorrak ez bezala, ordenagailuko oharrak beste pertsona batzuekin parteka daitezke kokaleku fisiko desberdinetan. Oharrak ohar-bloketan antola daitezke eta kategoria eslei diezaiekezu.</para></entry>
+ <title>Ikuspegi orokorra</title>
+ <heading>Sarrera</heading> <para><i>Oharrak</i> aplikazioaren bidez, ordenagailuak ohar itsaskorren antzeko funtzioa izan dezake. Oharrak sortu, aldatu, ezabatu eta inprima daitezke. Bilaketak ere egin ditzakezu oharretan informazioa topatzeko. Inporta eta esportatu ere egin daitezke.</para> <para>Benetako ohar itsaskorrak ez bezala, ordenagailuko oharrak beste pertsona batzuekin parteka daitezke kokaleku fisiko desberdinetan. Oharrak ohar-bloketan antola daitezke, eta kategoria eslei diezaiekezu.</para></entry>
<entry id="list-actions" md5="6d592f153bfb5c296de5dfebb428e1ba" state="uptodate">
- <title>Nire oharrak: Ekintzak</title>
+ <title>Nire oharrak: ekintzak</title>
<heading>Ekintzak</heading> <para><i>Ezabatu</i> aukerak oharra betiko ezabatuko du.</para> <para><i>Editatu</i> aukerarekin oharra alda daiteke.</para> <para><i>Itzuli ohar-blokera</i> aukerak ohar-ikuspegitik uneko oharra dagoen ohar-blokera eramango zaitu.</para></entry>
<entry id="menu-actions" md5="715a853d93cd3330e4d730b9112c8a82" state="uptodate">
diff --git a/locale/fi_FI/LC_MESSAGES/mnemo.mo b/locale/fi_FI/LC_MESSAGES/mnemo.mo
index 17612e4..b83da54 100644
Binary files a/locale/fi_FI/LC_MESSAGES/mnemo.mo and b/locale/fi_FI/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/fi_FI/help.xml b/locale/fi_FI/help.xml
index 8b33adf..9cf4daf 100644
--- a/locale/fi_FI/help.xml
+++ b/locale/fi_FI/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Horde: mnemo/locale/fi_FI/help.xml,v 1.4.12.5 2008/02/22 13:42:50 jan Exp $ -->
+<!-- $Horde: mnemo/locale/fi_FI/help.xml,v 1.4.12.5 2008-02-22 13:42:50 jan Exp $ -->
<help>
<entry id="Overview" md5="50ee76138fb08b04b029006053bbadbc" state="uptodate">
<title>Yleiskuva</title>
diff --git a/locale/fr_FR/LC_MESSAGES/mnemo.mo b/locale/fr_FR/LC_MESSAGES/mnemo.mo
index 5a871be..d8c90af 100644
Binary files a/locale/fr_FR/LC_MESSAGES/mnemo.mo and b/locale/fr_FR/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/hr_HR/LC_MESSAGES/mnemo.mo b/locale/hr_HR/LC_MESSAGES/mnemo.mo
new file mode 100644
index 0000000..4159b06
Binary files /dev/null and b/locale/hr_HR/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/hr_HR/help.xml b/locale/hr_HR/help.xml
new file mode 100644
index 0000000..7f8c4d8
--- /dev/null
+++ b/locale/hr_HR/help.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<help>
+
+<entry id="Overview" md5="50ee76138fb08b04b029006053bbadbc" state="uptodate">
+ <title>Pregled</title>
+ <heading>Uvod</heading>
+ <para>
+ <i>Bilješke</i> je aplikacija koja mogućava stvaranje računalnog ekvivalenta samoljepljivih listića. Bilješke je moguće stvarati, mijenjati, brisati i printati. Također je moguće pretraživanje sadržaja bilješki. Aplikacija podržava uvoz i izvoz bilješki koristeći standardizirane formate.
+ </para>
+ <para>
+ Za razliku od samoljepljivih listića, računalne bilješke možete dijeliti sa drugima. Bilješke mogu biti organizirane u bilježnice, te im se može pridružiti kategorija.
+ </para>
+</entry>
+
+<entry id="list-actions" md5="6d592f153bfb5c296de5dfebb428e1ba" state="uptodate">
+ <title>Popis bilješki: Akcije</title>
+ <heading>Akcije</heading>
+ <para>
+ <i>Obriši bilješku</i> trajno briše odabranu bilješku.
+ </para>
+ <para>
+ <i>Uredi bilješku</i> omogućava izmjenu postojeće bilješke.
+ </para>
+ <para>
+ <i>Natrag u bilježnicu</i> vraća na popis bilješki trenutno odabrane bilježnice.
+ </para>
+</entry>
+
+<entry id="menu-actions" md5="715a853d93cd3330e4d730b9112c8a82" state="uptodate">
+ <title>Stavke menija</title>
+ <heading>Stavke menija</heading>
+ <para>
+ <i>Popis bilješki</i> prikazuje sve bilješke trenutno odabrane bilježnice.
+ </para>
+ <para>
+ <i>Nova bilješka</i> dodaje novu bilješku u trenutno odabranu bilježnicu.
+ </para>
+ <para>
+ <i>Traži</i> pretražuje trenutno odabranu bilježnicu. Moguće je pretraživati po naslovu i tekstu bilješke.
+ </para>
+ <para>
+ <i>Uvoz/Izvoz</i> omogućava uvoz i izvoz bilješki u CSV i vNote formatu.
+ </para>
+ <para>
+ <i>Ispiši</i> ispisuje bilješku. Ikona <i>Ispiši</i> pojavljuje se u meniju samo kod pregleda bilješke.
+ </para>
+</entry>
+
+
+<entry id="sorting" md5="cca3b1d1c9ed0ec5ab385f82469ddc8f" state="uptodate">
+ <title>Sortiranje bilješki</title>
+ <heading>Sortiranje bilješki</heading>
+ <para>
+ Popis bilješki moguće je sortirati po bilo kojem stupcu klikom na naslov stupca. Prijelaz između uzlaznog i silaznog sortiranja postiže se klikom na strelicu u zaglavlju stupca.
+ </para>
+</entry>
+</help>
diff --git a/locale/hu_HU/help.xml b/locale/hu_HU/help.xml
index 0233dd2..e7f6d6d 100644
--- a/locale/hu_HU/help.xml
+++ b/locale/hu_HU/help.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="iso-8859-2"?>
-<!-- based on $Horde: mnemo/locale/hu_HU/help.xml,v 1.2.12.2 2007/12/20 14:18:02 jan Exp $ -->
+<!-- based on $Horde: mnemo/locale/hu_HU/help.xml,v 1.2.12.3 2009-01-06 15:24:59 jan Exp $ -->
<!-- Mnemo help file, Hungarian translation -->
-<!-- Copyright (C) 2004 Laszlo L. Tornoci -->
+<!-- Copyright 2004 Laszlo L. Tornoci -->
<!-- This file is distributed under the same license as the Mnemo package. -->
<!-- Latest versions: ftp://xenia.sote.hu/pub/linux/horde/ -->
diff --git a/locale/it_IT/LC_MESSAGES/mnemo.mo b/locale/it_IT/LC_MESSAGES/mnemo.mo
index a167180..bb4fc98 100644
Binary files a/locale/it_IT/LC_MESSAGES/mnemo.mo and b/locale/it_IT/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/it_IT/help.xml b/locale/it_IT/help.xml
index fb0e24c..763cb5c 100644
--- a/locale/it_IT/help.xml
+++ b/locale/it_IT/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Horde: mnemo/locale/it_IT/help.xml,v 1.3 2003/07/04 20:51:45 jan Exp $ -->
+<!-- $Horde: mnemo/locale/it_IT/help.xml,v 1.3 2003-07-04 20:51:45 jan Exp $ -->
<help>
<entry id="Overview" state="uptodate" md5="50ee76138fb08b04b029006053bbadbc">
<title>Overview</title>
diff --git a/locale/ja_JP/LC_MESSAGES/mnemo.mo b/locale/ja_JP/LC_MESSAGES/mnemo.mo
index 39abf88..038dbd4 100644
Binary files a/locale/ja_JP/LC_MESSAGES/mnemo.mo and b/locale/ja_JP/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/lv_LV/help.xml b/locale/lv_LV/help.xml
index 9fc438f..48812e0 100644
--- a/locale/lv_LV/help.xml
+++ b/locale/lv_LV/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Horde: mnemo/locale/lv_LV/help.xml,v 1.2 2004/11/24 15:28:29 jan Exp $ -->
+<!-- $Horde: mnemo/locale/lv_LV/help.xml,v 1.2 2004-11-24 15:28:29 jan Exp $ -->
<help>
<entry id="Overview" md5="16d3b188ccff84364f6f1514de6655b0" state="uptodate">
diff --git a/locale/nl_NL/LC_MESSAGES/mnemo.mo b/locale/nl_NL/LC_MESSAGES/mnemo.mo
index 8f2f39f..3781d0a 100644
Binary files a/locale/nl_NL/LC_MESSAGES/mnemo.mo and b/locale/nl_NL/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/pt_BR/LC_MESSAGES/mnemo.mo b/locale/pt_BR/LC_MESSAGES/mnemo.mo
index 713c409..10d7302 100644
Binary files a/locale/pt_BR/LC_MESSAGES/mnemo.mo and b/locale/pt_BR/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/ru_RU/LC_MESSAGES/mnemo.mo b/locale/ru_RU/LC_MESSAGES/mnemo.mo
index 402a8eb..ae8212e 100644
Binary files a/locale/ru_RU/LC_MESSAGES/mnemo.mo and b/locale/ru_RU/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/sk_SK/LC_MESSAGES/mnemo.mo b/locale/sk_SK/LC_MESSAGES/mnemo.mo
index 9a4d70c..5556457 100644
Binary files a/locale/sk_SK/LC_MESSAGES/mnemo.mo and b/locale/sk_SK/LC_MESSAGES/mnemo.mo differ
diff --git a/locale/sk_SK/help.xml b/locale/sk_SK/help.xml
index c6ed631..52470b8 100644
--- a/locale/sk_SK/help.xml
+++ b/locale/sk_SK/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-2"?>
-<!-- $Horde: mnemo/locale/sk_SK/help.xml,v 1.2.12.2 2007/12/20 14:18:13 jan Exp $ -->
+<!-- $Horde: mnemo/locale/sk_SK/help.xml,v 1.2.12.2 2007-12-20 14:18:13 jan Exp $ -->
<!-- (C) 2002, Ivan Noris, <vix at vazka.sk> -->
<help>
diff --git a/locale/tr_TR/help.xml b/locale/tr_TR/help.xml
index ca0e9a2..108661e 100644
--- a/locale/tr_TR/help.xml
+++ b/locale/tr_TR/help.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-9"?>
-<!-- $Horde: mnemo/locale/tr_TR/help.xml,v 1.1.2.2 2007/12/20 14:18:17 jan Exp $ -->
+<!-- $Horde: mnemo/locale/tr_TR/help.xml,v 1.1.2.2 2007-12-20 14:18:17 jan Exp $ -->
<help>
<!-- English entry:
diff --git a/locale/zh_TW/LC_MESSAGES/mnemo.mo b/locale/zh_TW/LC_MESSAGES/mnemo.mo
index b24e1f7..2687491 100644
Binary files a/locale/zh_TW/LC_MESSAGES/mnemo.mo and b/locale/zh_TW/LC_MESSAGES/mnemo.mo differ
diff --git a/memo.php b/memo.php
index ff11fcc..49100d8 100644
--- a/memo.php
+++ b/memo.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/memo.php,v 1.42.2.11 2008/08/20 17:14:55 jan Exp $
+ * $Horde: mnemo/memo.php,v 1.42.2.14 2009-08-05 23:03:25 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -12,6 +12,44 @@
* @package Mnemo
*/
+ /**
+ * Encryption tests.
+ */
+function showPassphrase($memo, $storage)
+{
+ global $notification;
+
+ if (!is_a($memo['body'], 'PEAR_Error')) {
+ return false;
+ }
+
+ /* Check for secure connection. */
+ $secure_check = $storage->requireSecureConnection();
+ if ($memo['body']->getCode() == MNEMO_ERR_NO_PASSPHRASE) {
+ if (is_a($secure_check, 'PEAR_Error')) {
+ $notification->push(_("This note has been encrypted.") . ' ' . $secure_check->getMessage(), 'horde.error');
+ $memo['body'] = '';
+ return false;
+ }
+ $notification->push(_("This note has been encrypted, please provide the password below."), 'horde.message');
+ return true;
+ }
+ if ($memo['body']->getCode() == MNEMO_ERR_DECRYPT) {
+ if (is_a($secure_check, 'PEAR_Error')) {
+ $notification->push(_("This note has been encrypted.") . ' ' . $secure_check->getMessage(), 'horde.error');
+ $memo['body'] = '';
+ return false;
+ }
+ $notification->push(_("This note cannot be decrypted:") . ' ' . $memo['body']->getMessage(), 'horde.message');
+ return true;
+ }
+
+ $notification->push($memo['body'], 'horde.error');
+ $memo['body'] = '';
+
+ return false;
+}
+
@define('MNEMO_BASE', dirname(__FILE__));
require_once MNEMO_BASE . '/lib/base.php';
@@ -71,31 +109,7 @@ case 'modify_memo':
$storage = &Mnemo_Driver::singleton($memolist_id);
/* Encryption tests. */
- $show_passphrase = false;
- if (is_a($memo['body'], 'PEAR_Error')) {
- /* Check for secure connection. */
- $secure_check = $storage->requireSecureConnection();
- if ($memo['body']->getCode() == MNEMO_ERR_NO_PASSPHRASE) {
- if (is_a($secure_check, 'PEAR_Error')) {
- $notification->push(_("This note has been encrypted.") . ' ' . $secure_check->getMessage(), 'horde.error');
- $memo['body'] = '';
- } else {
- $notification->push(_("This note has been encrypted, please provide the password below."), 'horde.message');
- $show_passphrase = true;
- }
- } elseif ($memo['body']->getCode() == MNEMO_ERR_DECRYPT) {
- if (is_a($secure_check, 'PEAR_Error')) {
- $notification->push(_("This note has been encrypted.") . ' ' . $secure_check->getMessage(), 'horde.error');
- $memo['body'] = '';
- } else {
- $notification->push(_("This note cannot be decrypted:") . ' ' . $memo['body']->getMessage(), 'horde.message');
- $show_passphrase = true;
- }
- } else {
- $notification->push($memo['body'], 'horde.error');
- $memo['body'] = '';
- }
- }
+ $show_passphrase = showPassphrase($memo, $storage);
/* Set up the note attributes. */
$memo_body = $memo['body'];
@@ -109,20 +123,43 @@ case 'save_memo':
$memo_id = Util::getFormData('memo');
$memo_body = Util::getFormData('memo_body');
$memo_category = Util::getFormData('memo_category');
- $memo_passphrase = Util::getFormData('memo_passphrase', Mnemo::getPassphrase($memo_id));
$memolist_original = Util::getFormData('memolist_original');
$notepad_target = Util::getFormData('notepad_target');
+ $memo_passphrase = Util::getFormData('memo_passphrase');
+ $memo_passphrase2 = Util::getFormData('memo_passphrase2');
$share = &$GLOBALS['mnemo_shares']->getShare($notepad_target);
if (is_a($share, 'PEAR_Error')) {
$notification->push(sprintf(_("Access denied saving note: %s"), $share->getMessage()), 'horde.error');
} elseif (!$share->hasPermission(Auth::getAuth(), PERMS_EDIT)) {
$notification->push(sprintf(_("Access denied saving note to %s."), $share->get('name')), 'horde.error');
- } else {
+ } elseif ($memo_passphrase != $memo_passphrase2) {
+ $notification->push(_("The passwords don't match."), 'horde.error');
+ $storage = &Mnemo_Driver::singleton($memolist_original);
+ if (empty($memo_id)) {
+ $title = _("New Note");
+ } else {
+ $actionID = 'modify_memo';
+ $memo = Mnemo::getMemo($memolist_original, $memo_id);
+ if (!$memo || !isset($memo['memo_id'])) {
+ $notification->push(_("Note not found."), 'horde.error');
+ header('Location: ' . Horde::applicationUrl('list.php', true));
+ exit;
+ }
+ $title = sprintf(_("Edit: %s"), $memo['desc']);
+ $show_passphrase = showPassphrase($memo, $storage);
+ $memo_encrypted = $memo['encrypted'];
+ $memolist_id = $memolist_original;
+ }
+ break;
+ } else {
if ($new_category = Util::getFormData('new_category')) {
$new_category = $cManager->add($new_category);
$memo_category = $new_category ? $new_category : '';
}
+ if (!strlen($memo_passphrase)) {
+ $memo_passphrase = Mnemo::getPassphrase($memo_id);
+ }
/* If $memo_id is set, we're modifying an existing note. Otherwise,
* we're adding a new note with the provided attributes. */
@@ -210,7 +247,7 @@ default:
exit;
}
-$notepads = &Mnemo::listNotepads(false, PERMS_EDIT);
+$notepads = Mnemo::listNotepads(false, PERMS_EDIT);
require MNEMO_TEMPLATES . '/common-header.inc';
require MNEMO_TEMPLATES . '/menu.inc';
require MNEMO_TEMPLATES . '/memo/memo.inc';
diff --git a/note/pdf.php b/note/pdf.php
index b444aeb..7721d59 100644
--- a/note/pdf.php
+++ b/note/pdf.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/note/pdf.php,v 1.4.2.2 2008/01/02 11:32:28 jan Exp $
+ * $Horde: mnemo/note/pdf.php,v 1.4.2.3 2009-01-06 15:25:00 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/notepads/create.php b/notepads/create.php
index f0f2762..254c075 100644
--- a/notepads/create.php
+++ b/notepads/create.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/notepads/create.php,v 1.1.2.2 2008/01/02 11:32:28 jan Exp $
+ * $Horde: mnemo/notepads/create.php,v 1.1.2.3 2009-01-06 15:25:00 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/notepads/delete.php b/notepads/delete.php
index 33a0fe8..5845e61 100644
--- a/notepads/delete.php
+++ b/notepads/delete.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/notepads/delete.php,v 1.4.2.2 2008/01/02 11:32:28 jan Exp $
+ * $Horde: mnemo/notepads/delete.php,v 1.4.2.3 2009-01-06 15:25:00 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/notepads/edit.php b/notepads/edit.php
index 8a92528..2929d12 100644
--- a/notepads/edit.php
+++ b/notepads/edit.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/notepads/edit.php,v 1.2.2.2 2008/01/02 11:32:28 jan Exp $
+ * $Horde: mnemo/notepads/edit.php,v 1.2.2.3 2009-01-06 15:25:00 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/notepads/index.php b/notepads/index.php
index 07a7118..4610d05 100644
--- a/notepads/index.php
+++ b/notepads/index.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/notepads/index.php,v 1.1.2.2 2008/01/02 11:32:28 jan Exp $
+ * $Horde: mnemo/notepads/index.php,v 1.1.2.3 2009-01-06 15:25:00 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/notes/index.php b/notes/index.php
new file mode 100644
index 0000000..bc9c10b
--- /dev/null
+++ b/notes/index.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * $Horde: mnemo/notes/index.php,v 1.1.2.2 2009-01-06 15:25:00 jan Exp $
+ *
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ */
+
+require_once dirname(__FILE__) . '/../lib/base.php';
+
+$search = Util::getGet('q');
+if (!$search) {
+ header('HTTP/1.0 204 No Content');
+ exit;
+}
+
+$memos = Mnemo::listMemos($prefs->getValue('sortby'), $prefs->getValue('sortdir'));
+
+$search_pattern = '/^' . preg_quote($search, '/') . '/i';
+$search_results = array();
+foreach ($memos as $memo_id => $memo) {
+ if (preg_match($search_pattern, $memo['desc'])) {
+ $search_results[$memo_id] = $memo;
+ }
+}
+
+if (count($search_results) == 1) {
+ $note = array_shift($search_results);
+ header('Location: ' . Horde::applicationUrl(Util::addParameter('view.php', array('memo' => $note['memo_id'], 'memolist' => $note['memolist_id'])), true));
+ exit;
+}
+
+$title = _("Search Results");
+$memos = $search_results;
+
+Horde::addScriptFile('tooltip.js', 'horde', true);
+Horde::addScriptFile('tables.js', 'horde', true);
+Horde::addScriptFile('prototype.js', 'horde', true);
+Horde::addScriptFile('QuickFinder.js', 'horde', true);
+
+require MNEMO_TEMPLATES . '/common-header.inc';
+require MNEMO_TEMPLATES . '/menu.inc';
+require MNEMO_TEMPLATES . '/list/header.inc';
+
+if (count($memos)) {
+ require_once 'Horde/Prefs/CategoryManager.php';
+ $cManager = new Prefs_CategoryManager();
+ $colors = $cManager->colors();
+ $fgcolors = $cManager->fgColors();
+ $sortby = $prefs->getValue('sortby');
+ $sortdir = $prefs->getValue('sortdir');
+ $showNotepad = $prefs->getValue('show_notepad');
+
+ $baseurl = 'list.php';
+ require MNEMO_TEMPLATES . '/list/memo_headers.inc';
+
+ foreach ($memos as $memo_id => $memo) {
+ $viewurl = Util::addParameter(
+ 'view.php',
+ array('memo' => $memo['memo_id'],
+ 'memolist' => $memo['memolist_id']));
+
+ $memourl = Util::addParameter(
+ 'memo.php', array('memo' => $memo['memo_id'],
+ 'memolist' => $memo['memolist_id']));
+ $share = &$GLOBALS['mnemo_shares']->getShare($memo['memolist_id']);
+
+ $notepad = $memo['memolist_id'];
+ if (!is_a($share, 'PEAR_Error')) {
+ $notepad = $share->get('name');
+ }
+
+ require MNEMO_TEMPLATES . '/list/memo_summaries.inc';
+ }
+
+ require MNEMO_TEMPLATES . '/list/memo_footers.inc';
+} else {
+ require MNEMO_TEMPLATES . '/list/empty.inc';
+}
+
+require MNEMO_TEMPLATES . '/panel.inc';
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/po/bg_BG.po b/po/bg_BG.po
index e63568b..b8202dc 100644
--- a/po/bg_BG.po
+++ b/po/bg_BG.po
@@ -1,5 +1,5 @@
# Bulgarian translations for Mnemo package.
-# Copyright (C) 2002 Horde Project
+# Copyright 2002-2009 The Horde Project
# This file is distributed under the same license as the Whups package.
# Miroslav Pendev <miro at cybershade.us>, 2002.
#
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 85d99ac..13d9423 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -1,5 +1,5 @@
# Mnemo Czech translations.
-# Copyright (C) 2004 Horde Project
+# Copyright 2004-2009 The Horde Project
# This file is distributed under the same license as the Horde package.
# Pavel Chytil <pavel at chytil.tk>, 2004.
#
diff --git a/po/da_DK.po b/po/da_DK.po
index 4959bfe..f8a1cd6 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -3,168 +3,163 @@
# Copyright (C) 2006 Horde Project
# This file is distributed under the same license as the Mnemo package.
# Brian Truelsen <horde+i18n at briantruelsen.dk>, 2006.
+# Niels Baggesen <nba at users.sourceforge.net>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: Mnemo H3 (2.2-cvs)\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-03-05 18:16+0100\n"
-"PO-Revision-Date: 2006-03-06 22:12+0100\n"
-"Last-Translator: Brian Truelsen <horde+i18n at briantruelsen.dk>\n"
+"POT-Creation-Date: 2009-04-17 07:16+0200\n"
+"PO-Revision-Date: 2009-04-26 22:12+0100\n"
+"Last-Translator: Niels Baggesen <nba at users.sourceforge.net>\n"
"Language-Team: i18n at lists.horde.org\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/list/header.inc:3
-#, php-format
-msgid "%d notes"
-msgstr "%d noter"
-
-#: templates/memo/memo.inc:26
+#: templates/memo/memo.inc:53
#, php-format
msgid "%s characters"
msgstr "%s tegn"
-#: data.php:187
+#: data.php:200
#, php-format
msgid "%s file successfully imported"
msgstr "%s-fil importeret"
-#: notepads.php:99 lib/base.php:104
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "%ss notesblok"
-#: templates/list/header.inc:3
-msgid "1 note"
-msgstr "1 note"
-
-#: memo.php:162
+#: memo.php:200
msgid "Access denied deleting note."
msgstr "Adgang nægtet ved sletning af note."
-#: memo.php:112 memo.php:115
+#: memo.php:143 memo.php:146
msgid "Access denied moving the note."
msgstr "Adgang nægtet ved flytning af note."
-#: memo.php:84
+#: memo.php:120
#, php-format
msgid "Access denied saving note to %s."
msgstr "Adgang nægtet ved lagring af note til %s."
-#: memo.php:82
+#: memo.php:118
#, php-format
msgid "Access denied saving note: %s"
msgstr "Adgang nægtet ved lagring af note: %s"
-#: templates/prefs/showsummaryselect.inc:103
-msgid "Add category"
-msgstr "Tilføj kategori"
-
-#: memo.php:52
-msgid "Adding A New Note"
-msgstr "Tilføj en ny note"
-
-#: config/prefs.php.dist:51
+#: config/prefs.php.dist:70
msgid "Ascending"
msgstr "Stigende"
-#: templates/prefs/showsummaryselect.inc:99
-msgid "Available Categories:"
-msgstr "Tilgængelige kategorier:"
-
-#: templates/view/memo.inc:18
-msgid "Back to Notepad"
-msgstr "Tilbage til notesblok"
-
-#: templates/notepads/notepads.inc:97
-msgid "Back to Notepad Options"
-msgstr "Tilbage til notesblok-tilvalg"
-
-#: data.php:32 templates/data/import.inc:17
+#: data.php:32 templates/data/import.inc:11
msgid "CSV"
msgstr "CSV"
+#: lib/Forms/DeleteNotepad.php:45 lib/Forms/DeleteNotepad.php:51
+msgid "Cancel"
+msgstr "Annuller"
+
#: data.php:54 templates/view/memo.inc:26
msgid "Category"
msgstr "Kategori"
-#: templates/notepads/notepads.inc:22
-msgid "Change"
-msgstr "Ændre"
+#: templates/notepad_list.php:29 notepads/index.php:32
+msgid "Change Permissions"
+msgstr "Ret rettigheder"
-#: config/prefs.php.dist:15
+#: config/prefs.php.dist:14
msgid "Change your note sorting and display options."
msgstr "Redigér måden, hvorpå dine noter sorteres og vises."
-#: templates/prefs/showsummaryselect.inc:93
-msgid "Choose the memo categories to list in the summary view."
-msgstr "Vælg de notat-kategorier, som skal listes i oversigtsvisning."
-
-#: config/prefs.php.dist:22
+#: config/prefs.php.dist:21
msgid "Choose your default Notepad."
msgstr "Vælg din standard notesblok."
-#: templates/search/search.inc:32
-msgid "Clear Form"
-msgstr "Slet formular"
+#: templates/list/header.inc:8
+msgid "Close Search"
+msgstr "Afslut søgning"
-#: templates/notepads/notepads.inc:17 templates/notepads/notepads.inc:94
-#: templates/notepads/notepads.inc:96
+#: lib/Forms/CreateNotepad.php:39
msgid "Create"
msgstr "Opret"
+#: lib/Forms/CreateNotepad.php:34
+msgid "Create Notepad"
+msgstr "Opret notesblok"
+
+#: templates/notepad_list.php:9
+msgid "Create a new Notepad"
+msgstr "Opret en ny notesblok"
+
#: templates/view/memo.inc:32
msgid "Created"
msgstr "Oprettet"
-#: config/prefs.php.dist:21
+#: templates/view/memo.inc:54 templates/memo/memo.inc:23
+msgid "Decrypt"
+msgstr "Dekrypter:"
+
+#: config/prefs.php.dist:20
msgid "Default Notepad"
msgstr "Standard notesblok"
-#: config/prefs.php.dist:42
+#: config/prefs.php.dist:61
msgid "Default sorting criteria:"
msgstr "Standard sorteringskriterie:"
-#: config/prefs.php.dist:53
+#: config/prefs.php.dist:72
msgid "Default sorting direction:"
msgstr "Standard sorteringsretning:"
-#: templates/view/memo.inc:15 templates/notepads/notepads.inc:95
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
+#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
msgid "Delete"
msgstr "Slet"
-#: config/prefs.php.dist:28
+#: lib/Forms/DeleteNotepad.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "Slet %s"
+
+#: config/prefs.php.dist:27
msgid "Delete Confirmation"
msgstr "Godkend sletning"
-#: config/prefs.php.dist:29
+#: config/prefs.php.dist:28
msgid "Delete button behaviour"
msgstr "Opførsel af slette-knap"
-#: templates/memo/memo.inc:67
+#: templates/memo/memo.inc:11
msgid "Delete this note"
msgstr "Slet denne note"
-#: config/prefs.php.dist:52
+#: config/prefs.php.dist:71
msgid "Descending"
msgstr "Faldende"
-#: templates/notepads/notepads.inc:85
-msgid "Description:"
-msgstr "Beskrivelse:"
+#: lib/Forms/CreateNotepad.php:37 lib/Forms/EditNotepad.php:44
+msgid "Description"
+msgstr "Beskrivelse"
-#: config/prefs.php.dist:14
+#: lib/Driver/kolab.php:556
+#, php-format
+msgid "Did not find note %s"
+msgstr "Fandt ikke note %s"
+
+#: config/prefs.php.dist:13
msgid "Display Options"
msgstr "Indstillinger for visning"
-#: config/prefs.php.dist:98
+#: config/prefs.php.dist:117
msgid "Do you want to confirm deleting entries?"
msgstr "Vil du godkende sletning af poster?"
-#: templates/view/memo.inc:11
+#: templates/notepad_list.php:27 templates/view/memo.inc:13
+#: notepads/index.php:31
msgid "Edit"
msgstr "Rediger"
@@ -173,48 +168,71 @@ msgstr "Rediger"
msgid "Edit \"%s\""
msgstr "Redigér \"%s\""
-#: templates/list/memo_headers.inc:42 lib/Block/summary.php:77
+#: lib/Forms/EditNotepad.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "Ret %s"
+
+#: templates/list/memo_headers.inc:30 lib/Block/summary.php:79
+#: lib/Block/summary.php:80
msgid "Edit Note"
msgstr "Redigér note"
-#: templates/list/memo_headers.inc:52
+#: templates/list/memo_headers.inc:45
msgid "Edit categories and colors"
msgstr "Redigér kategorier og farver"
-#: templates/list/memo_summaries.inc:12
+#: memo.php:104
+#, php-format
+msgid "Edit: %s"
+msgstr "Ret: %s"
+
+#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:104
msgid "Empty Note"
msgstr "Tøm note"
-#: templates/data/export.inc:19
+#: lib/Driver.php:118
+msgid ""
+"Encryption support has not been configured, please contact your "
+"administrator."
+msgstr ""
+"Kryptering er ikke understøttet af den nuværende opsætning. Kontakt din "
+"administrator."
+
+#: templates/data/export.inc:16
msgid "Export"
msgstr "Eksportér"
-#: templates/data/export.inc:8
+#: templates/data/export.inc:2
msgid "Export Notes"
msgstr "Eksportér noter"
-#: templates/search/search.inc:21
-msgid "F_ull Text"
-msgstr "Fuld text"
-
-#: config/prefs.php.dist:13 config/prefs.php.dist:20 config/prefs.php.dist:27
+#: config/prefs.php.dist:12 config/prefs.php.dist:19 config/prefs.php.dist:26
msgid "General Options"
msgstr "Grundlæggende indstillinger"
-#: templates/data/import.inc:8
+#: templates/data/import.inc:1
#, php-format
msgid "Import Notes, Step %d"
msgstr "Importér noter, trin %d"
-#: data.php:193
+#: data.php:206
msgid "Import/Export Notes"
msgstr "Importér/eksportér noter"
+#: templates/search/search.inc:17
+msgid "In: "
+msgstr "I: "
+
#: templates/view/memo.inc:39
msgid "Last Modified"
msgstr "Sidst ændret"
-#: lib/api.php:76
+#: templates/notepad_list.php:2 notepads/index.php:37
+msgid "Manage Notepads"
+msgstr "Mine notesblokke"
+
+#: lib/api.php:82
msgid "Maximum Number of Notes"
msgstr "Maksimalt antal noter"
@@ -222,237 +240,272 @@ msgstr "Maksimalt antal noter"
msgid "Memo Text"
msgstr "Teksten af huskeseddel"
-#: memo.php:68
-#, php-format
-msgid "Modifying %s"
-msgstr "Ændrer %s"
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menuliste"
+
+#: templates/list/header.inc:9
+msgid "More Options..."
+msgstr "Flere valg..."
+
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr ""
+"Multiple iCalendar komponenter fundet; der er kun understøttelse for én "
+"vNote."
+
+#: templates/panel.inc:50
+msgid "My Notepads:"
+msgstr "Mine notesblokke:"
-#: list.php:35
+#: list.php:31
msgid "My Notes"
msgstr "Mine noter"
-#: lib/Block/summary.php:22
+#: lib/Forms/CreateNotepad.php:36 lib/Forms/EditNotepad.php:43
+msgid "Name"
+msgstr "Navn"
+
+#: memo.php:57 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr "Ny note"
-#: templates/data/import.inc:40
+#: templates/data/import.inc:34
msgid "Next"
msgstr "Næste"
-#: lib/api.php:230
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr "Ingen iCalendar-data fundet."
-#: templates/menu.inc:7
-msgid "No notepads are available to guests."
-msgstr "Der er ingen notesblokke tilgængelige til gæster."
-
-#: templates/list/header.inc:3
-msgid "No notes"
-msgstr "Ingen noter"
+#: templates/list/memo_footers.inc:4
+msgid "No notes match"
+msgstr "Ingen noter passer"
-#: templates/list/empty.inc:3
+#: templates/list/empty.inc:1
msgid "No notes match the current criteria."
msgstr "Ingen noter passer til de aktuelle kriterier."
-#: lib/Block/summary.php:103
+#: lib/Block/summary.php:112
msgid "No notes to display"
msgstr "Ingen noter at vise."
-#: templates/list/memo_headers.inc:44
+#: templates/list/memo_headers.inc:37
msgid "No_te"
msgstr "Note"
-#: config/prefs.php.dist:41
+#: lib/Driver/sql.php:198
+msgid "Not found"
+msgstr "Ikke fundet"
+
+#: config/prefs.php.dist:59
msgid "Note Category"
msgstr "Note-kategori"
-#: view.php:82 templates/view/memo.inc:21
+#: view.php:121
msgid "Note Details"
msgstr "Note-detaljer"
-#: notepads.php:110
-msgid "Note Lists"
-msgstr "Note-lister"
-
-#: templates/view/memo.inc:45 config/prefs.php.dist:40
+#: config/prefs.php.dist:58
msgid "Note Text"
msgstr "Notestekst"
-#: templates/memo/memo.inc:26
+#: templates/memo/memo.inc:53
msgid "Note _Text"
msgstr "Notestekst"
-#: memo.php:60 view.php:57
+#: memo.php:67 view.php:56 note/pdf.php:57
msgid "Note not found."
msgstr "Note ikke fundet."
-#: templates/memo/memo.inc:34
+#: templates/memo/memo.inc:60
msgid "Note_pad"
msgstr "Notesblok"
-#: templates/notepads/notepads.inc:79
-msgid "Notepad's name:"
-msgstr "Navn på notesblok:"
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
+#: config/prefs.php.dist:60
+msgid "Notepad"
+msgstr "Notesblok"
+
+#: templates/notepad_list.php:14
+msgid "Notepad List"
+msgstr "Note-lister"
-#: templates/notepads/notepads.inc:61
+#: templates/panel.inc:32 templates/panel.inc:33
msgid "Notepads"
msgstr "Notesblokke"
-#: notepads.php:33
-msgid "Notepads must have a name."
-msgstr "Notesblokke skal være navngivne."
-
#: lib/Block/summary.php:3
msgid "Notes Summary"
msgstr "Opsummering over noter"
-#: lib/api.php:207 lib/api.php:303 lib/api.php:379 lib/api.php:408
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "Tilladelse nægtet"
-#: templates/notepads/notepads.inc:82
-msgid "Permissions"
-msgstr "Tilladelser"
+#: lib/Forms/DeleteNotepad.php:56
+msgid "Permission denied"
+msgstr "Tilladelse nægtet"
+
+#: lib/Forms/DeleteNotepad.php:43
+#, php-format
+msgid ""
+"Really delete the notepad \"%s\"? This cannot be undone and all data on this "
+"notepad will be permanently removed."
+msgstr ""
+"Vil du virkelig slette notesblokken \"%s\"? Dette kan ikke fortrydes og alle "
+"notesblokkens data vil gå tabt."
-#: templates/view/memo.inc:15
+#: templates/view/memo.inc:16
msgid "Really delete this note?"
msgstr "Slet denne note uigenkaldeligt?"
-#: templates/list/header.inc:5 templates/list/header.inc:6
-msgid "Refresh List"
-msgstr "Opdater liste"
-
-#: templates/prefs/showsummaryselect.inc:105
-msgid "Remove category"
-msgstr "Fjern kategori"
-
-#: templates/notepads/notepads.inc:96
-msgid "Reset"
-msgstr "Nulstil"
-
-#: templates/memo/memo.inc:56
+#: templates/panel.inc:68 templates/memo/memo.inc:58
+#: lib/Forms/EditNotepad.php:46
msgid "Save"
msgstr "Gem"
-#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:31
+#: templates/view/memo.inc:11
+msgid "Save as PDF"
+msgstr "Gem som PDF"
+
+#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:27
+#: templates/list/header.inc:4 lib/Block/tree_menu.php:44
msgid "Search"
msgstr "Søg"
-#: list.php:57
+#: list.php:54 notes/index.php:35
msgid "Search Results"
msgstr "Resultat for søgning"
-#: templates/search/search.inc:17
-msgid "Search Scope"
-msgstr "Medtag i søgning"
-
-#: templates/search/search.inc:9
-msgid "Search _Text"
-msgstr "Søg tekst"
-
-#: templates/notepads/notepads.inc:67
-msgid "Select a notepad"
-msgstr "Vælg en notesblok"
+#: templates/panel.inc:38
+msgid "Search for Notepads:"
+msgstr "Søg efter notesblokke:"
-#: templates/menu.inc:16
-msgid "Select notepads to display:"
-msgstr "Vælg de notesblokke, der skal vises:"
-
-#: templates/data/export.inc:15
+#: templates/data/export.inc:9
msgid "Select the export format:"
msgstr "Vælg formatet, der skal eksporteres i:"
-#: templates/data/import.inc:37
+#: templates/data/import.inc:31
msgid "Select the file to import:"
msgstr "Vælg den fil, der skal importeres:"
-#: templates/data/import.inc:15
+#: templates/data/import.inc:9
msgid "Select the format of the source file:"
msgstr "Vælg formatet af oprindelsesfilen:"
-#: templates/prefs/showsummaryselect.inc:109
-msgid "Selected Categories:"
-msgstr "Valgte kategorier:"
+#: templates/panel.inc:59
+msgid "Shared Notepads:"
+msgstr "Delte notesblokke"
+
+#: config/prefs.php.dist:39
+msgid "Should the Notepad be shown in its own column in the List view?"
+msgstr "Skal notesblokken vises i sin egen kolonne i liste-visning?"
-#: lib/Block/summary.php:37
+#: lib/Block/summary.php:35
msgid "Show action buttons?"
msgstr "Vis handlingsknapper?"
-#: lib/Block/summary.php:40
+#: lib/Block/summary.php:39
msgid "Show notepad name?"
msgstr "Vis navnet på notesblok?"
+#: config/prefs.php.dist:49
+msgid "Show notepad options panel?"
+msgstr "Vis notesblok indstillinger?"
+
#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "Vis noter fra disse kategorier"
-#: templates/list/memo_headers.inc:48
+#: templates/list/memo_headers.inc:41
msgid "Sort by Category"
msgstr "Sorter efter kategori"
-#: templates/list/memo_headers.inc:44
+#: templates/list/memo_headers.inc:37
msgid "Sort by Note Text"
msgstr "Sortér efter notetekst"
-#: memo.php:135
+#: templates/list/memo_headers.inc:33
+msgid "Sort by Notepad"
+msgstr "Sorter efter notesblok"
+
+#: memo.php:174
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "\"%s\" lagret."
-#: memo.php:159
-msgid "The note was deleted."
-msgstr "Noten er slettet."
+#: data.php:194
+#, php-format
+msgid "The %s file didn't contain any notes."
+msgstr "Filen %s indeholdt ingen noter."
-#: notepads.php:46
+#: lib/Driver.php:53
+msgid "The Notes backend is not currently available."
+msgstr "Note-backenden er ikke tilgængelig."
+
+#: lib/Driver.php:227
#, php-format
-msgid "The notepad \"%s\" couldn't be created: %s"
-msgstr "Notesblok \"%s\" kunne ikke oprettes: %s"
+msgid "The Notes backend is not currently available: %s"
+msgstr "Note-backenden er ikke tilgængelig: %s"
-#: notepads.php:48
+#: memo.php:197
+msgid "The note was deleted."
+msgstr "Noten er slettet."
+
+#: notepads/create.php:31
#, php-format
msgid "The notepad \"%s\" has been created."
msgstr "Notesblokken \"%s\" er oprettet."
-#: notepads.php:85
+#: notepads/delete.php:48
#, php-format
msgid "The notepad \"%s\" has been deleted."
msgstr "Notesblokken \"%s\" er slettet."
-#: notepads.php:56
+#: notepads/edit.php:42
+#, php-format
+msgid "The notepad \"%s\" has been renamed to \"%s\"."
+msgstr "Notesblokken \"%s\" er omdøbt til \"%s\"."
+
+#: notepads/edit.php:44
#, php-format
msgid "The notepad \"%s\" has been saved."
msgstr "Notesblokken \"%s\" er lagret."
-#: data.php:184
+#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr "Der opstod en fejl under importeringen af data: %s"
-#: lib/api.php:224
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr "Der opstod en fejl under importeringen af iCalendar data."
-#: lib/api.php:427
-msgid "There was an error importing the vNote data."
-msgstr "Der opstod en fejl under importering af vNote-data."
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr ""
+"Der opstod en fejl under sletning af noterne for %s. Detaljerne er blevet "
+"logget."
-#: memo.php:157
+#: memo.php:195
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Der opstod en fejl under sletning af noten: %s"
-#: memo.php:133
+#: memo.php:172
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Der opstod en fejl under lagring af noten: %s"
-#: view.php:46
+#: view.php:45 note/pdf.php:46
#, php-format
msgid "There was an error viewing this notepad: %s"
msgstr "Der opstod en fejl under læsning af denne notesblok: %s"
-#: data.php:79
+#: data.php:78
msgid "There were no memos to export."
msgstr "Der var ingen noter at eksportere."
@@ -460,101 +513,154 @@ msgstr "Der var ingen noter at eksportere."
msgid "This file format is not supported."
msgstr "Dette filformat er ikke understøttet."
-#: notepads.php:80
+#: memo.php:91 view.php:111
+msgid "This note cannot be decrypted:"
+msgstr "Denne note kan ikke dekrypteres:"
+
+#: memo.php:83 view.php:103
+msgid "This note has been encrypted, please provide the password below."
+msgstr "Denne note er blevet krypteret. Skriv kodeordet nedenfor."
+
+#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:461
+msgid "This note has been encrypted."
+msgstr "Noten er krypteret."
+
+#: notepads/delete.php:24
+msgid "This notepad cannot be deleted"
+msgstr "Denne notesblok kan ikke slettes."
+
+#: lib/Forms/DeleteNotepad.php:63
#, php-format
msgid "Unable to delete \"%s\": %s"
msgstr "Kan ikke slette \"%s\": %s"
-#: templates/memo/memo.inc:58
-msgid "Undo changes"
-msgstr "Fortryd ændringer"
+#: lib/Driver.php:230
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Kan ikke indlæse definitionen af %s."
+
+#: lib/Forms/EditNotepad.php:55
+#, php-format
+msgid "Unable to save notepad \"%s\": %s"
+msgstr "Kan ikke gemme notesblok \"%s\": %s"
-#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:14
-#: scripts/upgrades/2004-05-19_convert_categories_to_strings.php:49
-#: lib/Mnemo.php:206 lib/Mnemo.php:207 lib/Mnemo.php:221 lib/Mnemo.php:222
-#: lib/Block/summary.php:98
+#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
+#: lib/Block/summary.php:107
msgid "Unfiled"
msgstr "Ikke anbragt"
-#: lib/api.php:260 lib/api.php:343 lib/api.php:435
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Ikke-understøttet Content-Type: %s"
-#: templates/data/import.inc:22
+#: templates/data/import.inc:16
msgid "Which Notepad should the notes be added to?"
msgstr "Hvilken notesblok skal noterne føjes til?"
-#: data.php:42 data.php:125 memo.php:35
+#: notepads/edit.php:28
+msgid "You are not allowed to change this notepad."
+msgstr "Du har ikke tilladelse til at ændre denne notesblok."
+
+#: data.php:42 data.php:129 memo.php:37
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr "Du har ikke tilladelse til at oprette flere end %d noter."
-#: view.php:50
+#: notepads/delete.php:35
+msgid "You are not allowed to delete this notepad."
+msgstr "Du har ikke tilladelse til at slette denne notesblok."
+
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr "Du har ikke tilladelse til at slette brugerdata."
+
+#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
msgstr "Du har ikke tilladelse til at se notesblokken %s."
-#: notepads.php:65
-msgid "You must select a notepad to be deleted."
-msgstr "Du skal vælge en notesblok, som skal slettes."
-
#: templates/prefs/notepadselect.inc:10
msgid "Your default notepad:"
msgstr "Standard notesblok:"
-#: templates/notepads/notepads.inc:65
-msgid "Your notepads:"
-msgstr "Dine notesblokke:"
+#: templates/panel.inc:45
+msgid "[Manage Notepads]"
+msgstr "Mine notesblokke"
-#: templates/view/memo.inc:18
-msgid "_Back to Notepad"
-msgstr "Tilbage til notesblok"
+#: templates/search/search.inc:21
+msgid "_Body"
+msgstr "_Besked"
-#: templates/memo/memo.inc:51 templates/list/memo_headers.inc:48
+#: templates/memo/memo.inc:71 templates/list/memo_headers.inc:41
msgid "_Category"
-msgstr "Kategori"
+msgstr "_Kategori"
-#: templates/view/memo.inc:15
+#: templates/view/memo.inc:16
msgid "_Delete"
-msgstr "Slet"
+msgstr "_Slet"
-#: templates/view/memo.inc:11
+#: templates/view/memo.inc:13
msgid "_Edit"
-msgstr "Redigér"
+msgstr "_Rediger"
-#: templates/search/search.inc:20
-msgid "_First Line"
-msgstr "Første linie"
+#: templates/memo/memo.inc:75
+msgid "_Encrypt?"
+msgstr "_Krypter?"
-#: lib/Mnemo.php:281
+#: templates/search/search.inc:9
+msgid "_For: "
+msgstr "_For: "
+
+#: lib/Mnemo.php:494
msgid "_Import/Export"
-msgstr "Import/Eksport"
+msgstr "_Import/Eksport"
-#: lib/Mnemo.php:264
+#: lib/Mnemo.php:481
msgid "_List Notes"
msgstr "List noter"
-#: lib/Mnemo.php:276
-msgid "_My Notepads"
-msgstr "Mine notesblokke"
-
-#: lib/Mnemo.php:269
+#: lib/Mnemo.php:486
msgid "_New Note"
-msgstr "Ny note"
+msgstr "_Ny note"
-#: lib/Mnemo.php:286
+#: templates/view/memo.inc:52 templates/memo/memo.inc:21
+#: templates/memo/memo.inc:80
+msgid "_Password"
+msgstr "_Kodeord"
+
+#: lib/Mnemo.php:499
msgid "_Print"
-msgstr "Udskriv"
+msgstr "_Udskriv"
-#: lib/Mnemo.php:272
+#: lib/Mnemo.php:490
msgid "_Search"
-msgstr "Søg"
+msgstr "_Søg"
+
+#: templates/search/search.inc:20
+msgid "_Title"
+msgstr "_Titel"
+
+#: view.php:74 view.php:83
+#, php-format
+msgid "by %s"
+msgstr "af %s"
+
+#: view.php:76 view.php:85
+msgid "by me"
+msgstr "af mig"
+
+#: lib/Block/tree_menu.php:33
+#, php-format
+msgid "in %s"
+msgstr "i %s"
-#: data.php:91 templates/data/export.inc:1
+#: data.php:90 templates/data/export.inc:4
msgid "notes.csv"
msgstr "notes.csv"
-#: data.php:33 templates/data/import.inc:18
+#: data.php:33 templates/data/import.inc:12
msgid "vNote"
msgstr "vNote"
diff --git a/po/de_DE.po b/po/de_DE.po
index 1a0ed35..96f28a7 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -1,14 +1,14 @@
# German translations for Mnemo.
-# Copyright (C) 2001-2008 Horde Project
+# Copyright 2001-2009 The Horde Project
# This file is distributed under the same license as the Mnemo package.
-# Jan Schneider <jan at horde.org>, 2001-2008.
+# Jan Schneider <jan at horde.org>, 2001-2009.
#
msgid ""
msgstr ""
"Project-Id-Version: Mnemo 2.2-cvs\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-09-06 11:11+0200\n"
-"PO-Revision-Date: 2008-07-12 18:49+0200\n"
+"POT-Creation-Date: 2009-09-12 10:09+0200\n"
+"PO-Revision-Date: 2009-09-12 10:33+0200\n"
"Last-Translator: Jan Schneider <jan at horde.org>\n"
"Language-Team: German <dev at horde.org>\n"
"MIME-Version: 1.0\n"
@@ -25,30 +25,30 @@ msgstr "%s Zeichen"
msgid "%s file successfully imported"
msgstr "Die %s-Datei wurde erfolgreich importiert"
-#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "Notizblock von %s"
-#: memo.php:200
+#: memo.php:237
msgid "Access denied deleting note."
msgstr "Zugriff verweigert beim Löschen der Notiz."
-#: memo.php:143 memo.php:146
+#: memo.php:180 memo.php:183
msgid "Access denied moving the note."
msgstr "Zugriff verweigert beim Verschieben der Notiz."
-#: memo.php:120
+#: memo.php:135
#, php-format
msgid "Access denied saving note to %s."
msgstr "Notiz konnte nicht nach %s gespeichert werden. Zugriff verweigert."
-#: memo.php:118
+#: memo.php:133
#, php-format
msgid "Access denied saving note: %s"
msgstr "Zugriff verweigert beim Speichern der Notiz: %s"
-#: config/prefs.php.dist:70
+#: config/prefs.php.dist:69
msgid "Ascending"
msgstr "Aufsteigend"
@@ -104,11 +104,11 @@ msgstr "Entschl
msgid "Default Notepad"
msgstr "Standard-Notizblock"
-#: config/prefs.php.dist:61
+#: config/prefs.php.dist:60
msgid "Default sorting criteria:"
msgstr "Sortierreihenfolge:"
-#: config/prefs.php.dist:72
+#: config/prefs.php.dist:71
msgid "Default sorting direction:"
msgstr "Sortierrichtung:"
@@ -134,7 +134,7 @@ msgstr "Verhalten beim L
msgid "Delete this note"
msgstr "Diese Notiz löschen"
-#: config/prefs.php.dist:71
+#: config/prefs.php.dist:70
msgid "Descending"
msgstr "Absteigend"
@@ -151,7 +151,7 @@ msgstr "Notiz %s nicht gefunden"
msgid "Display Options"
msgstr "Anzeige-Einstellungen"
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:116
msgid "Do you want to confirm deleting entries?"
msgstr "Möchten Sie das Löschen von Einträgen bestätigen?"
@@ -179,7 +179,7 @@ msgstr "Notiz bearbeiten"
msgid "Edit categories and colors"
msgstr "Kategorien und Farben bearbeiten"
-#: memo.php:104
+#: memo.php:118 memo.php:149
#, php-format
msgid "Edit: %s"
msgstr "Bearbeiten: %s"
@@ -245,6 +245,11 @@ msgstr "Men
msgid "More Options..."
msgstr "Weitere Optionen..."
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr ""
+"Mehrere iCalendar-Komponenten gefunden; nur ein vNote wird unterstützt."
+
#: templates/panel.inc:50
msgid "My Notepads:"
msgstr "Meine Notizblöcke:"
@@ -257,7 +262,7 @@ msgstr "Meine Notizen"
msgid "Name"
msgstr "Name"
-#: memo.php:57 lib/Block/tree_menu.php:23
+#: memo.php:95 memo.php:140 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr "Neue Notiz"
@@ -265,7 +270,7 @@ msgstr "Neue Notiz"
msgid "Next"
msgstr "Weiter"
-#: lib/api.php:337
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr "Es wurden keine iCalendar-Daten gefunden."
@@ -285,11 +290,11 @@ msgstr "Keine Notizen"
msgid "No_te"
msgstr "No_tiz"
-#: lib/Driver/sql.php:195
+#: lib/Driver/sql.php:198
msgid "Not found"
msgstr "Nicht gefunden"
-#: config/prefs.php.dist:59
+#: config/prefs.php.dist:58
msgid "Note Category"
msgstr "Notizkategorie"
@@ -297,7 +302,7 @@ msgstr "Notizkategorie"
msgid "Note Details"
msgstr "Notizdetails"
-#: config/prefs.php.dist:58
+#: config/prefs.php.dist:57
msgid "Note Text"
msgstr "Notiztext"
@@ -305,16 +310,16 @@ msgstr "Notiztext"
msgid "Note _Text"
msgstr "Notiz_text"
-#: view.php:56 memo.php:67 note/pdf.php:57
+#: view.php:56 memo.php:105 memo.php:145 note/pdf.php:57
msgid "Note not found."
msgstr "Notiz nicht gefunden."
-#: templates/memo/memo.inc:59
-msgid "Note_pad"
-msgstr "Notiz_block"
+#: templates/memo/memo.inc:63
+msgid "Note_pad:"
+msgstr "Notiz_block:"
#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
-#: config/prefs.php.dist:60
+#: config/prefs.php.dist:59
msgid "Notepad"
msgstr "Notizblock"
@@ -353,7 +358,7 @@ msgstr ""
msgid "Really delete this note?"
msgstr "Diese Notiz wirklich löschen?"
-#: templates/panel.inc:68 templates/memo/memo.inc:57
+#: templates/panel.inc:68 templates/memo/memo.inc:58
#: lib/Forms/EditNotepad.php:46
msgid "Save"
msgstr "Speichern"
@@ -367,7 +372,7 @@ msgstr "Als PDF speichern"
msgid "Search"
msgstr "Suche"
-#: list.php:54
+#: list.php:54 notes/index.php:35
msgid "Search Results"
msgstr "Suchergebnisse"
@@ -405,10 +410,6 @@ msgstr "Aktionskn
msgid "Show notepad name?"
msgstr "Notizblockname anzeigen?"
-#: config/prefs.php.dist:49
-msgid "Show notepad options panel?"
-msgstr "Kasten mit Notizblockeinstellungen anzeigen?"
-
#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "Notizen dieser Kategorien anzeigen"
@@ -425,7 +426,7 @@ msgstr "Sortieren nach Notiztext"
msgid "Sort by Notepad"
msgstr "Sortieren nach Notizblock"
-#: memo.php:174
+#: memo.php:211
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "\"%s\" wurde erfolgreich gespeichert."
@@ -444,7 +445,7 @@ msgstr "Der Notizenserver ist zur Zeit nicht verf
msgid "The Notes backend is not currently available: %s"
msgstr "Der Notizenserver ist zur Zeit nicht verfügbar: %s"
-#: memo.php:197
+#: memo.php:234
msgid "The note was deleted."
msgstr "Die Notiz wurde gelöscht."
@@ -468,19 +469,19 @@ msgstr "Der Notizblock \"%s\" wurde nach \"%s\" umbenannt."
msgid "The notepad \"%s\" has been saved."
msgstr "Der Notizblock \"%s\" wurde gespeichert."
+#: memo.php:137
+msgid "The passwords don't match."
+msgstr "Die Passwörter stimmen nicht überein."
+
#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr "Beim Importieren der Daten ist ein Fehler aufgetreten: %s"
-#: lib/api.php:331
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr "Beim Importieren der iCalendar Daten ist ein Fehler aufgetreten."
-#: lib/api.php:518
-msgid "There was an error importing the vNote data."
-msgstr "Beim Importieren der vNote-Daten ist ein Fehler aufgetreten."
-
#: lib/api.php:168
#, php-format
msgid "There was an error removing notes for %s. Details have been logged."
@@ -488,12 +489,12 @@ msgstr ""
"Beim Löschen der Notizen von %s ist ein Fehler aufgetreten. Details wurden "
"protokolliert."
-#: memo.php:195
+#: memo.php:232
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Beim Löschen der Notiz ist ein Fehler aufgetreten: %s"
-#: memo.php:172
+#: memo.php:209
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Beim Speichern der Notiz ist ein Fehler aufgetreten: %s"
@@ -511,17 +512,17 @@ msgstr "Es konnten keine Termine zum Exportieren gefunden werden."
msgid "This file format is not supported."
msgstr "Dieses Dateiformat wird nicht unterstützt."
-#: view.php:111 memo.php:91
+#: view.php:111 memo.php:43
msgid "This note cannot be decrypted:"
msgstr "Diese Notiz konnte nicht entschlüsselt werden:"
-#: view.php:103 memo.php:83
+#: view.php:103 memo.php:34
msgid "This note has been encrypted, please provide the password below."
msgstr ""
"Diese Notiz wurde verschlüsselt, bitte geben Sie unten das Passwort ein."
-#: view.php:100 view.php:108 memo.php:80 memo.php:88 lib/api.php:408
-#: lib/Driver/kolab.php:766 lib/Driver/sql.php:458
+#: view.php:100 view.php:108 memo.php:30 memo.php:39 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:461
msgid "This note has been encrypted."
msgstr "Diese Notiz wurde verschlüsselt."
@@ -545,12 +546,12 @@ msgid "Unable to save notepad \"%s\": %s"
msgstr "Der Notizblock \"%s\" kann nicht gespeichert werden: %s"
#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
-#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
#: lib/Block/summary.php:107
msgid "Unfiled"
msgstr "Nicht zugeordnet"
-#: lib/api.php:367 lib/api.php:433 lib/api.php:526
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Nicht unterstützter Inhaltstyp: %s"
@@ -563,7 +564,7 @@ msgstr "Zu welchem Notizblock sollen die Notizen hinzugef
msgid "You are not allowed to change this notepad."
msgstr "Sie dürfen diesen Notizblock nicht ändern."
-#: data.php:42 data.php:129 memo.php:37
+#: data.php:42 data.php:129 memo.php:75
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr "Sie dürfen nicht mehr als %d Notizen erstellen."
@@ -593,10 +594,14 @@ msgstr "[Notizbl
msgid "_Body"
msgstr "_Text"
-#: templates/memo/memo.inc:70 templates/list/memo_headers.inc:41
+#: templates/list/memo_headers.inc:41
msgid "_Category"
msgstr "_Kategorie"
+#: templates/memo/memo.inc:78
+msgid "_Category:"
+msgstr "_Kategorie:"
+
#: templates/view/memo.inc:16
msgid "_Delete"
msgstr "_Löschen"
@@ -605,7 +610,7 @@ msgstr "_L
msgid "_Edit"
msgstr "_Bearbeiten"
-#: templates/memo/memo.inc:74
+#: templates/memo/memo.inc:84
msgid "_Encrypt?"
msgstr "_Verschlüsseln?"
@@ -613,28 +618,35 @@ msgstr "_Verschl
msgid "_For: "
msgstr "_Nach: "
-#: lib/Mnemo.php:488
+#: lib/Mnemo.php:494
msgid "_Import/Export"
msgstr "_Import/Export"
-#: lib/Mnemo.php:475
+#: lib/Mnemo.php:481
msgid "_List Notes"
msgstr "Notizen _anzeigen"
-#: lib/Mnemo.php:480
+#: lib/Mnemo.php:486
msgid "_New Note"
msgstr "_Neue Notiz"
#: templates/view/memo.inc:52 templates/memo/memo.inc:21
-#: templates/memo/memo.inc:79
msgid "_Password"
msgstr "_Passwort"
-#: lib/Mnemo.php:493
+#: templates/memo/memo.inc:89
+msgid "_Password:"
+msgstr "_Passwort:"
+
+#: lib/Mnemo.php:499
msgid "_Print"
msgstr "_Drucken"
-#: lib/Mnemo.php:484
+#: templates/memo/memo.inc:93
+msgid "_Repeat:"
+msgstr "_Wiederholen:"
+
+#: lib/Mnemo.php:490
msgid "_Search"
msgstr "_Suche"
diff --git a/po/el_GR.po b/po/el_GR.po
index 2ed577d..7502d59 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -1,5 +1,5 @@
# Mnemo Greek translation
-# Copyright (C) 2002 Stefanos I. Dimitriou.
+# Copyright 2002 Stefanos I. Dimitriou.
# Stefanos I. Dimitriou <support_webmail at teiath.gr>, 2002.
# Silligardos Xristoforos, 2002.
# Anagnostopoulos Apostolis, 2002.
diff --git a/po/es_ES.po b/po/es_ES.po
index be3fee3..2c1c0a5 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -1,6 +1,6 @@
# Spanish translations for mnemo package
# Traducciones al español para el paquete mnemo.
-# Copyright (C) 2008 Horde Project
+# Copyright 2008-2009 The Horde Project
# This file is distributed under the same license as the mnemo package.
# Automatically generated, 2008.
#
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mnemo 2.2-rc3\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-05-24 09:40+0200\n"
-"PO-Revision-Date: 2008-05-24 09:40+0200\n"
+"POT-Creation-Date: 2009-02-20 15:34+0100\n"
+"PO-Revision-Date: 2009-02-20 15:34+0100\n"
"Last-Translator: Manuel P. Ayala <mayala at unex.es>\n"
"Language-Team: i18n at lists.horde.org\n"
"MIME-Version: 1.0\n"
@@ -27,16 +27,16 @@ msgstr "%s caracteres"
msgid "%s file successfully imported"
msgstr "El archivo %s se ha importado satisfactoriamente"
-#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "Libreta de %s"
-#: memo.php:201
+#: memo.php:200
msgid "Access denied deleting note."
msgstr "Se ha denegado el acceso para eliminar la nota."
-#: memo.php:150 memo.php:153
+#: memo.php:143 memo.php:146
msgid "Access denied moving the note."
msgstr "Se ha denegado el acceso para trasladar la nota."
@@ -66,7 +66,7 @@ msgstr "Cancelar"
msgid "Category"
msgstr "Categoría"
-#: notepads/index.php:32 templates/notepad_list.php:31
+#: notepads/index.php:32 templates/notepad_list.php:29
msgid "Change Permissions"
msgstr "Cambiar permisos"
@@ -90,7 +90,7 @@ msgstr "Crear"
msgid "Create Notepad"
msgstr "Crear libreta"
-#: templates/notepad_list.php:8
+#: templates/notepad_list.php:9
msgid "Create a new Notepad"
msgstr "Crear una libreta"
@@ -114,8 +114,8 @@ msgstr "Criterio de clasificaci
msgid "Default sorting direction:"
msgstr "Sentido de clasificación por omisión:"
-#: notepads/index.php:33 templates/notepad_list.php:33
-#: templates/view/memo.inc:16 lib/Forms/DeleteNotepad.php:45
+#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
msgid "Delete"
msgstr "Eliminar"
@@ -140,7 +140,7 @@ msgstr "Eliminar esta nota"
msgid "Descending"
msgstr "Descendente"
-#: lib/Forms/CreateNotepad.php:37 lib/Forms/EditNotepad.php:44
+#: lib/Forms/EditNotepad.php:44 lib/Forms/CreateNotepad.php:37
msgid "Description"
msgstr "Descripción"
@@ -157,7 +157,7 @@ msgstr "Opciones de Visualizaci
msgid "Do you want to confirm deleting entries?"
msgstr "¿Quiere confirmar la eliminación de entradas?"
-#: notepads/index.php:31 templates/notepad_list.php:29
+#: notepads/index.php:31 templates/notepad_list.php:27
#: templates/view/memo.inc:13
msgid "Edit"
msgstr "Modificar"
@@ -172,8 +172,8 @@ msgstr "Modificar \"%s\""
msgid "Edit %s"
msgstr "Modificar %s"
-#: templates/list/memo_headers.inc:30 lib/Block/summary.php:79
-#: lib/Block/summary.php:80
+#: lib/Block/summary.php:79 lib/Block/summary.php:80
+#: templates/list/memo_headers.inc:30
msgid "Edit Note"
msgstr "Modificar nota"
@@ -186,7 +186,7 @@ msgstr "Modificar categor
msgid "Edit: %s"
msgstr "Modificar: %s"
-#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:104
+#: lib/Block/summary.php:104 templates/list/memo_summaries.inc:15
msgid "Empty Note"
msgstr "Vaciar nota"
@@ -247,6 +247,11 @@ msgstr "Listado de men
msgid "More Options..."
msgstr "Más opciones..."
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr ""
+"Se encontraron multiples componentes iCalendar; sólo se soporta una vNote."
+
#: templates/panel.inc:50
msgid "My Notepads:"
msgstr "Mis libretas:"
@@ -255,7 +260,7 @@ msgstr "Mis libretas:"
msgid "My Notes"
msgstr "Mis notas"
-#: lib/Forms/CreateNotepad.php:36 lib/Forms/EditNotepad.php:43
+#: lib/Forms/EditNotepad.php:43 lib/Forms/CreateNotepad.php:36
msgid "Name"
msgstr "Nombre"
@@ -267,7 +272,7 @@ msgstr "A
msgid "Next"
msgstr "Siguiente"
-#: lib/api.php:286
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr "No se encontraron datos iCalendar."
@@ -287,7 +292,7 @@ msgstr "Sin notas visibles"
msgid "No_te"
msgstr "_Nota"
-#: lib/Driver/sql.php:195
+#: lib/Driver/sql.php:196
msgid "Not found"
msgstr "No encontrada"
@@ -307,20 +312,20 @@ msgstr "Texto de la nota"
msgid "Note _Text"
msgstr "_Texto de la nota"
-#: memo.php:67 view.php:56 note/pdf.php:57
+#: view.php:56 memo.php:67 note/pdf.php:57
msgid "Note not found."
msgstr "No se encontró la nota."
-#: templates/memo/memo.inc:59
+#: templates/memo/memo.inc:60
msgid "Note_pad"
msgstr "_Libreta"
-#: templates/notepad_list.php:15 templates/list/memo_headers.inc:33
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
#: config/.bak/prefs.php.dist:60
msgid "Notepad"
msgstr "Libreta"
-#: templates/notepad_list.php:12
+#: templates/notepad_list.php:14
msgid "Notepad List"
msgstr "Lista de notas"
@@ -332,8 +337,8 @@ msgstr "Libretas"
msgid "Notes Summary"
msgstr "Resumen de notas"
-#: lib/api.php:161 lib/api.php:201 lib/api.php:234 lib/api.php:264
-#: lib/api.php:351 lib/api.php:419 lib/api.php:448
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "Permiso denegado"
@@ -354,8 +359,8 @@ msgstr ""
msgid "Really delete this note?"
msgstr "¿Eliminar realmente esta nota?"
-#: templates/panel.inc:68 templates/memo/memo.inc:57
-#: lib/Forms/EditNotepad.php:46
+#: lib/Forms/EditNotepad.php:46 templates/panel.inc:68
+#: templates/memo/memo.inc:58
msgid "Save"
msgstr "Guardar"
@@ -363,12 +368,12 @@ msgstr "Guardar"
msgid "Save as PDF"
msgstr "Guardar como PDF"
-#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:27
-#: templates/list/header.inc:4 lib/Block/tree_menu.php:44
+#: search.php:17 lib/Block/tree_menu.php:44 templates/search/search.inc:4
+#: templates/search/search.inc:27 templates/list/header.inc:4
msgid "Search"
msgstr "Buscar"
-#: list.php:54
+#: list.php:54 notes/index.php:35
msgid "Search Results"
msgstr "Resultados de la búsqueda"
@@ -424,7 +429,7 @@ msgstr "Ordenar por texto del comentario"
msgid "Sort by Notepad"
msgstr "Ordenar libreta"
-#: memo.php:175
+#: memo.php:174
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "Se ha guardado correctamente \"%s\"."
@@ -443,7 +448,7 @@ msgstr "El motor de Notas no est
msgid "The Notes backend is not currently available: %s"
msgstr "El motor de Notas no está disponible en este momento: %s"
-#: memo.php:198
+#: memo.php:197
msgid "The note was deleted."
msgstr "Se eliminó la nota."
@@ -472,20 +477,23 @@ msgstr "Se ha guardado la libreta \"%s\"."
msgid "There was an error importing the data: %s"
msgstr "Se produjo un error al importar los datos: %s"
-#: lib/api.php:280
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr "Se produjo un error al importar los datos iCalendar."
-#: lib/api.php:467
-msgid "There was an error importing the vNote data."
-msgstr "Se produjo un error al importar los datos vNote."
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr ""
+"Se produjo un error al eliminar las notass de %s. Se han registrado los "
+"detalles."
-#: memo.php:196
+#: memo.php:195
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Se produjo un error al eliminar la nota: %s"
-#: memo.php:173
+#: memo.php:172
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Se produjo un error al guardar la nota: %s"
@@ -503,16 +511,16 @@ msgstr "No hubo memorandos a exportar."
msgid "This file format is not supported."
msgstr "Este formato de archivo no está soportado."
-#: memo.php:91 view.php:111
+#: view.php:111 memo.php:91
msgid "This note cannot be decrypted:"
msgstr "Esta nota no se puede descifrar:"
-#: memo.php:83 view.php:103
+#: view.php:103 memo.php:83
msgid "This note has been encrypted, please provide the password below."
msgstr "Esta nota se ha cifrado, introduzca la contrasela a continuación."
-#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:357
-#: lib/Driver/sql.php:448 lib/Driver/kolab.php:766
+#: view.php:100 view.php:108 memo.php:80 memo.php:88 lib/api.php:408
+#: lib/Driver/sql.php:459 lib/Driver/kolab.php:766
msgid "This note has been encrypted."
msgstr "Esta nota se ha cifrado."
@@ -535,13 +543,13 @@ msgstr "Incapaz de cargar la definici
msgid "Unable to save notepad \"%s\": %s"
msgstr "Incapaz de guardar la libreta \"%s\": %s"
-#: templates/list/memo_summaries.inc:17 templates/view/memo.inc:27
-#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
-#: lib/Block/summary.php:107
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
+#: lib/Block/summary.php:107 templates/list/memo_summaries.inc:17
+#: templates/view/memo.inc:27
msgid "Unfiled"
msgstr "Sin categoría"
-#: lib/api.php:316 lib/api.php:382 lib/api.php:475
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Tipo de contenido no soportado: %s"
@@ -563,6 +571,10 @@ msgstr "Carece de permiso para crear m
msgid "You are not allowed to delete this notepad."
msgstr "Carece de permiso para eliminar esta libreta."
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr "Carece de permiso para eliminar datos de usuario."
+
#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
@@ -580,7 +592,7 @@ msgstr "[Gestionar libretas]"
msgid "_Body"
msgstr "_Cuerpo"
-#: templates/memo/memo.inc:70 templates/list/memo_headers.inc:41
+#: templates/memo/memo.inc:71 templates/list/memo_headers.inc:41
msgid "_Category"
msgstr "_Categoría"
@@ -592,7 +604,7 @@ msgstr "_Eliminar"
msgid "_Edit"
msgstr "Mo_dificar"
-#: templates/memo/memo.inc:74
+#: templates/memo/memo.inc:75
msgid "_Encrypt?"
msgstr "¿Ci_frar?"
@@ -600,28 +612,28 @@ msgstr "
msgid "_For: "
msgstr "Te_xto: "
-#: lib/Mnemo.php:488
+#: lib/Mnemo.php:494
msgid "_Import/Export"
msgstr "_Importar/Exportar"
-#: lib/Mnemo.php:475
+#: lib/Mnemo.php:481
msgid "_List Notes"
msgstr "_Listar"
-#: lib/Mnemo.php:480
+#: lib/Mnemo.php:486
msgid "_New Note"
msgstr "_Añadir"
-#: templates/memo/memo.inc:21 templates/memo/memo.inc:79
+#: templates/memo/memo.inc:21 templates/memo/memo.inc:80
#: templates/view/memo.inc:52
msgid "_Password"
msgstr "Contrase_ña"
-#: lib/Mnemo.php:493
+#: lib/Mnemo.php:499
msgid "_Print"
msgstr "Im_primir"
-#: lib/Mnemo.php:484
+#: lib/Mnemo.php:490
msgid "_Search"
msgstr "_Buscar"
diff --git a/po/eu_ES.po b/po/eu_ES.po
index 9ba613b..05a0f61 100644
--- a/po/eu_ES.po
+++ b/po/eu_ES.po
@@ -1,158 +1,160 @@
-# Basque translations for Mnemo.
-# Copyright (C) 2008 Horde Project
-# This file is distributed under the same license as the Mnemo package.
-# Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta at ehu.es>, 2008.
+# Basque translation for mnemo package.
+# This file is distributed under the same license as the mnemo package.
#
msgid ""
msgstr ""
-"Project-Id-Version: Mnemo H3 (2.1)\n"
+"Project-Id-Version: mnemo\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-01-16 09:33+0100\n"
-"PO-Revision-Date: 2008-07-17 14:28+0200\n"
-"Last-Translator: Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta at ehu."
-"es>\n"
-"Language-Team: Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta at ehu."
-"es>\n"
+"POT-Creation-Date: 2009-09-12 10:09+0200\n"
+"PO-Revision-Date: 2009-11-20 12:25+0100\n"
+"Last-Translator: Euskal Herriko Unibertsitatea <webmaster at ehu.es>\n"
+"Language-Team: Euskal Herriko Unibertsitatea <webmaster at ehu.es>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: templates/list/header.inc:3
-#, php-format
-msgid "%d notes"
-msgstr "%d ohar"
-
-#: templates/memo/memo.inc:26
+#: templates/memo/memo.inc:53
#, php-format
msgid "%s characters"
msgstr "%s karaktere"
-#: data.php:201
+#: data.php:200
#, php-format
msgid "%s file successfully imported"
msgstr "%s fitxategi ondo inportatu dira"
-#: notepads.php:99 lib/base.php:106
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "%s(r)en Ohar-bloka"
-#: templates/list/header.inc:3
-msgid "1 note"
-msgstr "ohar bat"
-
-#: memo.php:162
+#: memo.php:237
msgid "Access denied deleting note."
msgstr "Oharra ezabatzeko sarbidea ukatu da."
-#: memo.php:112 memo.php:115
+#: memo.php:180 memo.php:183
msgid "Access denied moving the note."
msgstr "Oharra lekuz aldatzeko sarbidea ukatu da."
-#: memo.php:84
+#: memo.php:135
#, php-format
msgid "Access denied saving note to %s."
msgstr "Oharra hemen gordetzeko sarbidea ukatu da: %s."
-#: memo.php:82
+#: memo.php:133
#, php-format
msgid "Access denied saving note: %s"
msgstr "Oharra gordetzeko sarbidea ukatu da: %s."
-#: memo.php:52
-msgid "Adding A New Note"
-msgstr "Ohar berri bat gehitu"
-
-#: config/prefs.php.dist:51
+#: config/prefs.php.dist:69
msgid "Ascending"
msgstr "Gorantz"
-#: templates/view/memo.inc:18
-msgid "Back to Notepad"
-msgstr "Itzuli ohar-blokera"
-
-#: templates/notepads/notepads.inc:97
-msgid "Back to Notepad Options"
-msgstr "Itzuli ohar-blokaren aukeretara"
-
-#: data.php:32 templates/data/import.inc:17
+#: data.php:32 templates/data/import.inc:11
msgid "CSV"
msgstr "CSV"
+#: lib/Forms/DeleteNotepad.php:45 lib/Forms/DeleteNotepad.php:51
+msgid "Cancel"
+msgstr "Utzi"
+
#: data.php:54 templates/view/memo.inc:26
msgid "Category"
msgstr "Kategoria"
-#: templates/notepads/notepads.inc:22
-msgid "Change"
-msgstr "Aldatu"
+#: templates/notepad_list.php:29 notepads/index.php:32
+msgid "Change Permissions"
+msgstr "Aldatu baimenak"
-#: config/prefs.php.dist:15
+#: config/prefs.php.dist:14
msgid "Change your note sorting and display options."
msgstr "Aldatu oharrak ordenatzeko eta bistaratzeko aukerak."
-#: config/prefs.php.dist:22
+#: config/prefs.php.dist:21
msgid "Choose your default Notepad."
msgstr "Aukeratu ohar-blok lehenetsia."
-#: templates/search/search.inc:32
-msgid "Clear Form"
-msgstr "Garbitu inprimakia"
+#: templates/list/header.inc:8
+msgid "Close Search"
+msgstr "Itxi bilaketa"
-#: templates/notepads/notepads.inc:17 templates/notepads/notepads.inc:94
-#: templates/notepads/notepads.inc:96
+#: lib/Forms/CreateNotepad.php:39
msgid "Create"
msgstr "Sortu"
+#: lib/Forms/CreateNotepad.php:34
+msgid "Create Notepad"
+msgstr "Sortu ohar-bloka"
+
+#: templates/notepad_list.php:9
+msgid "Create a new Notepad"
+msgstr "Sortu Ohar-blok berri bat"
+
#: templates/view/memo.inc:32
msgid "Created"
msgstr "Sortua"
-#: config/prefs.php.dist:21
+#: templates/view/memo.inc:54 templates/memo/memo.inc:23
+msgid "Decrypt"
+msgstr "Desenkriptatu"
+
+#: config/prefs.php.dist:20
msgid "Default Notepad"
msgstr "Ohar-blok lehenetsia"
-#: config/prefs.php.dist:42
+#: config/prefs.php.dist:60
msgid "Default sorting criteria:"
msgstr "Ordenatze-irizpide lehenetsia:"
-#: config/prefs.php.dist:53
+#: config/prefs.php.dist:71
msgid "Default sorting direction:"
msgstr "Ordenatze-noranzko lehenetsia:"
-#: templates/notepads/notepads.inc:95 templates/view/memo.inc:15
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
+#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
msgid "Delete"
msgstr "Ezabatu"
-#: config/prefs.php.dist:28
+#: lib/Forms/DeleteNotepad.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "Ezabatu %s"
+
+#: config/prefs.php.dist:27
msgid "Delete Confirmation"
msgstr "Ezabatzeko berrespena"
-#: config/prefs.php.dist:29
+#: config/prefs.php.dist:28
msgid "Delete button behaviour"
msgstr "Ezabatu botoiaren portaera."
-#: templates/memo/memo.inc:67
+#: templates/memo/memo.inc:11
msgid "Delete this note"
msgstr "Ezabatu ohar hau"
-#: config/prefs.php.dist:52
+#: config/prefs.php.dist:70
msgid "Descending"
msgstr "Beherantz"
-#: templates/notepads/notepads.inc:85
-msgid "Description:"
-msgstr "Azalpena:"
+#: lib/Forms/EditNotepad.php:44 lib/Forms/CreateNotepad.php:37
+msgid "Description"
+msgstr "Azalpena"
-#: config/prefs.php.dist:14
+#: lib/Driver/kolab.php:556
+#, php-format
+msgid "Did not find note %s"
+msgstr "Ez du aurkitu %s oharra"
+
+#: config/prefs.php.dist:13
msgid "Display Options"
msgstr "Bistaratzeko aukerak"
-#: config/prefs.php.dist:98
+#: config/prefs.php.dist:116
msgid "Do you want to confirm deleting entries?"
msgstr "Sarrerak ezabatzea berretsi nahi duzu?"
-#: templates/view/memo.inc:11
+#: templates/notepad_list.php:27 templates/view/memo.inc:13
+#: notepads/index.php:31
msgid "Edit"
msgstr "Editatu"
@@ -161,48 +163,71 @@ msgstr "Editatu"
msgid "Edit \"%s\""
msgstr "Editatu \"%s\""
-#: lib/Block/summary.php:77 templates/list/memo_headers.inc:42
+#: lib/Forms/EditNotepad.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "Editatu %s"
+
+#: templates/list/memo_headers.inc:30 lib/Block/summary.php:79
+#: lib/Block/summary.php:80
msgid "Edit Note"
msgstr "Editatu oharra"
-#: templates/list/memo_headers.inc:52
+#: templates/list/memo_headers.inc:45
msgid "Edit categories and colors"
msgstr "Editatu kategoriak eta koloreak"
-#: templates/list/memo_summaries.inc:12
+#: memo.php:118 memo.php:149
+#, php-format
+msgid "Edit: %s"
+msgstr "Editatu: %s"
+
+#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:104
msgid "Empty Note"
msgstr "Hustu oharra"
-#: templates/data/export.inc:19
+#: lib/Driver.php:118
+msgid ""
+"Encryption support has not been configured, please contact your "
+"administrator."
+msgstr ""
+"Enkriptatze-euskarria ez da konfiguratu. Jarri harremanetan "
+"administratzailearekin."
+
+#: templates/data/export.inc:16
msgid "Export"
msgstr "Esportatu"
-#: templates/data/export.inc:8
+#: templates/data/export.inc:2
msgid "Export Notes"
msgstr "Esportatu oharrak"
-#: templates/search/search.inc:21
-msgid "F_ull Text"
-msgstr "_Testu osoa"
-
-#: config/prefs.php.dist:13 config/prefs.php.dist:20 config/prefs.php.dist:27
+#: config/prefs.php.dist:12 config/prefs.php.dist:19 config/prefs.php.dist:26
msgid "General Options"
msgstr "Aukera orokorrak"
-#: templates/data/import.inc:8
+#: templates/data/import.inc:1
#, php-format
msgid "Import Notes, Step %d"
msgstr "Inportatu oharrak, %d. urratsa"
-#: data.php:207
+#: data.php:206
msgid "Import/Export Notes"
msgstr "Inportatu/esportatu oharrak"
+#: templates/search/search.inc:17
+msgid "In: "
+msgstr "Hemen: "
+
#: templates/view/memo.inc:39
msgid "Last Modified"
msgstr "Aldatze-data"
-#: lib/api.php:73
+#: templates/notepad_list.php:2 notepads/index.php:37
+msgid "Manage Notepads"
+msgstr "Kudeatu ohar-blokak"
+
+#: lib/api.php:82
msgid "Maximum Number of Notes"
msgstr "Oharren gehieneko kopurua"
@@ -210,160 +235,173 @@ msgstr "Oharren gehieneko kopurua"
msgid "Memo Text"
msgstr "Oharraren testua"
-#: memo.php:68
-#, php-format
-msgid "Modifying %s"
-msgstr "%s aldatzen"
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menu-zerrenda"
+
+#: templates/list/header.inc:9
+msgid "More Options..."
+msgstr "Aukera gehiago..."
-#: list.php:35
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr ""
+"iCalendar osagai bat baino gehiago aurkitu dira; vNote bakarra onartzen da."
+
+#: templates/panel.inc:50
+msgid "My Notepads:"
+msgstr "Nire ohar-blokak:"
+
+#: list.php:31
msgid "My Notes"
msgstr "Nire oharrak"
-#: lib/Block/summary.php:22
+#: lib/Forms/EditNotepad.php:43 lib/Forms/CreateNotepad.php:36
+msgid "Name"
+msgstr "Izena"
+
+#: memo.php:95 memo.php:140 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr "Ohar berria"
-#: templates/data/import.inc:40
+#: templates/data/import.inc:34
msgid "Next"
msgstr "Hurrengoa"
-#: lib/api.php:227
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr "Ez da aurkitu iCalendar daturik."
-#: templates/menu.inc:7
-msgid "No notepads are available to guests."
-msgstr "Ez dago ohar-blok erabilgarririk gonbidatuentzat."
+#: templates/list/memo_footers.inc:4
+msgid "No notes match"
+msgstr "Ez dago bat datorren oharrik"
-#: templates/list/header.inc:3
-msgid "No notes"
-msgstr "Oharrik ez"
-
-#: templates/list/empty.inc:3
+#: templates/list/empty.inc:1
msgid "No notes match the current criteria."
msgstr "Ez dago uneko irizpideekin bat datorren oharrik."
-#: lib/Block/summary.php:103
+#: lib/Block/summary.php:112
msgid "No notes to display"
msgstr "Ez dago oharrik bistaratzeko"
-#: templates/list/memo_headers.inc:44
+#: templates/list/memo_headers.inc:37
msgid "No_te"
msgstr "O_harra"
-#: lib/Driver/sql.php:140
+#: lib/Driver/sql.php:198
msgid "Not found"
msgstr "Ez da aurkitu"
-#: config/prefs.php.dist:41
+#: config/prefs.php.dist:58
msgid "Note Category"
msgstr "Oharraren kategoria"
-#: view.php:82 templates/view/memo.inc:21
+#: view.php:121
msgid "Note Details"
msgstr "Oharraren xehetasunak"
-#: notepads.php:110
-msgid "Note Lists"
-msgstr "Ohar-zerrendak"
-
-#: templates/view/memo.inc:45 config/prefs.php.dist:40
+#: config/prefs.php.dist:57
msgid "Note Text"
msgstr "Oharraren testua"
-#: templates/memo/memo.inc:26
+#: templates/memo/memo.inc:53
msgid "Note _Text"
msgstr "Oha_rraren testua"
-#: view.php:57 memo.php:60
+#: view.php:56 memo.php:105 memo.php:145 note/pdf.php:57
msgid "Note not found."
msgstr "Oharra ez da aurkitu."
-#: templates/memo/memo.inc:34
-msgid "Note_pad"
-msgstr "Ohar-b_loka"
+#: templates/memo/memo.inc:63
+msgid "Note_pad:"
+msgstr "Ohar-b_loka:"
+
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
+#: config/prefs.php.dist:59
+msgid "Notepad"
+msgstr "Ohar-bloka"
-#: templates/notepads/notepads.inc:79
-msgid "Notepad's name:"
-msgstr "Ohar-blokaren izena:"
+#: templates/notepad_list.php:14
+msgid "Notepad List"
+msgstr "Ohar-bloken zerrenda"
-#: templates/notepads/notepads.inc:61
+#: templates/panel.inc:32 templates/panel.inc:33
msgid "Notepads"
msgstr "Ohar-blokak"
-#: notepads.php:33
-msgid "Notepads must have a name."
-msgstr "Ohar-blokek izen bat eduki behar dute."
-
#: lib/Block/summary.php:3
msgid "Notes Summary"
msgstr "Oharren laburpena"
-#: lib/api.php:204 lib/api.php:292 lib/api.php:349 lib/api.php:378
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "Baimena ukatu da"
-#: templates/notepads/notepads.inc:82
-msgid "Permissions"
-msgstr "Baimenak"
+#: lib/Forms/DeleteNotepad.php:56
+msgid "Permission denied"
+msgstr "Baimena ukatuta"
+
+#: lib/Forms/DeleteNotepad.php:43
+#, php-format
+msgid ""
+"Really delete the notepad \"%s\"? This cannot be undone and all data on this "
+"notepad will be permanently removed."
+msgstr ""
+"Ziur zaude \"%s\" ohar-bloka ezabatu nahi duzula? Ekintza ezingo da desegin, "
+"eta ohar-blokeko datu guztiak betiko ezabatuko dira."
-#: templates/view/memo.inc:15
+#: templates/view/memo.inc:16
msgid "Really delete this note?"
msgstr "Ziur zaude ohar hau ezabatu nahi duzula?"
-#: templates/list/header.inc:5 templates/list/header.inc:6
-msgid "Refresh List"
-msgstr "Freskatu zerrenda"
-
-#: templates/notepads/notepads.inc:96
-msgid "Reset"
-msgstr "Berrezarri"
-
-#: templates/memo/memo.inc:56
+#: templates/panel.inc:68 templates/memo/memo.inc:58
+#: lib/Forms/EditNotepad.php:46
msgid "Save"
msgstr "Gorde"
-#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:31
+#: templates/view/memo.inc:11
+msgid "Save as PDF"
+msgstr "Gorde PDF gisa"
+
+#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:27
+#: templates/list/header.inc:4 lib/Block/tree_menu.php:44
msgid "Search"
msgstr "Bilatu"
-#: list.php:57
+#: list.php:54 notes/index.php:35
msgid "Search Results"
-msgstr "Bilaketaren emaitza"
-
-#: templates/search/search.inc:17
-msgid "Search Scope"
-msgstr "Bilaketa-esparrua"
-
-#: templates/search/search.inc:9
-msgid "Search _Text"
-msgstr "Bilatzeko _testua"
+msgstr "Bilaketaren emaitzak"
-#: templates/notepads/notepads.inc:67
-msgid "Select a notepad"
-msgstr "Hautatu ohar-blok bat"
+#: templates/panel.inc:38
+msgid "Search for Notepads:"
+msgstr "Bilatu ohar-blokak:"
-#: templates/menu.inc:16
-msgid "Select notepads to display:"
-msgstr "Hautatu bistaratzeko ohar-blokak:"
-
-#: templates/data/export.inc:15
+#: templates/data/export.inc:9
msgid "Select the export format:"
msgstr "Hautatu esportazio-formatua:"
-#: templates/data/import.inc:37
+#: templates/data/import.inc:31
msgid "Select the file to import:"
msgstr "Hautatu inportatu beharreko fitxategia:"
-#: templates/data/import.inc:15
+#: templates/data/import.inc:9
msgid "Select the format of the source file:"
msgstr "Hautatu iturburu-fitxategiaren formatua:"
-#: lib/Block/summary.php:37
+#: templates/panel.inc:59
+msgid "Shared Notepads:"
+msgstr "Ohar-blok partekatuak:"
+
+#: config/prefs.php.dist:39
+msgid "Should the Notepad be shown in its own column in the List view?"
+msgstr "Ohar-bloka bere zutabean bertan bistaratu Zerrendaren ikuspegian?"
+
+#: lib/Block/summary.php:35
msgid "Show action buttons?"
-msgstr "Hautatu ekintza-botoiak?"
+msgstr "Erakutsi ekintza-botoiak?"
-#: lib/Block/summary.php:40
+#: lib/Block/summary.php:39
msgid "Show notepad name?"
msgstr "Erakutsi ohar-blokaren izena?"
@@ -371,178 +409,263 @@ msgstr "Erakutsi ohar-blokaren izena?"
msgid "Show notes from these categories"
msgstr "Erakutsi kategoria hauetako oharrak"
-#: templates/list/memo_headers.inc:48
+#: templates/list/memo_headers.inc:41
msgid "Sort by Category"
msgstr "Ordenatu kategoriaren arabera"
-#: templates/list/memo_headers.inc:44
+#: templates/list/memo_headers.inc:37
msgid "Sort by Note Text"
msgstr "Ordenatu ohar-testuaren arabera"
-#: memo.php:135
+#: templates/list/memo_headers.inc:33
+msgid "Sort by Notepad"
+msgstr "Ordenatu ohar-bloken arabera"
+
+#: memo.php:211
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "Behar bezala gorde da \"%s\"."
-#: data.php:195
+#: data.php:194
#, php-format
msgid "The %s file didn't contain any notes."
msgstr "%s fitxategiak ez dauka oharrik."
-#: memo.php:159
-msgid "The note was deleted."
-msgstr "Oharra ezabatu egin da."
+#: lib/Driver.php:53
+msgid "The Notes backend is not currently available."
+msgstr "Oharren euskarri-modulua ez dago erabilgarri une honetan."
-#: notepads.php:46
+#: lib/Driver.php:227
#, php-format
-msgid "The notepad \"%s\" couldn't be created: %s"
-msgstr "Ezin izan da sortu \"%s\" ohar-bloka: %s"
+msgid "The Notes backend is not currently available: %s"
+msgstr "Oharren euskarri-modulua ez dago erabilgarri une honetan: %s"
-#: notepads.php:48
+#: memo.php:234
+msgid "The note was deleted."
+msgstr "Oharra ezabatu da."
+
+#: notepads/create.php:31
#, php-format
msgid "The notepad \"%s\" has been created."
msgstr "\"%s\" ohar-bloka sortu da."
-#: notepads.php:85
+#: notepads/delete.php:48
#, php-format
msgid "The notepad \"%s\" has been deleted."
msgstr "\"%s\" ohar-bloka ezabatu da."
-#: notepads.php:56
+#: notepads/edit.php:42
+#, php-format
+msgid "The notepad \"%s\" has been renamed to \"%s\"."
+msgstr "\"%s\" ohar-blokari izena aldatu zaio: \"%s\"."
+
+#: notepads/edit.php:44
#, php-format
msgid "The notepad \"%s\" has been saved."
msgstr "\"%s\" ohar-bloka gorde da."
-#: data.php:198
+#: memo.php:137
+msgid "The passwords don't match."
+msgstr "Pasahitzak ez datoz bat."
+
+#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr "Errorea gertatu da datuak inportatzean: %s"
-#: lib/api.php:221
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr "Errorea gertatu da iCalendar datuak inportatzean."
-#: lib/api.php:397
-msgid "There was an error importing the vNote data."
-msgstr "Errorea gertatu da vNote datuak inportatzean."
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr ""
+"Errore bat gertatu da %s(r)en oharrak kentzean. Xehetasunak erregistratu "
+"dira."
-#: memo.php:157
+#: memo.php:232
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Errorea gertatu da oharra kentzean: %s"
-#: memo.php:133
+#: memo.php:209
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Errorea gertatu da oharra gordetzean: %s"
-#: view.php:46
+#: view.php:45 note/pdf.php:46
#, php-format
msgid "There was an error viewing this notepad: %s"
msgstr "Errorea gertatu da ohar-blok hau ikustean: %s"
-#: data.php:79
+#: data.php:78
msgid "There were no memos to export."
-msgstr "Ez dago zirkularrik esportatzeko."
+msgstr "Ez dago oharrik esportatzeko."
#: data.php:105
msgid "This file format is not supported."
msgstr "Fitxategi-formatu hau ez da onartzen."
-#: notepads.php:80
+#: view.php:111 memo.php:43
+msgid "This note cannot be decrypted:"
+msgstr "Ohar hau ezin da desenkriptatu:"
+
+#: view.php:103 memo.php:34
+msgid "This note has been encrypted, please provide the password below."
+msgstr "Ohar hau enkriptatuta dago. Sartu pasahitza behean."
+
+#: view.php:100 view.php:108 memo.php:30 memo.php:39 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:461
+msgid "This note has been encrypted."
+msgstr "Ohar hau enkriptatuta dago."
+
+#: notepads/delete.php:24
+msgid "This notepad cannot be deleted"
+msgstr "Ohar-blok hau ezin da ezabatu"
+
+#: lib/Forms/DeleteNotepad.php:63
#, php-format
msgid "Unable to delete \"%s\": %s"
-msgstr "Ezin da \"%s\" ezabatu: %s"
+msgstr "Ezin da ezabatu \"%s\": %s"
-#: templates/memo/memo.inc:58
-msgid "Undo changes"
-msgstr "Desegin aldaketak"
+#: lib/Driver.php:230
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Ezin da %s(r)en definizioa kargatu."
+
+#: lib/Forms/EditNotepad.php:55
+#, php-format
+msgid "Unable to save notepad \"%s\": %s"
+msgstr "Ezin da gorde \"%s\" ohar-bloka: %s"
-#: lib/Mnemo.php:206 lib/Mnemo.php:207 lib/Mnemo.php:221 lib/Mnemo.php:222
-#: lib/Block/summary.php:98 templates/list/memo_summaries.inc:14
-#: templates/view/memo.inc:27
+#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
+#: lib/Block/summary.php:107
msgid "Unfiled"
-msgstr "Sailkatu gabe"
+msgstr "Sailkatu gabea"
-#: lib/api.php:257 lib/api.php:314 lib/api.php:405
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Eduki mota hau ez da onartzen: %s"
-#: templates/data/import.inc:22
+#: templates/data/import.inc:16
msgid "Which Notepad should the notes be added to?"
msgstr "Zein ohar-bloketan gehituko dira oharrak?"
-#: data.php:42 data.php:130 memo.php:35
+#: notepads/edit.php:28
+msgid "You are not allowed to change this notepad."
+msgstr "Ez daukazu baimenik ohar-blok hau aldatzeko."
+
+#: data.php:42 data.php:129 memo.php:75
#, php-format
msgid "You are not allowed to create more than %d notes."
-msgstr "Ez duzu baimenik %d ohar baino gehiago sortzeko."
+msgstr "Ez daukazu baimenik %d ohar baino gehiago sortzeko."
+
+#: notepads/delete.php:35
+msgid "You are not allowed to delete this notepad."
+msgstr "Ez daukazu baimenik ohar-blok hau ezabatzeko."
+
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr "Ez daukazu baimenik erabiltzaile-daturik kentzeko."
-#: view.php:50
+#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
-msgstr "Ez duzu baimenik %s ohar-bloka ikusteko."
-
-#: notepads.php:65
-msgid "You must select a notepad to be deleted."
-msgstr "Ohar-blok bat hautatu behar duzu ezabatzeko."
+msgstr "Ez daukazu baimenik %s ohar-bloka ikusteko."
#: templates/prefs/notepadselect.inc:10
msgid "Your default notepad:"
msgstr "Ohar-blok lehenetsia:"
-#: templates/notepads/notepads.inc:65
-msgid "Your notepads:"
-msgstr "Zure ohar-blokak:"
+#: templates/panel.inc:45
+msgid "[Manage Notepads]"
+msgstr "[Kudeatu ohar-blokak]"
-#: templates/view/memo.inc:18
-msgid "_Back to Notepad"
-msgstr "_Itzuli ohar-blokera"
+#: templates/search/search.inc:21
+msgid "_Body"
+msgstr "_Gorputza"
-#: templates/memo/memo.inc:51 templates/list/memo_headers.inc:48
+#: templates/list/memo_headers.inc:41
msgid "_Category"
msgstr "_Kategoria"
-#: templates/view/memo.inc:15
+#: templates/memo/memo.inc:78
+msgid "_Category:"
+msgstr "_Kategoria:"
+
+#: templates/view/memo.inc:16
msgid "_Delete"
msgstr "E_zabatu"
-#: templates/view/memo.inc:11
+#: templates/view/memo.inc:13
msgid "_Edit"
msgstr "E_ditatu"
-#: templates/search/search.inc:20
-msgid "_First Line"
-msgstr "_Lehen lerroa"
+#: templates/memo/memo.inc:84
+msgid "_Encrypt?"
+msgstr "_Enkriptatu?"
+
+#: templates/search/search.inc:9
+msgid "_For: "
+msgstr "_Honentzat: "
-#: lib/Mnemo.php:281
+#: lib/Mnemo.php:494
msgid "_Import/Export"
msgstr "_Inportatu/esportatu"
-#: lib/Mnemo.php:264
+#: lib/Mnemo.php:481
msgid "_List Notes"
-msgstr "_Zerrendatu oharrak"
-
-#: lib/Mnemo.php:276
-msgid "_My Notepads"
-msgstr "_Nire ohar-blokak"
+msgstr "Zerre_ndatu oharrak"
-#: lib/Mnemo.php:269
+#: lib/Mnemo.php:486
msgid "_New Note"
msgstr "_Ohar berria"
-#: lib/Mnemo.php:286
+#: templates/view/memo.inc:52 templates/memo/memo.inc:21
+msgid "_Password"
+msgstr "_Pasahitza"
+
+#: templates/memo/memo.inc:89
+msgid "_Password:"
+msgstr "_Pasahitza:"
+
+#: lib/Mnemo.php:499
msgid "_Print"
msgstr "I_nprimatu"
-#: lib/Mnemo.php:272
+#: templates/memo/memo.inc:93
+msgid "_Repeat:"
+msgstr "E_rrepikatu:"
+
+#: lib/Mnemo.php:490
msgid "_Search"
msgstr "_Bilatu"
-#: data.php:91 templates/data/export.inc:1
+#: templates/search/search.inc:20
+msgid "_Title"
+msgstr "_Izenburua"
+
+#: view.php:74 view.php:83
+#, php-format
+msgid "by %s"
+msgstr "- %s"
+
+#: view.php:76 view.php:85
+msgid "by me"
+msgstr "nik"
+
+#: lib/Block/tree_menu.php:33
+#, php-format
+msgid "in %s"
+msgstr "Hemen: %s"
+
+#: data.php:90 templates/data/export.inc:4
msgid "notes.csv"
-msgstr "oharrak.csv"
+msgstr "notes.csv"
-#: data.php:33 templates/data/import.inc:18
+#: data.php:33 templates/data/import.inc:12
msgid "vNote"
msgstr "vNote"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index eca9ced..28560b7 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -1,13 +1,13 @@
# Finnish translation for Mnemo.
-# Copyright (C)
+# Copyright
# Leena Heino <liinu at uta.fi>, 2002-2008.
#
msgid ""
msgstr ""
"Project-Id-Version: Mnemo 3.0-cvs\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-08-20 17:49+0300\n"
-"PO-Revision-Date: 2008-08-20 12:59+0200\n"
+"POT-Creation-Date: 2009-01-29 16:00+0200\n"
+"PO-Revision-Date: 2008-11-03 12:59+0200\n"
"Last-Translator: Leena Heino <liinu at uta.fi>\n"
"Language-Team: Finnish <i18n at lists.horde.org>\n"
"MIME-Version: 1.0\n"
@@ -25,16 +25,16 @@ msgstr "%s merkki
msgid "%s file successfully imported"
msgstr "%s tiedoston tuonti onnistui"
-#: lib/Mnemo.php:453 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:459 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "%s:n muistilista"
-#: memo.php:201
+#: memo.php:200
msgid "Access denied deleting note."
msgstr "Sinulla ei ole oikeuksia poistaa muistiinpanoa."
-#: memo.php:150 memo.php:153
+#: memo.php:143 memo.php:146
msgid "Access denied moving the note."
msgstr "Sinulla ei ole oikeuksia poistaa muistiinpanoa."
@@ -243,6 +243,10 @@ msgstr "Valikkolista"
msgid "More Options..."
msgstr "Lisää asetuksia..."
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr "Löytyi useita iCalendar komponentteja; vain yksi vNote on tuettu."
+
#: templates/panel.inc:50
msgid "My Notepads:"
msgstr "Omat muistilistani:"
@@ -263,7 +267,7 @@ msgstr "Uusi muistiinpano"
msgid "Next"
msgstr "Seuraava"
-#: lib/api.php:337
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr "iCalendar tietoja ei löytynyt."
@@ -283,7 +287,7 @@ msgstr "Ei muistiinpanoja n
msgid "No_te"
msgstr "Mu_istiinpano"
-#: lib/Driver/sql.php:195
+#: lib/Driver/sql.php:196
msgid "Not found"
msgstr "Ei löytynyt."
@@ -307,7 +311,7 @@ msgstr "Muistiinpanon _teksti"
msgid "Note not found."
msgstr "Muistiinpanoa ei löytynyt."
-#: templates/memo/memo.inc:59
+#: templates/memo/memo.inc:60
msgid "Note_pad"
msgstr "Muisti_lista"
@@ -350,7 +354,7 @@ msgstr ""
msgid "Really delete this note?"
msgstr "Poistetaanko tämä muistiinpano?"
-#: templates/panel.inc:68 templates/memo/memo.inc:57
+#: templates/panel.inc:68 templates/memo/memo.inc:58
#: lib/Forms/EditNotepad.php:46
msgid "Save"
msgstr "Talleta"
@@ -364,7 +368,7 @@ msgstr "Talleta PDF-muodossa"
msgid "Search"
msgstr "Haku"
-#: list.php:54
+#: list.php:54 notes/index.php:35
msgid "Search Results"
msgstr "Haun tulokset"
@@ -420,7 +424,7 @@ msgstr "J
msgid "Sort by Notepad"
msgstr "Järjestä muistlistan mukaan"
-#: memo.php:175
+#: memo.php:174
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "'%s':n talletus onnistui."
@@ -439,7 +443,7 @@ msgstr "Muistiinpanojen taustaj
msgid "The Notes backend is not currently available: %s"
msgstr "Muistiinpanojen taustajärjestelmä ei ole käytettävissä: %s"
-#: memo.php:198
+#: memo.php:197
msgid "The note was deleted."
msgstr "Muistiinpano on poistettu."
@@ -468,14 +472,10 @@ msgstr "Muistilista \"%s\" on talletettu."
msgid "There was an error importing the data: %s"
msgstr "Tapahtui virhe tuotaessa tietoa: %s"
-#: lib/api.php:331
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr "Tapahtui virhe tuotaessa iCalendar tietoja."
-#: lib/api.php:518
-msgid "There was an error importing the vNote data."
-msgstr "Tapahtui virhe tuotaessa vNote tietoja."
-
#: lib/api.php:168
#, php-format
msgid "There was an error removing notes for %s. Details have been logged."
@@ -483,12 +483,12 @@ msgstr ""
"Tapahtui virhe poistettaessa muistiinpanoa %s. Tarkemmat tiedot on "
"talletettu lokitietoihin."
-#: memo.php:196
+#: memo.php:195
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Muistiinpanon poistamisessa tapahtui virhe: %s"
-#: memo.php:173
+#: memo.php:172
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Muistiinpanon talletetuksessa tapahtui virhe: %s"
@@ -515,7 +515,7 @@ msgid "This note has been encrypted, please provide the password below."
msgstr "Tämä muistiinpano on salattu, anna salasana alla olevaan tilaan."
#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:408
-#: lib/Driver/kolab.php:766 lib/Driver/sql.php:448
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:459
msgid "This note has been encrypted."
msgstr "Tämä muistiinpano on salattu."
@@ -539,12 +539,12 @@ msgid "Unable to save notepad \"%s\": %s"
msgstr "Ei voi tallentaa muistilistaa \"%s\": %s"
#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
-#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
#: lib/Block/summary.php:107
msgid "Unfiled"
msgstr "Luokittelematon"
-#: lib/api.php:367 lib/api.php:433 lib/api.php:526
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Ei tuettu Content-Type: %s"
@@ -587,7 +587,7 @@ msgstr "[Hallinnoi muistilistoja]"
msgid "_Body"
msgstr "_Leipäteksti"
-#: templates/memo/memo.inc:70 templates/list/memo_headers.inc:41
+#: templates/memo/memo.inc:71 templates/list/memo_headers.inc:41
msgid "_Category"
msgstr "_Kategoria"
@@ -599,7 +599,7 @@ msgstr "_Poista"
msgid "_Edit"
msgstr "_Muokkaa"
-#: templates/memo/memo.inc:74
+#: templates/memo/memo.inc:75
msgid "_Encrypt?"
msgstr "_Salaa?"
@@ -607,28 +607,28 @@ msgstr "_Salaa?"
msgid "_For: "
msgstr "_Syy:"
-#: lib/Mnemo.php:490
+#: lib/Mnemo.php:496
msgid "_Import/Export"
msgstr "_Tuo/Vie"
-#: lib/Mnemo.php:477
+#: lib/Mnemo.php:483
msgid "_List Notes"
msgstr "_Listaa muistiinpanot"
-#: lib/Mnemo.php:482
+#: lib/Mnemo.php:488
msgid "_New Note"
msgstr "_Uusi muistiinpano"
#: templates/view/memo.inc:52 templates/memo/memo.inc:21
-#: templates/memo/memo.inc:79
+#: templates/memo/memo.inc:80
msgid "_Password"
msgstr "S_alasana"
-#: lib/Mnemo.php:495
+#: lib/Mnemo.php:501
msgid "_Print"
msgstr "_Tulosta"
-#: lib/Mnemo.php:486
+#: lib/Mnemo.php:492
msgid "_Search"
msgstr "_Haku"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 4f0aa54..9921477 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -7,13 +7,13 @@
# Benoit St-André <ben at benoitst-andre.net>, 2004.
# Patrick Abiven <patrick.abiven at apitech.fr>, 2006.
# Vincent Vinet <vvinet at revolutionlinux.com>, 2007.
-# Yannick Sebastia <yannick.sebastia at ecole-navale.fr>, 2008.
+# Yannick Sebastia <yannick.sebastia at ecole-navale.fr>, 2008, 2009.
msgid ""
msgstr ""
"Project-Id-Version: fr_FR\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-03-18 09:02+0100\n"
-"PO-Revision-Date: 2008-03-18 08:25+0100\n"
+"POT-Creation-Date: 2009-05-22 08:29+0200\n"
+"PO-Revision-Date: 2009-05-22 08:29+0200\n"
"Last-Translator: Yannick Sebastia <yannick.sebastia at ecole-navale.fr>\n"
"Language-Team: Francais <i18n at lists.horde.org>\n"
"MIME-Version: 1.0\n"
@@ -27,21 +27,21 @@ msgstr ""
msgid "%s characters"
msgstr "%s caractères"
-#: data.php:199
+#: data.php:200
#, php-format
msgid "%s file successfully imported"
msgstr "%s fichiers importés avec succès"
-#: lib/Mnemo.php:429 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "Bloc-notes de %s"
-#: memo.php:199
+#: memo.php:200
msgid "Access denied deleting note."
msgstr "Suppression de la note interdite."
-#: memo.php:150 memo.php:153
+#: memo.php:143 memo.php:146
msgid "Access denied moving the note."
msgstr "Accès refusé en déplaçant la note."
@@ -71,7 +71,7 @@ msgstr "Annuler"
msgid "Category"
msgstr "Catégorie"
-#: notepads/index.php:32 templates/notepad_list.php:31
+#: notepads/index.php:32 templates/notepad_list.php:29
msgid "Change Permissions"
msgstr "Modifier les permissions"
@@ -95,7 +95,7 @@ msgstr "Cr
msgid "Create Notepad"
msgstr "Créer un Bloc-notes"
-#: templates/notepad_list.php:8
+#: templates/notepad_list.php:9
msgid "Create a new Notepad"
msgstr "Créer un nouveau Bloc-notes"
@@ -120,7 +120,7 @@ msgid "Default sorting direction:"
msgstr "Sens du tri par défaut :"
#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
-#: templates/notepad_list.php:33 templates/view/memo.inc:16
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
msgid "Delete"
msgstr "Supprimer"
@@ -162,7 +162,7 @@ msgstr "Options d'affichage"
msgid "Do you want to confirm deleting entries?"
msgstr "Voulez-vous confirmer la suppression des entrées ?"
-#: notepads/index.php:31 templates/notepad_list.php:29
+#: notepads/index.php:31 templates/notepad_list.php:27
#: templates/view/memo.inc:13
msgid "Edit"
msgstr "Modifier"
@@ -177,7 +177,8 @@ msgstr "Modifier \"%s\""
msgid "Edit %s"
msgstr "Modifier %s"
-#: lib/Block/summary.php:74 templates/list/memo_headers.inc:30
+#: lib/Block/summary.php:79 lib/Block/summary.php:80
+#: templates/list/memo_headers.inc:30
msgid "Edit Note"
msgstr "Modifier la note"
@@ -190,7 +191,7 @@ msgstr "Modifier les cat
msgid "Edit: %s"
msgstr "Modifier: \"%s\""
-#: lib/Block/summary.php:93 templates/list/memo_summaries.inc:15
+#: lib/Block/summary.php:104 templates/list/memo_summaries.inc:15
msgid "Empty Note"
msgstr "Vider la note"
@@ -219,7 +220,7 @@ msgstr "Options g
msgid "Import Notes, Step %d"
msgstr "Importation des notes, étape %d"
-#: data.php:205
+#: data.php:206
msgid "Import/Export Notes"
msgstr "Importer/Exporter des notes"
@@ -235,7 +236,7 @@ msgstr "Derni
msgid "Manage Notepads"
msgstr "Mes bloc-notes"
-#: lib/api.php:77
+#: lib/api.php:82
msgid "Maximum Number of Notes"
msgstr "Nombre maximum de notes"
@@ -271,7 +272,7 @@ msgstr "Nouvelle note"
msgid "Next"
msgstr "Suivant"
-#: lib/api.php:272
+#: lib/api.php:337
msgid "No iCalendar data was found."
msgstr "Aucune donnée iCalendar n'a été trouvée."
@@ -283,7 +284,7 @@ msgstr "Aucune note correspondante"
msgid "No notes match the current criteria."
msgstr "Aucune note ne correspond au présent critère."
-#: lib/Block/summary.php:101
+#: lib/Block/summary.php:112
msgid "No notes to display"
msgstr "Aucune note à afficher"
@@ -299,7 +300,7 @@ msgstr "Non trouv
msgid "Note Category"
msgstr "Catégorie de note"
-#: view.php:108
+#: view.php:121
msgid "Note Details"
msgstr "Détails de la note"
@@ -319,12 +320,12 @@ msgstr "Note non trouv
msgid "Note_pad"
msgstr "_Bloc-notes"
-#: templates/notepad_list.php:15 templates/list/memo_headers.inc:33
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
#: config/prefs.php.dist:60
msgid "Notepad"
msgstr "Bloc-notes"
-#: templates/notepad_list.php:12
+#: templates/notepad_list.php:14
msgid "Notepad List"
msgstr "Listes des notes"
@@ -336,8 +337,8 @@ msgstr "Blocs-notes"
msgid "Notes Summary"
msgstr "Sommaire des notes"
-#: lib/api.php:147 lib/api.php:187 lib/api.php:220 lib/api.php:250
-#: lib/api.php:337 lib/api.php:396 lib/api.php:425
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "Accès refusé"
@@ -402,11 +403,11 @@ msgstr ""
"Le bloc-notes doit-il être affiché dans sa propre colonne dans la liste de "
"consultation ?"
-#: lib/Block/summary.php:34
+#: lib/Block/summary.php:35
msgid "Show action buttons?"
msgstr "Afficher boutons d'action ?"
-#: lib/Block/summary.php:37
+#: lib/Block/summary.php:39
msgid "Show notepad name?"
msgstr "Afficher le nom du bloc-notes ?"
@@ -414,7 +415,7 @@ msgstr "Afficher le nom du bloc-notes
msgid "Show notepad options panel?"
msgstr "Afficher le panneau des options du bloc-notes ?"
-#: lib/Block/summary.php:40
+#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "Afficher les notes de ces catégories"
@@ -430,12 +431,12 @@ msgstr "Tri selon le texte de la note"
msgid "Sort by Notepad"
msgstr "Tri par bloc-notes"
-#: memo.php:173
-#, fuzzy, php-format
+#: memo.php:174
+#, php-format
msgid "Successfully saved \"%s\"."
msgstr "« %s » a été enregistré avec succès."
-#: data.php:193
+#: data.php:194
#, php-format
msgid "The %s file didn't contain any notes."
msgstr "Le fichier %s ne contient aucune note."
@@ -449,7 +450,7 @@ msgstr "Le support des bloc-notes n'est actuellement pas disponible."
msgid "The Notes backend is not currently available: %s"
msgstr "Le support des bloc-notes n'est actuellement pas disponible : %s"
-#: memo.php:196
+#: memo.php:197
msgid "The note was deleted."
msgstr "La note a été supprimée."
@@ -473,26 +474,32 @@ msgstr "Le bloc-notes \"%s\" a
msgid "The notepad \"%s\" has been saved."
msgstr "Le bloc-notes « %s » a été enregistré."
-#: data.php:196
+#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr "Une erreur est apparue lors de l'importation des données : %s"
-#: lib/api.php:266
-#, fuzzy
+#: lib/api.php:331
msgid "There was an error importing the iCalendar data."
msgstr "Une erreur s'est produite lors de l'importation des données iCalendar."
-#: lib/api.php:444
+#: lib/api.php:518
msgid "There was an error importing the vNote data."
msgstr "Une erreur s'est produite lors de l'importation des données vNote."
-#: memo.php:194
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr ""
+"Une erreur est apparue lors de la suppression de la note pour %s. Les "
+"détails ont été journalisés."
+
+#: memo.php:195
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Une erreur est apparue lors du retrait de la note : %s"
-#: memo.php:171
+#: memo.php:172
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Une erreur s'est produite lors de l'enregistrement de la note : %s"
@@ -506,21 +513,21 @@ msgstr "Il y a eu une erreur lors de l'ouverture de ce bloc-notes
msgid "There were no memos to export."
msgstr "Aucune note à exporter n'a été trouvée."
-#: data.php:104
+#: data.php:105
msgid "This file format is not supported."
msgstr "Ce format de fichier n'est pas pris en compte."
-#: memo.php:91 view.php:98
+#: memo.php:91 view.php:111
msgid "This note cannot be decrypted:"
msgstr "Cette note ne peut être chiffée : "
-#: memo.php:83 view.php:90
+#: memo.php:83 view.php:103
msgid "This note has been encrypted, please provide the password below."
msgstr ""
"Cette note a été chiffrée, merci de fournir le mot de passe ci-dessous."
-#: memo.php:80 memo.php:88 view.php:87 view.php:95 lib/Driver/sql.php:448
-#: lib/Driver/kolab.php:752
+#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:408
+#: lib/Driver/sql.php:458 lib/Driver/kolab.php:766
msgid "This note has been encrypted."
msgstr "La note a été chiffrée."
@@ -543,13 +550,13 @@ msgstr "Impossible de charger la d
msgid "Unable to save notepad \"%s\": %s"
msgstr "Impossible de sauvegarder le bloc-notes \"%s\": %s"
-#: lib/Mnemo.php:245 lib/Mnemo.php:246 lib/Mnemo.php:260 lib/Mnemo.php:261
-#: lib/Block/summary.php:96 templates/list/memo_summaries.inc:17
+#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
+#: lib/Block/summary.php:107 templates/list/memo_summaries.inc:17
#: templates/view/memo.inc:27
msgid "Unfiled"
msgstr "Hors catégorie"
-#: lib/api.php:302 lib/api.php:359 lib/api.php:452
+#: lib/api.php:367 lib/api.php:433 lib/api.php:526
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Type de contenu non-supporté : %s"
@@ -562,7 +569,7 @@ msgstr "
msgid "You are not allowed to change this notepad."
msgstr "Vous n'êtes pas autorisé à modifier ce bloc-notes."
-#: data.php:42 data.php:128 memo.php:37
+#: data.php:42 data.php:129 memo.php:37
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr "Vous n'êtes pas autorisé à créer plus de %d notes."
@@ -571,6 +578,10 @@ msgstr "Vous n'
msgid "You are not allowed to delete this notepad."
msgstr "Vous n'êtes pas autorisé à supprimer ce bloc-notes."
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr "Vous n'êtes pas autorisé à supprimer des données utilisateur."
+
#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
@@ -608,15 +619,15 @@ msgstr "_Chiffrer ?"
msgid "_For: "
msgstr "_Pour: "
-#: lib/Mnemo.php:466
+#: lib/Mnemo.php:488
msgid "_Import/Export"
msgstr "_Importer/Exporter"
-#: lib/Mnemo.php:453
+#: lib/Mnemo.php:475
msgid "_List Notes"
msgstr "Afficher _les notes"
-#: lib/Mnemo.php:458
+#: lib/Mnemo.php:480
msgid "_New Note"
msgstr "_Nouvelle note"
@@ -625,11 +636,11 @@ msgstr "_Nouvelle note"
msgid "_Password"
msgstr "_Mot de passe"
-#: lib/Mnemo.php:471
+#: lib/Mnemo.php:493
msgid "_Print"
msgstr "Im_primer"
-#: lib/Mnemo.php:462
+#: lib/Mnemo.php:484
msgid "_Search"
msgstr "_Recherche"
@@ -637,6 +648,15 @@ msgstr "_Recherche"
msgid "_Title"
msgstr "_Titre"
+#: view.php:74 view.php:83
+#, php-format
+msgid "by %s"
+msgstr "Tri par %s"
+
+#: view.php:76 view.php:85
+msgid "by me"
+msgstr "par moi"
+
#: lib/Block/tree_menu.php:33
#, php-format
msgid "in %s"
diff --git a/po/nl_NL.po b/po/hr_HR.po
similarity index 55%
copy from po/nl_NL.po
copy to po/hr_HR.po
index c49efc6..0a2513f 100644
--- a/po/nl_NL.po
+++ b/po/hr_HR.po
@@ -1,56 +1,58 @@
-# Mnemo Dutch translation.
-# Copyright (C) 2002 Jan Kuipers.
-# Jan Kuipers <jrkuipers at lauwerscollege.nl>, 2002-2008.
+# Croatian translations for Mnemo.
+# Copyright (C) 2008 Horde Project
+# This file is distributed under the same license as the horde package.
+# Matej Vela <Matej.Vela at CARNet.hr>, 2008.
#
msgid ""
msgstr ""
-"Project-Id-Version: Mneno H3 (2.2.1-cvs)\n"
+"Project-Id-Version: horde 3\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-08-08 23:32+0200\n"
-"PO-Revision-Date: 2008-08-09 12:48+0200\n"
-"Last-Translator: Jan Kuipers <jrkuipers at lauwerscollege.nl>\n"
-"Language-Team: Dutch <i18n at lists.horde.org>\n"
+"POT-Creation-Date: 2009-09-16 13:45+0200\n"
+"PO-Revision-Date: 2008-02-26 16:13+0100\n"
+"Last-Translator: Matej Vela <Matej.Vela at CARNet.hr>\n"
+"Language-Team: i18n at lists.horde.org\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: templates/memo/memo.inc:53
#, php-format
msgid "%s characters"
-msgstr "%s tekens"
+msgstr "%s znakova"
#: data.php:200
#, php-format
msgid "%s file successfully imported"
-msgstr "%s bestand met succes geimporteerd"
+msgstr "%s datoteka uspješno uvezena"
-#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
-msgstr "%s's notitieboek"
+msgstr "%s - Bilježnica"
-#: memo.php:201
+#: memo.php:237
msgid "Access denied deleting note."
-msgstr "Toegang geweigerd bij verwijderen van notitie."
+msgstr "Pristup odbijen pri brisanju bilješke."
-#: memo.php:150 memo.php:153
+#: memo.php:180 memo.php:183
msgid "Access denied moving the note."
-msgstr "Toegang geweigerd bij verplaatsen van de notitie."
+msgstr "Pristup odbijen pri preimenovanju bilješke."
-#: memo.php:120
+#: memo.php:135
#, php-format
msgid "Access denied saving note to %s."
-msgstr "Toegang geweigerd bij opslaan van notitie in %s."
+msgstr "Pristup odbijen pri spremanju bilješke u %s."
-#: memo.php:118
+#: memo.php:133
#, php-format
msgid "Access denied saving note: %s"
-msgstr "Toegang geweigerd bij opslaan van notitie: %s"
+msgstr "Pristup odbijen pri spremanju bilješke: %s"
-#: config/prefs.php.dist:70
+#: config/prefs.php.dist:69
msgid "Ascending"
-msgstr "Toenemend"
+msgstr "uzlazno"
#: data.php:32 templates/data/import.inc:11
msgid "CSV"
@@ -58,286 +60,289 @@ msgstr "CSV"
#: lib/Forms/DeleteNotepad.php:45 lib/Forms/DeleteNotepad.php:51
msgid "Cancel"
-msgstr "Afbreken"
+msgstr "Odustani"
#: data.php:54 templates/view/memo.inc:26
msgid "Category"
-msgstr "Categorie"
+msgstr "Kategorija"
#: notepads/index.php:32 templates/notepad_list.php:29
msgid "Change Permissions"
-msgstr "Rechten wijzigen"
+msgstr "Promijeni dozvole"
#: config/prefs.php.dist:14
msgid "Change your note sorting and display options."
-msgstr "Wijzig uw notitie sorteer- en weergaveopties."
+msgstr "Prilagodite opcije sortiranja i prikazivanja bilješki."
#: config/prefs.php.dist:21
msgid "Choose your default Notepad."
-msgstr "Kies standaard notitieboek."
+msgstr "Izaberite podrazumijevanu Bilježnicu."
#: templates/list/header.inc:8
msgid "Close Search"
-msgstr "Zoeken afsluiten"
+msgstr "Zatvori pretragu"
#: lib/Forms/CreateNotepad.php:39
msgid "Create"
-msgstr "Maken"
+msgstr "Kreiraj"
#: lib/Forms/CreateNotepad.php:34
msgid "Create Notepad"
-msgstr "Notitieboek maken"
+msgstr "Kreiraj Bilježnicu"
#: templates/notepad_list.php:9
msgid "Create a new Notepad"
-msgstr "Een nieuw notitieboek maken"
+msgstr "Kreiraj novu Bilježnicu"
#: templates/view/memo.inc:32
msgid "Created"
-msgstr "Gemaakt"
+msgstr "Kreirano"
#: templates/view/memo.inc:54 templates/memo/memo.inc:23
msgid "Decrypt"
-msgstr "Decoderen"
+msgstr "Dešifriraj"
#: config/prefs.php.dist:20
msgid "Default Notepad"
-msgstr "Standaard notitieboek"
+msgstr "Podrazumijevana Bilježnica"
-#: config/prefs.php.dist:61
+#: config/prefs.php.dist:60
msgid "Default sorting criteria:"
-msgstr "Standaard sorteercriteria:"
+msgstr "Podrazumijevani kriteriji sortiranja:"
-#: config/prefs.php.dist:72
+#: config/prefs.php.dist:71
msgid "Default sorting direction:"
-msgstr "Standaard sorteervolgorde:"
+msgstr "Podrazumijevani smjer sortiranja:"
-#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
+#: lib/Forms/DeleteNotepad.php:45 notepads/index.php:33
#: templates/notepad_list.php:31 templates/view/memo.inc:16
msgid "Delete"
-msgstr "Verwijderen"
+msgstr "Obriši"
#: lib/Forms/DeleteNotepad.php:40
#, php-format
msgid "Delete %s"
-msgstr "Verwijder %s"
+msgstr "Obriši %s"
#: config/prefs.php.dist:27
msgid "Delete Confirmation"
-msgstr "Verwijderbevestiging"
+msgstr "Obriši potvrdu"
#: config/prefs.php.dist:28
msgid "Delete button behaviour"
-msgstr "Verwijderknopgedrag"
+msgstr "Ponašanje gumba Obriši"
#: templates/memo/memo.inc:11
msgid "Delete this note"
-msgstr "Verwijder deze notitie"
+msgstr "Obriši ovu bilješku"
-#: config/prefs.php.dist:71
+#: config/prefs.php.dist:70
msgid "Descending"
-msgstr "Afnemend"
+msgstr "silazno"
#: lib/Forms/CreateNotepad.php:37 lib/Forms/EditNotepad.php:44
msgid "Description"
-msgstr "Beschrijving"
+msgstr "Opis"
#: lib/Driver/kolab.php:556
#, php-format
msgid "Did not find note %s"
-msgstr "Notitie %s niet gevonden"
+msgstr "Nije pronaÄena biljeÅ¡ka %s"
#: config/prefs.php.dist:13
msgid "Display Options"
-msgstr "Weergaveopties"
+msgstr "Opcije prikaza"
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:116
msgid "Do you want to confirm deleting entries?"
-msgstr "Wilt u het verwijderen van invoer bevestigen?"
+msgstr "Želite li potvrÄivati brisanje zapisa?"
#: notepads/index.php:31 templates/notepad_list.php:27
#: templates/view/memo.inc:13
msgid "Edit"
-msgstr "Bewerken"
+msgstr "Uredi"
#: templates/list/memo_summaries.inc:5
#, php-format
msgid "Edit \"%s\""
-msgstr "\"%s\" bewerken"
+msgstr "Uredi \"%s\""
#: lib/Forms/EditNotepad.php:40
#, php-format
msgid "Edit %s"
-msgstr "%s bewerken"
+msgstr "Uredi %s"
#: lib/Block/summary.php:79 lib/Block/summary.php:80
#: templates/list/memo_headers.inc:30
msgid "Edit Note"
-msgstr "Notitie bewerken"
+msgstr "Uredi bilješku"
#: templates/list/memo_headers.inc:45
msgid "Edit categories and colors"
-msgstr "Categorieën en kleuren bewerken"
+msgstr "Uredi kategorije i boje"
-#: memo.php:104
+#: memo.php:118 memo.php:149
#, php-format
msgid "Edit: %s"
-msgstr "Bewerken: %s"
+msgstr "Uredi: %s"
#: lib/Block/summary.php:104 templates/list/memo_summaries.inc:15
msgid "Empty Note"
-msgstr "Lege notitie"
+msgstr "Prazna bilješka"
#: lib/Driver.php:118
msgid ""
"Encryption support has not been configured, please contact your "
"administrator."
msgstr ""
-"Codering wordt in de huidige configuratie niet ondersteund. Neem contact op "
-"met de beheerder, a.u.b."
+"Podrška za šifriranje nije podešena, molimo kontaktirajte administratora."
#: templates/data/export.inc:16
msgid "Export"
-msgstr "Exporteren"
+msgstr "Izvoz"
#: templates/data/export.inc:2
msgid "Export Notes"
-msgstr "Notities exporteren"
+msgstr "Izvoz bilješki"
#: config/prefs.php.dist:12 config/prefs.php.dist:19 config/prefs.php.dist:26
msgid "General Options"
-msgstr "Algemene opties"
+msgstr "OpÄenite opcije"
#: templates/data/import.inc:1
#, php-format
msgid "Import Notes, Step %d"
-msgstr "Notities importeren, stap %d"
+msgstr "Uvoz bilješki, korak %d"
#: data.php:206
msgid "Import/Export Notes"
-msgstr "Notities importeren/exporteren"
+msgstr "Uvoz/izvoz bilješki"
#: templates/search/search.inc:17
msgid "In: "
-msgstr "In: "
+msgstr "U: "
#: templates/view/memo.inc:39
msgid "Last Modified"
-msgstr "Laatst gewijzigd"
+msgstr "Zadnja promjena"
#: notepads/index.php:37 templates/notepad_list.php:2
msgid "Manage Notepads"
-msgstr "Notitieboeken beheren"
+msgstr "Upravljaj bilježnicama"
#: lib/api.php:82
msgid "Maximum Number of Notes"
-msgstr "Maximum aantal notities"
+msgstr "Maksimalni broj bilješki"
#: data.php:53
msgid "Memo Text"
-msgstr "Notitietekst"
+msgstr "Tekst dopisa"
#: lib/Block/tree_menu.php:3
msgid "Menu List"
-msgstr "Menulijst"
+msgstr "Izbornik"
#: templates/list/header.inc:9
msgid "More Options..."
-msgstr "Meer opties..."
+msgstr "Još opcija..."
+
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr "NaÄeno viÅ¡e iCalendar komponenti; podržan je samo jedan vTodo."
#: templates/panel.inc:50
msgid "My Notepads:"
-msgstr "Mijn notitieboeken:"
+msgstr "Moje bilježnice:"
#: list.php:31
msgid "My Notes"
-msgstr "Mijn notities"
+msgstr "Moje bilješke"
#: lib/Forms/CreateNotepad.php:36 lib/Forms/EditNotepad.php:43
msgid "Name"
-msgstr "Naam"
+msgstr "Ime"
-#: memo.php:57 lib/Block/tree_menu.php:23
+#: memo.php:95 memo.php:140 lib/Block/tree_menu.php:23
msgid "New Note"
-msgstr "Nieuwe notitie"
+msgstr "Nova bilješka"
#: templates/data/import.inc:34
msgid "Next"
-msgstr "Volgende"
+msgstr "Dalje"
-#: lib/api.php:332
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
-msgstr "Geen iCalendardata gevonden."
+msgstr "Nisu pronaÄeni podaci u iCalendar formatu."
#: templates/list/memo_footers.inc:4
msgid "No notes match"
-msgstr "Geen notities komen overeen"
+msgstr "Nije naÄena nijedna biljeÅ¡ka"
#: templates/list/empty.inc:1
msgid "No notes match the current criteria."
-msgstr "Geen notities die overeen komen met de huidige criteria."
+msgstr "Nijedna bilješka ne zadovoljava trenutne uvjete."
#: lib/Block/summary.php:112
msgid "No notes to display"
-msgstr "Geen notities weer te geven"
+msgstr "Nema bilješki za prikaz"
#: templates/list/memo_headers.inc:37
msgid "No_te"
-msgstr "No_titie"
+msgstr "_Bilješka"
-#: lib/Driver/sql.php:195
+#: lib/Driver/sql.php:198
msgid "Not found"
-msgstr "Niet gevonden"
+msgstr "Nije naÄeno"
-#: config/prefs.php.dist:59
+#: config/prefs.php.dist:58
msgid "Note Category"
-msgstr "Notitiecategorie"
+msgstr "Kategorija bilješke"
#: view.php:121
msgid "Note Details"
-msgstr "Notitiedetails"
+msgstr "Detalji bilješke"
-#: config/prefs.php.dist:58
+#: config/prefs.php.dist:57
msgid "Note Text"
-msgstr "Notitietekst"
+msgstr "Tekst bilješke"
#: templates/memo/memo.inc:53
msgid "Note _Text"
-msgstr "Notitiet_ekst"
+msgstr "_Tekst bilješke"
-#: memo.php:67 view.php:56 note/pdf.php:57
+#: memo.php:105 memo.php:145 view.php:56 note/pdf.php:57
msgid "Note not found."
-msgstr "Notitie niet gevonden."
+msgstr "BiljeÅ¡ka nije naÄena"
-#: templates/memo/memo.inc:59
-msgid "Note_pad"
-msgstr "Notitie_boek"
+#: templates/memo/memo.inc:63
+msgid "Note_pad:"
+msgstr "B_ilježnica"
#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
-#: config/prefs.php.dist:60
+#: config/prefs.php.dist:59
msgid "Notepad"
-msgstr "Notitieboek"
+msgstr "Bilježnica"
#: templates/notepad_list.php:14
msgid "Notepad List"
-msgstr "Notitieboek lijst"
+msgstr "Popis bilježnica"
#: templates/panel.inc:32 templates/panel.inc:33
msgid "Notepads"
-msgstr "Notitieboeken"
+msgstr "Bilježnice"
#: lib/Block/summary.php:3
msgid "Notes Summary"
-msgstr "Notitiesamenvatting"
+msgstr "Pregled bilješki"
-#: lib/api.php:207 lib/api.php:247 lib/api.php:280 lib/api.php:310
-#: lib/api.php:397 lib/api.php:465 lib/api.php:494
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
-msgstr "Toegang geweigerd"
+msgstr "Pristup odbijen"
#: lib/Forms/DeleteNotepad.php:56
msgid "Permission denied"
-msgstr "Toegang geweigerd"
+msgstr "Pristup odbijen"
#: lib/Forms/DeleteNotepad.php:43
#, php-format
@@ -345,317 +350,323 @@ msgid ""
"Really delete the notepad \"%s\"? This cannot be undone and all data on this "
"notepad will be permanently removed."
msgstr ""
-"Notitieboek \"%s\" echt verwijderen? Dit kan niet ongedaan worden gemaakt en "
-"alle data in dit notitieboek zal definitief worden verwijderd."
+"Stvarno obrisati bilježnicu \"%s\"? Ovo se ne može opozvati i svi podaci u "
+"ovoj bilježnici Äe biti nepovratno obrisani."
#: templates/view/memo.inc:16
msgid "Really delete this note?"
-msgstr "Echt deze notitie verwijderen?"
+msgstr "Stvarno obrisati ovu bilješku?"
#: lib/Forms/EditNotepad.php:46 templates/panel.inc:68
-#: templates/memo/memo.inc:57
+#: templates/memo/memo.inc:58
msgid "Save"
-msgstr "Opslaan"
+msgstr "Spremi"
#: templates/view/memo.inc:11
msgid "Save as PDF"
-msgstr "Opslaan als PDF"
+msgstr "Spremi kao PDF"
#: search.php:17 lib/Block/tree_menu.php:44 templates/list/header.inc:4
#: templates/search/search.inc:4 templates/search/search.inc:27
msgid "Search"
-msgstr "Zoeken"
+msgstr "Pretraga"
-#: list.php:54
+#: list.php:54 notes/index.php:35
msgid "Search Results"
-msgstr "Zoekresultaten"
+msgstr "Rezultati pretrage"
#: templates/panel.inc:38
msgid "Search for Notepads:"
-msgstr "Zoek naar notitieboeken:"
+msgstr "Traži bilježnice:"
#: templates/data/export.inc:9
msgid "Select the export format:"
-msgstr "Selecteer het exportformaat:"
+msgstr "Odaberite izvozni format:"
#: templates/data/import.inc:31
msgid "Select the file to import:"
-msgstr "Selecteer het importbestand:"
+msgstr "Odaberite datoteku za uvoz:"
#: templates/data/import.inc:9
msgid "Select the format of the source file:"
-msgstr "Selecteer het formaat van het bronbestand:"
+msgstr "Odaberite format izvorne datoteke:"
#: templates/panel.inc:59
msgid "Shared Notepads:"
-msgstr "Gedeelde notitieboeken:"
+msgstr "ZajedniÄke bilježnice:"
#: config/prefs.php.dist:39
msgid "Should the Notepad be shown in its own column in the List view?"
-msgstr ""
-"Dient het notitieboek in een eigen kolom in de lijstweergave weergegeven te "
-"worden?"
+msgstr "Treba li prikazati bilježnicu u posebnom stupcu pregleda?"
#: lib/Block/summary.php:35
msgid "Show action buttons?"
-msgstr "Bewerkingsknoppen weergeven?"
+msgstr "Prikazati akcijske gumbe?"
#: lib/Block/summary.php:39
msgid "Show notepad name?"
-msgstr "Notitieboeknamen weergeven?"
-
-#: config/prefs.php.dist:49
-msgid "Show notepad options panel?"
-msgstr "Notitieboekoptiespaneel weergeven?"
+msgstr "Prikazati ime bilježnice?"
#: lib/Block/summary.php:43
msgid "Show notes from these categories"
-msgstr "Notities van deze categorieen weergeven"
+msgstr "Prikaži biljeÅ¡ke iz sljedeÄih kategorija"
#: templates/list/memo_headers.inc:41
msgid "Sort by Category"
-msgstr "Sorteren op categorie"
+msgstr "Sortiraj po kategoriji"
#: templates/list/memo_headers.inc:37
msgid "Sort by Note Text"
-msgstr "Sorteren op notitietekst"
+msgstr "Sortiraj po tekstu bilješke"
#: templates/list/memo_headers.inc:33
msgid "Sort by Notepad"
-msgstr "Sorteren op notitieboek"
+msgstr "Sortiraj po bilježnici"
-#: memo.php:175
+#: memo.php:211
#, php-format
msgid "Successfully saved \"%s\"."
-msgstr "\"%s\" met succes opgeslagen."
+msgstr "\"%s\" uspješno spremljeno."
#: data.php:194
#, php-format
msgid "The %s file didn't contain any notes."
-msgstr "Het %s bestand bevatte geen notities."
+msgstr "U %s datoteci nije bilo bilješki."
#: lib/Driver.php:53
msgid "The Notes backend is not currently available."
-msgstr "Het notitie backend is momenteel niet beschikbaar."
+msgstr "Pohrana bilješki trenutno nije dostupna."
#: lib/Driver.php:227
#, php-format
msgid "The Notes backend is not currently available: %s"
-msgstr "Het notitie backend is momenteel niet beschikbaar: %s"
+msgstr "Pohrana bilješki trenutno nije dostupna: %s"
-#: memo.php:198
+#: memo.php:234
msgid "The note was deleted."
-msgstr "De notitie is verwijderd."
+msgstr "Bilješka je obrisana."
#: notepads/create.php:31
#, php-format
msgid "The notepad \"%s\" has been created."
-msgstr "Het notitieboek \"%s\" is aangemaakt."
+msgstr "Bilježnica \"%s\" je kreirana."
#: notepads/delete.php:48
#, php-format
msgid "The notepad \"%s\" has been deleted."
-msgstr "Het notitieboek \"%s\" is verwijderd."
+msgstr "Bilježnica \"%s\" je obrisana."
#: notepads/edit.php:42
#, php-format
msgid "The notepad \"%s\" has been renamed to \"%s\"."
-msgstr "Het notitieboek \"%s\" is hernoemd naar \"%s\"."
+msgstr "Bilježnica \"%s\" je preimenovana u \"%s\"."
#: notepads/edit.php:44
#, php-format
msgid "The notepad \"%s\" has been saved."
-msgstr "Het notitieboek \"%s\" is opgeslagen."
+msgstr "Bilježnica \"%s\" je spremljena."
+
+#: memo.php:137
+msgid "The passwords don't match."
+msgstr "Nove lozinke se ne podudaraju."
#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
-msgstr "Een fout bij het importeren van de data: %s"
+msgstr "Došlo je do greške prilikom uvoza podataka: %s"
-#: lib/api.php:326
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
-msgstr "Een fout bij het importeren van de iCalendardata."
-
-#: lib/api.php:513
-msgid "There was an error importing the vNote data."
-msgstr "Een fout bij het importeren van de vNote data."
+msgstr "Došlo je do greške prilikom uvoza iCalendar podataka."
-#: lib/api.php:163
+#: lib/api.php:168
#, php-format
msgid "There was an error removing notes for %s. Details have been logged."
msgstr ""
-"Een fout bij het verwijderen van notities voor %s. Details zijn gelogd."
+"Došlo je do greške prilikom brisanja bilješki za %s. Detalji su zabilježeni "
+"u log."
-#: memo.php:196
+#: memo.php:232
#, php-format
msgid "There was an error removing the note: %s"
-msgstr "Een probleem bij het verwijderen van de notitie: %s"
+msgstr "Došlo je do greške prilikom brisanja bilješke: %s"
-#: memo.php:173
+#: memo.php:209
#, php-format
msgid "There was an error saving the note: %s"
-msgstr "Een probleem bij het opslaan van de notitie: %s"
+msgstr "Došlo je do greške prilikom spremanja bilješke: %s"
#: view.php:45 note/pdf.php:46
#, php-format
msgid "There was an error viewing this notepad: %s"
-msgstr "Een probleem bij het bekijken van dit notitieboek: %s"
+msgstr "Došlo je do greške prilikom pregleda bilježnice: %s"
#: data.php:78
msgid "There were no memos to export."
-msgstr "Er waren geen notities om te exporteren."
+msgstr "Nema dopisa za izvoz."
#: data.php:105
msgid "This file format is not supported."
-msgstr "Dit bestandsformaat wordt niet ondersteund."
+msgstr "Ovaj datoteÄni format nije podržan."
-#: memo.php:91 view.php:111
+#: memo.php:43 view.php:111
msgid "This note cannot be decrypted:"
-msgstr "Deze notitie kan niet worden gedecodeerd:"
+msgstr "Ova bilješka se ne može dešifrirati:"
-#: memo.php:83 view.php:103
+#: memo.php:34 view.php:103
msgid "This note has been encrypted, please provide the password below."
-msgstr "Deze notitie is gecodeerd, geef hieronder het wachtwoord, a.u.b."
+msgstr "Ova bilješka je šifrirana, molimo unesite lozinku."
-#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:403
-#: lib/Driver/kolab.php:766 lib/Driver/sql.php:448
+#: memo.php:30 memo.php:39 view.php:100 view.php:108 lib/api.php:408
+#: lib/Driver/sql.php:461 lib/Driver/kolab.php:766
msgid "This note has been encrypted."
-msgstr "Deze notitie is gecodeerd."
+msgstr "Ova bilješka je šifrirana."
#: notepads/delete.php:24
msgid "This notepad cannot be deleted"
-msgstr "Dit notitieboek kan niet worden verwijderd"
+msgstr "Ova bilješka se ne može obrisati"
#: lib/Forms/DeleteNotepad.php:63
#, php-format
msgid "Unable to delete \"%s\": %s"
-msgstr "Niet in staat om \"%s\": %s te verwijderen"
+msgstr "Nije uspjelo brisanje \"%s\": %s"
#: lib/Driver.php:230
#, php-format
msgid "Unable to load the definition of %s."
-msgstr "Niet in staat om de definitie van %s te laden."
+msgstr "Nije uspjelo uÄitavanje definicije %s."
#: lib/Forms/EditNotepad.php:55
#, php-format
msgid "Unable to save notepad \"%s\": %s"
-msgstr "Niet in staat notitieboek \"%s\" op te slaan: %s"
+msgstr "Nije uspjelo spremanje bilježnice \"%s\": %s"
-#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
#: lib/Block/summary.php:107 templates/list/memo_summaries.inc:17
#: templates/view/memo.inc:27
msgid "Unfiled"
-msgstr "Onbenoemd"
+msgstr "Ostalo"
-#: lib/api.php:362 lib/api.php:428 lib/api.php:521
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
-msgstr "Niet ondersteund Content-Type: %s"
+msgstr "Content-Type nije podržan: %s"
#: templates/data/import.inc:16
msgid "Which Notepad should the notes be added to?"
-msgstr "Aan welk notitieboek dienen de notities toegevoegd te worden?"
+msgstr "Kojoj bilježnici treba dodavati bilješke?"
#: notepads/edit.php:28
msgid "You are not allowed to change this notepad."
-msgstr "Het is u niet toegestaan dit notitieboek te wijzigen."
+msgstr "Nemate ovlasti za mijenjanje ove bilježnice."
-#: memo.php:37 data.php:42 data.php:129
+#: data.php:42 data.php:129 memo.php:75
#, php-format
msgid "You are not allowed to create more than %d notes."
-msgstr "Het is u niet toegestaan om meer dan %d notities te maken."
+msgstr "Nemate ovlasti za kreiranje više od %d bilješki."
#: notepads/delete.php:35
msgid "You are not allowed to delete this notepad."
-msgstr "Het is u niet toegestaan dit notitieboek te verwijderen."
+msgstr "Nemate ovlasti za brisanje ove bilježnice."
#: lib/api.php:100
msgid "You are not allowed to remove user data."
-msgstr "Het is u niet toegestaan gebruikersdata te verwijderen."
+msgstr "Nemate ovlasti za brisanje korisniÄkih podataka."
#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
-msgstr "U heeft geen recht om het notitieboek %s te bekijken."
+msgstr "Nemate dozvole za pregled bilježnice %s."
#: templates/prefs/notepadselect.inc:10
msgid "Your default notepad:"
-msgstr "Uw standaard notitieboek:"
+msgstr "Vaša podrazumijevana bilježnica:"
#: templates/panel.inc:45
msgid "[Manage Notepads]"
-msgstr "[Notitieboeken beheren]"
+msgstr "[Upravljaj bilježnicama]"
#: templates/search/search.inc:21
msgid "_Body"
-msgstr "_Body"
+msgstr "_Tijelu"
-#: templates/list/memo_headers.inc:41 templates/memo/memo.inc:70
+#: templates/list/memo_headers.inc:41
msgid "_Category"
-msgstr "_Categorie"
+msgstr "_Kategorija"
+
+#: templates/memo/memo.inc:78
+msgid "_Category:"
+msgstr "_Kategorija:"
#: templates/view/memo.inc:16
msgid "_Delete"
-msgstr "Ver_wijderen"
+msgstr "_Obriši"
#: templates/view/memo.inc:13
msgid "_Edit"
-msgstr "_Bewerken"
+msgstr "_Uredi"
-#: templates/memo/memo.inc:74
+#: templates/memo/memo.inc:84
msgid "_Encrypt?"
-msgstr "_Coderen?"
+msgstr "Å _ifriraj?"
#: templates/search/search.inc:9
msgid "_For: "
-msgstr "_Voor: "
+msgstr "_Sadrži: "
-#: lib/Mnemo.php:488
+#: lib/Mnemo.php:494
msgid "_Import/Export"
-msgstr "_Import/Export"
+msgstr "_Uvoz/izvoz"
-#: lib/Mnemo.php:475
+#: lib/Mnemo.php:481
msgid "_List Notes"
-msgstr "Notities weer_geven"
+msgstr "_Popis bilješki"
-#: lib/Mnemo.php:480
+#: lib/Mnemo.php:486
msgid "_New Note"
-msgstr "_Nieuwe notitie"
+msgstr "_Nova bilješka"
#: templates/view/memo.inc:52 templates/memo/memo.inc:21
-#: templates/memo/memo.inc:79
msgid "_Password"
-msgstr "_Wachtwoord"
+msgstr "_Lozinka"
-#: lib/Mnemo.php:493
+#: templates/memo/memo.inc:89
+msgid "_Password:"
+msgstr "_Lozinka:"
+
+#: lib/Mnemo.php:499
msgid "_Print"
-msgstr "A_fdrukken"
+msgstr "_Ispiši"
+
+#: templates/memo/memo.inc:93
+msgid "_Repeat:"
+msgstr "_Ponovi:"
-#: lib/Mnemo.php:484
+#: lib/Mnemo.php:490
msgid "_Search"
-msgstr "_Zoeken"
+msgstr "_Traži"
#: templates/search/search.inc:20
msgid "_Title"
-msgstr "_Titel"
+msgstr "_Naslovu"
#: view.php:74 view.php:83
#, php-format
msgid "by %s"
-msgstr "door %s"
+msgstr "%s"
#: view.php:76 view.php:85
msgid "by me"
-msgstr "door mij"
+msgstr "ja"
#: lib/Block/tree_menu.php:33
#, php-format
msgid "in %s"
-msgstr "in %s"
+msgstr "u %s"
#: data.php:90 templates/data/export.inc:4
msgid "notes.csv"
-msgstr "notes.csv"
+msgstr "biljeske.csv"
#: data.php:33 templates/data/import.inc:12
msgid "vNote"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index d55da34..e832f21 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -1,5 +1,5 @@
# Mnemo Hungarian translation file.
-# Copyright (C) 2002-2008 Laszlo L. Tornoci
+# Copyright 2002-2008 Laszlo L. Tornoci
# This file is distributed under the same license as the Mnemo Horde package.
# Latest versions: ftp://xenia.sote.hu/pub/linux/horde/
#
diff --git a/po/it_IT.po b/po/it_IT.po
index 3bb473b..6f4c429 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -1,8 +1,8 @@
# Italian translations for op package.
-# Copyright (C) 2003 Horde Project
-# Copyright (c) 2003 Sergio G. Caredda.
+# Copyright 2003-2009 The Horde Project
+# Copyright 2003 Sergio G. Caredda.
# Sergio G. Caredda <scaredda at tiscali.it>, 2003.
-# Copyright (c) 2007 nethesis srl.
+# Copyright 2007 nethesis srl.
# Cristian Manoni, Alessio Fattorini, Davide marini 2007
#
msgid ""
diff --git a/po/ja_JP.po b/po/ja_JP.po
index ca17da5..ea5b804 100644
--- a/po/ja_JP.po
+++ b/po/ja_JP.po
@@ -1,41 +1,40 @@
# Japanese translation for Mnemo.
-# Copyright (C) 2004 Horde Project
+# Copyright 2004-2009 Horde Project
# This file is distributed under the same license as the Mnemo package.
# Hiromi Kimura <hiromi at tac.tsukuba.ac.jp>
#
msgid ""
msgstr ""
-"Project-Id-Version: Mnemo 2.2-RC1\n"
+"Project-Id-Version: Mnemo 2.2.1\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2007-08-03 12:47+0100\n"
-"PO-Revision-Date: 2007-11-30 20:37+0900\n"
+"POT-Creation-Date: 2008-09-06 11:11+0200\n"
+"PO-Revision-Date: 2009-02-10 20:46+0900\n"
"Last-Translator: Hiromi Kimura <hiromi at tac.tsukuba.ac.jp>\n"
"Language-Team: i18n at lists.horde.org\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=SHIFT_JIS\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
#: templates/memo/memo.inc:53
#, php-format
msgid "%s characters"
msgstr "%s ¶"
-#: data.php:201
+#: data.php:200
#, php-format
msgid "%s file successfully imported"
msgstr "t@C %s ÍC|[g³êܵ½"
-#: notepads.php:102 lib/Mnemo.php:429
+#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "%s Ì "
-#: memo.php:201
+#: memo.php:200
msgid "Access denied deleting note."
msgstr "ÌíÍANZXÛ³êܵ½B"
-#: memo.php:152 memo.php:155
+#: memo.php:143 memo.php:146
msgid "Access denied moving the note."
msgstr "ÌÚ®ÍANZXÛ³êܵ½B"
@@ -49,7 +48,7 @@ msgstr "
msgid "Access denied saving note: %s"
msgstr "ÌÛ¶ÍANZXÛ³êܵ½F%s"
-#: config/prefs.php.dist:71
+#: config/prefs.php.dist:70
msgid "Ascending"
msgstr "¸"
@@ -57,19 +56,23 @@ msgstr "
msgid "CSV"
msgstr "CSV"
+#: lib/Forms/DeleteNotepad.php:45 lib/Forms/DeleteNotepad.php:51
+msgid "Cancel"
+msgstr "æèÁµ"
+
#: data.php:54 templates/view/memo.inc:26
msgid "Category"
msgstr "ªÞ"
-#: templates/notepads/notepads.inc:22
-msgid "Change"
-msgstr "ÏX"
+#: templates/notepad_list.php:29 notepads/index.php:32
+msgid "Change Permissions"
+msgstr "ANZX ÏX"
-#: config/prefs.php.dist:15
+#: config/prefs.php.dist:14
msgid "Change your note sorting and display options."
msgstr "ÌÀÑÆ\¦IvVðÏX·éB"
-#: config/prefs.php.dist:22
+#: config/prefs.php.dist:21
msgid "Choose your default Notepad."
msgstr "ftHgÌ ðIðµÄº³¢B"
@@ -77,10 +80,18 @@ msgstr "
msgid "Close Search"
msgstr "õð¶é"
-#: templates/notepads/notepads.inc:15 templates/notepads/notepads.inc:64
+#: lib/Forms/CreateNotepad.php:39
msgid "Create"
msgstr "ì¬"
+#: lib/Forms/CreateNotepad.php:34
+msgid "Create Notepad"
+msgstr " Ìì¬"
+
+#: templates/notepad_list.php:9
+msgid "Create a new Notepad"
+msgstr "Vµ¢ Ìì¬"
+
#: templates/view/memo.inc:32
msgid "Created"
msgstr "ì¬ú"
@@ -89,27 +100,33 @@ msgstr "
msgid "Decrypt"
msgstr ""
-#: config/prefs.php.dist:21
+#: config/prefs.php.dist:20
msgid "Default Notepad"
msgstr "ftHgÌ "
-#: config/prefs.php.dist:62
+#: config/prefs.php.dist:61
msgid "Default sorting criteria:"
msgstr "ftHgÌÀÑîF"
-#: config/prefs.php.dist:73
+#: config/prefs.php.dist:72
msgid "Default sorting direction:"
msgstr "ftHgÌÀÑûüF"
-#: templates/notepads/notepads.inc:65 templates/view/memo.inc:16
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
+#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
msgid "Delete"
msgstr "í"
-#: config/prefs.php.dist:28
+#: lib/Forms/DeleteNotepad.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "%s ðí"
+
+#: config/prefs.php.dist:27
msgid "Delete Confirmation"
msgstr "íÌmF"
-#: config/prefs.php.dist:29
+#: config/prefs.php.dist:28
msgid "Delete button behaviour"
msgstr "í{^Ì®ì"
@@ -117,28 +134,29 @@ msgstr "
msgid "Delete this note"
msgstr "ðí"
-#: config/prefs.php.dist:72
+#: config/prefs.php.dist:71
msgid "Descending"
msgstr "~"
-#: templates/notepads/notepads.inc:60
-msgid "Description:"
-msgstr "à¾F"
+#: lib/Forms/EditNotepad.php:44 lib/Forms/CreateNotepad.php:37
+msgid "Description"
+msgstr "à¾"
#: lib/Driver/kolab.php:556
#, php-format
msgid "Did not find note %s"
msgstr " %s ª èܹñ"
-#: config/prefs.php.dist:14
+#: config/prefs.php.dist:13
msgid "Display Options"
msgstr "\¦IvV"
-#: config/prefs.php.dist:118
+#: config/prefs.php.dist:117
msgid "Do you want to confirm deleting entries?"
msgstr "í·éÛÉmFµÜ·©H"
-#: templates/view/memo.inc:13
+#: templates/notepad_list.php:27 templates/view/memo.inc:13
+#: notepads/index.php:31
msgid "Edit"
msgstr "ÒW"
@@ -147,7 +165,13 @@ msgstr "
msgid "Edit \"%s\""
msgstr "\"%s\" ðÒW"
-#: templates/list/memo_headers.inc:30 lib/Block/summary.php:74
+#: lib/Forms/EditNotepad.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "%s ðÒW"
+
+#: templates/list/memo_headers.inc:30 lib/Block/summary.php:79
+#: lib/Block/summary.php:80
msgid "Edit Note"
msgstr "ÌÒW"
@@ -160,7 +184,7 @@ msgstr "
msgid "Edit: %s"
msgstr "ÒWF%s"
-#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:93
+#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:104
msgid "Empty Note"
msgstr "óÌ"
@@ -178,7 +202,7 @@ msgstr "
msgid "Export Notes"
msgstr "ÌGNX|[g"
-#: config/prefs.php.dist:13 config/prefs.php.dist:20 config/prefs.php.dist:27
+#: config/prefs.php.dist:12 config/prefs.php.dist:19 config/prefs.php.dist:26
msgid "General Options"
msgstr "êÊIvV"
@@ -187,7 +211,7 @@ msgstr "
msgid "Import Notes, Step %d"
msgstr "ÌC|[gAXebv %d"
-#: data.php:207
+#: data.php:206
msgid "Import/Export Notes"
msgstr "ÌC|[g^GNX|[g"
@@ -199,7 +223,11 @@ msgstr "In: "
msgid "Last Modified"
msgstr "ÅIÏXú"
-#: lib/api.php:77
+#: templates/notepad_list.php:2 notepads/index.php:37
+msgid "Manage Notepads"
+msgstr " ÌÇ"
+
+#: lib/api.php:82
msgid "Maximum Number of Notes"
msgstr "ÌÅå"
@@ -215,7 +243,7 @@ msgstr "
msgid "More Options..."
msgstr "¼ÌIvV"
-#: templates/panel.inc:40
+#: templates/panel.inc:50
msgid "My Notepads:"
msgstr "Ì F"
@@ -223,11 +251,11 @@ msgstr "
msgid "My Notes"
msgstr "Ì "
-#: templates/notepads/notepads.inc:53
-msgid "Name:"
-msgstr "¼OF"
+#: lib/Forms/EditNotepad.php:43 lib/Forms/CreateNotepad.php:36
+msgid "Name"
+msgstr "¼O"
-#: memo.php:57 lib/Block/tree_menu.php:24
+#: memo.php:57 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr "VK"
@@ -235,7 +263,7 @@ msgstr "
msgid "Next"
msgstr ""
-#: lib/api.php:258
+#: lib/api.php:337
msgid "No iCalendar data was found."
msgstr "iCalendar Ìf[^ª©t©èܹñB"
@@ -247,7 +275,7 @@ msgstr "
msgid "No notes match the current criteria."
msgstr "»ÝÌîÉêv·éÍ èܹñB"
-#: lib/Block/summary.php:101
+#: lib/Block/summary.php:112
msgid "No notes to display"
msgstr "\¦·éÍ èܹñB"
@@ -255,23 +283,19 @@ msgstr "
msgid "No_te"
msgstr "_T"
-#: lib/Driver/sql.php:175
+#: lib/Driver/sql.php:195
msgid "Not found"
msgstr "©t©èܹñ"
-#: config/prefs.php.dist:60
+#: config/prefs.php.dist:59
msgid "Note Category"
msgstr "̪Þ"
-#: view.php:108
+#: view.php:121
msgid "Note Details"
msgstr "ÌÚ×"
-#: notepads.php:113
-msgid "Note Lists"
-msgstr "ê"
-
-#: config/prefs.php.dist:59
+#: config/prefs.php.dist:58
msgid "Note Text"
msgstr "Ìàe"
@@ -287,40 +311,47 @@ msgstr "
msgid "Note_pad"
msgstr "_P "
-#: templates/list/memo_headers.inc:33 config/prefs.php.dist:61
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
+#: config/prefs.php.dist:60
msgid "Notepad"
msgstr " "
+#: templates/notepad_list.php:14
+msgid "Notepad List"
+msgstr " ê"
+
#: templates/panel.inc:32 templates/panel.inc:33
-#: templates/notepads/notepads.inc:42
msgid "Notepads"
msgstr " "
-#: notepads.php:32
-msgid "Notepads must have a name."
-msgstr " ÉͼOªKvÅ·B"
-
-#: templates/notepads/notepads.inc:45
-msgid "Notepads:"
-msgstr " F"
-
#: lib/Block/summary.php:3
msgid "Notes Summary"
msgstr "Tv"
-#: lib/api.php:235 lib/api.php:323 lib/api.php:382 lib/api.php:411
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "ANZXÛ"
-#: templates/notepads/notepads.inc:56
-msgid "Permissions"
-msgstr "ANZX "
+#: lib/Forms/DeleteNotepad.php:56
+msgid "Permission denied"
+msgstr "ANZXªÛ³êܵ½"
+
+#: lib/Forms/DeleteNotepad.php:43
+#, php-format
+msgid ""
+"Really delete the notepad \"%s\"? This cannot be undone and all data on this "
+"notepad will be permanently removed."
+msgstr ""
+"{É \"%s\" ðíµÜ·©H±ÌìÍæèÁ¹¸A ÌàeÍSÄ"
+"Á³êÜ·B"
#: templates/view/memo.inc:16
msgid "Really delete this note?"
msgstr "±Ìð{ÉíµÜ·©H"
-#: templates/panel.inc:59 templates/memo/memo.inc:57
+#: templates/panel.inc:68 templates/memo/memo.inc:57
+#: lib/Forms/EditNotepad.php:46
msgid "Save"
msgstr "Û¶"
@@ -329,7 +360,7 @@ msgid "Save as PDF"
msgstr "PDF ƵÄÛ¶"
#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:27
-#: templates/list/header.inc:4 lib/Block/tree_menu.php:45
+#: templates/list/header.inc:4 lib/Block/tree_menu.php:44
msgid "Search"
msgstr "õ"
@@ -337,9 +368,9 @@ msgstr "
msgid "Search Results"
msgstr "õÊ"
-#: templates/notepads/notepads.inc:47
-msgid "Select a notepad"
-msgstr " ÌIð"
+#: templates/panel.inc:38
+msgid "Search for Notepads:"
+msgstr " ÌõF"
#: templates/data/export.inc:9
msgid "Select the export format:"
@@ -353,27 +384,27 @@ msgstr "
msgid "Select the format of the source file:"
msgstr "\[Xt@CÌ`®ðIðF"
-#: templates/panel.inc:50
+#: templates/panel.inc:59
msgid "Shared Notepads:"
msgstr "¤L F"
-#: config/prefs.php.dist:40
+#: config/prefs.php.dist:39
msgid "Should the Notepad be shown in its own column in the List view?"
msgstr "ê\¦Å ̼Oà\¦µÜ·©H"
-#: lib/Block/summary.php:34
+#: lib/Block/summary.php:35
msgid "Show action buttons?"
msgstr "®ì{^ð\¦H"
-#: lib/Block/summary.php:37
+#: lib/Block/summary.php:39
msgid "Show notepad name?"
msgstr " ̼Oð\¦H"
-#: config/prefs.php.dist:50
+#: config/prefs.php.dist:49
msgid "Show notepad options panel?"
msgstr " ÌIvVð\¦H"
-#: lib/Block/summary.php:40
+#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "±ÌªÞÌð\¦"
@@ -389,12 +420,12 @@ msgstr "
msgid "Sort by Notepad"
msgstr "ÅÀÑÖ¦"
-#: memo.php:175
+#: memo.php:174
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "\"%s\" ÉÛ¶³êܵ½B"
-#: data.php:195
+#: data.php:194
#, php-format
msgid "The %s file didn't contain any notes."
msgstr "t@C %s ÉÍêÂàÜÜêĢܹñB"
@@ -408,49 +439,54 @@ msgstr "
msgid "The Notes backend is not currently available: %s"
msgstr "ÌobNGhÍ»ÝgpūܹñF%s"
-#: memo.php:198
+#: memo.php:197
msgid "The note was deleted."
msgstr "Íí³êܵ½B"
-#: notepads.php:45 notepads.php:56
-#, php-format
-msgid "The notepad \"%s\" couldn't be created: %s"
-msgstr " \"%s\" Íì¬Å«Ü¹ñŵ½F %s"
-
-#: notepads.php:47
+#: notepads/create.php:31
#, php-format
msgid "The notepad \"%s\" has been created."
msgstr " \"%s\" Í쬳êܵ½B"
-#: notepads.php:88
+#: notepads/delete.php:48
#, php-format
msgid "The notepad \"%s\" has been deleted."
msgstr " \"%s\" Íí³êܵ½B"
-#: notepads.php:58
+#: notepads/edit.php:42
+#, php-format
+msgid "The notepad \"%s\" has been renamed to \"%s\"."
+msgstr " \"%s\" Í \"%s\" ÉÏX³êܵ½B"
+
+#: notepads/edit.php:44
#, php-format
msgid "The notepad \"%s\" has been saved."
msgstr " \"%s\" ÍÛ¶³êܵ½B"
-#: data.php:198
+#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr "f[^ÌC|[gÉG[ª¶µÜµ½F%s"
-#: lib/api.php:252
+#: lib/api.php:331
msgid "There was an error importing the iCalendar data."
msgstr "iCalendar ÌC|[gÉG[ª¶µÜµ½B"
-#: lib/api.php:430
+#: lib/api.php:518
msgid "There was an error importing the vNote data."
msgstr "vNote ÌC|[gÉG[ª¶µÜµ½B"
-#: memo.php:196
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr " %s ÌíÉG[ª¶µÜµ½BÚ×ÍL^³êܵ½B"
+
+#: memo.php:195
#, php-format
msgid "There was an error removing the note: %s"
msgstr "ÌíÉG[ª¶µÜµ½F%s"
-#: memo.php:173
+#: memo.php:172
#, php-format
msgid "There was an error saving the note: %s"
msgstr "ÌÛ¶ÉG[ª¶µÜµ½F%s"
@@ -460,7 +496,7 @@ msgstr "
msgid "There was an error viewing this notepad: %s"
msgstr "Ì\¦ÉG[ª¶µÜµ½F%s"
-#: data.php:79
+#: data.php:78
msgid "There were no memos to export."
msgstr "GNX|[g·éª èܹñB"
@@ -468,20 +504,24 @@ msgstr "
msgid "This file format is not supported."
msgstr "±Ì`®ÍT|[g³êĢܹñB"
-#: view.php:98 memo.php:91
+#: view.php:111 memo.php:91
msgid "This note cannot be decrypted:"
msgstr "͡ūܹñŵ½F"
-#: view.php:90 memo.php:83
+#: view.php:103 memo.php:83
msgid "This note has been encrypted, please provide the password below."
msgstr "Íû³êĢܷBpX[hðü͵ĺ³¢B"
-#: view.php:87 view.php:95 memo.php:80 memo.php:88 lib/Driver/kolab.php:752
-#: lib/Driver/sql.php:438
+#: view.php:100 view.php:108 memo.php:80 memo.php:88 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:458
msgid "This note has been encrypted."
msgstr "Íû³êܵ½B"
-#: notepads.php:83
+#: notepads/delete.php:24
+msgid "This notepad cannot be deleted"
+msgstr "±ÌÍíūܹñŵ½"
+
+#: lib/Forms/DeleteNotepad.php:63
#, php-format
msgid "Unable to delete \"%s\": %s"
msgstr "íūܹñ \"%s\": %s"
@@ -491,13 +531,18 @@ msgstr "
msgid "Unable to load the definition of %s."
msgstr "è` %s ª[hūܹñB"
+#: lib/Forms/EditNotepad.php:55
+#, php-format
+msgid "Unable to save notepad \"%s\": %s"
+msgstr "۶ūܹñ \"%s\": %s"
+
#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
-#: lib/Mnemo.php:245 lib/Mnemo.php:246 lib/Mnemo.php:260 lib/Mnemo.php:261
-#: lib/Block/summary.php:96
+#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
+#: lib/Block/summary.php:107
msgid "Unfiled"
msgstr "¢®"
-#: lib/api.php:288 lib/api.php:345 lib/api.php:438
+#: lib/api.php:367 lib/api.php:433 lib/api.php:526
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "T|[g³êĢȢ Content-Type Å·F%s"
@@ -506,27 +551,35 @@ msgstr "
msgid "Which Notepad should the notes be added to?"
msgstr "ÇÌ ÉÇÁµÜ·©H"
-#: data.php:42 data.php:130 memo.php:37
+#: notepads/edit.php:28
+msgid "You are not allowed to change this notepad."
+msgstr " ȽͱÌðÏX·é±ÆªÅ«Ü¹ñB"
+
+#: data.php:42 data.php:129 memo.php:37
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr " È½Í %d ÈãÌð쬷é±ÆªÅ«Ü¹ñB"
+#: notepads/delete.php:35
+msgid "You are not allowed to delete this notepad."
+msgstr " ȽͱÌðí·é±ÆªÅ«Ü¹ñB"
+
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr " ȽÍ[Uf[^ðÁ·é±ÆªÅ«Ü¹ñB"
+
#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
msgstr " ȽÉÍ %s ð\¦·éANZX ª èܹñB"
-#: notepads.php:68
-msgid "You must select a notepad to be deleted."
-msgstr "í·é ðIðµÄº³¢B"
-
#: templates/prefs/notepadselect.inc:10
msgid "Your default notepad:"
msgstr " ȽÌftHgÌ F"
#: templates/panel.inc:45
-msgid "[Manage My Notepads]"
-msgstr "[Ì ÌÇ]"
+msgid "[Manage Notepads]"
+msgstr "[ ÌÇ]"
#: templates/search/search.inc:21
msgid "_Body"
@@ -552,15 +605,15 @@ msgstr "_
msgid "_For: "
msgstr "_For: "
-#: lib/Mnemo.php:466
+#: lib/Mnemo.php:488
msgid "_Import/Export"
msgstr "_IC/AEg"
-#: lib/Mnemo.php:453
+#: lib/Mnemo.php:475
msgid "_List Notes"
msgstr "_Lê"
-#: lib/Mnemo.php:458
+#: lib/Mnemo.php:480
msgid "_New Note"
msgstr "_NVK"
@@ -569,11 +622,11 @@ msgstr "_N
msgid "_Password"
msgstr "_PpX[h"
-#: lib/Mnemo.php:471
+#: lib/Mnemo.php:493
msgid "_Print"
msgstr "_Póü"
-#: lib/Mnemo.php:462
+#: lib/Mnemo.php:484
msgid "_Search"
msgstr "_Sõ"
@@ -581,12 +634,21 @@ msgstr "_S
msgid "_Title"
msgstr "_Tè¼"
-#: lib/Block/tree_menu.php:34
+#: view.php:74 view.php:83
+#, php-format
+msgid "by %s"
+msgstr "%s ì"
+
+#: view.php:76 view.php:85
+msgid "by me"
+msgstr "©ì"
+
+#: lib/Block/tree_menu.php:33
#, php-format
msgid "in %s"
-msgstr ""
+msgstr "in %s"
-#: data.php:91 templates/data/export.inc:4
+#: data.php:90 templates/data/export.inc:4
msgid "notes.csv"
msgstr "notes.csv"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index 6b53f26..ee9ce48 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -1,5 +1,5 @@
# Lithuanian translations for Mnemo package.
-# Copyright (C) 2007 Horde Project
+# Copyright 2007-2009 The Horde Project
# This file is distributed under the same license as the Mnemo package.
# Darius Matuliauskas <darius at lnk.lt>, 2002.
# Vilius Sumskas <vilius at lnk.lt>, 2003, 2004, 2007.
diff --git a/po/lv_LV.po b/po/lv_LV.po
index 9acc14d..137bbca 100644
--- a/po/lv_LV.po
+++ b/po/lv_LV.po
@@ -1,5 +1,5 @@
# Latvian translations for Mnemo package.
-# Copyright (C) 2004 Horde Project
+# Copyright 2004-2009 The Horde Project
# This file is distributed under the same license as the Mnemo package.
# Automatically generated, 2004.
#
diff --git a/po/mnemo.pot b/po/mnemo.pot
index a5a64f8..c874bdd 100644
--- a/po/mnemo.pot
+++ b/po/mnemo.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-09-06 11:11+0200\n"
+"POT-Creation-Date: 2009-09-12 10:09+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -26,30 +26,30 @@ msgstr ""
msgid "%s file successfully imported"
msgstr ""
-#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr ""
-#: memo.php:200
+#: memo.php:237
msgid "Access denied deleting note."
msgstr ""
-#: memo.php:143 memo.php:146
+#: memo.php:180 memo.php:183
msgid "Access denied moving the note."
msgstr ""
-#: memo.php:120
+#: memo.php:135
#, php-format
msgid "Access denied saving note to %s."
msgstr ""
-#: memo.php:118
+#: memo.php:133
#, php-format
msgid "Access denied saving note: %s"
msgstr ""
-#: config/prefs.php.dist:70
+#: config/prefs.php.dist:69
msgid "Ascending"
msgstr ""
@@ -105,11 +105,11 @@ msgstr ""
msgid "Default Notepad"
msgstr ""
-#: config/prefs.php.dist:61
+#: config/prefs.php.dist:60
msgid "Default sorting criteria:"
msgstr ""
-#: config/prefs.php.dist:72
+#: config/prefs.php.dist:71
msgid "Default sorting direction:"
msgstr ""
@@ -135,7 +135,7 @@ msgstr ""
msgid "Delete this note"
msgstr ""
-#: config/prefs.php.dist:71
+#: config/prefs.php.dist:70
msgid "Descending"
msgstr ""
@@ -152,7 +152,7 @@ msgstr ""
msgid "Display Options"
msgstr ""
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:116
msgid "Do you want to confirm deleting entries?"
msgstr ""
@@ -180,7 +180,7 @@ msgstr ""
msgid "Edit categories and colors"
msgstr ""
-#: memo.php:104
+#: memo.php:118 memo.php:149
#, php-format
msgid "Edit: %s"
msgstr ""
@@ -244,6 +244,10 @@ msgstr ""
msgid "More Options..."
msgstr ""
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr ""
+
#: templates/panel.inc:50
msgid "My Notepads:"
msgstr ""
@@ -256,7 +260,7 @@ msgstr ""
msgid "Name"
msgstr ""
-#: memo.php:57 lib/Block/tree_menu.php:23
+#: memo.php:95 memo.php:140 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr ""
@@ -264,7 +268,7 @@ msgstr ""
msgid "Next"
msgstr ""
-#: lib/api.php:337
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr ""
@@ -284,11 +288,11 @@ msgstr ""
msgid "No_te"
msgstr ""
-#: lib/Driver/sql.php:195
+#: lib/Driver/sql.php:198
msgid "Not found"
msgstr ""
-#: config/prefs.php.dist:59
+#: config/prefs.php.dist:58
msgid "Note Category"
msgstr ""
@@ -296,7 +300,7 @@ msgstr ""
msgid "Note Details"
msgstr ""
-#: config/prefs.php.dist:58
+#: config/prefs.php.dist:57
msgid "Note Text"
msgstr ""
@@ -304,16 +308,16 @@ msgstr ""
msgid "Note _Text"
msgstr ""
-#: view.php:56 memo.php:67 note/pdf.php:57
+#: view.php:56 memo.php:105 memo.php:145 note/pdf.php:57
msgid "Note not found."
msgstr ""
-#: templates/memo/memo.inc:59
-msgid "Note_pad"
+#: templates/memo/memo.inc:63
+msgid "Note_pad:"
msgstr ""
#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
-#: config/prefs.php.dist:60
+#: config/prefs.php.dist:59
msgid "Notepad"
msgstr ""
@@ -349,7 +353,7 @@ msgstr ""
msgid "Really delete this note?"
msgstr ""
-#: templates/panel.inc:68 templates/memo/memo.inc:57
+#: templates/panel.inc:68 templates/memo/memo.inc:58
#: lib/Forms/EditNotepad.php:46
msgid "Save"
msgstr ""
@@ -363,7 +367,7 @@ msgstr ""
msgid "Search"
msgstr ""
-#: list.php:54
+#: list.php:54 notes/index.php:35
msgid "Search Results"
msgstr ""
@@ -399,10 +403,6 @@ msgstr ""
msgid "Show notepad name?"
msgstr ""
-#: config/prefs.php.dist:49
-msgid "Show notepad options panel?"
-msgstr ""
-
#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr ""
@@ -419,7 +419,7 @@ msgstr ""
msgid "Sort by Notepad"
msgstr ""
-#: memo.php:174
+#: memo.php:211
#, php-format
msgid "Successfully saved \"%s\"."
msgstr ""
@@ -438,7 +438,7 @@ msgstr ""
msgid "The Notes backend is not currently available: %s"
msgstr ""
-#: memo.php:197
+#: memo.php:234
msgid "The note was deleted."
msgstr ""
@@ -462,30 +462,30 @@ msgstr ""
msgid "The notepad \"%s\" has been saved."
msgstr ""
+#: memo.php:137
+msgid "The passwords don't match."
+msgstr ""
+
#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr ""
-#: lib/api.php:331
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr ""
-#: lib/api.php:518
-msgid "There was an error importing the vNote data."
-msgstr ""
-
#: lib/api.php:168
#, php-format
msgid "There was an error removing notes for %s. Details have been logged."
msgstr ""
-#: memo.php:195
+#: memo.php:232
#, php-format
msgid "There was an error removing the note: %s"
msgstr ""
-#: memo.php:172
+#: memo.php:209
#, php-format
msgid "There was an error saving the note: %s"
msgstr ""
@@ -503,16 +503,16 @@ msgstr ""
msgid "This file format is not supported."
msgstr ""
-#: view.php:111 memo.php:91
+#: view.php:111 memo.php:43
msgid "This note cannot be decrypted:"
msgstr ""
-#: view.php:103 memo.php:83
+#: view.php:103 memo.php:34
msgid "This note has been encrypted, please provide the password below."
msgstr ""
-#: view.php:100 view.php:108 memo.php:80 memo.php:88 lib/api.php:408
-#: lib/Driver/kolab.php:766 lib/Driver/sql.php:458
+#: view.php:100 view.php:108 memo.php:30 memo.php:39 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:461
msgid "This note has been encrypted."
msgstr ""
@@ -536,12 +536,12 @@ msgid "Unable to save notepad \"%s\": %s"
msgstr ""
#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
-#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
#: lib/Block/summary.php:107
msgid "Unfiled"
msgstr ""
-#: lib/api.php:367 lib/api.php:433 lib/api.php:526
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr ""
@@ -554,7 +554,7 @@ msgstr ""
msgid "You are not allowed to change this notepad."
msgstr ""
-#: data.php:42 data.php:129 memo.php:37
+#: data.php:42 data.php:129 memo.php:75
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr ""
@@ -584,10 +584,14 @@ msgstr ""
msgid "_Body"
msgstr ""
-#: templates/memo/memo.inc:70 templates/list/memo_headers.inc:41
+#: templates/list/memo_headers.inc:41
msgid "_Category"
msgstr ""
+#: templates/memo/memo.inc:78
+msgid "_Category:"
+msgstr ""
+
#: templates/view/memo.inc:16
msgid "_Delete"
msgstr ""
@@ -596,7 +600,7 @@ msgstr ""
msgid "_Edit"
msgstr ""
-#: templates/memo/memo.inc:74
+#: templates/memo/memo.inc:84
msgid "_Encrypt?"
msgstr ""
@@ -604,28 +608,35 @@ msgstr ""
msgid "_For: "
msgstr ""
-#: lib/Mnemo.php:488
+#: lib/Mnemo.php:494
msgid "_Import/Export"
msgstr ""
-#: lib/Mnemo.php:475
+#: lib/Mnemo.php:481
msgid "_List Notes"
msgstr ""
-#: lib/Mnemo.php:480
+#: lib/Mnemo.php:486
msgid "_New Note"
msgstr ""
#: templates/view/memo.inc:52 templates/memo/memo.inc:21
-#: templates/memo/memo.inc:79
msgid "_Password"
msgstr ""
-#: lib/Mnemo.php:493
+#: templates/memo/memo.inc:89
+msgid "_Password:"
+msgstr ""
+
+#: lib/Mnemo.php:499
msgid "_Print"
msgstr ""
-#: lib/Mnemo.php:484
+#: templates/memo/memo.inc:93
+msgid "_Repeat:"
+msgstr ""
+
+#: lib/Mnemo.php:490
msgid "_Search"
msgstr ""
diff --git a/po/nb_NO.po b/po/nb_NO.po
index eefa7bd..e0b88e1 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -1,5 +1,5 @@
# Norwegian Mnemo Translation.
-# Copyright (C) 2002 Horde Project.
+# Copyright 2002-2009 The Horde Project.
# This file is distributed under the same license as the Mnemo package.
# Torstein S. Hansen <huleboer at techbee.no>, 2002.
#
diff --git a/po/nl_NL.po b/po/nl_NL.po
index c49efc6..5f6899c 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -1,13 +1,13 @@
# Mnemo Dutch translation.
-# Copyright (C) 2002 Jan Kuipers.
-# Jan Kuipers <jrkuipers at lauwerscollege.nl>, 2002-2008.
+# Copyright 2002 Jan Kuipers.
+# Jan Kuipers <jrkuipers at lauwerscollege.nl>, 2002-2009.
#
msgid ""
msgstr ""
-"Project-Id-Version: Mneno H3 (2.2.1-cvs)\n"
+"Project-Id-Version: Mneno H3 (2.2.3-cvs)\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-08-08 23:32+0200\n"
-"PO-Revision-Date: 2008-08-09 12:48+0200\n"
+"POT-Creation-Date: 2009-12-14 08:18+0100\n"
+"PO-Revision-Date: 2009-12-14 20:51+0100\n"
"Last-Translator: Jan Kuipers <jrkuipers at lauwerscollege.nl>\n"
"Language-Team: Dutch <i18n at lists.horde.org>\n"
"MIME-Version: 1.0\n"
@@ -25,30 +25,30 @@ msgstr "%s tekens"
msgid "%s file successfully imported"
msgstr "%s bestand met succes geimporteerd"
-#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "%s's notitieboek"
-#: memo.php:201
+#: memo.php:237
msgid "Access denied deleting note."
msgstr "Toegang geweigerd bij verwijderen van notitie."
-#: memo.php:150 memo.php:153
+#: memo.php:180 memo.php:183
msgid "Access denied moving the note."
msgstr "Toegang geweigerd bij verplaatsen van de notitie."
-#: memo.php:120
+#: memo.php:135
#, php-format
msgid "Access denied saving note to %s."
msgstr "Toegang geweigerd bij opslaan van notitie in %s."
-#: memo.php:118
+#: memo.php:133
#, php-format
msgid "Access denied saving note: %s"
msgstr "Toegang geweigerd bij opslaan van notitie: %s"
-#: config/prefs.php.dist:70
+#: config/prefs.php.dist:69
msgid "Ascending"
msgstr "Toenemend"
@@ -104,15 +104,15 @@ msgstr "Decoderen"
msgid "Default Notepad"
msgstr "Standaard notitieboek"
-#: config/prefs.php.dist:61
+#: config/prefs.php.dist:60
msgid "Default sorting criteria:"
msgstr "Standaard sorteercriteria:"
-#: config/prefs.php.dist:72
+#: config/prefs.php.dist:71
msgid "Default sorting direction:"
msgstr "Standaard sorteervolgorde:"
-#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
+#: lib/Forms/DeleteNotepad.php:45 notepads/index.php:33
#: templates/notepad_list.php:31 templates/view/memo.inc:16
msgid "Delete"
msgstr "Verwijderen"
@@ -134,7 +134,7 @@ msgstr "Verwijderknopgedrag"
msgid "Delete this note"
msgstr "Verwijder deze notitie"
-#: config/prefs.php.dist:71
+#: config/prefs.php.dist:70
msgid "Descending"
msgstr "Afnemend"
@@ -151,7 +151,7 @@ msgstr "Notitie %s niet gevonden"
msgid "Display Options"
msgstr "Weergaveopties"
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:116
msgid "Do you want to confirm deleting entries?"
msgstr "Wilt u het verwijderen van invoer bevestigen?"
@@ -179,7 +179,7 @@ msgstr "Notitie bewerken"
msgid "Edit categories and colors"
msgstr "Categorieën en kleuren bewerken"
-#: memo.php:104
+#: memo.php:118 memo.php:149
#, php-format
msgid "Edit: %s"
msgstr "Bewerken: %s"
@@ -245,6 +245,11 @@ msgstr "Menulijst"
msgid "More Options..."
msgstr "Meer opties..."
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr ""
+"Meerdere iCalendar onderdelen gevonden; slecht één vNote wordt ondersteund."
+
#: templates/panel.inc:50
msgid "My Notepads:"
msgstr "Mijn notitieboeken:"
@@ -257,7 +262,7 @@ msgstr "Mijn notities"
msgid "Name"
msgstr "Naam"
-#: memo.php:57 lib/Block/tree_menu.php:23
+#: memo.php:95 memo.php:140 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr "Nieuwe notitie"
@@ -265,7 +270,7 @@ msgstr "Nieuwe notitie"
msgid "Next"
msgstr "Volgende"
-#: lib/api.php:332
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr "Geen iCalendardata gevonden."
@@ -285,11 +290,11 @@ msgstr "Geen notities weer te geven"
msgid "No_te"
msgstr "No_titie"
-#: lib/Driver/sql.php:195
+#: lib/Driver/sql.php:198
msgid "Not found"
msgstr "Niet gevonden"
-#: config/prefs.php.dist:59
+#: config/prefs.php.dist:58
msgid "Note Category"
msgstr "Notitiecategorie"
@@ -297,7 +302,7 @@ msgstr "Notitiecategorie"
msgid "Note Details"
msgstr "Notitiedetails"
-#: config/prefs.php.dist:58
+#: config/prefs.php.dist:57
msgid "Note Text"
msgstr "Notitietekst"
@@ -305,16 +310,16 @@ msgstr "Notitietekst"
msgid "Note _Text"
msgstr "Notitiet_ekst"
-#: memo.php:67 view.php:56 note/pdf.php:57
+#: memo.php:105 memo.php:145 view.php:56 note/pdf.php:57
msgid "Note not found."
msgstr "Notitie niet gevonden."
-#: templates/memo/memo.inc:59
-msgid "Note_pad"
-msgstr "Notitie_boek"
+#: templates/memo/memo.inc:63
+msgid "Note_pad:"
+msgstr "Notitie_boek:"
#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
-#: config/prefs.php.dist:60
+#: config/prefs.php.dist:59
msgid "Notepad"
msgstr "Notitieboek"
@@ -330,8 +335,8 @@ msgstr "Notitieboeken"
msgid "Notes Summary"
msgstr "Notitiesamenvatting"
-#: lib/api.php:207 lib/api.php:247 lib/api.php:280 lib/api.php:310
-#: lib/api.php:397 lib/api.php:465 lib/api.php:494
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "Toegang geweigerd"
@@ -353,7 +358,7 @@ msgid "Really delete this note?"
msgstr "Echt deze notitie verwijderen?"
#: lib/Forms/EditNotepad.php:46 templates/panel.inc:68
-#: templates/memo/memo.inc:57
+#: templates/memo/memo.inc:58
msgid "Save"
msgstr "Opslaan"
@@ -366,7 +371,7 @@ msgstr "Opslaan als PDF"
msgid "Search"
msgstr "Zoeken"
-#: list.php:54
+#: list.php:54 notes/index.php:35
msgid "Search Results"
msgstr "Zoekresultaten"
@@ -404,10 +409,6 @@ msgstr "Bewerkingsknoppen weergeven?"
msgid "Show notepad name?"
msgstr "Notitieboeknamen weergeven?"
-#: config/prefs.php.dist:49
-msgid "Show notepad options panel?"
-msgstr "Notitieboekoptiespaneel weergeven?"
-
#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "Notities van deze categorieen weergeven"
@@ -424,7 +425,7 @@ msgstr "Sorteren op notitietekst"
msgid "Sort by Notepad"
msgstr "Sorteren op notitieboek"
-#: memo.php:175
+#: memo.php:211
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "\"%s\" met succes opgeslagen."
@@ -443,7 +444,7 @@ msgstr "Het notitie backend is momenteel niet beschikbaar."
msgid "The Notes backend is not currently available: %s"
msgstr "Het notitie backend is momenteel niet beschikbaar: %s"
-#: memo.php:198
+#: memo.php:234
msgid "The note was deleted."
msgstr "De notitie is verwijderd."
@@ -467,31 +468,31 @@ msgstr "Het notitieboek \"%s\" is hernoemd naar \"%s\"."
msgid "The notepad \"%s\" has been saved."
msgstr "Het notitieboek \"%s\" is opgeslagen."
+#: memo.php:137
+msgid "The passwords don't match."
+msgstr "De wachtwoorden komen niet overeen."
+
#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr "Een fout bij het importeren van de data: %s"
-#: lib/api.php:326
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr "Een fout bij het importeren van de iCalendardata."
-#: lib/api.php:513
-msgid "There was an error importing the vNote data."
-msgstr "Een fout bij het importeren van de vNote data."
-
-#: lib/api.php:163
+#: lib/api.php:168
#, php-format
msgid "There was an error removing notes for %s. Details have been logged."
msgstr ""
"Een fout bij het verwijderen van notities voor %s. Details zijn gelogd."
-#: memo.php:196
+#: memo.php:232
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Een probleem bij het verwijderen van de notitie: %s"
-#: memo.php:173
+#: memo.php:209
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Een probleem bij het opslaan van de notitie: %s"
@@ -509,16 +510,16 @@ msgstr "Er waren geen notities om te exporteren."
msgid "This file format is not supported."
msgstr "Dit bestandsformaat wordt niet ondersteund."
-#: memo.php:91 view.php:111
+#: memo.php:43 view.php:111
msgid "This note cannot be decrypted:"
msgstr "Deze notitie kan niet worden gedecodeerd:"
-#: memo.php:83 view.php:103
+#: memo.php:34 view.php:103
msgid "This note has been encrypted, please provide the password below."
msgstr "Deze notitie is gecodeerd, geef hieronder het wachtwoord, a.u.b."
-#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:403
-#: lib/Driver/kolab.php:766 lib/Driver/sql.php:448
+#: memo.php:30 memo.php:39 view.php:100 view.php:108 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:461
msgid "This note has been encrypted."
msgstr "Deze notitie is gecodeerd."
@@ -541,13 +542,13 @@ msgstr "Niet in staat om de definitie van %s te laden."
msgid "Unable to save notepad \"%s\": %s"
msgstr "Niet in staat notitieboek \"%s\" op te slaan: %s"
-#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
#: lib/Block/summary.php:107 templates/list/memo_summaries.inc:17
#: templates/view/memo.inc:27
msgid "Unfiled"
msgstr "Onbenoemd"
-#: lib/api.php:362 lib/api.php:428 lib/api.php:521
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Niet ondersteund Content-Type: %s"
@@ -560,7 +561,7 @@ msgstr "Aan welk notitieboek dienen de notities toegevoegd te worden?"
msgid "You are not allowed to change this notepad."
msgstr "Het is u niet toegestaan dit notitieboek te wijzigen."
-#: memo.php:37 data.php:42 data.php:129
+#: memo.php:75 data.php:42 data.php:129
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr "Het is u niet toegestaan om meer dan %d notities te maken."
@@ -590,10 +591,14 @@ msgstr "[Notitieboeken beheren]"
msgid "_Body"
msgstr "_Body"
-#: templates/list/memo_headers.inc:41 templates/memo/memo.inc:70
+#: templates/list/memo_headers.inc:41
msgid "_Category"
msgstr "_Categorie"
+#: templates/memo/memo.inc:78
+msgid "_Category:"
+msgstr "_Categorie:"
+
#: templates/view/memo.inc:16
msgid "_Delete"
msgstr "Ver_wijderen"
@@ -602,7 +607,7 @@ msgstr "Ver_wijderen"
msgid "_Edit"
msgstr "_Bewerken"
-#: templates/memo/memo.inc:74
+#: templates/memo/memo.inc:84
msgid "_Encrypt?"
msgstr "_Coderen?"
@@ -610,28 +615,35 @@ msgstr "_Coderen?"
msgid "_For: "
msgstr "_Voor: "
-#: lib/Mnemo.php:488
+#: lib/Mnemo.php:494
msgid "_Import/Export"
msgstr "_Import/Export"
-#: lib/Mnemo.php:475
+#: lib/Mnemo.php:481
msgid "_List Notes"
msgstr "Notities weer_geven"
-#: lib/Mnemo.php:480
+#: lib/Mnemo.php:486
msgid "_New Note"
msgstr "_Nieuwe notitie"
#: templates/view/memo.inc:52 templates/memo/memo.inc:21
-#: templates/memo/memo.inc:79
msgid "_Password"
msgstr "_Wachtwoord"
-#: lib/Mnemo.php:493
+#: templates/memo/memo.inc:89
+msgid "_Password:"
+msgstr "_Wachtwoord:"
+
+#: lib/Mnemo.php:499
msgid "_Print"
msgstr "A_fdrukken"
-#: lib/Mnemo.php:484
+#: templates/memo/memo.inc:93
+msgid "_Repeat:"
+msgstr "_Herhalen:"
+
+#: lib/Mnemo.php:490
msgid "_Search"
msgstr "_Zoeken"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index badb5c7..0fd1674 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -1,5 +1,5 @@
# Mnemo Norwegian Nynorsk translation.
-# Copyright (C) 2002 Per-Stian Vatne
+# Copyright 2002 Per-Stian Vatne
# This file is distributed under the same license as the Mnemo package.
# Per-Stian Vatne <psv at orsta.org>, 2002.
#
diff --git a/po/pl_PL.po b/po/pl_PL.po
index b1daa24..b55590d 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -1,6 +1,6 @@
# Polish translations for Mnemo package
# Polskie tlumaczenia dla pakietu Mnemo.
-# Copyright (C) 2005-2007 Horde Project
+# Copyright 2005-2009 The Horde Project
# This file is distributed under the same license as the Mnemo package.
# Mateusz Kaminski <matipl at pld-linux.org>, 2005.
# Piotr Tarnowski <drfugazi at drfugazi.eu.org>, 2007.
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 5e4b128..7e901d4 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,6 +1,6 @@
# translation of pt_BR.po to Português brasileiro
# This file is distributed under the same license as the Mnemo package.
-# Copyright (C) YEAR Horde Project.
+# Copyright YEAR Horde Project.
#
# Fabio Gomes <flgomes at fazenda.sp.gov.br>, 2005.
# Luis Felipe Marzagao <duli at fedoraproject.org>, 2008.
@@ -8,15 +8,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pt_BR\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-08-31 21:29-0300\n"
-"PO-Revision-Date: 2008-07-06 23:36-0300\n"
-"Last-Translator: Luis Felipe Marzagao <duli at fedoraproject.org>\n"
+"POT-Creation-Date: 2009-09-17 00:07-0300\n"
+"PO-Revision-Date: 2009-09-19 01:40-0300\n"
+"Last-Translator: Luis Felipe Marzagao <duli at easylifeproject.org>\n"
"Language-Team: Português brasileiro <i18n at lists.horde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: templates/memo/memo.inc:53
#, php-format
@@ -28,30 +28,30 @@ msgstr "%s caracteres"
msgid "%s file successfully imported"
msgstr "Arquivo %s importado com sucesso"
-#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:457 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "Anotações de %s"
-#: memo.php:201
+#: memo.php:237
msgid "Access denied deleting note."
msgstr "Acesso negado ao excluir anotação."
-#: memo.php:150 memo.php:153
+#: memo.php:180 memo.php:183
msgid "Access denied moving the note."
msgstr "Acesso negado ao mover a anotação."
-#: memo.php:120
+#: memo.php:135
#, php-format
msgid "Access denied saving note to %s."
msgstr "Acesso negado ao gravar a anotação em %s."
-#: memo.php:118
+#: memo.php:133
#, php-format
msgid "Access denied saving note: %s"
msgstr "Acesso negado ao gravar a anotação: %s"
-#: config/prefs.php.dist:70
+#: config/prefs.php.dist:69
msgid "Ascending"
msgstr "Ascendente"
@@ -67,7 +67,7 @@ msgstr "Cancelar"
msgid "Category"
msgstr "Categoria"
-#: notepads/index.php:32 templates/notepad_list.php:31
+#: templates/notepad_list.php:29 notepads/index.php:32
msgid "Change Permissions"
msgstr "Alterar Permissões"
@@ -91,7 +91,7 @@ msgstr "Criar"
msgid "Create Notepad"
msgstr "Criar Bloco de Anotações"
-#: templates/notepad_list.php:8
+#: templates/notepad_list.php:9
msgid "Create a new Notepad"
msgstr "Criar um novo Bloco de Anotações"
@@ -99,7 +99,7 @@ msgstr "Criar um novo Bloco de Anota
msgid "Created"
msgstr "Criado"
-#: templates/memo/memo.inc:23 templates/view/memo.inc:54
+#: templates/view/memo.inc:54 templates/memo/memo.inc:23
msgid "Decrypt"
msgstr "Descriptografar"
@@ -107,16 +107,16 @@ msgstr "Descriptografar"
msgid "Default Notepad"
msgstr "Bloco de Anotações Padrão"
-#: config/prefs.php.dist:61
+#: config/prefs.php.dist:60
msgid "Default sorting criteria:"
msgstr "Critério padrão de ordenação:"
-#: config/prefs.php.dist:72
+#: config/prefs.php.dist:71
msgid "Default sorting direction:"
msgstr "Direção de ordenação padrão:"
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
#: lib/Forms/DeleteNotepad.php:45 notepads/index.php:33
-#: templates/notepad_list.php:33 templates/view/memo.inc:16
msgid "Delete"
msgstr "Excluir"
@@ -137,7 +137,7 @@ msgstr "Comportamento do bot
msgid "Delete this note"
msgstr "Excluir esta anotação"
-#: config/prefs.php.dist:71
+#: config/prefs.php.dist:70
msgid "Descending"
msgstr "Descendente"
@@ -154,12 +154,12 @@ msgstr "N
msgid "Display Options"
msgstr "Opções de Exibição"
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:116
msgid "Do you want to confirm deleting entries?"
msgstr "Você deseja confirmar a exclusão de registros?"
-#: notepads/index.php:31 templates/notepad_list.php:29
-#: templates/view/memo.inc:13
+#: templates/notepad_list.php:27 templates/view/memo.inc:13
+#: notepads/index.php:31
msgid "Edit"
msgstr "Editar"
@@ -173,8 +173,8 @@ msgstr "Editar \"%s\""
msgid "Edit %s"
msgstr "Editar %s"
-#: lib/Block/summary.php:79 lib/Block/summary.php:80
-#: templates/list/memo_headers.inc:30
+#: templates/list/memo_headers.inc:30 lib/Block/summary.php:79
+#: lib/Block/summary.php:80
msgid "Edit Note"
msgstr "Editar Anotação"
@@ -182,12 +182,12 @@ msgstr "Editar Anota
msgid "Edit categories and colors"
msgstr "Editar categorias e cores"
-#: memo.php:104
+#: memo.php:118 memo.php:149
#, php-format
msgid "Edit: %s"
msgstr "Editar: %s"
-#: lib/Block/summary.php:104 templates/list/memo_summaries.inc:15
+#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:104
msgid "Empty Note"
msgstr "Anotação em Branco"
@@ -228,7 +228,7 @@ msgstr "Em: "
msgid "Last Modified"
msgstr "Última Modificação"
-#: notepads/index.php:37 templates/notepad_list.php:2
+#: templates/notepad_list.php:2 notepads/index.php:37
msgid "Manage Notepads"
msgstr "Gerenciar Blocos de Anotações"
@@ -248,6 +248,11 @@ msgstr "Lista de Menu"
msgid "More Options..."
msgstr "Mais Opções..."
+#: lib/api.php:524
+msgid "Multiple iCalendar components found; only one vNote is supported."
+msgstr ""
+"Encontrados múltiplos componentes iCalendar; somente um vNote é suportado."
+
#: templates/panel.inc:50
msgid "My Notepads:"
msgstr "Meus Blocos de Anotações:"
@@ -260,7 +265,7 @@ msgstr "Minhas Anota
msgid "Name"
msgstr "Nome"
-#: memo.php:57 lib/Block/tree_menu.php:23
+#: memo.php:95 memo.php:140 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr "Nova Anotação"
@@ -268,7 +273,7 @@ msgstr "Nova Anota
msgid "Next"
msgstr "Próxima"
-#: lib/api.php:286
+#: lib/api.php:337 lib/api.php:517
msgid "No iCalendar data was found."
msgstr "Nenhum dado iCalendar foi encontrado."
@@ -288,11 +293,11 @@ msgstr "Nenhuma anota
msgid "No_te"
msgstr "Ano_tação"
-#: lib/Driver/sql.php:195
+#: lib/Driver/sql.php:198
msgid "Not found"
msgstr "Não encontrado"
-#: config/prefs.php.dist:59
+#: config/prefs.php.dist:58
msgid "Note Category"
msgstr "Categoria da Anotação"
@@ -300,7 +305,7 @@ msgstr "Categoria da Anota
msgid "Note Details"
msgstr "Detalhes da Nota"
-#: config/prefs.php.dist:58
+#: config/prefs.php.dist:57
msgid "Note Text"
msgstr "Texto da Anotação"
@@ -308,20 +313,20 @@ msgstr "Texto da Anota
msgid "Note _Text"
msgstr "_Texto da Anotação"
-#: memo.php:67 view.php:56 note/pdf.php:57
+#: memo.php:105 memo.php:145 view.php:56 note/pdf.php:57
msgid "Note not found."
msgstr "Anotação não encontrada."
-#: templates/memo/memo.inc:59
-msgid "Note_pad"
-msgstr "Bloco de _Notas"
+#: templates/memo/memo.inc:63
+msgid "Note_pad:"
+msgstr "Bloco de _Notas:"
-#: templates/notepad_list.php:15 templates/list/memo_headers.inc:33
-#: config/prefs.php.dist:60
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
+#: config/prefs.php.dist:59
msgid "Notepad"
msgstr "Bloco de Anotações"
-#: templates/notepad_list.php:12
+#: templates/notepad_list.php:14
msgid "Notepad List"
msgstr "Lista de Bloco de Anotações"
@@ -333,8 +338,8 @@ msgstr "Blocos de Anota
msgid "Notes Summary"
msgstr "Resumo das Anotações"
-#: lib/api.php:161 lib/api.php:201 lib/api.php:234 lib/api.php:264
-#: lib/api.php:351 lib/api.php:419 lib/api.php:448
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "Permissão Negada"
@@ -355,8 +360,8 @@ msgstr ""
msgid "Really delete this note?"
msgstr "Realmente excluir esta anotação?"
-#: lib/Forms/EditNotepad.php:46 templates/panel.inc:68
-#: templates/memo/memo.inc:57
+#: templates/panel.inc:68 templates/memo/memo.inc:58
+#: lib/Forms/EditNotepad.php:46
msgid "Save"
msgstr "Gravar"
@@ -364,12 +369,12 @@ msgstr "Gravar"
msgid "Save as PDF"
msgstr "Gravar como PDF"
-#: search.php:17 lib/Block/tree_menu.php:44 templates/search/search.inc:4
-#: templates/search/search.inc:27 templates/list/header.inc:4
+#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:27
+#: templates/list/header.inc:4 lib/Block/tree_menu.php:44
msgid "Search"
msgstr "Pesquisar"
-#: list.php:54
+#: list.php:54 notes/index.php:35
msgid "Search Results"
msgstr "Resultados da Pesquisa"
@@ -407,10 +412,6 @@ msgstr "Exibir bot
msgid "Show notepad name?"
msgstr "Exibir o nome do bloco de anotações?"
-#: config/prefs.php.dist:49
-msgid "Show notepad options panel?"
-msgstr "Exibir o painel de opções de bloco de anotações?"
-
#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "Exibir anotações destas categorias"
@@ -427,7 +428,7 @@ msgstr "Ordenar pelo texto da anota
msgid "Sort by Notepad"
msgstr "Ordenar por Bloco de Anotações"
-#: memo.php:175
+#: memo.php:211
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "\"%s\" foi gravado com sucesso."
@@ -446,7 +447,7 @@ msgstr "A estrutura de Anota
msgid "The Notes backend is not currently available: %s"
msgstr "A estrutura de Anotações não está disponível: %s"
-#: memo.php:198
+#: memo.php:234
msgid "The note was deleted."
msgstr "A anotação foi excluída."
@@ -470,25 +471,32 @@ msgstr "O bloco de anota
msgid "The notepad \"%s\" has been saved."
msgstr "O bloco de anotações \"%s\" foi gravado."
+#: memo.php:137
+msgid "The passwords don't match."
+msgstr "As senhas não batem."
+
#: data.php:197
#, php-format
msgid "There was an error importing the data: %s"
msgstr "Houve um erro ao importar os dados: %s"
-#: lib/api.php:280
+#: lib/api.php:331 lib/api.php:511
msgid "There was an error importing the iCalendar data."
msgstr "Houve um erro ao importar os dados do iCalendar."
-#: lib/api.php:467
-msgid "There was an error importing the vNote data."
-msgstr "Houve um erro ao importar os dados vNote."
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr ""
+"Houve um erro ao remover anotações para %s. Detalhes foram registrados no "
+"log."
-#: memo.php:196
+#: memo.php:232
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Houve um erro ao remover a anotação: %s"
-#: memo.php:173
+#: memo.php:209
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Houve um erro ao gravar a anotação: %s"
@@ -506,16 +514,16 @@ msgstr "N
msgid "This file format is not supported."
msgstr "Este formato de arquivo não é suportado."
-#: memo.php:91 view.php:111
+#: memo.php:43 view.php:111
msgid "This note cannot be decrypted:"
msgstr "Esta anotação não pode ser descriptografada:"
-#: memo.php:83 view.php:103
+#: memo.php:34 view.php:103
msgid "This note has been encrypted, please provide the password below."
msgstr "Esta anotação foi criptografada, por favor forneça a senha abaixo."
-#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:357
-#: lib/Driver/kolab.php:766 lib/Driver/sql.php:448
+#: memo.php:30 memo.php:39 view.php:100 view.php:108 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:461
msgid "This note has been encrypted."
msgstr "Esta anotação foi criptografada."
@@ -538,13 +546,13 @@ msgstr "Imposs
msgid "Unable to save notepad \"%s\": %s"
msgstr "Impossível gravar bloco de anotações \"%s\": %s"
-#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
-#: lib/Block/summary.php:107 templates/view/memo.inc:27
-#: templates/list/memo_summaries.inc:17
+#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
+#: lib/Mnemo.php:273 lib/Mnemo.php:274 lib/Mnemo.php:288 lib/Mnemo.php:289
+#: lib/Block/summary.php:107
msgid "Unfiled"
msgstr "Sem categoria"
-#: lib/api.php:316 lib/api.php:382 lib/api.php:475
+#: lib/api.php:367 lib/api.php:433 lib/api.php:533
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Tipo de Conteúdo não suportado: %s"
@@ -557,7 +565,7 @@ msgstr "Em qual Bloco de Anota
msgid "You are not allowed to change this notepad."
msgstr "Você não ter permissão para alterar este Bloco de Anotações."
-#: memo.php:37 data.php:42 data.php:129
+#: data.php:42 data.php:129 memo.php:75
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr "Você não pode criar mais do que %d anotações."
@@ -566,6 +574,10 @@ msgstr "Voc
msgid "You are not allowed to delete this notepad."
msgstr "Voc? não tem permissão para apagar este bloco de anotações."
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr "Você não tem permissão para remover dados de usuário."
+
#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
@@ -583,10 +595,14 @@ msgstr "[Gerenciar Blocos de Anota
msgid "_Body"
msgstr "_Corpo"
-#: templates/memo/memo.inc:70 templates/list/memo_headers.inc:41
+#: templates/list/memo_headers.inc:41
msgid "_Category"
msgstr "_Categoria"
+#: templates/memo/memo.inc:78
+msgid "_Category:"
+msgstr "_Categoria:"
+
#: templates/view/memo.inc:16
msgid "_Delete"
msgstr "E_xcluir"
@@ -595,7 +611,7 @@ msgstr "E_xcluir"
msgid "_Edit"
msgstr "_Editar"
-#: templates/memo/memo.inc:74
+#: templates/memo/memo.inc:84
msgid "_Encrypt?"
msgstr "_Criptografar?"
@@ -603,28 +619,35 @@ msgstr "_Criptografar?"
msgid "_For: "
msgstr "_Para: "
-#: lib/Mnemo.php:488
+#: lib/Mnemo.php:494
msgid "_Import/Export"
msgstr "_Importar/Exportar"
-#: lib/Mnemo.php:475
+#: lib/Mnemo.php:481
msgid "_List Notes"
msgstr "_Listar Anotações"
-#: lib/Mnemo.php:480
+#: lib/Mnemo.php:486
msgid "_New Note"
msgstr "_Nova Anotação"
-#: templates/memo/memo.inc:21 templates/memo/memo.inc:79
-#: templates/view/memo.inc:52
+#: templates/view/memo.inc:52 templates/memo/memo.inc:21
msgid "_Password"
msgstr "_Senha"
-#: lib/Mnemo.php:493
+#: templates/memo/memo.inc:89
+msgid "_Password:"
+msgstr "_Senha:"
+
+#: lib/Mnemo.php:499
msgid "_Print"
msgstr "_Imprimir"
-#: lib/Mnemo.php:484
+#: templates/memo/memo.inc:93
+msgid "_Repeat:"
+msgstr "_Repetir:"
+
+#: lib/Mnemo.php:490
msgid "_Search"
msgstr "Pes_quisar"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index e203468..a4f8052 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -1,5 +1,5 @@
# Mnemo Romanian Translation
-# Copyright (C) 2003 Horde Project
+# Copyright 2003-2009 The Horde Project
# Eugen Hoanca <eugenh at urban-grafx.ro>, 2003.
# Marius Dragulescu <mariusd at urban-grafx.ro>, 2003.
#
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 13181b1..ea758b6 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -1,5 +1,5 @@
# Russian translations for Mnemo package
-# Copyright (C)
+# Copyright
# Alexey Zakharov <baber at mosga.net>, 2008
#
msgid ""
diff --git a/po/sk_SK.po b/po/sk_SK.po
index ec2bb36..61cb0fe 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -1,5 +1,5 @@
# Mnemo Slovak translation
-# Copyright (C) 2002, 2004 Ivan Noris
+# Copyright 2002, 2004 Ivan Noris
# Ivan Noris <vix at vazka.sk>, 2002, 2004
# Martin Matu¹ka <martin at matuska.org>, 2008
#
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mnemo 2.0\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-05-12 11:43+0200\n"
-"PO-Revision-Date: 2008-03-19 12:00+0100\n"
+"POT-Creation-Date: 2008-09-06 11:11+0200\n"
+"PO-Revision-Date: 2008-09-17 12:51+0100\n"
"Last-Translator: Martin Matuska <martin at matuska.org>\n"
"Language-Team: Slovak <vix at vazka.sk>\n"
"MIME-Version: 1.0\n"
@@ -26,16 +26,16 @@ msgstr "%s znakov"
msgid "%s file successfully imported"
msgstr "súbor %s úspe¹ne importovaný"
-#: notepads.php:102 lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
+#: lib/Mnemo.php:451 lib/Forms/DeleteNotepad.php:86
#, php-format
msgid "%s's Notepad"
msgstr "Poznámky pou¾ívateµa %s"
-#: memo.php:201
+#: memo.php:200
msgid "Access denied deleting note."
msgstr "Pri vymazávaní poznámky bol zamietnutý prístup."
-#: memo.php:150 memo.php:153
+#: memo.php:143 memo.php:146
msgid "Access denied moving the note."
msgstr "Pri presúvaní poznámky bol zamietnutý prístup."
@@ -65,11 +65,7 @@ msgstr "Zru
msgid "Category"
msgstr "Kategória"
-#: templates/notepads/notepads.inc:22
-msgid "Change"
-msgstr "Zmeni»"
-
-#: notepads/index.php:32 templates/notepad_list.php:31
+#: templates/notepad_list.php:29 notepads/index.php:32
msgid "Change Permissions"
msgstr "Zmeni» práva"
@@ -85,7 +81,6 @@ msgstr "Vybra
msgid "Close Search"
msgstr "Zavrie» hµadanie"
-#: templates/notepads/notepads.inc:15 templates/notepads/notepads.inc:64
#: lib/Forms/CreateNotepad.php:39
msgid "Create"
msgstr "Vytvori»"
@@ -94,7 +89,7 @@ msgstr "Vytvori
msgid "Create Notepad"
msgstr "Vytvori» poznámkový blok"
-#: templates/notepad_list.php:8
+#: templates/notepad_list.php:9
msgid "Create a new Notepad"
msgstr "Vytvori» nový poznámkový blok"
@@ -118,9 +113,8 @@ msgstr "Prednastaven
msgid "Default sorting direction:"
msgstr "Prednastavený smer triedenia:"
-#: notepads/index.php:33 templates/notepad_list.php:33
-#: templates/notepads/notepads.inc:65 templates/view/memo.inc:16
-#: lib/Forms/DeleteNotepad.php:45
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
+#: notepads/index.php:33 lib/Forms/DeleteNotepad.php:45
msgid "Delete"
msgstr "Vymaza»"
@@ -145,14 +139,10 @@ msgstr "Vymaza
msgid "Descending"
msgstr "Zostupne"
-#: lib/Forms/CreateNotepad.php:37 lib/Forms/EditNotepad.php:44
+#: lib/Forms/EditNotepad.php:44 lib/Forms/CreateNotepad.php:37
msgid "Description"
msgstr "Popis"
-#: templates/notepads/notepads.inc:60
-msgid "Description:"
-msgstr "Popis:"
-
#: lib/Driver/kolab.php:556
#, php-format
msgid "Did not find note %s"
@@ -166,8 +156,8 @@ msgstr "Nastavenie zobrazenia"
msgid "Do you want to confirm deleting entries?"
msgstr "Chcete potvrdi» vymazanie záznamov?"
-#: notepads/index.php:31 templates/notepad_list.php:29
-#: templates/view/memo.inc:13
+#: templates/notepad_list.php:27 templates/view/memo.inc:13
+#: notepads/index.php:31
msgid "Edit"
msgstr "Upravi»"
@@ -181,7 +171,8 @@ msgstr "Upravi
msgid "Edit %s"
msgstr "Upravi» %s"
-#: templates/list/memo_headers.inc:30 lib/Block/summary.php:74
+#: templates/list/memo_headers.inc:30 lib/Block/summary.php:79
+#: lib/Block/summary.php:80
msgid "Edit Note"
msgstr "Upravi» poznámku"
@@ -194,7 +185,7 @@ msgstr "Upravi
msgid "Edit: %s"
msgstr "Upravi»: %s"
-#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:93
+#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:104
msgid "Empty Note"
msgstr "Prázdna poznámka"
@@ -235,7 +226,7 @@ msgstr "V: "
msgid "Last Modified"
msgstr "Posledná aktualizácia"
-#: notepads/index.php:37 templates/notepad_list.php:2
+#: templates/notepad_list.php:2 notepads/index.php:37
msgid "Manage Notepads"
msgstr "Spravova» poznámkové bloky"
@@ -263,14 +254,10 @@ msgstr "Moje pozn
msgid "My Notes"
msgstr "Moje poznámky"
-#: lib/Forms/CreateNotepad.php:36 lib/Forms/EditNotepad.php:43
+#: lib/Forms/EditNotepad.php:43 lib/Forms/CreateNotepad.php:36
msgid "Name"
msgstr "Meno"
-#: templates/notepads/notepads.inc:53
-msgid "Name:"
-msgstr "Meno:"
-
#: memo.php:57 lib/Block/tree_menu.php:23
msgid "New Note"
msgstr "Nová poznámka"
@@ -279,7 +266,7 @@ msgstr "Nov
msgid "Next"
msgstr "Ïalej"
-#: lib/api.php:286
+#: lib/api.php:337
msgid "No iCalendar data was found."
msgstr "Neboli nájdené ¾iadne údaje iCalendar."
@@ -291,7 +278,7 @@ msgstr "
msgid "No notes match the current criteria."
msgstr "®iadne poznámky nevyhovujú aktuálnym kritériám."
-#: lib/Block/summary.php:101
+#: lib/Block/summary.php:112
msgid "No notes to display"
msgstr "®iadne poznámky na zobrazenie"
@@ -311,10 +298,6 @@ msgstr "Kateg
msgid "Note Details"
msgstr "Detaily poznámky"
-#: notepads.php:113
-msgid "Note Lists"
-msgstr "Zoznamy poznámkových blokov"
-
#: config/prefs.php.dist:58
msgid "Note Text"
msgstr "Text poznámky"
@@ -331,34 +314,25 @@ msgstr "Pozn
msgid "Note_pad"
msgstr "_Poznámkový blok"
-#: templates/notepad_list.php:15 templates/list/memo_headers.inc:33
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
#: config/prefs.php.dist:60
msgid "Notepad"
msgstr "Poznámkový blok"
-#: templates/notepad_list.php:12
+#: templates/notepad_list.php:14
msgid "Notepad List"
msgstr "Zoznam poznámkových blokov"
#: templates/panel.inc:32 templates/panel.inc:33
-#: templates/notepads/notepads.inc:42
msgid "Notepads"
msgstr "Poznámkové bloky"
-#: notepads.php:32
-msgid "Notepads must have a name."
-msgstr "Poznámkové bloky musia ma» názov."
-
-#: templates/notepads/notepads.inc:45
-msgid "Notepads:"
-msgstr "Poznámkové bloky:"
-
#: lib/Block/summary.php:3
msgid "Notes Summary"
msgstr "Súhrn poznámok"
-#: lib/api.php:161 lib/api.php:201 lib/api.php:234 lib/api.php:264
-#: lib/api.php:351 lib/api.php:410 lib/api.php:439
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "Prístup zamietnutý"
@@ -366,10 +340,6 @@ msgstr "Pr
msgid "Permission denied"
msgstr "Prístup zamietnutý"
-#: templates/notepads/notepads.inc:56
-msgid "Permissions"
-msgstr "Práva"
-
#: lib/Forms/DeleteNotepad.php:43
#, php-format
msgid ""
@@ -405,10 +375,6 @@ msgstr "V
msgid "Search for Notepads:"
msgstr "Hµada» poznámkové bloky:"
-#: templates/notepads/notepads.inc:47
-msgid "Select a notepad"
-msgstr "Vyberte poznámkový blok"
-
#: templates/data/export.inc:9
msgid "Select the export format:"
msgstr "Vyberte formát exportu:"
@@ -429,11 +395,11 @@ msgstr "Zdie
msgid "Should the Notepad be shown in its own column in the List view?"
msgstr "Má by» poznámkový blok zobrazený vo vlastnom ståpci v prehµade?"
-#: lib/Block/summary.php:34
+#: lib/Block/summary.php:35
msgid "Show action buttons?"
msgstr "Zobrazi» tlaèidlá akcií?"
-#: lib/Block/summary.php:37
+#: lib/Block/summary.php:39
msgid "Show notepad name?"
msgstr "Zobrazi» meno poznámkového bloku?"
@@ -441,7 +407,7 @@ msgstr "Zobrazi
msgid "Show notepad options panel?"
msgstr "Zobrazi» panel s nastaveniami poznámkového bloku?"
-#: lib/Block/summary.php:40
+#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "Zobrazi» poznámky z týchto kategórií"
@@ -457,7 +423,7 @@ msgstr "Triedi
msgid "Sort by Notepad"
msgstr "Triedi» podµa poznámkového bloku"
-#: memo.php:175
+#: memo.php:174
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "Úspe¹ne ulo¾ené: \"%s\"."
@@ -476,21 +442,16 @@ msgstr "Backend pre pozn
msgid "The Notes backend is not currently available: %s"
msgstr "Backend pre poznámky nie je k dispozícii: %s"
-#: memo.php:198
+#: memo.php:197
msgid "The note was deleted."
msgstr "Poznámka bola vymazaná."
-#: notepads.php:45 notepads.php:56
-#, php-format
-msgid "The notepad \"%s\" couldn't be created: %s"
-msgstr "Poznámkový blok \"%s\" sa nepodarilo vytvori»: %s"
-
-#: notepads.php:47 notepads/create.php:31
+#: notepads/create.php:31
#, php-format
msgid "The notepad \"%s\" has been created."
msgstr "Poznámkový blok \"%s\" bol vytvorený."
-#: notepads.php:88 notepads/delete.php:48
+#: notepads/delete.php:48
#, php-format
msgid "The notepad \"%s\" has been deleted."
msgstr "Poznámkový blok \"%s\" bol vymazaný."
@@ -500,7 +461,7 @@ msgstr "Pozn
msgid "The notepad \"%s\" has been renamed to \"%s\"."
msgstr "Poznámkový blok \"%s\" bol premenovaný na \"%s\"."
-#: notepads.php:58 notepads/edit.php:44
+#: notepads/edit.php:44
#, php-format
msgid "The notepad \"%s\" has been saved."
msgstr "Poznámkový blok \"%s\" bol ulo¾ený."
@@ -510,20 +471,26 @@ msgstr "Pozn
msgid "There was an error importing the data: %s"
msgstr "Nastala chyba pri importe údajov: %s"
-#: lib/api.php:280
+#: lib/api.php:331
msgid "There was an error importing the iCalendar data."
msgstr "Nastala chyba pri importe údajov iCalendar."
-#: lib/api.php:458
+#: lib/api.php:518
msgid "There was an error importing the vNote data."
msgstr "Nastala chyba pri importe údajov vNote."
-#: memo.php:196
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr ""
+"Nastala chyba pri odstraòovaní poznámky pre %s. Podrobnosti boli zaznamenané."
+
+#: memo.php:195
#, php-format
msgid "There was an error removing the note: %s"
msgstr "Nastala chyba pri odstraòovaní poznámky: %s"
-#: memo.php:173
+#: memo.php:172
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Nastala chyba pri ukladaní poznámky: %s"
@@ -549,8 +516,8 @@ msgstr "T
msgid "This note has been encrypted, please provide the password below."
msgstr "Táto poznámka bola za¹ifrovaná, prosím zadajte heslo ni¾¹ie."
-#: view.php:100 view.php:108 memo.php:80 memo.php:88 lib/Driver/sql.php:448
-#: lib/Driver/kolab.php:766
+#: view.php:100 view.php:108 memo.php:80 memo.php:88 lib/api.php:408
+#: lib/Driver/kolab.php:766 lib/Driver/sql.php:458
msgid "This note has been encrypted."
msgstr "Táto poznámka bola za¹ifrovaná."
@@ -558,7 +525,7 @@ msgstr "T
msgid "This notepad cannot be deleted"
msgstr "Tento poznámkový blok nemô¾e by» vymazaný."
-#: notepads.php:83 lib/Forms/DeleteNotepad.php:63
+#: lib/Forms/DeleteNotepad.php:63
#, php-format
msgid "Unable to delete \"%s\": %s"
msgstr "Nepodarilo sa vymaza» \"%s\": %s"
@@ -575,11 +542,11 @@ msgstr "Nepodarilo sa ulo
#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
-#: lib/Block/summary.php:96
+#: lib/Block/summary.php:107
msgid "Unfiled"
msgstr "Nenastavená"
-#: lib/api.php:316 lib/api.php:373 lib/api.php:466
+#: lib/api.php:367 lib/api.php:433 lib/api.php:526
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "Nepodporovaný typ obsahu (Content-Type): %s"
@@ -601,15 +568,15 @@ msgstr "Nem
msgid "You are not allowed to delete this notepad."
msgstr "Nemáte právo na zmazanie tohto poznámkového bloku."
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr "Nemáte právo na vymazanie pou¾ívateµských údajov."
+
#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
msgstr "Nemáte právo na zobrazenie poznámkového bloku %s."
-#: notepads.php:68
-msgid "You must select a notepad to be deleted."
-msgstr "Musíte oznaèi» poznámkový blok, ktorý má by» vymazaný."
-
#: templates/prefs/notepadselect.inc:10
msgid "Your default notepad:"
msgstr "Prednastavený poznámkový blok:"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index cc54238..5d7941d 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -1,6 +1,6 @@
# Slovenian translations for mnemo packaga
# Slovenski prevod mnemo paketa
-# Copyright (C) 2006 Horde Project
+# Copyright 2006-2009 The Horde Project
# This file is distributed under the same license as the horde package.
# Automatically generated, 2006.
#
diff --git a/po/sv_SE.po b/po/sv_SE.po
index 1485d3d..34d8fad 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -1,5 +1,5 @@
# Swedish translations for Mnemo package.
-# Copyright (C) 2005 Horde Project
+# Copyright 2005-2009 The Horde Project
# This file is distributed under the same license as the Mnemo package.
# Andreas Dahlen <andreas at dahlen.ws>, 2002-2005.
#
diff --git a/po/tr_TR.po b/po/tr_TR.po
index bbb98f3..206ee10 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -1,6 +1,6 @@
# Turkish translations for Mnemo package
# Not defteri paketi için Türkçe çeviriler.
-# Copyright (C) 2008 Horde Project
+# Copyright 2008-2009 The Horde Project
# This file is distributed under the same license as the Mnemo package.
# horde-tr at metu.edu.tr, 2007-2008.
#
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 0022de7..5008c22 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1,5 +1,5 @@
# Mnemo Simplified Chinese Translation
-# Copyright (C) 2002 Peter Wang
+# Copyright 2002 Peter Wang
# Peter Wang <whw at oulink.net>, 2002
#
msgid ""
diff --git a/po/zh_TW.po b/po/zh_TW.po
index df428ae..b9b9cc6 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,12 +1,12 @@
# MNEMO Traditional Chinese Translation
-# Copyright (C) 2002 David Chang.±i¨}¤å,¥xÆW
+# Copyright 2002 David Chang.±i¨}¤å,¥xÆW
# David Chang <david at tmv.gov.tw>, 2002.
#
msgid ""
msgstr ""
"Project-Id-Version: Mnemo 2.2\n"
"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-05-11 18:39+0800\n"
+"POT-Creation-Date: 2008-12-15 13:56+0800\n"
"PO-Revision-Date: 2008-03-28 12:00+0800\n"
"Last-Translator: David Chang <david at tmv.gov.tw>\n"
"Language-Team: Traditional Chinese <i18n at lists.horde.org>\n"
@@ -30,11 +30,11 @@ msgstr "
msgid "%s's Notepad"
msgstr "%sªº³Æ§Ñ¿ý"
-#: memo.php:201
+#: memo.php:200
msgid "Access denied deleting note."
msgstr "§R°£ºKn®É,¦s¨ú¾D©Ú."
-#: memo.php:150 memo.php:153
+#: memo.php:143 memo.php:146
msgid "Access denied moving the note."
msgstr "·h²¾¦¹ºKn®É,¦s¨ú¾D©Ú."
@@ -64,7 +64,7 @@ msgstr "
msgid "Category"
msgstr "¤ÀÃþ"
-#: notepads/index.php:32 templates/notepad_list.php:31
+#: notepads/index.php:32 templates/notepad_list.php:29
msgid "Change Permissions"
msgstr "Åܧó¦s¨ú¼Ò¦¡"
@@ -88,7 +88,7 @@ msgstr "
msgid "Create Notepad"
msgstr "«Ø¥ß³Æ§Ñ¿ý"
-#: templates/notepad_list.php:8
+#: templates/notepad_list.php:9
msgid "Create a new Notepad"
msgstr "«Ø¥ß·sªº³Æ§Ñ¿ý"
@@ -112,8 +112,8 @@ msgstr "
msgid "Default sorting direction:"
msgstr "¹w³]ªº±Æ§Ç¤è¦V:"
-#: notepads/index.php:33 templates/notepad_list.php:33
-#: templates/view/memo.inc:16 lib/Forms/DeleteNotepad.php:45
+#: lib/Forms/DeleteNotepad.php:45 notepads/index.php:33
+#: templates/notepad_list.php:31 templates/view/memo.inc:16
msgid "Delete"
msgstr "§R°£"
@@ -155,7 +155,7 @@ msgstr "
msgid "Do you want to confirm deleting entries?"
msgstr "§A½T©wn§R°£°O¿ý¶Ü?"
-#: notepads/index.php:31 templates/notepad_list.php:29
+#: notepads/index.php:31 templates/notepad_list.php:27
#: templates/view/memo.inc:13
msgid "Edit"
msgstr "½s¿è"
@@ -170,7 +170,8 @@ msgstr "
msgid "Edit %s"
msgstr "½s¿è %s"
-#: templates/list/memo_headers.inc:30 lib/Block/summary.php:74
+#: lib/Block/summary.php:79 lib/Block/summary.php:80
+#: templates/list/memo_headers.inc:30
msgid "Edit Note"
msgstr "½s¿èºKn"
@@ -183,7 +184,7 @@ msgstr "
msgid "Edit: %s"
msgstr "½s¿è: %s"
-#: templates/list/memo_summaries.inc:15 lib/Block/summary.php:93
+#: lib/Block/summary.php:104 templates/list/memo_summaries.inc:15
msgid "Empty Note"
msgstr "²MªÅºKn"
@@ -262,7 +263,7 @@ msgstr "
msgid "Next"
msgstr "¤U¤@¨B"
-#: lib/api.php:286
+#: lib/api.php:337
msgid "No iCalendar data was found."
msgstr "§ä¤£¨ì iCalendar ¸ê®Æ."
@@ -274,7 +275,7 @@ msgstr "
msgid "No notes match the current criteria."
msgstr "¨S¦³ºKn²Å¦X·j´M±ø¥ó."
-#: lib/Block/summary.php:101
+#: lib/Block/summary.php:112
msgid "No notes to display"
msgstr "µLºKn¥i¨ÑÅã¥Ü"
@@ -310,12 +311,12 @@ msgstr "
msgid "Note_pad"
msgstr "³Æ§Ñ¿ý_p"
-#: templates/notepad_list.php:15 templates/list/memo_headers.inc:33
+#: templates/notepad_list.php:17 templates/list/memo_headers.inc:33
#: config/prefs.php.dist:60
msgid "Notepad"
msgstr "³Æ§Ñ¿ý"
-#: templates/notepad_list.php:12
+#: templates/notepad_list.php:14
msgid "Notepad List"
msgstr "ÂsÄý"
@@ -327,8 +328,8 @@ msgstr "
msgid "Notes Summary"
msgstr "ºKn¤ÀÃþ"
-#: lib/api.php:161 lib/api.php:201 lib/api.php:234 lib/api.php:264
-#: lib/api.php:351 lib/api.php:410 lib/api.php:439
+#: lib/api.php:212 lib/api.php:252 lib/api.php:285 lib/api.php:315
+#: lib/api.php:402 lib/api.php:470 lib/api.php:499
msgid "Permission Denied"
msgstr "¦s¨ú¾D©Ú"
@@ -349,8 +350,8 @@ msgstr ""
msgid "Really delete this note?"
msgstr "½T©w§R°£¦¹ºKn?"
-#: templates/panel.inc:68 templates/memo/memo.inc:57
-#: lib/Forms/EditNotepad.php:46
+#: lib/Forms/EditNotepad.php:46 templates/panel.inc:68
+#: templates/memo/memo.inc:57
msgid "Save"
msgstr "Àx¦s"
@@ -358,8 +359,8 @@ msgstr "
msgid "Save as PDF"
msgstr "Àx¦s¬° PDF ÀÉ®×"
-#: search.php:17 templates/search/search.inc:4 templates/search/search.inc:27
-#: templates/list/header.inc:4 lib/Block/tree_menu.php:44
+#: search.php:17 lib/Block/tree_menu.php:44 templates/search/search.inc:4
+#: templates/search/search.inc:27 templates/list/header.inc:4
msgid "Search"
msgstr "·j´M"
@@ -391,11 +392,11 @@ msgstr "
msgid "Should the Notepad be shown in its own column in the List view?"
msgstr "¦b¦C¥XºKnªºµe±¤¤Åã¥Ü³Æ§Ñ¿ý¦WºÙ?"
-#: lib/Block/summary.php:34
+#: lib/Block/summary.php:35
msgid "Show action buttons?"
msgstr "Åã¥Ü§@¥Î«ö¶s?"
-#: lib/Block/summary.php:37
+#: lib/Block/summary.php:39
msgid "Show notepad name?"
msgstr "Åã¥Ü³Æ§Ñ¿ý¦WºÙ?"
@@ -403,7 +404,7 @@ msgstr "
msgid "Show notepad options panel?"
msgstr "Åã¥Ü¶i¶¥¥\¯à±ªO?"
-#: lib/Block/summary.php:40
+#: lib/Block/summary.php:43
msgid "Show notes from these categories"
msgstr "±q³o¨Ç¤ÀÃþÅã¥ÜºKn"
@@ -419,7 +420,7 @@ msgstr "
msgid "Sort by Notepad"
msgstr "¥H³Æ§Ñ¿ý±Æ¦C"
-#: memo.php:175
+#: memo.php:174
#, php-format
msgid "Successfully saved \"%s\"."
msgstr "\"%s\"¤wÀx¦s§¹¦¨."
@@ -438,7 +439,7 @@ msgstr "
msgid "The Notes backend is not currently available: %s"
msgstr "¥Ø«e¨S¦³¥i¥Îªº³Æ§Ñ¿ý¦øªAºÝ: %s"
-#: memo.php:198
+#: memo.php:197
msgid "The note was deleted."
msgstr "ºKn¤w§R°£."
@@ -467,20 +468,25 @@ msgstr "
msgid "There was an error importing the data: %s"
msgstr "¶×¤J³oÓ¸ê®Æ: %s ®Éµo¥Í¤@Ó¿ù»~"
-#: lib/api.php:280
+#: lib/api.php:331
msgid "There was an error importing the iCalendar data."
msgstr "¶×¤J iCalendar ¸ê®Æ®Éµo¥Í¤@Ó¿ù»~."
-#: lib/api.php:458
+#: lib/api.php:518
msgid "There was an error importing the vNote data."
msgstr "¶×¤J vNote ¸ê®Æ®Éµo¥Í¤@Ó¿ù»~."
-#: memo.php:196
+#: lib/api.php:168
+#, php-format
+msgid "There was an error removing notes for %s. Details have been logged."
+msgstr "¦Û %s ²¾°£ºKn®Éµo¥Í¤@Ó¿ù»~. ²Ó¸`¤wµn¸ü."
+
+#: memo.php:195
#, php-format
msgid "There was an error removing the note: %s"
msgstr "²¾°£ºKn: %s ®Éµo¥Í¤@Ó¿ù»~."
-#: memo.php:173
+#: memo.php:172
#, php-format
msgid "There was an error saving the note: %s"
msgstr "Àx¦sºKn: %s ®Éµo¥Í¤@Ó¿ù»~."
@@ -506,8 +512,8 @@ msgstr "
msgid "This note has been encrypted, please provide the password below."
msgstr "¦¹ºKn¤w³Q¥[±K³B²z, ½Ð©ó¤U¤è¿é¤J±K½X."
-#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/Driver/kolab.php:766
-#: lib/Driver/sql.php:448
+#: memo.php:80 memo.php:88 view.php:100 view.php:108 lib/api.php:408
+#: lib/Driver/sql.php:458 lib/Driver/kolab.php:766
msgid "This note has been encrypted."
msgstr "¦¹ºKn¤w³Q¥[±K³B²z."
@@ -530,13 +536,13 @@ msgstr "
msgid "Unable to save notepad \"%s\": %s"
msgstr "µLªkÀx¦s³Æ§Ñ¿ý \"%s\": %s"
-#: templates/view/memo.inc:27 templates/list/memo_summaries.inc:17
#: lib/Mnemo.php:267 lib/Mnemo.php:268 lib/Mnemo.php:282 lib/Mnemo.php:283
-#: lib/Block/summary.php:96
+#: lib/Block/summary.php:107 templates/list/memo_summaries.inc:17
+#: templates/view/memo.inc:27
msgid "Unfiled"
msgstr "¥¼¤ÀÃþ"
-#: lib/api.php:316 lib/api.php:373 lib/api.php:466
+#: lib/api.php:367 lib/api.php:433 lib/api.php:526
#, php-format
msgid "Unsupported Content-Type: %s"
msgstr "¥¼¤ä´©ªº¤º®e«¬ºA: %s. (Unsupported Content-Type)"
@@ -549,7 +555,7 @@ msgstr "
msgid "You are not allowed to change this notepad."
msgstr "§A¨S¦³Åܧ󦹳ƧѿýªºÅv."
-#: data.php:42 data.php:129 memo.php:37
+#: memo.php:37 data.php:42 data.php:129
#, php-format
msgid "You are not allowed to create more than %d notes."
msgstr "§A¨S¦³«Ø¥ß¶W¹L %d ÓºKnªºÅv."
@@ -558,6 +564,10 @@ msgstr "
msgid "You are not allowed to delete this notepad."
msgstr "§A¨S¦³§R°£¦¹³Æ§Ñ¿ýªºÅv."
+#: lib/api.php:100
+msgid "You are not allowed to remove user data."
+msgstr "§A¨S¦³²¾°£¥Î¤á¸ê®ÆªºÅv."
+
#: view.php:49 note/pdf.php:50
#, php-format
msgid "You do not have permission to view the notepad %s."
@@ -575,7 +585,7 @@ msgstr "[
msgid "_Body"
msgstr "¤º®e_B"
-#: templates/memo/memo.inc:70 templates/list/memo_headers.inc:41
+#: templates/list/memo_headers.inc:41 templates/memo/memo.inc:70
msgid "_Category"
msgstr "¤ÀÃþ_C"
diff --git a/pref_api.php b/pref_api.php
index 6a91cf0..c0732a6 100644
--- a/pref_api.php
+++ b/pref_api.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/pref_api.php,v 1.1.2.4 2008/01/02 11:32:26 jan Exp $
+ * $Horde: mnemo/pref_api.php,v 1.1.2.5 2009-01-06 15:24:57 jan Exp $
*
- * Copyright 2006-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2006-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
diff --git a/scripts/import_text_note.php b/scripts/import_text_note.php
index 7e8b1b7..4af0875 100755
--- a/scripts/import_text_note.php
+++ b/scripts/import_text_note.php
@@ -5,9 +5,9 @@
* The data is read from standard input, the notepad and user name passed as
* parameters.
*
- * $Horde: mnemo/scripts/import_text_note.php,v 1.1.2.1 2008/06/24 19:35:37 chuck Exp $
+ * $Horde: mnemo/scripts/import_text_note.php,v 1.1.2.2 2009-01-06 15:25:03 jan Exp $
*
- * Copyright 2005-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/scripts/import_vnotes.php b/scripts/import_vnotes.php
index de2ea9c..07e76b6 100755
--- a/scripts/import_vnotes.php
+++ b/scripts/import_vnotes.php
@@ -5,9 +5,9 @@
* The data is read from standard input, the notepad and user name passed as
* parameters.
*
- * $Horde: mnemo/scripts/import_vnotes.php,v 1.3.2.5 2008/01/02 11:32:28 jan Exp $
+ * $Horde: mnemo/scripts/import_vnotes.php,v 1.3.2.6 2009-01-06 15:25:03 jan Exp $
*
- * Copyright 2005-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/scripts/sql/mnemo.mssql.sql b/scripts/sql/mnemo.mssql.sql
index 7528156..fc386dc 100644
--- a/scripts/sql/mnemo.mssql.sql
+++ b/scripts/sql/mnemo.mssql.sql
@@ -1,4 +1,4 @@
--- $Horde: mnemo/scripts/sql/mnemo.mssql.sql,v 1.1.2.5 2008/06/18 00:42:10 mrubinsk Exp $
+-- $Horde: mnemo/scripts/sql/mnemo.mssql.sql,v 1.1.2.8 2009-10-20 21:44:35 jan Exp $
CREATE TABLE mnemo_memos (
memo_owner VARCHAR(255) NOT NULL,
@@ -18,11 +18,11 @@ CREATE INDEX mnemo_uid_idx ON mnemo_memos (memo_uid);
CREATE TABLE mnemo_shares (
share_id INT NOT NULL,
share_name VARCHAR(255) NOT NULL,
- share_owner VARCHAR(32) NOT NULL,
- share_flags SMALLINT NOT NULL DEFAULT 0,
- perm_creator SMALLINT NOT NULL DEFAULT 0,
- perm_default SMALLINT NOT NULL DEFAULT 0,
- perm_guest SMALLINT NOT NULL DEFAULT 0,
+ share_owner VARCHAR(255) NOT NULL,
+ share_flags SMALLINT DEFAULT 0 NOT NULL,
+ perm_creator SMALLINT DEFAULT 0 NOT NULL,
+ perm_default SMALLINT DEFAULT 0 NOT NULL,
+ perm_guest SMALLINT DEFAULT 0 NOT NULL,
attribute_name VARCHAR(255) NOT NULL,
attribute_desc VARCHAR(255),
PRIMARY KEY (share_id)
@@ -36,7 +36,7 @@ CREATE INDEX mnemo_shares_perm_guest_idx ON mnemo_shares (perm_guest);
CREATE TABLE mnemo_shares_groups (
share_id INT NOT NULL,
- group_uid INT NOT NULL,
+ group_uid VARCHAR(255) NOT NULL,
perm SMALLINT NOT NULL
);
diff --git a/scripts/sql/mnemo.oci8.sql b/scripts/sql/mnemo.oci8.sql
index 91ff46b..c46f156 100644
--- a/scripts/sql/mnemo.oci8.sql
+++ b/scripts/sql/mnemo.oci8.sql
@@ -1,4 +1,4 @@
--- $Horde: mnemo/scripts/sql/mnemo.oci8.sql,v 1.1.2.7 2008/06/18 00:42:10 mrubinsk Exp $
+-- $Horde: mnemo/scripts/sql/mnemo.oci8.sql,v 1.1.2.12 2009-10-20 21:44:35 jan Exp $
CREATE TABLE mnemo_memos (
memo_owner VARCHAR2(255) NOT NULL,
@@ -7,7 +7,7 @@ CREATE TABLE mnemo_memos (
memo_desc VARCHAR2(64) NOT NULL,
memo_body VARCHAR2(4000),
memo_category VARCHAR2(80),
- memo_private NUMBER(6) DEFAULT 0 NOT NULL,
+ memo_private NUMBER(1) DEFAULT 0 NOT NULL,
--
PRIMARY KEY (memo_owner, memo_id)
);
@@ -16,40 +16,40 @@ CREATE INDEX mnemo_notepad_idx ON mnemo_memos (memo_owner);
CREATE INDEX mnemo_uid_idx ON mnemo_memos (memo_uid);
CREATE TABLE mnemo_shares (
- share_id INT NOT NULL,
+ share_id NUMBER(16) NOT NULL,
share_name VARCHAR2(255) NOT NULL,
- share_owner VARCHAR2(32) NOT NULL,
- share_flags SMALLINT NOT NULL DEFAULT 0,
- perm_creator SMALLINT NOT NULL DEFAULT 0,
- perm_default SMALLINT NOT NULL DEFAULT 0,
- perm_guest SMALLINT NOT NULL DEFAULT 0,
+ share_owner VARCHAR2(255) NOT NULL,
+ share_flags NUMBER(8) DEFAULT 0 NOT NULL,
+ perm_creator NUMBER(8) DEFAULT 0 NOT NULL,
+ perm_default NUMBER(8) DEFAULT 0 NOT NULL,
+ perm_guest NUMBER(8) DEFAULT 0 NOT NULL,
attribute_name VARCHAR2(255) NOT NULL,
attribute_desc VARCHAR2(255),
PRIMARY KEY (share_id)
);
-CREATE INDEX mnemo_shares_share_name_idx ON mnemo_shares (share_name);
-CREATE INDEX mnemo_shares_share_owner_idx ON mnemo_shares (share_owner);
-CREATE INDEX mnemo_shares_perm_creator_idx ON mnemo_shares (perm_creator);
-CREATE INDEX mnemo_shares_perm_default_idx ON mnemo_shares (perm_default);
-CREATE INDEX mnemo_shares_perm_guest_idx ON mnemo_shares (perm_guest);
+CREATE INDEX mnemo_shares_name_idx ON mnemo_shares (share_name);
+CREATE INDEX mnemo_shares_owner_idx ON mnemo_shares (share_owner);
+CREATE INDEX mnemo_shares_creator_idx ON mnemo_shares (perm_creator);
+CREATE INDEX mnemo_shares_default_idx ON mnemo_shares (perm_default);
+CREATE INDEX mnemo_shares_guest_idx ON mnemo_shares (perm_guest);
CREATE TABLE mnemo_shares_groups (
- share_id INT NOT NULL,
- group_uid INT NOT NULL,
- perm SMALLINT NOT NULL
+ share_id NUMBER(16) NOT NULL,
+ group_uid VARCHAR2(255) NOT NULL,
+ perm NUMBER(8) NOT NULL
);
-CREATE INDEX mnemo_shares_groups_share_id_idx ON mnemo_shares_groups (share_id);
-CREATE INDEX mnemo_shares_groups_group_uid_idx ON mnemo_shares_groups (group_uid);
-CREATE INDEX mnemo_shares_groups_perm_idx ON mnemo_shares_groups (perm);
+CREATE INDEX mnemo_groups_share_id_idx ON mnemo_shares_groups (share_id);
+CREATE INDEX mnemo_groups_group_uid_idx ON mnemo_shares_groups (group_uid);
+CREATE INDEX mnemo_groups_perm_idx ON mnemo_shares_groups (perm);
CREATE TABLE mnemo_shares_users (
- share_id INT NOT NULL,
+ share_id NUMBER(16) NOT NULL,
user_uid VARCHAR2(255) NOT NULL,
- perm SMALLINT NOT NULL
+ perm NUMBER(8) NOT NULL
);
-CREATE INDEX mnemo_shares_users_share_id_idx ON mnemo_shares_users (share_id);
-CREATE INDEX mnemo_shares_users_user_uid_idx ON mnemo_shares_users (user_uid);
-CREATE INDEX mnemo_shares_users_perm_idx ON mnemo_shares_users (perm);
+CREATE INDEX mnemo_users_share_id_idx ON mnemo_shares_users (share_id);
+CREATE INDEX mnemo_users_user_uid_idx ON mnemo_shares_users (user_uid);
+CREATE INDEX mnemo_users_perm_idx ON mnemo_shares_users (perm);
diff --git a/scripts/sql/mnemo.sql b/scripts/sql/mnemo.sql
index e07b1f3..9eec1c8 100644
--- a/scripts/sql/mnemo.sql
+++ b/scripts/sql/mnemo.sql
@@ -1,4 +1,4 @@
--- $Horde: mnemo/scripts/sql/mnemo.sql,v 1.5.2.5 2008/06/18 00:42:10 mrubinsk Exp $
+-- $Horde: mnemo/scripts/sql/mnemo.sql,v 1.5.2.8 2009-10-20 21:44:35 jan Exp $
CREATE TABLE mnemo_memos (
memo_owner VARCHAR(255) NOT NULL,
@@ -18,11 +18,11 @@ CREATE INDEX mnemo_uid_idx ON mnemo_memos (memo_uid);
CREATE TABLE mnemo_shares (
share_id INT NOT NULL,
share_name VARCHAR(255) NOT NULL,
- share_owner VARCHAR(32) NOT NULL,
- share_flags SMALLINT NOT NULL DEFAULT 0,
- perm_creator SMALLINT NOT NULL DEFAULT 0,
- perm_default SMALLINT NOT NULL DEFAULT 0,
- perm_guest SMALLINT NOT NULL DEFAULT 0,
+ share_owner VARCHAR(255) NOT NULL,
+ share_flags SMALLINT DEFAULT 0 NOT NULL,
+ perm_creator SMALLINT DEFAULT 0 NOT NULL,
+ perm_default SMALLINT DEFAULT 0 NOT NULL,
+ perm_guest SMALLINT DEFAULT 0 NOT NULL,
attribute_name VARCHAR(255) NOT NULL,
attribute_desc VARCHAR(255),
PRIMARY KEY (share_id)
@@ -36,7 +36,7 @@ CREATE INDEX mnemo_shares_perm_guest_idx ON mnemo_shares (perm_guest);
CREATE TABLE mnemo_shares_groups (
share_id INT NOT NULL,
- group_uid INT NOT NULL,
+ group_uid VARCHAR(255) NOT NULL,
perm SMALLINT NOT NULL
);
diff --git a/scripts/sql/mnemo.xml b/scripts/sql/mnemo.xml
index 332b43e..8000746 100644
--- a/scripts/sql/mnemo.xml
+++ b/scripts/sql/mnemo.xml
@@ -116,7 +116,7 @@
<type>text</type>
<default></default>
<notnull>true</notnull>
- <length>32</length>
+ <length>255</length>
</field>
<field>
@@ -168,7 +168,7 @@
</field>
<index>
- <name>mnemo_shares_share_name</name>
+ <name>mnemo_shares_name</name>
<field>
<name>share_name</name>
<sorting>ascending</sorting>
@@ -176,7 +176,7 @@
</index>
<index>
- <name>mnemo_shares_share_owner</name>
+ <name>mnemo_shares_owner</name>
<field>
<name>share_owner</name>
<sorting>ascending</sorting>
@@ -184,7 +184,7 @@
</index>
<index>
- <name>mnemo_shares_perm_creator</name>
+ <name>mnemo_shares_creator</name>
<field>
<name>perm_creator</name>
<sorting>ascending</sorting>
@@ -192,7 +192,7 @@
</index>
<index>
- <name>mnemo_shares_perm_default</name>
+ <name>mnemo_shares_default</name>
<field>
<name>perm_default</name>
<sorting>ascending</sorting>
@@ -200,7 +200,7 @@
</index>
<index>
- <name>mnemo_shares_perm_guest</name>
+ <name>mnemo_shares_guest</name>
<field>
<name>perm_guest</name>
<sorting>ascending</sorting>
@@ -236,10 +236,10 @@
<field>
<name>group_uid</name>
- <type>integer</type>
+ <type>text</type>
<default></default>
<notnull>true</notnull>
- <length>4</length>
+ <length>255</length>
</field>
<field>
@@ -251,7 +251,7 @@
</field>
<index>
- <name>mnemo_shares_groups_share_id</name>
+ <name>mnemo_groups_share_id</name>
<field>
<name>share_id</name>
<sorting>ascending</sorting>
@@ -259,7 +259,7 @@
</index>
<index>
- <name>mnemo_shares_groups_group_uid</name>
+ <name>mnemo_groups_group_uid</name>
<field>
<name>group_uid</name>
<sorting>ascending</sorting>
@@ -267,7 +267,7 @@
</index>
<index>
- <name>mnemo_shares_groups_perm</name>
+ <name>mnemo_groups_perm</name>
<field>
<name>perm</name>
<sorting>ascending</sorting>
@@ -309,7 +309,7 @@
</field>
<index>
- <name>mnemo_shares_users_share_id</name>
+ <name>mnemo_users_share_id</name>
<field>
<name>share_id</name>
<sorting>ascending</sorting>
@@ -317,7 +317,7 @@
</index>
<index>
- <name>mnemo_shares_users_user_uid</name>
+ <name>mnemo_users_user_uid</name>
<field>
<name>user_uid</name>
<sorting>ascending</sorting>
@@ -325,7 +325,7 @@
</index>
<index>
- <name>mnemo_shares_users_perm</name>
+ <name>mnemo_users_perm</name>
<field>
<name>perm</name>
<sorting>ascending</sorting>
diff --git a/scripts/upgrades/1.1_to_2.0.mysql.sql b/scripts/upgrades/1.1_to_2.0.mysql.sql
index e2d8125..dcccb99 100644
--- a/scripts/upgrades/1.1_to_2.0.mysql.sql
+++ b/scripts/upgrades/1.1_to_2.0.mysql.sql
@@ -1,4 +1,4 @@
--- $Horde: mnemo/scripts/upgrades/1.1_to_2.0.mysql.sql,v 1.4 2004/12/21 15:26:47 chuck Exp $
+-- $Horde: mnemo/scripts/upgrades/1.1_to_2.0.mysql.sql,v 1.4.2.1 2009-10-20 21:44:35 jan Exp $
--
-- You can simply execute this file in your database.
--
@@ -12,6 +12,6 @@ ALTER TABLE mnemo_memos ADD COLUMN memo_uid VARCHAR(255) NOT NULL;
ALTER TABLE mnemo_memos CHANGE COLUMN memo_id memo_id VARCHAR(32) NOT NULL;
ALTER TABLE mnemo_memos CHANGE COLUMN memo_category memo_category VARCHAR(80);
-ALTER TABLE mnemo_memos CHANGE COLUMN memo_private memo_private SMALLINT NOT NULL default 0;
+ALTER TABLE mnemo_memos CHANGE COLUMN memo_private memo_private SMALLINT DEFAULT 0 NOT NULL;
CREATE INDEX mnemo_uid_idx ON mnemo_memos (memo_uid);
diff --git a/scripts/upgrades/1.1_to_2.0.pgsq.sql b/scripts/upgrades/1.1_to_2.0.pgsql.sql
similarity index 100%
rename from scripts/upgrades/1.1_to_2.0.pgsq.sql
rename to scripts/upgrades/1.1_to_2.0.pgsql.sql
diff --git a/scripts/upgrades/2.1_to_2.2.oci8.sql b/scripts/upgrades/2.1_to_2.2.oci8.sql
new file mode 100644
index 0000000..8d73a37
--- /dev/null
+++ b/scripts/upgrades/2.1_to_2.2.oci8.sql
@@ -0,0 +1,40 @@
+-- $Horde: mnemo/scripts/upgrades/2.1_to_2.2.oci8.sql,v 1.1.2.3 2009-10-20 21:44:35 jan Exp $
+
+CREATE TABLE mnemo_shares (
+ share_id NUMBER(16) NOT NULL,
+ share_name VARCHAR2(255) NOT NULL,
+ share_owner VARCHAR2(32) NOT NULL,
+ share_flags NUMBER(8) DEFAULT 0 NOT NULL,
+ perm_creator NUMBER(8) DEFAULT 0 NOT NULL,
+ perm_default NUMBER(8) DEFAULT 0 NOT NULL,
+ perm_guest NUMBER(8) DEFAULT 0 NOT NULL,
+ attribute_name VARCHAR2(255) NOT NULL,
+ attribute_desc VARCHAR2(255),
+ PRIMARY KEY (share_id)
+);
+
+CREATE INDEX mnemo_shares_name_idx ON mnemo_shares (share_name);
+CREATE INDEX mnemo_shares_owner_idx ON mnemo_shares (share_owner);
+CREATE INDEX mnemo_shares_creator_idx ON mnemo_shares (perm_creator);
+CREATE INDEX mnemo_shares_default_idx ON mnemo_shares (perm_default);
+CREATE INDEX mnemo_shares_guest_idx ON mnemo_shares (perm_guest);
+
+CREATE TABLE mnemo_shares_groups (
+ share_id NUMBER(16) NOT NULL,
+ group_uid NUMBER(16) NOT NULL,
+ perm NUMBER(8) NOT NULL
+);
+
+CREATE INDEX mnemo_groups_share_id_idx ON mnemo_shares_groups (share_id);
+CREATE INDEX mnemo_groups_group_uid_idx ON mnemo_shares_groups (group_uid);
+CREATE INDEX mnemo_groups_perm_idx ON mnemo_shares_groups (perm);
+
+CREATE TABLE mnemo_shares_users (
+ share_id NUMBER(16) NOT NULL,
+ user_uid VARCHAR2(32) NOT NULL,
+ perm NUMBER(8) NOT NULL
+);
+
+CREATE INDEX mnemo_users_share_id_idx ON mnemo_shares_users (share_id);
+CREATE INDEX mnemo_users_user_uid_idx ON mnemo_shares_users (user_uid);
+CREATE INDEX mnemo_users_perm_idx ON mnemo_shares_users (perm);
diff --git a/scripts/upgrades/2.1_to_2.2.sql b/scripts/upgrades/2.1_to_2.2.sql
index 8cfce3d..8e6f649 100644
--- a/scripts/upgrades/2.1_to_2.2.sql
+++ b/scripts/upgrades/2.1_to_2.2.sql
@@ -1,13 +1,13 @@
--- $Horde: mnemo/scripts/upgrades/2.1_to_2.2.sql,v 1.1.2.2 2008/04/29 19:33:22 chuck Exp $
+-- $Horde: mnemo/scripts/upgrades/2.1_to_2.2.sql,v 1.1.2.3 2009-10-20 21:44:35 jan Exp $
CREATE TABLE mnemo_shares (
share_id INT NOT NULL,
share_name VARCHAR(255) NOT NULL,
share_owner VARCHAR(32) NOT NULL,
- share_flags SMALLINT NOT NULL DEFAULT 0,
- perm_creator SMALLINT NOT NULL DEFAULT 0,
- perm_default SMALLINT NOT NULL DEFAULT 0,
- perm_guest SMALLINT NOT NULL DEFAULT 0,
+ share_flags SMALLINT DEFAULT 0 NOT NULL,
+ perm_creator SMALLINT DEFAULT 0 NOT NULL,
+ perm_default SMALLINT DEFAULT 0 NOT NULL,
+ perm_guest SMALLINT DEFAULT 0 NOT NULL,
attribute_name VARCHAR(255) NOT NULL,
attribute_desc VARCHAR(255),
PRIMARY KEY (share_id)
diff --git a/scripts/upgrades/2.2.1_to_2.2.2.oci8.sql b/scripts/upgrades/2.2.1_to_2.2.2.oci8.sql
new file mode 100644
index 0000000..a89526b
--- /dev/null
+++ b/scripts/upgrades/2.2.1_to_2.2.2.oci8.sql
@@ -0,0 +1 @@
+ALTER TABLE mnemo_shares_groups MODIFY group_uid VARCHAR2(255);
diff --git a/scripts/upgrades/2.2.1_to_2.2.2.pgsql.sql b/scripts/upgrades/2.2.1_to_2.2.2.pgsql.sql
new file mode 100644
index 0000000..c1fe815
--- /dev/null
+++ b/scripts/upgrades/2.2.1_to_2.2.2.pgsql.sql
@@ -0,0 +1 @@
+ALTER TABLE mnemo_shares_groups ALTER group_uid TYPE VARCHAR(255);
diff --git a/scripts/upgrades/2.2.1_to_2.2.2.sql b/scripts/upgrades/2.2.1_to_2.2.2.sql
new file mode 100644
index 0000000..f46a8c6
--- /dev/null
+++ b/scripts/upgrades/2.2.1_to_2.2.2.sql
@@ -0,0 +1 @@
+ALTER TABLE mnemo_shares_groups CHANGE group_uid group_uid VARCHAR(255);
diff --git a/scripts/upgrades/2.2_to_2.2.1.oci8.sql b/scripts/upgrades/2.2_to_2.2.1.oci8.sql
new file mode 100644
index 0000000..02f1fa0
--- /dev/null
+++ b/scripts/upgrades/2.2_to_2.2.1.oci8.sql
@@ -0,0 +1,2 @@
+ALTER TABLE mnemo_shares MODIFY share_owner VARCHAR2(255);
+ALTER TABLE mnemo_shares_users MODIFY user_uid VARCHAR2(255);
diff --git a/scripts/upgrades/2.2_to_2.2.1.pgsql.sql b/scripts/upgrades/2.2_to_2.2.1.pgsql.sql
new file mode 100644
index 0000000..13d6efd
--- /dev/null
+++ b/scripts/upgrades/2.2_to_2.2.1.pgsql.sql
@@ -0,0 +1,2 @@
+ALTER TABLE mnemo_shares ALTER share_owner TYPE VARCHAR(255);
+ALTER TABLE mnemo_shares_users ALTER user_uid TYPE VARCHAR(255);
diff --git a/scripts/upgrades/2008-09-23_fix_group_uid.sql b/scripts/upgrades/2008-09-23_fix_group_uid.sql
new file mode 100644
index 0000000..f46a8c6
--- /dev/null
+++ b/scripts/upgrades/2008-09-23_fix_group_uid.sql
@@ -0,0 +1 @@
+ALTER TABLE mnemo_shares_groups CHANGE group_uid group_uid VARCHAR(255);
diff --git a/scripts/upgrades/convert_datatree_shares_to_sql.php b/scripts/upgrades/convert_datatree_shares_to_sql.php
index 6eafbce..551c917 100755
--- a/scripts/upgrades/convert_datatree_shares_to_sql.php
+++ b/scripts/upgrades/convert_datatree_shares_to_sql.php
@@ -5,7 +5,7 @@
* driver to the new SQL Horde_Share driver. You should run the 2.1_to_2.2.sql
* upgrade script before executing this script.
*
- * $Horde: mnemo/scripts/upgrades/convert_datatree_shares_to_sql.php,v 1.1.2.4 2008/06/06 15:08:03 mrubinsk Exp $
+ * $Horde: mnemo/scripts/upgrades/convert_datatree_shares_to_sql.php,v 1.1.2.6 2009-07-20 11:16:56 jan Exp $
*/
@define('AUTH_HANDLER', true);
@@ -27,6 +27,7 @@ require_once 'MDB2.php';
$config = $GLOBALS['conf']['sql'];
unset($config['charset']);
$db = MDB2::factory($config);
+$db->setOption('seqcol_name', 'id');
$error_cnt = 0;
$delete_dt_data = false;
@@ -40,23 +41,26 @@ if ($answer != 'y') {
}
/* Get the share entries */
-$sql = 'SELECT datatree_id, datatree_name FROM horde_datatree WHERE '
- . 'group_uid = \'horde.shares.mnemo\'';
-$shares_result = $db->query($sql);
+$shares_result = $db->query('SELECT datatree_id, datatree_name FROM horde_datatree WHERE group_uid = \'horde.shares.mnemo\'');
if (is_a($shares_result, 'PEAR_Error')) {
die($shares_result->toString());
}
+$query = $db->prepare('SELECT attribute_name, attribute_key, attribute_value FROM horde_datatree_attributes WHERE datatree_id = ?');
while ($row = $shares_result->fetchRow(MDB2_FETCHMODE_ASSOC)) {
$share_id = $row['datatree_id'];
$share_name = $row['datatree_name'];
/* Build an array to hold the new row data */
- $data = array('share_id' => $db->nextId('mnemo_shares'),
+ $nextId = $db->nextId('mnemo_shares');
+ if (is_a($nextId, 'PEAR_Error')) {
+ $cli->message($nextId->toString(), 'cli.error');
+ $error_cnt++;
+ continue;
+ }
+ $data = array('share_id' => $nextId,
'share_name' => $share_name);
- $sql = 'SELECT attribute_name, attribute_key, attribute_value FROM horde_datatree_attributes WHERE datatree_id = ?';
- $query = $db->prepare($sql);
$query_result = $query->execute($share_id);
$rows = $query_result->fetchAll(MDB2_FETCHMODE_ASSOC);
$users = array();
@@ -110,17 +114,19 @@ while ($row = $shares_result->fetchRow(MDB2_FETCHMODE_ASSOC)) {
/* Insert the new data */
$cli->message('Migrating share data for share_id: ' . $share_id, 'cli.message');
+ $error = false;
+ $db->beginTransaction();
$result = insertData('mnemo_shares', $data);
if (is_a($result, 'PEAR_Error')) {
- ++$error_cnt;
- $cli->message($result->getMessage(), 'cli.error');
+ $cli->message($result->toString(), 'cli.error');
+ $error = true;
}
if (count($groups)) {
foreach ($groups as $group) {
$result = insertData('mnemo_shares_groups', $group);
if (is_a($result, 'PEAR_Error')) {
- ++$error_cnt;
- $cli->message($result->getMessage(), 'cli.error');
+ $cli->message($result->toString(), 'cli.error');
+ $error = true;
}
}
}
@@ -128,30 +134,56 @@ while ($row = $shares_result->fetchRow(MDB2_FETCHMODE_ASSOC)) {
foreach ($users as $user) {
$result = insertData('mnemo_shares_users', $user);
if (is_a($result, 'PEAR_Error')) {
- ++$error_cnt;
- $cli->message($result->getMessage(), 'cli.error');
+ $cli->message($result->toString(), 'cli.error');
+ $error = true;
}
}
}
/* Delete the datatree data, but ONLY if it was requested */
- if ($delete_dt_data && !$error_cnt) {
+ if ($delete_dt_data && !$error) {
$cli->message('DELETING datatree data for share_id: ' . $share_id, 'cli.message');
$delete = $db->prepare('DELETE FROM horde_datatree_attributes WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP);
- $delete->execute(array($share_id));
+ if (is_a($delete, 'PEAR_Error')) {
+ $cli->message($delete->toString(), 'cli.error');
+ $error = true;
+ } else {
+ $delete_result = $delete->execute(array($share_id));
+ if (is_a($delete_result, 'PEAR_Error')) {
+ $cli->message($delete_result->toString(), 'cli.error');
+ $error = true;
+ }
+ }
$delete->free();
$delete = $db->prepare('DELETE FROM horde_datatree WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP);
- $delete->execute(array($share_id));
+ if (is_a($delete, 'PEAR_Error')) {
+ $cli->message($delete->toString(), 'cli.error');
+ $error = true;
+ } else {
+ $delete_result = $delete->execute(array($share_id));
+ if (is_a($delete_result, 'PEAR_Error')) {
+ $cli->message($delete_result->toString(), 'cli.error');
+ $error = true;
+ }
+ }
$delete->free();
}
/* Cleanup */
$query_result->free();
unset($row, $rows, $data, $groups, $users);
+ if ($error) {
+ $db->rollback();
+ $cli->message('Rollback for share data for share_id: ' . $share_id, 'cli.message');
+ ++$error_cnt;
+ } else {
+ $db->commit();
+ $cli->message('Commit for share data for share_id: ' . $share_id, 'cli.message');
+ }
}
if ($error_cnt) {
- $cli->message(sprintf("Encountered %u errors. No data was deleted from your database.", $error_cnt));
+ $cli->message(sprintf("Encountered %u errors.", $error_cnt));
}
echo "\nDone.\n";
@@ -165,6 +197,9 @@ function insertData($table, $data)
$insert = $GLOBALS['db']->prepare('INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . str_repeat('?, ', count($values) - 1) . '?)',
null, MDB2_PREPARE_MANIP);
+ if (is_a($insert,'PEAR_Error')) {
+ return $insert;
+ }
$insert_result = $insert->execute($values);
$insert->free();
return $insert_result;
diff --git a/search.php b/search.php
index 4b2c2a9..82fadd5 100644
--- a/search.php
+++ b/search.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/search.php,v 1.9.8.7 2008/01/02 11:32:26 jan Exp $
+ * $Horde: mnemo/search.php,v 1.9.8.8 2009-01-06 15:24:57 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
diff --git a/templates/common-header.inc b/templates/common-header.inc
index 82a13d2..5809c9e 100644
--- a/templates/common-header.inc
+++ b/templates/common-header.inc
@@ -5,7 +5,7 @@ if (isset($language)) {
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
-<!-- Mnemo: Copyright 2002-2008 The Horde Project. Mnemo is under a Horde license. -->
+<!-- Mnemo: Copyright 2002-2009 The Horde Project. Mnemo is under a Horde license. -->
<!-- Horde Project: http://www.horde.org/ | Mnemo: http://www.horde.org/mnemo/ -->
<!-- Horde Licenses: http://www.horde.org/licenses/ -->
<?php echo !empty($language) ? '<html lang="' . strtr($language, '_', '-') . '">' : '<html>' ?>
diff --git a/templates/data/import.inc b/templates/data/import.inc
index 40c6007..59adad4 100644
--- a/templates/data/import.inc
+++ b/templates/data/import.inc
@@ -12,7 +12,7 @@
<option value="vnote"><?php echo _("vNote") ?></option>
</select><br />
-<?php if (!$prefs->isLocked('default_notepad') && count($notepads = &Mnemo::listNotepads(false, PERMS_EDIT)) > 1): ?>
+<?php if (!$prefs->isLocked('default_notepad') && count($notepads = Mnemo::listNotepads(false, PERMS_EDIT)) > 1): ?>
<br /><?php echo Horde::label('notepad_target', _("Which Notepad should the notes be added to?")) ?><br />
<select id="notepad_target" name="notepad_target">
<?php
diff --git a/templates/memo/memo.inc b/templates/memo/memo.inc
index c84282d..fcc1204 100644
--- a/templates/memo/memo.inc
+++ b/templates/memo/memo.inc
@@ -52,35 +52,49 @@ if ($memo_id):
<?php endif; ?>
<p><?php echo Horde::label('memo_body', _("Note _Text")) ?> (<?php printf(_("%s characters"), '<span id="charcount">' . String::length(str_replace(array("\r", "\n"), '', $memo_body)) . '</span>') ?>):</p>
<textarea name="memo_body" id="memo_body" class="fixed" rows="20" onchange="updateCharCount()" onclick="updateCharCount()" onkeypress="setTimeout('updateCharCount()', 1)"><?php echo htmlspecialchars($memo_body) ?></textarea>
+ <?php echo Horde::callHook('_mnemo_hook_description_help', null, 'mnemo', '') ?>
<p>
<input type="submit" class="button" value="<?php echo _("Save") ?>" onclick="return checkCategory();" />
-<?php if (!$prefs->isLocked('default_notepad') && count($notepads) > 1): ?>
-<?php echo Horde::label('notepad_target', _("Note_pad")) ?>
- <select id="notepad_target" name="notepad_target">
- <?php
- foreach (array_keys($notepads) as $id) {
- $sel = ($id == $memolist_id) ? ' selected="selected"' : '';
- printf('<option value="%s"%s>%s</option>',
- htmlspecialchars($id), $sel, htmlspecialchars($notepads[$id]->get('name'))) . "\n";
- } ?>
- </select>
-<?php
-endif;
-echo Horde::label('memo_category', _("_Category")) . ' ' .
- $cManager->getSelect('memo_category', $memo_category);
-if ($storage->encryptionSupported()):
- if ($actionID == 'modify_memo' && $memo_encrypted && !$show_passphrase):
- echo ' ' . Horde::label('memo_encrypt', _("_Encrypt?"));
-?>
- <input type="checkbox" id="memo_encrypt" name="memo_encrypt" checked="checked" />
-<?php
- endif;
- echo ' ' . Horde::label('memo_passphrase', _("_Password"));
-?>
- <input type="password" id="memo_passphrase" name="memo_passphrase" />
-<?php endif; ?>
</p>
+ <table>
+ <?php if (!$prefs->isLocked('default_notepad') && count($notepads) > 1): ?>
+ <tr>
+ <td class="rightAlign"><?php echo Horde::label('notepad_target', _("Note_pad:")) ?></td>
+ <td>
+ <select id="notepad_target" name="notepad_target">
+ <?php
+ foreach (array_keys($notepads) as $id) {
+ $sel = ($id == $memolist_id) ? ' selected="selected"' : '';
+ printf('<option value="%s"%s>%s</option>',
+ htmlspecialchars($id), $sel, htmlspecialchars($notepads[$id]->get('name'))) . "\n";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td class="rightAlign"><?php echo Horde::label('memo_category', _("_Category:")) ?></td>
+ <td><?php echo $cManager->getSelect('memo_category', $memo_category) ?>
+ </tr>
+ <?php if ($storage->encryptionSupported()): ?>
+ <?php if ($actionID == 'modify_memo' && $memo_encrypted && !$show_passphrase): ?>
+ <tr>
+ <td class="rightAlign"><?php echo Horde::label('memo_encrypt', _("_Encrypt?")) ?></td>
+ <td><input type="checkbox" id="memo_encrypt" name="memo_encrypt" checked="checked" /></td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td class="rightAlign"><?php echo Horde::label('memo_passphrase', _("_Password:")) ?></td>
+ <td><input type="password" id="memo_passphrase" name="memo_passphrase" /></td>
+ </tr>
+ <tr>
+ <td class="rightAlign"><?php echo Horde::label('memo_passphrase2', _("_Repeat:")) ?></td>
+ <td><input type="password" id="memo_passphrase2" name="memo_passphrase2" /></td>
+ </tr>
+ <?php endif; ?>
+ </table>
</form>
<script type="text/javascript" >
document.memo.memo_body.focus();
diff --git a/templates/panel.inc b/templates/panel.inc
index 46c2d63..fba1c04 100644
--- a/templates/panel.inc
+++ b/templates/panel.inc
@@ -2,7 +2,7 @@
$current_user = Auth::getAuth();
$my_notepads = array();
$shared_notepads = array();
-$all_notepads = &Mnemo::listNotepads();
+$all_notepads = Mnemo::listNotepads();
foreach (array_keys($all_notepads) as $id) {
if ($all_notepads[$id]->get('owner') == $current_user) {
$my_notepads[$id] = &$all_notepads[$id];
@@ -59,7 +59,7 @@ function sbarToggle()
<h4><?php echo _("Shared Notepads:") ?></h4>
<ul id="sharednotepads">
<?php foreach (array_keys($shared_notepads) as $id): ?>
- <li><label><input type="checkbox" class="checkbox" name="display_notepad[]" value="<?php echo htmlspecialchars($id) ?>"<?php echo (in_array($id, $display_notepads) ? ' checked="checked"' : '') . ' /> [' . htmlspecialchars($shared_notepads[$id]->get('owner')) . '] ' . htmlspecialchars($shared_notepads[$id]->get('name')) ?></label></li>
+ <li><label><input type="checkbox" class="checkbox" name="display_notepad[]" value="<?php echo htmlspecialchars($id) ?>"<?php echo (in_array($id, $display_notepads) ? ' checked="checked"' : '') . ' /> [' . htmlspecialchars(Auth::removeHook($shared_notepads[$id]->get('owner'))) . '] ' . htmlspecialchars($shared_notepads[$id]->get('name')) ?></label></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
diff --git a/templates/prefs/notepadselect.inc b/templates/prefs/notepadselect.inc
index 6d20563..aca3d7d 100644
--- a/templates/prefs/notepadselect.inc
+++ b/templates/prefs/notepadselect.inc
@@ -1,6 +1,6 @@
<?php
if (!$prefs->isLocked('default_notepad')):
- $notepads = &Mnemo::listNotepads();
+ $notepads = Mnemo::listNotepads();
if (($default_notepad = $prefs->getValue('default_notepad')) == null ||
!isset($notepads[$default_notepad])) {
$default_notepad = Auth::getAuth();
diff --git a/templates/view/memo.inc b/templates/view/memo.inc
index f3f373d..bc9b048 100644
--- a/templates/view/memo.inc
+++ b/templates/view/memo.inc
@@ -56,7 +56,7 @@ if (!$print_view) {
</div>
<?php else: ?>
<div class="noteBody">
- <?php echo Text_Filter::filter($memo['body'], 'text2html', array('parselevel' => TEXT_HTML_MICRO, 'class' => null)) ?>
+ <?php $body = Text_Filter::filter($memo['body'], 'text2html', array('parselevel' => TEXT_HTML_MICRO, 'class' => null)); echo Horde::callHook('_mnemo_hook_format_description', array($body), 'mnemo', $body); ?>
</div>
<?php endif; ?>
</td>
diff --git a/themes/bluewhite/screen.css b/themes/bluewhite/screen.css
index b2108d6..43d08dd 100644
--- a/themes/bluewhite/screen.css
+++ b/themes/bluewhite/screen.css
@@ -1,5 +1,5 @@
/**
- * $Horde: mnemo/themes/bluewhite/screen.css,v 1.1.2.1 2007/12/20 14:18:30 jan Exp $
+ * $Horde: mnemo/themes/bluewhite/screen.css,v 1.1.2.1 2007-12-20 14:18:30 jan Exp $
*/
#quicksearch a {
diff --git a/themes/categoryCSS.php b/themes/categoryCSS.php
index d1009ee..dc04516 100644
--- a/themes/categoryCSS.php
+++ b/themes/categoryCSS.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/themes/categoryCSS.php,v 1.1.2.1 2008/05/20 22:00:25 jan Exp $
+ * $Horde: mnemo/themes/categoryCSS.php,v 1.1.2.2 2009-01-06 15:25:04 jan Exp $
*
- * Copyright 2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2008-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
diff --git a/themes/screen.css b/themes/screen.css
index 0460e2c..b4c9162 100644
--- a/themes/screen.css
+++ b/themes/screen.css
@@ -1,5 +1,5 @@
/**
- * $Horde: mnemo/themes/screen.css,v 1.4.2.5 2008/04/08 18:13:39 chuck Exp $
+ * $Horde: mnemo/themes/screen.css,v 1.4.2.6 2009-08-05 23:03:25 jan Exp $
*/
/* Menu bottom margin, added for BC. */
@@ -67,19 +67,13 @@ th {
padding: 10px;
background: #e9e9e9;
}
-.noteArea p {
+.noteArea p, .noteArea td {
font-weight: bold;
- margin: 5px 0 5px 0;
+ margin: 5px 0;
}
.noteArea textarea {
width: 100%;
}
-.noteArea p select {
- margin-right: 5px;
-}
-.noteArea .button {
- margin-right: 1em;
-}
body.rightPanel #page {
margin-right: 10em;
diff --git a/themes/silver/screen.css b/themes/silver/screen.css
index 40f177e..35b6a8b 100644
--- a/themes/silver/screen.css
+++ b/themes/silver/screen.css
@@ -1,5 +1,5 @@
/**
- * $Horde: mnemo/themes/silver/screen.css,v 1.1.2.2 2008/03/27 17:56:28 jan Exp $
+ * $Horde: mnemo/themes/silver/screen.css,v 1.1.2.2 2008-03-27 17:56:28 jan Exp $
*/
.sortup {
diff --git a/view.php b/view.php
index 5be8482..4fac9d6 100644
--- a/view.php
+++ b/view.php
@@ -1,8 +1,8 @@
<?php
/**
- * $Horde: mnemo/view.php,v 1.27.2.11 2008/02/29 04:38:10 chuck Exp $
+ * $Horde: mnemo/view.php,v 1.27.2.12 2009-01-06 15:24:57 jan Exp $
*
- * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/asl.php.
--
Debian Horde Packages repository: mnemo2 package
More information about the pkg-horde-hackers
mailing list