aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.tx/config2
-rw-r--r--Gemfile10
-rw-r--r--Gemfile.lock20
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_flat_0_aaaaaa_40x100.pngbin180 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_flat_55_fbf9ee_40x100.pngbin182 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_flat_65_ffffff_40x100.pngbin178 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_flat_75_cccccc_40x100.pngbin180 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_flat_75_dadada_40x100.pngbin180 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_flat_75_e6e6e6_40x100.pngbin180 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_flat_75_ffffff_40x100.pngbin178 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-bg_inset-soft_95_fef1ec_1x100.pngbin123 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-icons_222222_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-icons_2e83ff_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-icons_454545_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-icons_888888_256x240.pngbin4369 -> 0 bytes
-rwxr-xr-xapp/assets/images/admin-theme/ui-icons_cd0a0a_256x240.pngbin4369 -> 0 bytes
-rw-r--r--app/assets/images/logo.pngbin0 -> 1356 bytes
-rw-r--r--app/assets/javascripts/admin.js3
-rw-r--r--app/assets/javascripts/admin/jquery-ui.min.js356
-rw-r--r--app/assets/javascripts/application.js2
-rw-r--r--app/assets/javascripts/jquery-ui.min.js168
-rw-r--r--app/assets/javascripts/jquery.flot.axislabels.js6
-rw-r--r--app/assets/javascripts/jquery.flot.axislabels.min.js1
-rw-r--r--app/assets/javascripts/jquery.flot.errorbars.js353
-rw-r--r--app/assets/javascripts/jquery.flot.errorbars.min.js64
-rw-r--r--app/assets/javascripts/jquery.flot.js3078
-rw-r--r--app/assets/javascripts/jquery.flot.min.js30
-rw-r--r--app/assets/javascripts/jquery.flot.tickrotor.js205
-rw-r--r--app/assets/javascripts/jquery.flot.tickrotor.min.js1
-rw-r--r--app/assets/javascripts/stats-graphs.js52
-rw-r--r--app/assets/javascripts/stats.js1
-rw-r--r--app/assets/stylesheets/application.css4
-rw-r--r--app/assets/stylesheets/custom.css5
-rw-r--r--app/assets/stylesheets/fonts.scss60
-rw-r--r--app/controllers/general_controller.rb11
-rw-r--r--app/controllers/public_body_controller.rb94
-rw-r--r--app/controllers/track_controller.rb3
-rw-r--r--app/models/info_request.rb31
-rw-r--r--app/models/info_request_event.rb3
-rw-r--r--app/models/outgoing_message.rb2
-rw-r--r--app/models/public_body.rb73
-rw-r--r--app/models/user.rb2
-rw-r--r--app/views/general/_advanced_search_tips.html.erb5
-rw-r--r--app/views/general/_stylesheet_includes.html.erb5
-rw-r--r--app/views/general/search.html.erb10
-rw-r--r--app/views/layouts/admin.html.erb1
-rw-r--r--app/views/layouts/default.html.erb4
-rw-r--r--app/views/layouts/no_chrome.html.erb3
-rw-r--r--app/views/public_body/_search_ahead.html.erb4
-rw-r--r--app/views/public_body/statistics.html.erb6
-rw-r--r--app/views/request/_describe_state.html.erb2
-rw-r--r--app/views/request/_followup.html.erb7
-rw-r--r--app/views/request/_sidebar.html.erb1
-rw-r--r--app/views/request/similar.html.erb2
m---------commonlib0
-rw-r--r--config/Vagrantfile23
-rw-r--r--config/application.rb7
-rw-r--r--config/crontab-example26
-rw-r--r--config/deploy.rb1
-rw-r--r--config/deploy.yml.example2
-rw-r--r--config/environments/development.rb11
-rw-r--r--config/general.yml-example4
-rw-r--r--config/initializers/alaveteli.rb4
-rw-r--r--config/initializers/theme_loader.rb3
-rw-r--r--config/nginx.conf.example29
-rw-r--r--config/packages.debian-squeeze39
-rw-r--r--config/packages.ubuntu-precise35
-rw-r--r--config/purge-varnish-debian.ugly2
-rwxr-xr-xconfig/sysvinit.example53
-rw-r--r--db/migrate/20131101155844_add_stats_denominator.rb15
-rw-r--r--doc/CHANGES.md28
-rw-r--r--doc/INSTALL.md176
-rw-r--r--doc/THEME-ASSETS-UPGRADE.md69
-rw-r--r--doc/TRANSLATE.md4
-rw-r--r--lib/actionmailer_patches.rb15
-rw-r--r--lib/configuration.rb1
-rw-r--r--lib/tasks/config_files.rake26
-rw-r--r--lib/tasks/import.rake78
-rw-r--r--lib/tasks/stats.rake19
-rw-r--r--lib/tasks/themes.rake2
-rw-r--r--lib/theme.rb3
-rw-r--r--lib/whatdotheyknow/strip_empty_sessions.rb4
-rw-r--r--locale/aln/app.po29
-rw-r--r--locale/app.pot23
-rw-r--r--locale/ar/app.po29
-rw-r--r--locale/bg/app.po1107
-rw-r--r--locale/bs/app.po29
-rw-r--r--locale/ca/app.po29
-rw-r--r--locale/cs/app.po29
-rw-r--r--locale/cy/app.po1175
-rw-r--r--locale/de/app.po29
-rw-r--r--locale/en/app.po23
-rw-r--r--locale/en_IE/app.po29
-rw-r--r--locale/es/app.po29
-rw-r--r--locale/eu/app.po29
-rw-r--r--locale/fi/app.po29
-rw-r--r--locale/fr/app.po29
-rw-r--r--locale/fr_CA/app.po400
-rw-r--r--locale/gl/app.po29
-rw-r--r--locale/he_IL/app.po35
-rw-r--r--locale/hr/app.po29
-rw-r--r--locale/hr_HR/app.po29
-rw-r--r--locale/hu_HU/app.po29
-rw-r--r--locale/id/app.po29
-rw-r--r--locale/it/app.po199
-rw-r--r--locale/model_attributes.rb3
-rw-r--r--locale/nb_NO/app.po55
-rw-r--r--locale/nl/app.po29
-rw-r--r--locale/pl/app.po29
-rw-r--r--locale/pt_BR/app.po29
-rw-r--r--locale/pt_PT/app.po3514
-rw-r--r--locale/ro_RO/app.po29
-rw-r--r--locale/sl/app.po29
-rw-r--r--locale/sq/app.po29
-rw-r--r--locale/sr@latin/app.po1969
-rw-r--r--locale/sv/app.po29
-rw-r--r--locale/tr/app.po29
-rw-r--r--locale/uk/app.po29
-rw-r--r--locale/vi/app.po38
-rw-r--r--public/404.html26
-rw-r--r--public/422.html26
-rw-r--r--public/500.html26
-rwxr-xr-xscript/install-as-user159
-rwxr-xr-xscript/make-crontab16
-rwxr-xr-xscript/rails-post-deploy61
-rwxr-xr-xscript/site-specific-install.sh163
-rwxr-xr-xscript/switch-theme.rb120
-rw-r--r--spec/controllers/admin_incoming_message_controller_spec.rb11
-rw-r--r--spec/controllers/admin_public_body_controller_spec.rb3
-rw-r--r--spec/controllers/general_controller_spec.rb34
-rw-r--r--spec/controllers/public_body_controller_spec.rb208
-rw-r--r--spec/controllers/track_controller_spec.rb33
-rw-r--r--spec/factories.rb7
-rw-r--r--spec/fixtures/files/fake-authority-type.csv2
-rw-r--r--spec/fixtures/outgoing_messages.yml2
-rw-r--r--spec/fixtures/public_bodies.yml63
-rw-r--r--spec/fixtures/public_body_translations.yml12
-rw-r--r--spec/fixtures/users.yml2
-rw-r--r--spec/integration/cookie_stripping_spec.rb12
-rw-r--r--spec/lib/theme_spec.rb25
-rw-r--r--spec/lib/whatdotheyknow/strip_empty_sessions_spec.rb56
-rw-r--r--spec/models/info_request_spec.rb10
-rw-r--r--spec/models/outgoing_message_spec.rb2
-rw-r--r--spec/models/public_body_spec.rb156
-rw-r--r--spec/models/user_spec.rb2
-rw-r--r--spec/models/xapian_spec.rb23
-rw-r--r--spec/spec_helper.rb52
-rw-r--r--vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb2
149 files changed, 11996 insertions, 3954 deletions
diff --git a/.gitignore b/.gitignore
index 31df87775..87c55ce97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,7 @@ TAGS
bin/
config/aliases
config/httpd.conf
+config/general*.yml
.sass-cache
alaveteli.sublime*
webrat.log
diff --git a/.tx/config b/.tx/config
index cc0cd4bbd..bc7529856 100644
--- a/.tx/config
+++ b/.tx/config
@@ -4,5 +4,5 @@ source_lang = en
source_file = locale/en/app.po
[main]
-host = https://www.transifex.net
+host = https://www.transifex.com
diff --git a/Gemfile b/Gemfile
index 21d6612ce..67ad2b0a5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -18,7 +18,8 @@ gem 'charlock_holmes'
gem 'dynamic_form'
gem 'exception_notification'
gem 'fastercsv', '>=1.5.5'
-gem 'jquery-rails', '~> 2.1'
+gem 'jquery-rails', '~> 3.0.4'
+gem 'jquery-ui-rails'
gem 'json'
gem 'mahoro'
gem 'net-http-local'
@@ -34,6 +35,7 @@ gem 'rmagick', :require => 'RMagick'
gem 'ruby-msg', '~> 1.5.0'
gem "statistics2", "~> 0.54"
gem 'syslog_protocol'
+gem 'thin'
gem 'vpim'
gem 'will_paginate'
# when 1.2.9 is released by the maintainer, we can stop using this fork:
@@ -45,12 +47,12 @@ gem 'zip'
gem 'fast_gettext'
gem 'gettext_i18n_rails'
gem 'gettext'
-# Use until this PR is merged: https://github.com/svenfuchs/globalize3/pull/191
-gem 'globalize3', :git => 'git://github.com/henare/globalize3.git', :branch => 'not-null-empty-attributes'
+
+gem 'globalize3', :git => 'git://github.com/globalize/globalize.git', :ref => '5fd95f2389dff1'
gem 'locale'
gem 'routing-filter'
gem 'unicode'
-gem 'unidecode'
+gem 'unidecoder'
group :assets do
gem 'bootstrap-sass'
diff --git a/Gemfile.lock b/Gemfile.lock
index e64df94da..261941455 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
GIT
- remote: git://github.com/henare/globalize3.git
- revision: 2931f559cbed8843ab7d16278d70ce99a0239132
- branch: not-null-empty-attributes
+ remote: git://github.com/globalize/globalize.git
+ revision: 5fd95f2389dff13c9368fb2e08c96c8a48798c72
+ ref: 5fd95f2389dff1
specs:
globalize3 (0.3.0)
activemodel (>= 3.0.0)
@@ -115,9 +115,11 @@ GEM
hike (1.2.3)
i18n (0.6.5)
journey (1.0.4)
- jquery-rails (2.3.0)
+ jquery-rails (3.0.4)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
+ jquery-ui-rails (4.1.0)
+ railties (>= 3.1.0)
json (1.8.1)
libv8 (3.16.14.3)
linecache (0.46)
@@ -147,7 +149,7 @@ GEM
net-ssh (2.6.7)
net-ssh-gateway (1.2.0)
net-ssh (>= 2.6.5)
- newrelic_rpm (3.6.2.96)
+ newrelic_rpm (3.6.8.164)
nokogiri (1.5.9)
paper_trail (2.7.2)
activerecord (~> 3.0)
@@ -257,7 +259,7 @@ GEM
execjs (>= 0.3.0)
multi_json (~> 1.0, >= 1.0.2)
unicode (0.4.4)
- unidecode (1.0.0)
+ unidecoder (1.1.2)
vpim (0.695)
webrat (0.7.3)
nokogiri (>= 1.2.0)
@@ -290,7 +292,8 @@ DEPENDENCIES
gettext
gettext_i18n_rails
globalize3!
- jquery-rails (~> 2.1)
+ jquery-rails (~> 3.0.4)
+ jquery-ui-rails
json
locale
mahoro
@@ -316,9 +319,10 @@ DEPENDENCIES
statistics2 (~> 0.54)
syslog_protocol
therubyracer
+ thin
uglifier (>= 1.0.3)
unicode
- unidecode
+ unidecoder
vpim
webrat
will_paginate
diff --git a/app/assets/images/admin-theme/ui-bg_flat_0_aaaaaa_40x100.png b/app/assets/images/admin-theme/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100755
index 5b5dab2ab..000000000
--- a/app/assets/images/admin-theme/ui-bg_flat_0_aaaaaa_40x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-bg_flat_55_fbf9ee_40x100.png b/app/assets/images/admin-theme/ui-bg_flat_55_fbf9ee_40x100.png
deleted file mode 100755
index 062f58072..000000000
--- a/app/assets/images/admin-theme/ui-bg_flat_55_fbf9ee_40x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-bg_flat_65_ffffff_40x100.png b/app/assets/images/admin-theme/ui-bg_flat_65_ffffff_40x100.png
deleted file mode 100755
index ac8b229af..000000000
--- a/app/assets/images/admin-theme/ui-bg_flat_65_ffffff_40x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-bg_flat_75_cccccc_40x100.png b/app/assets/images/admin-theme/ui-bg_flat_75_cccccc_40x100.png
deleted file mode 100755
index 5473afffb..000000000
--- a/app/assets/images/admin-theme/ui-bg_flat_75_cccccc_40x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-bg_flat_75_dadada_40x100.png b/app/assets/images/admin-theme/ui-bg_flat_75_dadada_40x100.png
deleted file mode 100755
index 7b7b0744d..000000000
--- a/app/assets/images/admin-theme/ui-bg_flat_75_dadada_40x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-bg_flat_75_e6e6e6_40x100.png b/app/assets/images/admin-theme/ui-bg_flat_75_e6e6e6_40x100.png
deleted file mode 100755
index 5b4ca1a03..000000000
--- a/app/assets/images/admin-theme/ui-bg_flat_75_e6e6e6_40x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-bg_flat_75_ffffff_40x100.png b/app/assets/images/admin-theme/ui-bg_flat_75_ffffff_40x100.png
deleted file mode 100755
index ac8b229af..000000000
--- a/app/assets/images/admin-theme/ui-bg_flat_75_ffffff_40x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-bg_inset-soft_95_fef1ec_1x100.png b/app/assets/images/admin-theme/ui-bg_inset-soft_95_fef1ec_1x100.png
deleted file mode 100755
index 0e05810ff..000000000
--- a/app/assets/images/admin-theme/ui-bg_inset-soft_95_fef1ec_1x100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-icons_222222_256x240.png b/app/assets/images/admin-theme/ui-icons_222222_256x240.png
deleted file mode 100755
index b273ff111..000000000
--- a/app/assets/images/admin-theme/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-icons_2e83ff_256x240.png b/app/assets/images/admin-theme/ui-icons_2e83ff_256x240.png
deleted file mode 100755
index 09d1cdc85..000000000
--- a/app/assets/images/admin-theme/ui-icons_2e83ff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-icons_454545_256x240.png b/app/assets/images/admin-theme/ui-icons_454545_256x240.png
deleted file mode 100755
index 59bd45b90..000000000
--- a/app/assets/images/admin-theme/ui-icons_454545_256x240.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-icons_888888_256x240.png b/app/assets/images/admin-theme/ui-icons_888888_256x240.png
deleted file mode 100755
index 6d02426c1..000000000
--- a/app/assets/images/admin-theme/ui-icons_888888_256x240.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/admin-theme/ui-icons_cd0a0a_256x240.png b/app/assets/images/admin-theme/ui-icons_cd0a0a_256x240.png
deleted file mode 100755
index 2ab019b73..000000000
--- a/app/assets/images/admin-theme/ui-icons_cd0a0a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png
new file mode 100644
index 000000000..1e44ced7d
--- /dev/null
+++ b/app/assets/images/logo.png
Binary files differ
diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js
index 6e4d3a98c..0b5d56525 100644
--- a/app/assets/javascripts/admin.js
+++ b/app/assets/javascripts/admin.js
@@ -1,6 +1,7 @@
// ...
//= require jquery
-//= require admin/jquery-ui.min
+//= require jquery.ui.tabs
//= require admin/bootstrap-collapse
+//= require admin/bootstrap-tab
//= require admin/admin
//= require jquery_ujs
diff --git a/app/assets/javascripts/admin/jquery-ui.min.js b/app/assets/javascripts/admin/jquery-ui.min.js
deleted file mode 100644
index f00a62f13..000000000
--- a/app/assets/javascripts/admin/jquery-ui.min.js
+++ /dev/null
@@ -1,356 +0,0 @@
-/*!
- * jQuery UI 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);/*!
- * jQuery UI Widget 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);/*!
- * jQuery UI Mouse 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- * jquery.ui.widget.js
- */(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);/*
- * jQuery UI Position 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1];return this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);/*
- * jQuery UI Draggable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!!this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute"));return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.18"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!!e.length){var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);/*
- * jQuery UI Droppable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.mouse.js
- * jquery.ui.draggable.js
- */(function(a,b){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var b=this.options,c=b.accept;this.isover=0,this.isout=1,this.accept=a.isFunction(c)?c:function(a){return a.is(c)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},a.ui.ddmanager.droppables[b.scope]=a.ui.ddmanager.droppables[b.scope]||[],a.ui.ddmanager.droppables[b.scope].push(this),b.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++)b[c]==this&&b.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(b,c){b=="accept"&&(this.accept=a.isFunction(c)?c:function(a){return a.is(c)}),a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var e=!1;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var b=a.data(this,"droppable");if(b.options.greedy&&!b.options.disabled&&b.options.scope==d.options.scope&&b.accept.call(b.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(b,{offset:b.element.offset()}),b.options.tolerance)){e=!0;return!1}});if(e)return!1;if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d));return this.element}return!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.extend(a.ui.droppable,{version:"1.8.18"}),a.ui.intersect=function(b,c,d){if(!c.offset)return!1;var e=(b.positionAbs||b.position.absolute).left,f=e+b.helperProportions.width,g=(b.positionAbs||b.position.absolute).top,h=g+b.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case"fit":return i<=e&&f<=j&&k<=g&&h<=l;case"intersect":return i<e+b.helperProportions.width/2&&f-b.helperProportions.width/2<j&&k<g+b.helperProportions.height/2&&h-b.helperProportions.height/2<l;case"pointer":var m=(b.positionAbs||b.position.absolute).left+(b.clickOffset||b.offset.click).left,n=(b.positionAbs||b.position.absolute).top+(b.clickOffset||b.offset.click).top,o=a.ui.isOver(n,m,k,i,c.proportions.height,c.proportions.width);return o;case"touch":return(g>=k&&g<=l||h>=k&&h<=l||g<k&&h>l)&&(e>=i&&e<=j||f>=i&&f<=j||e<i&&f>j);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();droppablesLoop:for(var g=0;g<d.length;g++){if(d[g].options.disabled||b&&!d[g].accept.call(d[g].element[0],b.currentItem||b.element))continue;for(var h=0;h<f.length;h++)if(f[h]==d[g].element[0]){d[g].proportions.height=0;continue droppablesLoop}d[g].visible=d[g].element.css("display")!="none";if(!d[g].visible)continue;e=="mousedown"&&d[g]._activate.call(d[g],c),d[g].offset=d[g].element.offset(),d[g].proportions={width:d[g].element[0].offsetWidth,height:d[g].element[0].offsetHeight}}},drop:function(b,c){var d=!1;a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){!this.options||(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,c)))});return d},dragStart:function(b,c){b.element.parents(":not(body,html)").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var d=a.ui.intersect(b,this,this.options.tolerance),e=!d&&this.isover==1?"isout":d&&this.isover==0?"isover":null;if(!e)return;var f;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");g.length&&(f=a.data(g[0],"droppable"),f.greedyChild=e=="isover"?1:0)}f&&e=="isover"&&(f.isover=0,f.isout=1,f._out.call(f,c)),this[e]=1,this[e=="isout"?"isover":"isout"]=0,this[e=="isover"?"_over":"_out"].call(this,c),f&&e=="isout"&&(f.isout=0,f.isover=1,f._over.call(f,c))}})},dragStop:function(b,c){b.element.parents(":not(body,html)").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}}})(jQuery);/*
- * jQuery UI Resizable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(":hidden")||!!a(c).parents(":hidden").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);/*
- * jQuery UI Selectable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy();return this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(!this.options.disabled){var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element});return!1}})}},_mouseDrag:function(b){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!!i&&i.element!=c.element[0]){var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.right<e||i.top>h||i.bottom<f):d.tolerance=="fit"&&(j=i.left>e&&i.right<g&&i.top>f&&i.bottom<h),j?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,c._trigger("selecting",b,{selecting:i.element}))):(i.selecting&&((b.metaKey||b.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),c._trigger("unselecting",b,{unselecting:i.element}))),i.selected&&!b.metaKey&&!b.ctrlKey&&!i.startselected&&(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,c._trigger("unselecting",b,{unselecting:i.element})))}});return!1}},_mouseStop:function(b){var c=this;this.dragged=!1;var d=this.options;a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove();return!1}}),a.extend(a.ui.selectable,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Sortable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f){e=a(this);return!1}});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}this.currentItem=e,this._removeCurrentsFromItems();return!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b);return!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:b.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<c.scrollSensitivity?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:b.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed)):(b.pageY-a(document).scrollTop()<c.scrollSensitivity?d=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<c.scrollSensitivity&&(d=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed)),b.pageX-a(document).scrollLeft()<c.scrollSensitivity?d=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<c.scrollSensitivity&&(d=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed))),d!==!1&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(var e=this.items.length-1;e>=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(b,c){if(!!b){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1}},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"=");return d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")});return d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+j<i&&b+k>f&&b+k<g;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?l:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left,b.width),e=c&&d,f=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();if(!e)return!1;return this.floating?g&&g=="right"||f=="down"?2:1:f&&(f=="down"?2:1)},_intersectsWithSides:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top+b.height/2,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left+b.width/2,b.width),e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return this.floating&&f?f=="right"&&d||f=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a),this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(b){this.items=[],this.containers=[this];var c=this.items,d=this,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],f=this._connectWith();if(f&&this.ready)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i<m;i++){var n=a(l[i]);n.data(this.widgetName+"-item",k),c.push({item:n,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;c>=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];e||(b.style.visibility="hidden");return b},update:function(a,b){if(!e||!!d.forcePlaceholderSize)b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!!c)if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.items[i][this.containers[d].floating?"left":"top"];Math.abs(j-h)<f&&(f=Math.abs(j-h),g=this.items[i])}if(!g&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[d],g?this._rearrange(b,g,null,!0):this._rearrange(b,null,this.containers[d].element,!0),this._trigger("change",b,this._uiHash()),this.containers[d]._trigger("change",b,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(d[0].style.width==""||c.forceHelperSize)&&d.width(this.currentItem.width()),(d[0].style.height==""||c.forceHelperSize)&&d.height(this.currentItem.height());return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)){var c=a(b.containment)[0],d=a(b.containment).offset(),e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var f=b.pageX,g=b.pageY;if(this.originalPosition){this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.top<this.containment[1]||h-this.offset.click.top>this.containment[3]?h-this.offset.click.top<this.containment[1]?h+c.grid[1]:h-c.grid[1]:h:h;var i=this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0];f=this.containment?i-this.offset.click.left<this.containment[0]||i-this.offset.click.left>this.containment[2]?i-this.offset.click.left<this.containment[0]?i+c.grid[0]:i-c.grid[0]:i:i}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this,f=this.counter;window.setTimeout(function(){f==e.counter&&e.refreshPositions(!d)},0)},_clear:function(b,c){this.reverting=!1;var d=[],e=this;!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var f in this._storedCSS)if(this._storedCSS[f]=="auto"||this._storedCSS[f]=="static")this._storedCSS[f]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(a){this._trigger("update",a,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(a){this._trigger("remove",a,this._uiHash())});for(var f=this.containers.length-1;f>=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return!1}c||this._trigger("beforeStop",b,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!c){for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}this.fromOutside=!1;return!0},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.extend(a.ui.sortable,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Accordion 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(b.autoHeight||b.fillHeight)&&c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(!(this.options.disabled||b.altKey||b.ctrlKey)){var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}if(f){a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus();return!1}return!0}},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];this._clickHandler({target:b},b);return this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(!d.disabled){if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return}},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!!g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}}),a.extend(a.ui.accordion,{version:"1.8.18",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size())b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);else{if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})}},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);/*
- * jQuery UI Autocomplete 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.position.js
- */(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!b.options.disabled&&!b.element.propAttr("readOnly")){d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._move("previous",c),c.preventDefault();break;case e.DOWN:b._move("next",c),c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){b.options.disabled||(b.selectedItem=null,b.previous=b.element.val())}).bind("blur.autocomplete",function(a){b.options.disabled||(clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150))}),this._initSource(),this.response=function(){return b._response.apply(b,arguments)},this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,d,e;a.isArray(this.options.source)?(d=this.options.source,this.source=function(b,c){c(a.ui.autocomplete.filter(d,b.term))}):typeof this.options.source=="string"?(e=this.options.source,this.source=function(d,f){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:e,data:d,dataType:"json",context:{autocompleteRequest:++c},success:function(a,b){this.autocompleteRequest===c&&f(a)},error:function(){this.autocompleteRequest===c&&f([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==!1)return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this.response)},_response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close(),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){if(b.length&&b[0].label&&b[0].value)return b;return a.map(b,function(b){if(typeof b=="string")return{label:b,value:b};return a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible"))this.search(null,b);else{if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)}},widget:function(){return this.menu.element}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){!a(c.target).closest(".ui-menu-item a").length||(c.preventDefault(),b.select(c))}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){!this.active||(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active)this.activate(c,this.element.children(b));else{var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))}},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10}),result.length||(result=this.element.children(".ui-menu-item:first")),this.activate(b,result)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);/*
- * jQuery UI Button 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form}));return e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.propAttr("disabled"):this.element.propAttr("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){h.disabled||(a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active"))}).bind("mouseleave.button",function(){h.disabled||a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){f||b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){h.disabled||(f=!1,d=a.pageX,e=a.pageY)}).bind("mouseup.button",function(a){!h.disabled&&(d!==a.pageX||e!==a.pageY)&&(f=!0)})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);b==="disabled"?c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1):this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery);/*
- * jQuery UI Dialog 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.button.js
- * jquery.ui.draggable.js
- * jquery.ui.mouse.js
- * jquery.ui.position.js
- * jquery.ui.resizable.js
- */(function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||"&#160;",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){b.close(a);return!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("<span></span>").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1!==c._trigger("beforeClose",b)){c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d);return c}},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;if(e.modal&&!b||!e.stack&&!e.modal)return d._trigger("focus",c);e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c);return d},open:function(){if(!this._isOpen){var b=this,c=b.options,d=b.uiDialog;b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey){d.focus(1);return!1}if(b.target===d[0]&&b.shiftKey){e.focus(1);return!1}}}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open");return b}},_createButtons:function(b){var c=this,d=!1,e=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('<button type="button"></button>').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){a!=="click"&&(a in f?e[a](b):e.attr(a,b))}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||"&#160;"))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.18",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");b||(this.uuid+=1,b=this.uuid);return"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return!1})},1),a(document).bind("keydown.dialog-overlay",function(c){b.options.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}),a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&c.bgiframe(),this.instances.push(c);return c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;if(a.browser.msie&&a.browser.version<7){b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return b<c?a(window).height()+"px":b+"px"}return a(document).height()+"px"},width:function(){var b,c;if(a.browser.msie){b=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return b<c?a(window).width()+"px":b+"px"}return a(document).width()+"px"},resize:function(){var b=a([]);a.each(a.ui.dialog.overlay.instances,function(){b=b.add(this)}),b.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}}),a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);/*
- * jQuery UI Slider 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(!b.options.disabled){switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length)this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);else return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()}},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;a=this._trimAlignValue(a);return a},_values:function(a){var b,c,d;if(arguments.length){b=this.options.values[a],b=this._trimAlignValue(b);return b}c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Tabs 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){function f(){return++d}function e(){return++c}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash){e.selected=a;return!1}}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1){this.blur();return!1}e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected")){e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur();return!1}if(!f.length){e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur();return!1}}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$="+a+"]")));return a},destroy:function(){var b=this.options;this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie);return this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0]));return this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a])));return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup();return this},url:function(a,b){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.18"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){t=d.selected,e()}:function(a){a.clientX&&c.rotate(null)});a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate);return this}})})(jQuery);/*
- * jQuery UI Datepicker 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- * jquery.ui.core.js
- */(function($,undefined){function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);!c.length||c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);!$.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])&&!!d.length&&(d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover"))})}function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}$.extend($.ui,{datepicker:{version:"1.8.18"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){extendRemove(this._defaults,a||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);c.hasClass(this.markerClassName)||(this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a))},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$('<span class="'+this._appendClass+'">'+c+"</span>"),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('<button type="button"></button>').addClass(this._triggerClass).html(g==""?f:$("<img/>").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){$.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]);return!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;d<a.length;d++)a[d].length>b&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);c.hasClass(this.markerClassName)||(c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block"))},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+g+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f);return this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return!0;return!1},_getInst:function(a){try{return $.data(a,PROP_NAME)}catch(b){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(a,b,c){var d=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?$.extend({},$.datepicker._defaults):d?b=="all"?$.extend({},d.settings):this._get(d,b):null;var e=b||{};typeof b=="string"&&(e={},e[b]=c);if(d){this._curInst==d&&this._hideDatepicker();var f=this._getDateDatepicker(a,!0),g=this._getMinMaxDate(d,"min"),h=this._getMinMaxDate(d,"max");extendRemove(d.settings,e),g!==null&&e.dateFormat!==undefined&&e.minDate===undefined&&(d.settings.minDate=this._formatDate(d,g)),h!==null&&e.dateFormat!==undefined&&e.maxDate===undefined&&(d.settings.maxDate=this._formatDate(d,h)),this._attachments($(a),d),this._autoSize(d),this._setDate(d,f),this._updateAlternate(d),this._updateDatepicker(d)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);c&&!c.inline&&this._setDateFromField(c,b);return c?this._getDate(c):null},_doKeyDown:function(a){var b=$.datepicker._getInst(a.target),c=!0,d=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=!0;if($.datepicker._datepickerShowing)switch(a.keyCode){case 9:$.datepicker._hideDatepicker(),c=!1;break;case 13:var e=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",b.dpDiv);e[0]&&$.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,e[0]);var f=$.datepicker._get(b,"onSelect");if(f){var g=$.datepicker._formatDate(b);f.apply(b.input?b.input[0]:null,[g,b])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&$.datepicker._clearDate(a.target),c=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&$.datepicker._gotoToday(a.target),c=a.ctrlKey||a.metaKey;break;case 37:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?1:-1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,-7,"D"),c=a.ctrlKey||a.metaKey;break;case 39:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?-1:1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,7,"D"),c=a.ctrlKey||a.metaKey;break;default:c=!1}else a.keyCode==36&&a.ctrlKey?$.datepicker._showDatepicker(this):c=!1;c&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(a){var b=$.datepicker._getInst(a.target);if($.datepicker._get(b,"constrainInput")){var c=$.datepicker._possibleChars($.datepicker._get(b,"dateFormat")),d=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||d<" "||!c||c.indexOf(d)>-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(a){$.datepicker.log(a)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if(!$.datepicker._isDisabledDatepicker(a)&&$.datepicker._lastInput!=a){var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){e|=$(this).css("position")=="fixed";return!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+$(document).scrollLeft(),i=document.documentElement.clientHeight+$(document).scrollTop();b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0);return b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=$.data(a,PROP_NAME))&&this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=this,f=function(){$.datepicker._tidyDialog(b),e._curInst=null};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,f):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,f),c||f(),this._datepickerShowing=!1;var g=this._get(b,"onClose");g&&g.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!!$.datepicker._curInst){var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);this._isDisabledDatepicker(d[0])||(this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e))},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if(!$(d).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(e[0])){var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();b.setMonth(0),b.setDate(1);return Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1<a.length&&a.charAt(s+1)==b;c&&s++;return c},o=function(a){var c=n(a),d=a=="@"?14:a=="!"?20:a=="y"&&c?4:a=="o"?3:2,e=new RegExp("^\\d{1,"+d+"}"),f=b.substring(r).match(e);if(!f)throw"Missing number at position "+r;r+=f[0].length;return parseInt(f[0],10)},p=function(a,c,d){var e=$.map(n(a)?d:c,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),f=-1;$.each(e,function(a,c){var d=c[1];if(b.substr(r,d.length).toLowerCase()==d.toLowerCase()){f=c[0],r+=d.length;return!1}});if(f!=-1)return f+1;throw"Unknown name at position "+r},q=function(){if(b.charAt(r)!=a.charAt(s))throw"Unexpected literal at position "+r;r++},r=0;for(var s=0;s<a.length;s++)if(m)a.charAt(s)=="'"&&!n("'")?m=!1:q();else switch(a.charAt(s)){case"d":k=o("d");break;case"D":p("D",e,f);break;case"o":l=o("o");break;case"m":j=o("m");break;case"M":j=p("M",g,h);break;case"y":i=o("y");break;case"@":var t=new Date(o("@"));i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"!":var t=new Date((o("!")-this._ticksTo1970)/1e4);i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"'":n("'")?q():m=!0;break;default:q()}if(r<b.length)throw"Extra/unparsed characters found in date: "+b.substring(r);i==-1?i=(new Date).getFullYear():i<100&&(i+=(new Date).getFullYear()-(new Date).getFullYear()%100+(i<=d?0:-100));if(l>-1){j=1,k=l;for(;;){var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+1<a.length&&a.charAt(m+1)==b;c&&m++;return c},i=function(a,b,c){var d=""+b;if(h(a))while(d.length<c)d="0"+d;return d},j=function(a,b,c,d){return h(a)?d[b]:c[b]},k="",l=!1;if(b)for(var m=0;m<a.length;m++)if(l)a.charAt(m)=="'"&&!h("'")?l=!1:k+=a.charAt(m);else switch(a.charAt(m)){case"d":k+=i("d",b.getDate(),2);break;case"D":k+=j("D",b.getDay(),d,e);break;case"o":k+=i("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":k+=i("m",b.getMonth()+1,2);break;case"M":k+=j("M",b.getMonth(),f,g);break;case"y":k+=h("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":k+=b.getTime();break;case"!":k+=b.getTime()*1e4+this._ticksTo1970;break;case"'":h("'")?k+="'":l=!0;break;default:k+=a.charAt(m)}return k},_possibleChars:function(a){var b="",c=!1,d=function(b){var c=e+1<a.length&&a.charAt(e+1)==b;c&&e++;return c};for(var e=0;e<a.length;e++)if(c)a.charAt(e)=="'"&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case"d":case"m":case"y":case"@":b+="0123456789";break;case"D":case"M":return null;case"'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e,f;e=f=this._getDefaultDate(a);var g=this._getFormatConfig(a);try{e=this.parseDate(c,d,g)||f}catch(h){this.log(h),d=b?"":d}a.selectedDay=e.getDate(),a.drawMonth=a.selectedMonth=e.getMonth(),a.drawYear=a.selectedYear=e.getFullYear(),a.currentDay=d?e.getDate():0,a.currentMonth=d?e.getMonth():0,a.currentYear=d?e.getFullYear():0,this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var d=function(a){var b=new Date;b.setDate(b.getDate()+a);return b},e=function(b){try{return $.datepicker.parseDate($.datepicker._get(a,"dateFormat"),b,$.datepicker._getFormatConfig(a))}catch(c){}var d=(b.toLowerCase().match(/^c/)?$.datepicker._getDate(a):null)||new Date,e=d.getFullYear(),f=d.getMonth(),g=d.getDate(),h=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,i=h.exec(b);while(i){switch(i[2]||"d"){case"d":case"D":g+=parseInt(i[1],10);break;case"w":case"W":g+=parseInt(i[1],10)*7;break;case"m":case"M":f+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f));break;case"y":case"Y":e+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f))}i=h.exec(b)}return new Date(e,f,g)},f=b==null||b===""?c:typeof b=="string"?e(b):typeof b=="number"?isNaN(b)?c:d(b):new Date(b.getTime());f=f&&f.toString()=="Invalid Date"?c:f,f&&(f.setHours(0),f.setMinutes(0),f.setSeconds(0),f.setMilliseconds(0));return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&p<l?l:p;while(this._daylightSavingAdjust(new Date(o,n,1))>p)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', -"+i+", 'M');\""+' title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>":e?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', +"+i+", 'M');\""+' title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":e?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+dpuuid+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>",x=d?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?w:"")+(this._isInRange(a,v)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._gotoToday('#"+a.id+"');\""+">"+u+"</button>":"")+(c?"":w)+"</div>":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L<g[0];L++){var M="";this.maxRows=4;for(var N=0;N<g[1];N++){var O=this._daylightSavingAdjust(new Date(o,n,a.selectedDay)),P=" ui-corner-all",Q="";if(j){Q+='<div class="ui-datepicker-group';if(g[1]>1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+P+'">'+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var R=z?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="<th"+((S+y+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+A[T]+'">'+C[T]+"</span></th>"}Q+=R+"</tr></thead><tbody>";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z<X;Z++){Q+="<tr>";var _=z?'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(Y)+"</td>":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Y<l||m&&Y>m;_+='<td class="'+((S+y+6)%7>=5?" ui-datepicker-week-end":"")+(bb?" ui-datepicker-other-month":"")+(Y.getTime()==O.getTime()&&n==a.selectedMonth&&a._keyEvent||J.getTime()==Y.getTime()&&J.getTime()==O.getTime()?" "+this._dayOverClass:"")+(bc?" "+this._unselectableClass+" ui-state-disabled":"")+(bb&&!G?"":" "+ba[1]+(Y.getTime()==k.getTime()?" "+this._currentClass:"")+(Y.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!bb||G)&&ba[2]?' title="'+ba[2]+'"':"")+(bc?"":' onclick="DP_jQuery_'+dpuuid+".datepicker._selectDay('#"+a.id+"',"+Y.getMonth()+","+Y.getFullYear()+', this);return false;"')+">"+(bb&&!G?"&#xa0;":bc?'<span class="ui-state-default">'+Y.getDate()+"</span>":'<a class="ui-state-default'+(Y.getTime()==b.getTime()?" ui-state-highlight":"")+(Y.getTime()==k.getTime()?" ui-state-active":"")+(bb?" ui-priority-secondary":"")+'" href="#">'+Y.getDate()+"</a>")+"</td>",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+"</tr>"}n++,n>11&&(n=0,o++),Q+="</tbody></table>"+(j?"</div>"+(g[0]>0&&N==g[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),M+=Q}K+=M}K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),
-a._keyEvent=!1;return K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='<div class="ui-datepicker-title">',m="";if(f||!i)m+='<span class="ui-datepicker-month">'+g[b]+"</span>";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" "+">";for(var p=0;p<12;p++)(!n||p>=d.getMonth())&&(!o||p<=e.getMonth())&&(m+='<option value="'+p+'"'+(p==b?' selected="selected"':"")+">"+h[p]+"</option>");m+="</select>"}k||(l+=m+(f||!i||!j?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+='<span class="ui-datepicker-year">'+c+"</span>";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" "+">";for(;t<=u;t++)a.yearshtml+='<option value="'+t+'"'+(t==c?' selected="selected"':"")+">"+t+"</option>";a.yearshtml+="</select>",l+=a.yearshtml,a.yearshtml=null}}l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?"&#xa0;":"")+m),l+="</div>";return l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&b<c?c:b;e=d&&e>d?d:e;return e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth()));return this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)})},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.18",window["DP_jQuery_"+dpuuid]=$})(jQuery);/*
- * jQuery UI Progressbar 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===b)return this._value();this._setOption("value",a);return this},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;typeof a!="number"&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Effects 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */jQuery.effects||function(a,b){function l(b){if(!b||typeof b=="number"||a.fx.speeds[b])return!0;if(typeof b=="string"&&!a.effects[b])return!0;return!1}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete;return[b,c,d,e]}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function d(b,d){var e;do{e=a.curCSS(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function c(b){var c;if(b&&b.constructor==Array&&b.length==3)return b;if(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))return[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];if(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))return[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55];if(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];if(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];if(c=/rgba\(0, 0, 0, 0\)/.exec(b))return e.transparent;return e[a.trim(b).toLowerCase()]}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){a.isFunction(d)&&(e=d,d=null);return this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class");a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.18",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){b=="toggle"&&(b=a.is(":hidden")?"show":"hide");return b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;if(b.parent().is(".ui-effects-wrapper")){c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus();return c}return b},setTransition:function(b,c,d,e){e=e||{},a.each(c,function(a,c){unit=b.cssUnit(c),unit[0]>0&&(e[c]=unit[0]*d+unit[1])});return e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];if(a.fx.off||!i)return h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)});return i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])});return d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b+c;return-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b+c;return d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b+c;return-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b*b+c;return d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){if(b==0)return c;if(b==e)return c+d;if((b/=e/2)<1)return d/2*Math.pow(2,10*(b-1))+c;return d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){if((b/=e/2)<1)return-d/2*(Math.sqrt(1-b*b)-1)+c;return d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin((b*e-f)*2*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e/2)==2)return c+d;g||(g=e*.3*1.5);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);if(b<1)return-0.5*h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)+c;return h*Math.pow(2,-10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)*.5+d+c},easeInBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);if((c/=f/2)<1)return e/2*c*c*(((g*=1.525)+1)*c-g)+d;return e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(b,c,d,e,f){return e-a.easing.easeOutBounce(b,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(b,c,d,e,f){if(c<f/2)return a.easing.easeInBounce(b,c*2,0,e,f)*.5+d;return a.easing.easeOutBounce(b,c*2-f,0,e,f)*.5+e*.5+d}})}(jQuery);/*
- * jQuery UI Effects Blind 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
- * jQuery UI Effects Bounce 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m<h;m++){var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing),g=e=="hide"?g*2:g/2}if(e=="hide"){var l={opacity:0};l[j]=(k=="pos"?"-=":"+=")+g,c.animate(l,i/2,b.options.easing,function(){c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}else{var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
- * jQuery UI Effects Clip 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.clip=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","height","width"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=c[0].tagName=="IMG"?g:c,i={size:f=="vertical"?"height":"width",position:f=="vertical"?"top":"left"},j=f=="vertical"?h.height():h.width();e=="show"&&(h.css(i.size,0),h.css(i.position,j/2));var k={};k[i.size]=e=="show"?j:0,k[i.position]=e=="show"?0:j/2,h.animate(k,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Drop 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.drop=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","opacity"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);e=="show"&&c.css("opacity",0).css(g,h=="pos"?-i:i);var j={opacity:e=="show"?1:0};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Explode 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.explode=function(b){return this.queue(function(){var c=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3,d=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":b.options.mode;var e=a(this).show().css("visibility","hidden"),f=e.offset();f.top-=parseInt(e.css("marginTop"),10)||0,f.left-=parseInt(e.css("marginLeft"),10)||0;var g=e.outerWidth(!0),h=e.outerHeight(!0);for(var i=0;i<c;i++)for(var j=0;j<d;j++)e.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);/*
- * jQuery UI Effects Fade 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Fold 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
- * jQuery UI Effects Highlight 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Pulsate 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show");times=(b.options.times||5)*2-1,duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=c.is(":visible"),animateTo=0,isVisible||(c.css("opacity",0).show(),animateTo=1),(d=="hide"&&isVisible||d=="show"&&!isVisible)&&times--;for(var e=0;e<times;e++)c.animate({opacity:animateTo},duration,b.options.easing),animateTo=(animateTo+1)%2;c.animate({opacity:animateTo},duration,b.options.easing,function(){animateTo==0&&c.hide(),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);/*
- * jQuery UI Effects Scale 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.puff=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,f=e/100,g={height:c.height(),width:c.width()};a.extend(b.options,{fade:!0,mode:d,percent:d=="hide"?e:100,from:d=="hide"?g:{height:g.height*f,width:g.width*f}}),c.effect("scale",b.options,b.duration,b.callback),c.dequeue()})},a.effects.scale=function(b){return this.queue(function(){var c=a(this),d=a.extend(!0,{},b.options),e=a.effects.setMode(c,b.options.mode||"effect"),f=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:e=="hide"?0:100),g=b.options.direction||"both",h=b.options.origin;e!="effect"&&(d.origin=h||["middle","center"],d.restore=!0);var i={height:c.height(),width:c.width()};c.from=b.options.from||(e=="show"?{height:0,width:0}:i);var j={y:g!="horizontal"?f/100:1,x:g!="vertical"?f/100:1};c.to={height:i.height*j.y,width:i.width*j.x},b.options.fade&&(e=="show"&&(c.from.opacity=0,c.to.opacity=1),e=="hide"&&(c.from.opacity=1,c.to.opacity=0)),d.from=c.from,d.to=c.to,d.mode=e,c.effect("size",d,b.duration,b.callback),c.dequeue()})},a.effects.size=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","width","height","overflow","opacity"],e=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],g=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=a.effects.setMode(c,b.options.mode||"effect"),k=b.options.restore||!1,l=b.options.scale||"both",m=b.options.origin,n={height:c.height(),width:c.width()};c.from=b.options.from||n,c.to=b.options.to||n;if(m){var p=a.effects.getBaseline(m,n);c.from.top=(n.height-c.from.height)*p.y,c.from.left=(n.width-c.from.width)*p.x,c.to.top=(n.height-c.to.height)*p.y,c.to.left=(n.width-c.to.width)*p.x}var q={from:{y:c.from.height/n.height,x:c.from.width/n.width},to:{y:c.to.height/n.height,x:c.to.width/n.width}};if(l=="box"||l=="both")q.from.y!=q.to.y&&(d=d.concat(h),c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(d=d.concat(i),c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to));(l=="content"||l=="both")&&q.from.y!=q.to.y&&(d=d.concat(g),c.from=a.effects.setTransition(c,g,q.from.y,c.from),c.to=a.effects.setTransition(c,g,q.to.y,c.to)),a.effects.save(c,k?d:e),c.show(),a.effects.createWrapper(c),c.css("overflow","hidden").css(c.from);if(l=="content"||l=="both")h=h.concat(["marginTop","marginBottom"]).concat(g),i=i.concat(["marginLeft","marginRight"]),f=d.concat(h).concat(i),c.find("*[width]").each(function(){child=a(this),k&&a.effects.save(child,f);var c={height:child.height(),width:child.width()};child.from={height:c.height*q.from.y,width:c.width*q.from.x},child.to={height:c.height*q.to.y,width:c.width*q.to.x},q.from.y!=q.to.y&&(child.from=a.effects.setTransition(child,h,q.from.y,child.from),child.to=a.effects.setTransition(child,h,q.to.y,child.to)),q.from.x!=q.to.x&&(child.from=a.effects.setTransition(child,i,q.from.x,child.from),child.to=a.effects.setTransition(child,i,q.to.x,child.to)),child.css(child.from),child.animate(child.to,b.duration,b.options.easing,function(){k&&a.effects.restore(child,f)})});c.animate(c.to,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity),j=="hide"&&c.hide(),a.effects.restore(c,k?d:e),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Shake 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.shake=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"left",g=b.options.distance||20,h=b.options.times||3,i=b.duration||b.options.duration||140;a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",l={},m={},n={};l[j]=(k=="pos"?"-=":"+=")+g,m[j]=(k=="pos"?"+=":"-=")+g*2,n[j]=(k=="pos"?"-=":"+=")+g*2,c.animate(l,i,b.options.easing);for(var p=1;p<h;p++)c.animate(m,i,b.options.easing).animate(n,i,b.options.easing);c.animate(m,i,b.options.easing).animate(l,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
- * jQuery UI Effects Slide 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Transfer 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.transfer=function(b){return this.queue(function(){var c=a(this),d=a(b.options.to),e=d.offset(),f={top:e.top,left:e.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery); \ No newline at end of file
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index f92f0562a..d8aed6346 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -1,6 +1,6 @@
// ...
//= require jquery
-//= require jquery-ui.min
+//= require jquery.ui.datepicker
//= require jquery.cookie
//= require general
//= require ba-throttle-debounce
diff --git a/app/assets/javascripts/jquery-ui.min.js b/app/assets/javascripts/jquery-ui.min.js
deleted file mode 100644
index fb641f675..000000000
--- a/app/assets/javascripts/jquery-ui.min.js
+++ /dev/null
@@ -1,168 +0,0 @@
-/*!
- * jQuery UI 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
-this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
-"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
-"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
-outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
-"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
-a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
-c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
-function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
-d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
-b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
-"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
-c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*
- * jQuery UI Position 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
-d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
-this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
-g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
-function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
-this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
--1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
-d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
-d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
-e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
-j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
-if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
-this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
-load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
-"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
-a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- * jquery.ui.core.js
- */
-(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",
-function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
-b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
-setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,
-"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
-function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c==
-"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():
-d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,
-b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=
-1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
-2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=
-d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=
-a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,
-"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==
-a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?
-d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);
-this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");
-b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]&&d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]);if(a=d.datepicker._get(b,"onSelect")){c=d.datepicker._formatDate(b);a.apply(b.input?b.input[0]:null,[c,b])}else d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,
-a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=
-a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
-"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);
-return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",
-a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value=
-"";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);
-c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=
-true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});
-a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&
-!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),
-h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=
-this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);
-this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
-_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
-0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"?
-"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);
-this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");
-if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?
-b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var D=
-o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=
-function(){if(b.charAt(q)!=a.charAt(A))throw"Unexpected literal at position "+q;q++},q=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else s();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+
-1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",
-COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:
-null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-
-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=
-0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);
-var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;
-i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=
-Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>
-12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&
-a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
-new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
-n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,
-g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&
-a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+B+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
-B+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O=
-"";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&
-x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
-z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==
-P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+B+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?"&#xa0;":L?'<span class="ui-state-default">'+
-r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
-"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" >";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&
-(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,
-e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" >";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+
-(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?
-a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,
-e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,
-"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;
-if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a==
-"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery);
-; \ No newline at end of file
diff --git a/app/assets/javascripts/jquery.flot.axislabels.js b/app/assets/javascripts/jquery.flot.axislabels.js
index d75b03ba9..c6f77aad4 100644
--- a/app/assets/javascripts/jquery.flot.axislabels.js
+++ b/app/assets/javascripts/jquery.flot.axislabels.js
@@ -61,7 +61,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
this.height = 0;
}
- AxisLabel.prototype.delete = function() {
+ AxisLabel.prototype['delete'] = function() {
};
@@ -144,7 +144,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
}
};
- HtmlAxisLabel.prototype.delete = function() {
+ HtmlAxisLabel.prototype['delete'] = function() {
if (this.elem) {
this.elem.remove();
}
@@ -357,7 +357,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
axisLabels[axisName].width;
opts.labelHeight = axis.labelHeight;
opts.labelWidth = axis.labelWidth;
- axisLabels[axisName].delete();
+ axisLabels[axisName]['delete']();
delete axisLabels[axisName];
}
diff --git a/app/assets/javascripts/jquery.flot.axislabels.min.js b/app/assets/javascripts/jquery.flot.axislabels.min.js
new file mode 100644
index 000000000..684d6173a
--- /dev/null
+++ b/app/assets/javascripts/jquery.flot.axislabels.min.js
@@ -0,0 +1 @@
+(function($){var options={};function canvasSupported(){return !!document.createElement("canvas").getContext}function canvasTextSupported(){if(!canvasSupported()){return false}var dummy_canvas=document.createElement("canvas");var context=dummy_canvas.getContext("2d");return typeof context.fillText=="function"}function css3TransitionSupported(){var div=document.createElement("div");return typeof div.style.MozTransition!="undefined"||typeof div.style.OTransition!="undefined"||typeof div.style.webkitTransition!="undefined"||typeof div.style.transition!="undefined"}function AxisLabel(axisName,position,padding,plot,opts){this.axisName=axisName;this.position=position;this.padding=padding;this.plot=plot;this.opts=opts;this.width=0;this.height=0}AxisLabel.prototype["delete"]=function(){};CanvasAxisLabel.prototype=new AxisLabel();CanvasAxisLabel.prototype.constructor=CanvasAxisLabel;function CanvasAxisLabel(axisName,position,padding,plot,opts){AxisLabel.prototype.constructor.call(this,axisName,position,padding,plot,opts)}CanvasAxisLabel.prototype.calculateSize=function(){if(!this.opts.axisLabelFontSizePixels){this.opts.axisLabelFontSizePixels=14}if(!this.opts.axisLabelFontFamily){this.opts.axisLabelFontFamily="sans-serif"}var textWidth=this.opts.axisLabelFontSizePixels+this.padding;var textHeight=this.opts.axisLabelFontSizePixels+this.padding;if(this.position=="left"||this.position=="right"){this.width=this.opts.axisLabelFontSizePixels+this.padding;this.height=0}else{this.width=0;this.height=this.opts.axisLabelFontSizePixels+this.padding}};CanvasAxisLabel.prototype.draw=function(box){var ctx=this.plot.getCanvas().getContext("2d");ctx.save();ctx.font=this.opts.axisLabelFontSizePixels+"px "+this.opts.axisLabelFontFamily;var width=ctx.measureText(this.opts.axisLabel).width;var height=this.opts.axisLabelFontSizePixels;var x,y,angle=0;if(this.position=="top"){x=box.left+box.width/2-width/2;y=box.top+height*0.72}else{if(this.position=="bottom"){x=box.left+box.width/2-width/2;y=box.top+box.height-height*0.72}else{if(this.position=="left"){x=box.left+height*0.72;y=box.height/2+box.top+width/2;angle=-Math.PI/2}else{if(this.position=="right"){x=box.left+box.width-height*0.72;y=box.height/2+box.top-width/2;angle=Math.PI/2}}}}ctx.translate(x,y);ctx.rotate(angle);ctx.fillText(this.opts.axisLabel,0,0);ctx.restore()};HtmlAxisLabel.prototype=new AxisLabel();HtmlAxisLabel.prototype.constructor=HtmlAxisLabel;function HtmlAxisLabel(axisName,position,padding,plot,opts){AxisLabel.prototype.constructor.call(this,axisName,position,padding,plot,opts);this.elem=null}HtmlAxisLabel.prototype.calculateSize=function(){var elem=$('<div class="axisLabels" style="position:absolute;">'+this.opts.axisLabel+"</div>");this.plot.getPlaceholder().append(elem);this.labelWidth=elem.outerWidth(true);this.labelHeight=elem.outerHeight(true);elem.remove();this.width=this.height=0;if(this.position=="left"||this.position=="right"){this.width=this.labelWidth+this.padding}else{this.height=this.labelHeight+this.padding}};HtmlAxisLabel.prototype["delete"]=function(){if(this.elem){this.elem.remove()}};HtmlAxisLabel.prototype.draw=function(box){this.plot.getPlaceholder().find("#"+this.axisName+"Label").remove();this.elem=$('<div id="'+this.axisName+'Label" " class="axisLabels" style="position:absolute;">'+this.opts.axisLabel+"</div>");this.plot.getPlaceholder().append(this.elem);if(this.position=="top"){this.elem.css("left",box.left+box.width/2-this.labelWidth/2+"px");this.elem.css("top",box.top+"px")}else{if(this.position=="bottom"){this.elem.css("left",box.left+box.width/2-this.labelWidth/2+"px");this.elem.css("top",box.top+box.height-this.labelHeight+"px")}else{if(this.position=="left"){this.elem.css("top",box.top+box.height/2-this.labelHeight/2+"px");this.elem.css("left",box.left+"px")}else{if(this.position=="right"){this.elem.css("top",box.top+box.height/2-this.labelHeight/2+"px");this.elem.css("left",box.left+box.width-this.labelWidth+"px")}}}}};CssTransformAxisLabel.prototype=new HtmlAxisLabel();CssTransformAxisLabel.prototype.constructor=CssTransformAxisLabel;function CssTransformAxisLabel(axisName,position,padding,plot,opts){HtmlAxisLabel.prototype.constructor.call(this,axisName,position,padding,plot,opts)}CssTransformAxisLabel.prototype.calculateSize=function(){HtmlAxisLabel.prototype.calculateSize.call(this);this.width=this.height=0;if(this.position=="left"||this.position=="right"){this.width=this.labelHeight+this.padding}else{this.height=this.labelHeight+this.padding}};CssTransformAxisLabel.prototype.transforms=function(degrees,x,y){var stransforms={"-moz-transform":"","-webkit-transform":"","-o-transform":"","-ms-transform":""};if(x!=0||y!=0){var stdTranslate=" translate("+x+"px, "+y+"px)";stransforms["-moz-transform"]+=stdTranslate;stransforms["-webkit-transform"]+=stdTranslate;stransforms["-o-transform"]+=stdTranslate;stransforms["-ms-transform"]+=stdTranslate}if(degrees!=0){var rotation=degrees/90;var stdRotate=" rotate("+degrees+"deg)";stransforms["-moz-transform"]+=stdRotate;stransforms["-webkit-transform"]+=stdRotate;stransforms["-o-transform"]+=stdRotate;stransforms["-ms-transform"]+=stdRotate}var s="top: 0; left: 0; ";for(var prop in stransforms){if(stransforms[prop]){s+=prop+":"+stransforms[prop]+";"}}s+=";";return s};CssTransformAxisLabel.prototype.calculateOffsets=function(box){var offsets={x:0,y:0,degrees:0};if(this.position=="bottom"){offsets.x=box.left+box.width/2-this.labelWidth/2;offsets.y=box.top+box.height-this.labelHeight}else{if(this.position=="top"){offsets.x=box.left+box.width/2-this.labelWidth/2;offsets.y=box.top}else{if(this.position=="left"){offsets.degrees=-90;offsets.x=box.left-this.labelWidth/2+this.labelHeight/2;offsets.y=box.height/2+box.top}else{if(this.position=="right"){offsets.degrees=90;offsets.x=box.left+box.width-this.labelWidth/2-this.labelHeight/2;offsets.y=box.height/2+box.top}}}}return offsets};CssTransformAxisLabel.prototype.draw=function(box){this.plot.getPlaceholder().find("."+this.axisName+"Label").remove();var offsets=this.calculateOffsets(box);this.elem=$('<div class="axisLabels '+this.axisName+'Label" style="position:absolute; color: '+this.opts.color+"; "+this.transforms(offsets.degrees,offsets.x,offsets.y)+'">'+this.opts.axisLabel+"</div>");this.plot.getPlaceholder().append(this.elem)};IeTransformAxisLabel.prototype=new CssTransformAxisLabel();IeTransformAxisLabel.prototype.constructor=IeTransformAxisLabel;function IeTransformAxisLabel(axisName,position,padding,plot,opts){CssTransformAxisLabel.prototype.constructor.call(this,axisName,position,padding,plot,opts);this.requiresResize=false}IeTransformAxisLabel.prototype.transforms=function(degrees,x,y){var s="";if(degrees!=0){var rotation=degrees/90;while(rotation<0){rotation+=4}s+=" filter: progid:DXImageTransform.Microsoft.BasicImage(rotation="+rotation+"); ";this.requiresResize=(this.position=="right")}if(x!=0){s+="left: "+x+"px; "}if(y!=0){s+="top: "+y+"px; "}return s};IeTransformAxisLabel.prototype.calculateOffsets=function(box){var offsets=CssTransformAxisLabel.prototype.calculateOffsets.call(this,box);if(this.position=="top"){offsets.y=box.top+1}else{if(this.position=="left"){offsets.x=box.left;offsets.y=box.height/2+box.top-this.labelWidth/2}else{if(this.position=="right"){offsets.x=box.left+box.width-this.labelHeight;offsets.y=box.height/2+box.top-this.labelWidth/2}}}return offsets};IeTransformAxisLabel.prototype.draw=function(box){CssTransformAxisLabel.prototype.draw.call(this,box);if(this.requiresResize){this.elem=this.plot.getPlaceholder().find("."+this.axisName+"Label");this.elem.css("width",this.labelWidth);this.elem.css("height",this.labelHeight)}};function init(plot){var secondPass=false;var axisLabels={};var axisOffsetCounts={left:0,right:0,top:0,bottom:0};var defaultPadding=2;plot.hooks.draw.push(function(plot,ctx){var hasAxisLabels=false;if(!secondPass){$.each(plot.getAxes(),function(axisName,axis){var opts=axis.options||plot.getOptions()[axisName];if(axisName in axisLabels){axis.labelHeight=axis.labelHeight-axisLabels[axisName].height;axis.labelWidth=axis.labelWidth-axisLabels[axisName].width;opts.labelHeight=axis.labelHeight;opts.labelWidth=axis.labelWidth;axisLabels[axisName]["delete"]();delete axisLabels[axisName]}if(!opts||!opts.axisLabel||!axis.show){return}hasAxisLabels=true;var renderer=null;if(!opts.axisLabelUseHtml&&navigator.appName=="Microsoft Internet Explorer"){var ua=navigator.userAgent;var re=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");if(re.exec(ua)!=null){rv=parseFloat(RegExp.$1)}if(rv>=9&&!opts.axisLabelUseCanvas&&!opts.axisLabelUseHtml){renderer=CssTransformAxisLabel}else{if(!opts.axisLabelUseCanvas&&!opts.axisLabelUseHtml){renderer=IeTransformAxisLabel}else{if(opts.axisLabelUseCanvas){renderer=CanvasAxisLabel}else{renderer=HtmlAxisLabel}}}}else{if(opts.axisLabelUseHtml||(!css3TransitionSupported()&&!canvasTextSupported())&&!opts.axisLabelUseCanvas){renderer=HtmlAxisLabel}else{if(opts.axisLabelUseCanvas||!css3TransitionSupported()){renderer=CanvasAxisLabel}else{renderer=CssTransformAxisLabel}}}var padding=opts.axisLabelPadding===undefined?defaultPadding:opts.axisLabelPadding;axisLabels[axisName]=new renderer(axisName,axis.position,padding,plot,opts);axisLabels[axisName].calculateSize();opts.labelHeight=axis.labelHeight+axisLabels[axisName].height;opts.labelWidth=axis.labelWidth+axisLabels[axisName].width});if(hasAxisLabels){secondPass=true;plot.setupGrid();plot.draw()}}else{secondPass=false;$.each(plot.getAxes(),function(axisName,axis){var opts=axis.options||plot.getOptions()[axisName];if(!opts||!opts.axisLabel||!axis.show){return}axisLabels[axisName].draw(axis.box)})}})}$.plot.plugins.push({init:init,options:options,name:"axisLabels",version:"2.0b0"})})(jQuery); \ No newline at end of file
diff --git a/app/assets/javascripts/jquery.flot.errorbars.js b/app/assets/javascripts/jquery.flot.errorbars.js
new file mode 100644
index 000000000..729843678
--- /dev/null
+++ b/app/assets/javascripts/jquery.flot.errorbars.js
@@ -0,0 +1,353 @@
+/* Flot plugin for plotting error bars.
+
+Copyright (c) 2007-2013 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+Error bars are used to show standard deviation and other statistical
+properties in a plot.
+
+* Created by Rui Pereira - rui (dot) pereira (at) gmail (dot) com
+
+This plugin allows you to plot error-bars over points. Set "errorbars" inside
+the points series to the axis name over which there will be error values in
+your data array (*even* if you do not intend to plot them later, by setting
+"show: null" on xerr/yerr).
+
+The plugin supports these options:
+
+ series: {
+ points: {
+ errorbars: "x" or "y" or "xy",
+ xerr: {
+ show: null/false or true,
+ asymmetric: null/false or true,
+ upperCap: null or "-" or function,
+ lowerCap: null or "-" or function,
+ color: null or color,
+ radius: null or number
+ },
+ yerr: { same options as xerr }
+ }
+ }
+
+Each data point array is expected to be of the type:
+
+ "x" [ x, y, xerr ]
+ "y" [ x, y, yerr ]
+ "xy" [ x, y, xerr, yerr ]
+
+Where xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and
+equivalently for yerr. Eg., a datapoint for the "xy" case with symmetric
+error-bars on X and asymmetric on Y would be:
+
+ [ x, y, xerr, yerr_lower, yerr_upper ]
+
+By default no end caps are drawn. Setting upperCap and/or lowerCap to "-" will
+draw a small cap perpendicular to the error bar. They can also be set to a
+user-defined drawing function, with (ctx, x, y, radius) as parameters, as eg.
+
+ function drawSemiCircle( ctx, x, y, radius ) {
+ ctx.beginPath();
+ ctx.arc( x, y, radius, 0, Math.PI, false );
+ ctx.moveTo( x - radius, y );
+ ctx.lineTo( x + radius, y );
+ ctx.stroke();
+ }
+
+Color and radius both default to the same ones of the points series if not
+set. The independent radius parameter on xerr/yerr is useful for the case when
+we may want to add error-bars to a line, without showing the interconnecting
+points (with radius: 0), and still showing end caps on the error-bars.
+shadowSize and lineWidth are derived as well from the points series.
+
+*/
+
+(function ($) {
+ var options = {
+ series: {
+ points: {
+ errorbars: null, //should be 'x', 'y' or 'xy'
+ xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null},
+ yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}
+ }
+ }
+ };
+
+ function processRawData(plot, series, data, datapoints){
+ if (!series.points.errorbars)
+ return;
+
+ // x,y values
+ var format = [
+ { x: true, number: true, required: true },
+ { y: true, number: true, required: true }
+ ];
+
+ var errors = series.points.errorbars;
+ // error bars - first X then Y
+ if (errors == 'x' || errors == 'xy') {
+ // lower / upper error
+ if (series.points.xerr.asymmetric) {
+ format.push({ x: true, number: true, required: true });
+ format.push({ x: true, number: true, required: true });
+ } else
+ format.push({ x: true, number: true, required: true });
+ }
+ if (errors == 'y' || errors == 'xy') {
+ // lower / upper error
+ if (series.points.yerr.asymmetric) {
+ format.push({ y: true, number: true, required: true });
+ format.push({ y: true, number: true, required: true });
+ } else
+ format.push({ y: true, number: true, required: true });
+ }
+ datapoints.format = format;
+ }
+
+ function parseErrors(series, i){
+
+ var points = series.datapoints.points;
+
+ // read errors from points array
+ var exl = null,
+ exu = null,
+ eyl = null,
+ eyu = null;
+ var xerr = series.points.xerr,
+ yerr = series.points.yerr;
+
+ var eb = series.points.errorbars;
+ // error bars - first X
+ if (eb == 'x' || eb == 'xy') {
+ if (xerr.asymmetric) {
+ exl = points[i + 2];
+ exu = points[i + 3];
+ if (eb == 'xy')
+ if (yerr.asymmetric){
+ eyl = points[i + 4];
+ eyu = points[i + 5];
+ } else eyl = points[i + 4];
+ } else {
+ exl = points[i + 2];
+ if (eb == 'xy')
+ if (yerr.asymmetric) {
+ eyl = points[i + 3];
+ eyu = points[i + 4];
+ } else eyl = points[i + 3];
+ }
+ // only Y
+ } else if (eb == 'y')
+ if (yerr.asymmetric) {
+ eyl = points[i + 2];
+ eyu = points[i + 3];
+ } else eyl = points[i + 2];
+
+ // symmetric errors?
+ if (exu == null) exu = exl;
+ if (eyu == null) eyu = eyl;
+
+ var errRanges = [exl, exu, eyl, eyu];
+ // nullify if not showing
+ if (!xerr.show){
+ errRanges[0] = null;
+ errRanges[1] = null;
+ }
+ if (!yerr.show){
+ errRanges[2] = null;
+ errRanges[3] = null;
+ }
+ return errRanges;
+ }
+
+ function drawSeriesErrors(plot, ctx, s){
+
+ var points = s.datapoints.points,
+ ps = s.datapoints.pointsize,
+ ax = [s.xaxis, s.yaxis],
+ radius = s.points.radius,
+ err = [s.points.xerr, s.points.yerr];
+
+ //sanity check, in case some inverted axis hack is applied to flot
+ var invertX = false;
+ if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) {
+ invertX = true;
+ var tmp = err[0].lowerCap;
+ err[0].lowerCap = err[0].upperCap;
+ err[0].upperCap = tmp;
+ }
+
+ var invertY = false;
+ if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) {
+ invertY = true;
+ var tmp = err[1].lowerCap;
+ err[1].lowerCap = err[1].upperCap;
+ err[1].upperCap = tmp;
+ }
+
+ for (var i = 0; i < s.datapoints.points.length; i += ps) {
+
+ //parse
+ var errRanges = parseErrors(s, i);
+
+ //cycle xerr & yerr
+ for (var e = 0; e < err.length; e++){
+
+ var minmax = [ax[e].min, ax[e].max];
+
+ //draw this error?
+ if (errRanges[e * err.length]){
+
+ //data coordinates
+ var x = points[i],
+ y = points[i + 1];
+
+ //errorbar ranges
+ var upper = [x, y][e] + errRanges[e * err.length + 1],
+ lower = [x, y][e] - errRanges[e * err.length];
+
+ //points outside of the canvas
+ if (err[e].err == 'x')
+ if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max)
+ continue;
+ if (err[e].err == 'y')
+ if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max)
+ continue;
+
+ // prevent errorbars getting out of the canvas
+ var drawUpper = true,
+ drawLower = true;
+
+ if (upper > minmax[1]) {
+ drawUpper = false;
+ upper = minmax[1];
+ }
+ if (lower < minmax[0]) {
+ drawLower = false;
+ lower = minmax[0];
+ }
+
+ //sanity check, in case some inverted axis hack is applied to flot
+ if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) {
+ //swap coordinates
+ var tmp = lower;
+ lower = upper;
+ upper = tmp;
+ tmp = drawLower;
+ drawLower = drawUpper;
+ drawUpper = tmp;
+ tmp = minmax[0];
+ minmax[0] = minmax[1];
+ minmax[1] = tmp;
+ }
+
+ // convert to pixels
+ x = ax[0].p2c(x),
+ y = ax[1].p2c(y),
+ upper = ax[e].p2c(upper);
+ lower = ax[e].p2c(lower);
+ minmax[0] = ax[e].p2c(minmax[0]);
+ minmax[1] = ax[e].p2c(minmax[1]);
+
+ //same style as points by default
+ var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth,
+ sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize;
+
+ //shadow as for points
+ if (lw > 0 && sw > 0) {
+ var w = sw / 2;
+ ctx.lineWidth = w;
+ ctx.strokeStyle = "rgba(0,0,0,0.1)";
+ drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax);
+
+ ctx.strokeStyle = "rgba(0,0,0,0.2)";
+ drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax);
+ }
+
+ ctx.strokeStyle = err[e].color? err[e].color: s.color;
+ ctx.lineWidth = lw;
+ //draw it
+ drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax);
+ }
+ }
+ }
+ }
+
+ function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){
+
+ //shadow offset
+ y += offset;
+ upper += offset;
+ lower += offset;
+
+ // error bar - avoid plotting over circles
+ if (err.err == 'x'){
+ if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]);
+ else drawUpper = false;
+ if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] );
+ else drawLower = false;
+ }
+ else {
+ if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] );
+ else drawUpper = false;
+ if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] );
+ else drawLower = false;
+ }
+
+ //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps
+ //this is a way to get errorbars on lines without visible connecting dots
+ radius = err.radius != null? err.radius: radius;
+
+ // upper cap
+ if (drawUpper) {
+ if (err.upperCap == '-'){
+ if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] );
+ else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] );
+ } else if ($.isFunction(err.upperCap)){
+ if (err.err=='x') err.upperCap(ctx, upper, y, radius);
+ else err.upperCap(ctx, x, upper, radius);
+ }
+ }
+ // lower cap
+ if (drawLower) {
+ if (err.lowerCap == '-'){
+ if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] );
+ else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] );
+ } else if ($.isFunction(err.lowerCap)){
+ if (err.err=='x') err.lowerCap(ctx, lower, y, radius);
+ else err.lowerCap(ctx, x, lower, radius);
+ }
+ }
+ }
+
+ function drawPath(ctx, pts){
+ ctx.beginPath();
+ ctx.moveTo(pts[0][0], pts[0][1]);
+ for (var p=1; p < pts.length; p++)
+ ctx.lineTo(pts[p][0], pts[p][1]);
+ ctx.stroke();
+ }
+
+ function draw(plot, ctx){
+ var plotOffset = plot.getPlotOffset();
+
+ ctx.save();
+ ctx.translate(plotOffset.left, plotOffset.top);
+ $.each(plot.getData(), function (i, s) {
+ if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show))
+ drawSeriesErrors(plot, ctx, s);
+ });
+ ctx.restore();
+ }
+
+ function init(plot) {
+ plot.hooks.processRawData.push(processRawData);
+ plot.hooks.draw.push(draw);
+ }
+
+ $.plot.plugins.push({
+ init: init,
+ options: options,
+ name: 'errorbars',
+ version: '1.0'
+ });
+})(jQuery);
diff --git a/app/assets/javascripts/jquery.flot.errorbars.min.js b/app/assets/javascripts/jquery.flot.errorbars.min.js
index 72d7e3dc7..84a514b07 100644
--- a/app/assets/javascripts/jquery.flot.errorbars.min.js
+++ b/app/assets/javascripts/jquery.flot.errorbars.min.js
@@ -1,63 +1 @@
-/* Flot plugin for plotting error bars.
-
-Copyright (c) 2007-2013 IOLA and Ole Laursen.
-Licensed under the MIT license.
-
-Error bars are used to show standard deviation and other statistical
-properties in a plot.
-
-* Created by Rui Pereira - rui (dot) pereira (at) gmail (dot) com
-
-This plugin allows you to plot error-bars over points. Set "errorbars" inside
-the points series to the axis name over which there will be error values in
-your data array (*even* if you do not intend to plot them later, by setting
-"show: null" on xerr/yerr).
-
-The plugin supports these options:
-
- series: {
- points: {
- errorbars: "x" or "y" or "xy",
- xerr: {
- show: null/false or true,
- asymmetric: null/false or true,
- upperCap: null or "-" or function,
- lowerCap: null or "-" or function,
- color: null or color,
- radius: null or number
- },
- yerr: { same options as xerr }
- }
- }
-
-Each data point array is expected to be of the type:
-
- "x" [ x, y, xerr ]
- "y" [ x, y, yerr ]
- "xy" [ x, y, xerr, yerr ]
-
-Where xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and
-equivalently for yerr. Eg., a datapoint for the "xy" case with symmetric
-error-bars on X and asymmetric on Y would be:
-
- [ x, y, xerr, yerr_lower, yerr_upper ]
-
-By default no end caps are drawn. Setting upperCap and/or lowerCap to "-" will
-draw a small cap perpendicular to the error bar. They can also be set to a
-user-defined drawing function, with (ctx, x, y, radius) as parameters, as eg.
-
- function drawSemiCircle( ctx, x, y, radius ) {
- ctx.beginPath();
- ctx.arc( x, y, radius, 0, Math.PI, false );
- ctx.moveTo( x - radius, y );
- ctx.lineTo( x + radius, y );
- ctx.stroke();
- }
-
-Color and radius both default to the same ones of the points series if not
-set. The independent radius parameter on xerr/yerr is useful for the case when
-we may want to add error-bars to a line, without showing the interconnecting
-points (with radius: 0), and still showing end caps on the error-bars.
-shadowSize and lineWidth are derived as well from the points series.
-
-*/(function(e){function n(e,t,n,r){if(!t.points.errorbars)return;var i=[{x:!0,number:!0,required:!0},{y:!0,number:!0,required:!0}],s=t.points.errorbars;if(s=="x"||s=="xy")t.points.xerr.asymmetric?(i.push({x:!0,number:!0,required:!0}),i.push({x:!0,number:!0,required:!0})):i.push({x:!0,number:!0,required:!0});if(s=="y"||s=="xy")t.points.yerr.asymmetric?(i.push({y:!0,number:!0,required:!0}),i.push({y:!0,number:!0,required:!0})):i.push({y:!0,number:!0,required:!0});r.format=i}function r(e,t){var n=e.datapoints.points,r=null,i=null,s=null,o=null,u=e.points.xerr,a=e.points.yerr,f=e.points.errorbars;f=="x"||f=="xy"?u.asymmetric?(r=n[t+2],i=n[t+3],f=="xy"&&(a.asymmetric?(s=n[t+4],o=n[t+5]):s=n[t+4])):(r=n[t+2],f=="xy"&&(a.asymmetric?(s=n[t+3],o=n[t+4]):s=n[t+3])):f=="y"&&(a.asymmetric?(s=n[t+2],o=n[t+3]):s=n[t+2]),i==null&&(i=r),o==null&&(o=s);var l=[r,i,s,o];return u.show||(l[0]=null,l[1]=null),a.show||(l[2]=null,l[3]=null),l}function i(e,t,n){var i=n.datapoints.points,o=n.datapoints.pointsize,u=[n.xaxis,n.yaxis],a=n.points.radius,f=[n.points.xerr,n.points.yerr],l=!1;if(u[0].p2c(u[0].max)<u[0].p2c(u[0].min)){l=!0;var c=f[0].lowerCap;f[0].lowerCap=f[0].upperCap,f[0].upperCap=c}var h=!1;if(u[1].p2c(u[1].min)<u[1].p2c(u[1].max)){h=!0;var c=f[1].lowerCap;f[1].lowerCap=f[1].upperCap,f[1].upperCap=c}for(var p=0;p<n.datapoints.points.length;p+=o){var d=r(n,p);for(var v=0;v<f.length;v++){var m=[u[v].min,u[v].max];if(d[v*f.length]){var g=i[p],y=i[p+1],b=[g,y][v]+d[v*f.length+1],w=[g,y][v]-d[v*f.length];if(f[v].err=="x")if(y>u[1].max||y<u[1].min||b<u[0].min||w>u[0].max)continue;if(f[v].err=="y")if(g>u[0].max||g<u[0].min||b<u[1].min||w>u[1].max)continue;var E=!0,S=!0;b>m[1]&&(E=!1,b=m[1]),w<m[0]&&(S=!1,w=m[0]);if(f[v].err=="x"&&l||f[v].err=="y"&&h){var c=w;w=b,b=c,c=S,S=E,E=c,c=m[0],m[0]=m[1],m[1]=c}g=u[0].p2c(g),y=u[1].p2c(y),b=u[v].p2c(b),w=u[v].p2c(w),m[0]=u[v].p2c(m[0]),m[1]=u[v].p2c(m[1]);var x=f[v].lineWidth?f[v].lineWidth:n.points.lineWidth,T=n.points.shadowSize!=null?n.points.shadowSize:n.shadowSize;if(x>0&&T>0){var N=T/2;t.lineWidth=N,t.strokeStyle="rgba(0,0,0,0.1)",s(t,f[v],g,y,b,w,E,S,a,N+N/2,m),t.strokeStyle="rgba(0,0,0,0.2)",s(t,f[v],g,y,b,w,E,S,a,N/2,m)}t.strokeStyle=f[v].color?f[v].color:n.color,t.lineWidth=x,s(t,f[v],g,y,b,w,E,S,a,0,m)}}}}function s(t,n,r,i,s,u,a,f,l,c,h){i+=c,s+=c,u+=c,n.err=="x"?(s>r+l?o(t,[[s,i],[Math.max(r+l,h[0]),i]]):a=!1,u<r-l?o(t,[[Math.min(r-l,h[1]),i],[u,i]]):f=!1):(s<i-l?o(t,[[r,s],[r,Math.min(i-l,h[0])]]):a=!1,u>i+l?o(t,[[r,Math.max(i+l,h[1])],[r,u]]):f=!1),l=n.radius!=null?n.radius:l,a&&(n.upperCap=="-"?n.err=="x"?o(t,[[s,i-l],[s,i+l]]):o(t,[[r-l,s],[r+l,s]]):e.isFunction(n.upperCap)&&(n.err=="x"?n.upperCap(t,s,i,l):n.upperCap(t,r,s,l))),f&&(n.lowerCap=="-"?n.err=="x"?o(t,[[u,i-l],[u,i+l]]):o(t,[[r-l,u],[r+l,u]]):e.isFunction(n.lowerCap)&&(n.err=="x"?n.lowerCap(t,u,i,l):n.lowerCap(t,r,u,l)))}function o(e,t){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(var n=1;n<t.length;n++)e.lineTo(t[n][0],t[n][1]);e.stroke()}function u(t,n){var r=t.getPlotOffset();n.save(),n.translate(r.left,r.top),e.each(t.getData(),function(e,r){r.points.errorbars&&(r.points.xerr.show||r.points.yerr.show)&&i(t,n,r)}),n.restore()}function a(e){e.hooks.processRawData.push(n),e.hooks.draw.push(u)}var t={series:{points:{errorbars:null,xerr:{err:"x",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null},yerr:{err:"y",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null}}}};e.plot.plugins.push({init:a,options:t,name:"errorbars",version:"1.0"})})(jQuery); \ No newline at end of file
+(function($){var options={series:{points:{errorbars:null,xerr:{err:"x",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null},yerr:{err:"y",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null}}}};function processRawData(plot,series,data,datapoints){if(!series.points.errorbars){return}var format=[{x:true,number:true,required:true},{y:true,number:true,required:true}];var errors=series.points.errorbars;if(errors=="x"||errors=="xy"){if(series.points.xerr.asymmetric){format.push({x:true,number:true,required:true});format.push({x:true,number:true,required:true})}else{format.push({x:true,number:true,required:true})}}if(errors=="y"||errors=="xy"){if(series.points.yerr.asymmetric){format.push({y:true,number:true,required:true});format.push({y:true,number:true,required:true})}else{format.push({y:true,number:true,required:true})}}datapoints.format=format}function parseErrors(series,i){var points=series.datapoints.points;var exl=null,exu=null,eyl=null,eyu=null;var xerr=series.points.xerr,yerr=series.points.yerr;var eb=series.points.errorbars;if(eb=="x"||eb=="xy"){if(xerr.asymmetric){exl=points[i+2];exu=points[i+3];if(eb=="xy"){if(yerr.asymmetric){eyl=points[i+4];eyu=points[i+5]}else{eyl=points[i+4]}}}else{exl=points[i+2];if(eb=="xy"){if(yerr.asymmetric){eyl=points[i+3];eyu=points[i+4]}else{eyl=points[i+3]}}}}else{if(eb=="y"){if(yerr.asymmetric){eyl=points[i+2];eyu=points[i+3]}else{eyl=points[i+2]}}}if(exu==null){exu=exl}if(eyu==null){eyu=eyl}var errRanges=[exl,exu,eyl,eyu];if(!xerr.show){errRanges[0]=null;errRanges[1]=null}if(!yerr.show){errRanges[2]=null;errRanges[3]=null}return errRanges}function drawSeriesErrors(plot,ctx,s){var points=s.datapoints.points,ps=s.datapoints.pointsize,ax=[s.xaxis,s.yaxis],radius=s.points.radius,err=[s.points.xerr,s.points.yerr];var invertX=false;if(ax[0].p2c(ax[0].max)<ax[0].p2c(ax[0].min)){invertX=true;var tmp=err[0].lowerCap;err[0].lowerCap=err[0].upperCap;err[0].upperCap=tmp}var invertY=false;if(ax[1].p2c(ax[1].min)<ax[1].p2c(ax[1].max)){invertY=true;var tmp=err[1].lowerCap;err[1].lowerCap=err[1].upperCap;err[1].upperCap=tmp}for(var i=0;i<s.datapoints.points.length;i+=ps){var errRanges=parseErrors(s,i);for(var e=0;e<err.length;e++){var minmax=[ax[e].min,ax[e].max];if(errRanges[e*err.length]){var x=points[i],y=points[i+1];var upper=[x,y][e]+errRanges[e*err.length+1],lower=[x,y][e]-errRanges[e*err.length];if(err[e].err=="x"){if(y>ax[1].max||y<ax[1].min||upper<ax[0].min||lower>ax[0].max){continue}}if(err[e].err=="y"){if(x>ax[0].max||x<ax[0].min||upper<ax[1].min||lower>ax[1].max){continue}}var drawUpper=true,drawLower=true;if(upper>minmax[1]){drawUpper=false;upper=minmax[1]}if(lower<minmax[0]){drawLower=false;lower=minmax[0]}if((err[e].err=="x"&&invertX)||(err[e].err=="y"&&invertY)){var tmp=lower;lower=upper;upper=tmp;tmp=drawLower;drawLower=drawUpper;drawUpper=tmp;tmp=minmax[0];minmax[0]=minmax[1];minmax[1]=tmp}x=ax[0].p2c(x),y=ax[1].p2c(y),upper=ax[e].p2c(upper);lower=ax[e].p2c(lower);minmax[0]=ax[e].p2c(minmax[0]);minmax[1]=ax[e].p2c(minmax[1]);var lw=err[e].lineWidth?err[e].lineWidth:s.points.lineWidth,sw=s.points.shadowSize!=null?s.points.shadowSize:s.shadowSize;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,w+w/2,minmax);ctx.strokeStyle="rgba(0,0,0,0.2)";drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,w/2,minmax)}ctx.strokeStyle=err[e].color?err[e].color:s.color;ctx.lineWidth=lw;drawError(ctx,err[e],x,y,upper,lower,drawUpper,drawLower,radius,0,minmax)}}}}function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){y+=offset;upper+=offset;lower+=offset;if(err.err=="x"){if(upper>x+radius){drawPath(ctx,[[upper,y],[Math.max(x+radius,minmax[0]),y]])}else{drawUpper=false}if(lower<x-radius){drawPath(ctx,[[Math.min(x-radius,minmax[1]),y],[lower,y]])}else{drawLower=false}}else{if(upper<y-radius){drawPath(ctx,[[x,upper],[x,Math.min(y-radius,minmax[0])]])}else{drawUpper=false}if(lower>y+radius){drawPath(ctx,[[x,Math.max(y+radius,minmax[1])],[x,lower]])}else{drawLower=false}}radius=err.radius!=null?err.radius:radius;if(drawUpper){if(err.upperCap=="-"){if(err.err=="x"){drawPath(ctx,[[upper,y-radius],[upper,y+radius]])}else{drawPath(ctx,[[x-radius,upper],[x+radius,upper]])}}else{if($.isFunction(err.upperCap)){if(err.err=="x"){err.upperCap(ctx,upper,y,radius)}else{err.upperCap(ctx,x,upper,radius)}}}}if(drawLower){if(err.lowerCap=="-"){if(err.err=="x"){drawPath(ctx,[[lower,y-radius],[lower,y+radius]])}else{drawPath(ctx,[[x-radius,lower],[x+radius,lower]])}}else{if($.isFunction(err.lowerCap)){if(err.err=="x"){err.lowerCap(ctx,lower,y,radius)}else{err.lowerCap(ctx,x,lower,radius)}}}}}function drawPath(ctx,pts){ctx.beginPath();ctx.moveTo(pts[0][0],pts[0][1]);for(var p=1;p<pts.length;p++){ctx.lineTo(pts[p][0],pts[p][1])}ctx.stroke()}function draw(plot,ctx){var plotOffset=plot.getPlotOffset();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);$.each(plot.getData(),function(i,s){if(s.points.errorbars&&(s.points.xerr.show||s.points.yerr.show)){drawSeriesErrors(plot,ctx,s)}});ctx.restore()}function init(plot){plot.hooks.processRawData.push(processRawData);plot.hooks.draw.push(draw)}$.plot.plugins.push({init:init,options:options,name:"errorbars",version:"1.0"})})(jQuery); \ No newline at end of file
diff --git a/app/assets/javascripts/jquery.flot.js b/app/assets/javascripts/jquery.flot.js
new file mode 100644
index 000000000..2855d2eb3
--- /dev/null
+++ b/app/assets/javascripts/jquery.flot.js
@@ -0,0 +1,3078 @@
+/* Javascript plotting library for jQuery, version 0.8.2-alpha.
+
+Copyright (c) 2007-2013 IOLA and Ole Laursen.
+Licensed under the MIT license.
+
+*/
+
+// first an inline dependency, jquery.colorhelpers.js, we inline it here
+// for convenience
+
+/* Plugin for jQuery for working with colors.
+ *
+ * Version 1.1.
+ *
+ * Inspiration from jQuery color animation plugin by John Resig.
+ *
+ * Released under the MIT license by Ole Laursen, October 2009.
+ *
+ * Examples:
+ *
+ * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
+ * var c = $.color.extract($("#mydiv"), 'background-color');
+ * console.log(c.r, c.g, c.b, c.a);
+ * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
+ *
+ * Note that .scale() and .add() return the same modified object
+ * instead of making a new one.
+ *
+ * V. 1.1: Fix error handling so e.g. parsing an empty string does
+ * produce a color rather than just crashing.
+ */
+(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return"rgb("+[G.r,G.g,G.b].join(",")+")"}else{return"rgba("+[G.r,G.g,G.b,G.a].join(",")+")"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=""&&E!="transparent"){break}D=D.parent()}while(!B.nodeName(D.get(0),"body"));if(E=="rgba(0, 0, 0, 0)"){E="transparent"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D=="transparent"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);
+
+// the actual Flot code
+(function($) {
+
+ // Cache the prototype hasOwnProperty for faster access
+
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // The Canvas object is a wrapper around an HTML5 <canvas> tag.
+ //
+ // @constructor
+ // @param {string} cls List of classes to apply to the canvas.
+ // @param {element} container Element onto which to append the canvas.
+ //
+ // Requiring a container is a little iffy, but unfortunately canvas
+ // operations don't work unless the canvas is attached to the DOM.
+
+ function Canvas(cls, container) {
+
+ var element = container.children("." + cls)[0];
+
+ if (element == null) {
+
+ element = document.createElement("canvas");
+ element.className = cls;
+
+ $(element).css({ direction: "ltr", position: "absolute", left: 0, top: 0 })
+ .appendTo(container);
+
+ // If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas
+
+ if (!element.getContext) {
+ if (window.G_vmlCanvasManager) {
+ element = window.G_vmlCanvasManager.initElement(element);
+ } else {
+ throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");
+ }
+ }
+ }
+
+ this.element = element;
+
+ var context = this.context = element.getContext("2d");
+
+ // Determine the screen's ratio of physical to device-independent
+ // pixels. This is the ratio between the canvas width that the browser
+ // advertises and the number of pixels actually present in that space.
+
+ // The iPhone 4, for example, has a device-independent width of 320px,
+ // but its screen is actually 640px wide. It therefore has a pixel
+ // ratio of 2, while most normal devices have a ratio of 1.
+
+ var devicePixelRatio = window.devicePixelRatio || 1,
+ backingStoreRatio =
+ context.webkitBackingStorePixelRatio ||
+ context.mozBackingStorePixelRatio ||
+ context.msBackingStorePixelRatio ||
+ context.oBackingStorePixelRatio ||
+ context.backingStorePixelRatio || 1;
+
+ this.pixelRatio = devicePixelRatio / backingStoreRatio;
+
+ // Size the canvas to match the internal dimensions of its container
+
+ this.resize(container.width(), container.height());
+
+ // Collection of HTML div layers for text overlaid onto the canvas
+
+ this.textContainer = null;
+ this.text = {};
+
+ // Cache of text fragments and metrics, so we can avoid expensively
+ // re-calculating them when the plot is re-rendered in a loop.
+
+ this._textCache = {};
+ }
+
+ // Resizes the canvas to the given dimensions.
+ //
+ // @param {number} width New width of the canvas, in pixels.
+ // @param {number} width New height of the canvas, in pixels.
+
+ Canvas.prototype.resize = function(width, height) {
+
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid dimensions for plot, width = " + width + ", height = " + height);
+ }
+
+ var element = this.element,
+ context = this.context,
+ pixelRatio = this.pixelRatio;
+
+ // Resize the canvas, increasing its density based on the display's
+ // pixel ratio; basically giving it more pixels without increasing the
+ // size of its element, to take advantage of the fact that retina
+ // displays have that many more pixels in the same advertised space.
+
+ // Resizing should reset the state (excanvas seems to be buggy though)
+
+ if (this.width != width) {
+ element.width = width * pixelRatio;
+ element.style.width = width + "px";
+ this.width = width;
+ }
+
+ if (this.height != height) {
+ element.height = height * pixelRatio;
+ element.style.height = height + "px";
+ this.height = height;
+ }
+
+ // Save the context, so we can reset in case we get replotted. The
+ // restore ensure that we're really back at the initial state, and
+ // should be safe even if we haven't saved the initial state yet.
+
+ context.restore();
+ context.save();
+
+ // Scale the coordinate space to match the display density; so even though we
+ // may have twice as many pixels, we still want lines and other drawing to
+ // appear at the same size; the extra pixels will just make them crisper.
+
+ context.scale(pixelRatio, pixelRatio);
+ };
+
+ // Clears the entire canvas area, not including any overlaid HTML text
+
+ Canvas.prototype.clear = function() {
+ this.context.clearRect(0, 0, this.width, this.height);
+ };
+
+ // Finishes rendering the canvas, including managing the text overlay.
+
+ Canvas.prototype.render = function() {
+
+ var cache = this._textCache;
+
+ // For each text layer, add elements marked as active that haven't
+ // already been rendered, and remove those that are no longer active.
+
+ for (var layerKey in cache) {
+ if (hasOwnProperty.call(cache, layerKey)) {
+
+ var layer = this.getTextLayer(layerKey),
+ layerCache = cache[layerKey];
+
+ layer.hide();
+
+ for (var styleKey in layerCache) {
+ if (hasOwnProperty.call(layerCache, styleKey)) {
+ var styleCache = layerCache[styleKey];
+ for (var key in styleCache) {
+ if (hasOwnProperty.call(styleCache, key)) {
+
+ var positions = styleCache[key].positions;
+
+ for (var i = 0, position; position = positions[i]; i++) {
+ if (position.active) {
+ if (!position.rendered) {
+ layer.append(position.element);
+ position.rendered = true;
+ }
+ } else {
+ positions.splice(i--, 1);
+ if (position.rendered) {
+ position.element.detach();
+ }
+ }
+ }
+
+ if (positions.length == 0) {
+ delete styleCache[key];
+ }
+ }
+ }
+ }
+ }
+
+ layer.show();
+ }
+ }
+ };
+
+ // Creates (if necessary) and returns the text overlay container.
+ //
+ // @param {string} classes String of space-separated CSS classes used to
+ // uniquely identify the text layer.
+ // @return {object} The jQuery-wrapped text-layer div.
+
+ Canvas.prototype.getTextLayer = function(classes) {
+
+ var layer = this.text[classes];
+
+ // Create the text layer if it doesn't exist
+
+ if (layer == null) {
+
+ // Create the text layer container, if it doesn't exist
+
+ if (this.textContainer == null) {
+ this.textContainer = $("<div class='flot-text'></div>")
+ .css({
+ position: "absolute",
+ top: 0,
+ left: 0,
+ bottom: 0,
+ right: 0,
+ 'font-size': "smaller",
+ color: "#545454"
+ })
+ .insertAfter(this.element);
+ }
+
+ layer = this.text[classes] = $("<div></div>")
+ .addClass(classes)
+ .css({
+ position: "absolute",
+ top: 0,
+ left: 0,
+ bottom: 0,
+ right: 0
+ })
+ .appendTo(this.textContainer);
+ }
+
+ return layer;
+ };
+
+ // Creates (if necessary) and returns a text info object.
+ //
+ // The object looks like this:
+ //
+ // {
+ // width: Width of the text's wrapper div.
+ // height: Height of the text's wrapper div.
+ // element: The jQuery-wrapped HTML div containing the text.
+ // positions: Array of positions at which this text is drawn.
+ // }
+ //
+ // The positions array contains objects that look like this:
+ //
+ // {
+ // active: Flag indicating whether the text should be visible.
+ // rendered: Flag indicating whether the text is currently visible.
+ // element: The jQuery-wrapped HTML div containing the text.
+ // x: X coordinate at which to draw the text.
+ // y: Y coordinate at which to draw the text.
+ // }
+ //
+ // Each position after the first receives a clone of the original element.
+ //
+ // The idea is that that the width, height, and general 'identity' of the
+ // text is constant no matter where it is placed; the placements are a
+ // secondary property.
+ //
+ // Canvas maintains a cache of recently-used text info objects; getTextInfo
+ // either returns the cached element or creates a new entry.
+ //
+ // @param {string} layer A string of space-separated CSS classes uniquely
+ // identifying the layer containing this text.
+ // @param {string} text Text string to retrieve info for.
+ // @param {(string|object)=} font Either a string of space-separated CSS
+ // classes or a font-spec object, defining the text's font and style.
+ // @param {number=} angle Angle at which to rotate the text, in degrees.
+ // Angle is currently unused, it will be implemented in the future.
+ // @param {number=} width Maximum width of the text before it wraps.
+ // @return {object} a text info object.
+
+ Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {
+
+ var textStyle, layerCache, styleCache, info;
+
+ // Cast the value to a string, in case we were given a number or such
+
+ text = "" + text;
+
+ // If the font is a font-spec object, generate a CSS font definition
+
+ if (typeof font === "object") {
+ textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px/" + font.lineHeight + "px " + font.family;
+ } else {
+ textStyle = font;
+ }
+
+ // Retrieve (or create) the cache for the text's layer and styles
+
+ layerCache = this._textCache[layer];
+
+ if (layerCache == null) {
+ layerCache = this._textCache[layer] = {};
+ }
+
+ styleCache = layerCache[textStyle];
+
+ if (styleCache == null) {
+ styleCache = layerCache[textStyle] = {};
+ }
+
+ info = styleCache[text];
+
+ // If we can't find a matching element in our cache, create a new one
+
+ if (info == null) {
+
+ var element = $("<div></div>").html(text)
+ .css({
+ position: "absolute",
+ 'max-width': width,
+ top: -9999
+ })
+ .appendTo(this.getTextLayer(layer));
+
+ if (typeof font === "object") {
+ element.css({
+ font: textStyle,
+ color: font.color
+ });
+ } else if (typeof font === "string") {
+ element.addClass(font);
+ }
+
+ info = styleCache[text] = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ element: element,
+ positions: []
+ };
+
+ element.detach();
+ }
+
+ return info;
+ };
+
+ // Adds a text string to the canvas text overlay.
+ //
+ // The text isn't drawn immediately; it is marked as rendering, which will
+ // result in its addition to the canvas on the next render pass.
+ //
+ // @param {string} layer A string of space-separated CSS classes uniquely
+ // identifying the layer containing this text.
+ // @param {number} x X coordinate at which to draw the text.
+ // @param {number} y Y coordinate at which to draw the text.
+ // @param {string} text Text string to draw.
+ // @param {(string|object)=} font Either a string of space-separated CSS
+ // classes or a font-spec object, defining the text's font and style.
+ // @param {number=} angle Angle at which to rotate the text, in degrees.
+ // Angle is currently unused, it will be implemented in the future.
+ // @param {number=} width Maximum width of the text before it wraps.
+ // @param {string=} halign Horizontal alignment of the text; either "left",
+ // "center" or "right".
+ // @param {string=} valign Vertical alignment of the text; either "top",
+ // "middle" or "bottom".
+
+ Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {
+
+ var info = this.getTextInfo(layer, text, font, angle, width),
+ positions = info.positions;
+
+ // Tweak the div's position to match the text's alignment
+
+ if (halign == "center") {
+ x -= info.width / 2;
+ } else if (halign == "right") {
+ x -= info.width;
+ }
+
+ if (valign == "middle") {
+ y -= info.height / 2;
+ } else if (valign == "bottom") {
+ y -= info.height;
+ }
+
+ // Determine whether this text already exists at this position.
+ // If so, mark it for inclusion in the next render pass.
+
+ for (var i = 0, position; position = positions[i]; i++) {
+ if (position.x == x && position.y == y) {
+ position.active = true;
+ return;
+ }
+ }
+
+ // If the text doesn't exist at this position, create a new entry
+
+ // For the very first position we'll re-use the original element,
+ // while for subsequent ones we'll clone it.
+
+ position = {
+ active: true,
+ rendered: false,
+ element: positions.length ? info.element.clone() : info.element,
+ x: x,
+ y: y
+ };
+
+ positions.push(position);
+
+ // Move the element to its final position within the container
+
+ position.element.css({
+ top: Math.round(y),
+ left: Math.round(x),
+ 'text-align': halign // In case the text wraps
+ });
+ };
+
+ // Removes one or more text strings from the canvas text overlay.
+ //
+ // If no parameters are given, all text within the layer is removed.
+ //
+ // Note that the text is not immediately removed; it is simply marked as
+ // inactive, which will result in its removal on the next render pass.
+ // This avoids the performance penalty for 'clear and redraw' behavior,
+ // where we potentially get rid of all text on a layer, but will likely
+ // add back most or all of it later, as when redrawing axes, for example.
+ //
+ // @param {string} layer A string of space-separated CSS classes uniquely
+ // identifying the layer containing this text.
+ // @param {number=} x X coordinate of the text.
+ // @param {number=} y Y coordinate of the text.
+ // @param {string=} text Text string to remove.
+ // @param {(string|object)=} font Either a string of space-separated CSS
+ // classes or a font-spec object, defining the text's font and style.
+ // @param {number=} angle Angle at which the text is rotated, in degrees.
+ // Angle is currently unused, it will be implemented in the future.
+
+ Canvas.prototype.removeText = function(layer, x, y, text, font, angle) {
+ if (text == null) {
+ var layerCache = this._textCache[layer];
+ if (layerCache != null) {
+ for (var styleKey in layerCache) {
+ if (hasOwnProperty.call(layerCache, styleKey)) {
+ var styleCache = layerCache[styleKey];
+ for (var key in styleCache) {
+ if (hasOwnProperty.call(styleCache, key)) {
+ var positions = styleCache[key].positions;
+ for (var i = 0, position; position = positions[i]; i++) {
+ position.active = false;
+ }
+ }
+ }
+ }
+ }
+ }
+ } else {
+ var positions = this.getTextInfo(layer, text, font, angle).positions;
+ for (var i = 0, position; position = positions[i]; i++) {
+ if (position.x == x && position.y == y) {
+ position.active = false;
+ }
+ }
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // The top-level container for the entire plot.
+
+ function Plot(placeholder, data_, options_, plugins) {
+ // data is on the form:
+ // [ series1, series2 ... ]
+ // where series is either just the data as [ [x1, y1], [x2, y2], ... ]
+ // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }
+
+ var series = [],
+ options = {
+ // the color theme used for graphs
+ colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
+ legend: {
+ show: true,
+ noColumns: 1, // number of colums in legend table
+ labelFormatter: null, // fn: string -> string
+ labelBoxBorderColor: "#ccc", // border color for the little label boxes
+ container: null, // container (as jQuery object) to put legend in, null means default on top of graph
+ position: "ne", // position of default legend container within plot
+ margin: 5, // distance from grid edge to default legend container within plot
+ backgroundColor: null, // null means auto-detect
+ backgroundOpacity: 0.85, // set to 0 to avoid background
+ sorted: null // default to no legend sorting
+ },
+ xaxis: {
+ show: null, // null = auto-detect, true = always, false = never
+ position: "bottom", // or "top"
+ mode: null, // null or "time"
+ font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" }
+ color: null, // base color, labels, ticks
+ tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"
+ transform: null, // null or f: number -> number to transform axis
+ inverseTransform: null, // if transform is set, this should be the inverse function
+ min: null, // min. value to show, null means set automatically
+ max: null, // max. value to show, null means set automatically
+ autoscaleMargin: null, // margin in % to add if auto-setting min/max
+ ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks
+ tickFormatter: null, // fn: number -> string
+ labelWidth: null, // size of tick labels in pixels
+ labelHeight: null,
+ reserveSpace: null, // whether to reserve space even if axis isn't shown
+ tickLength: null, // size in pixels of ticks, or "full" for whole line
+ alignTicksWithAxis: null, // axis number or null for no sync
+ tickDecimals: null, // no. of decimals, null means auto
+ tickSize: null, // number or [number, "unit"]
+ minTickSize: null // number or [number, "unit"]
+ },
+ yaxis: {
+ autoscaleMargin: 0.02,
+ position: "left" // or "right"
+ },
+ xaxes: [],
+ yaxes: [],
+ series: {
+ points: {
+ show: false,
+ radius: 3,
+ lineWidth: 2, // in pixels
+ fill: true,
+ fillColor: "#ffffff",
+ symbol: "circle" // or callback
+ },
+ lines: {
+ // we don't put in show: false so we can see
+ // whether lines were actively disabled
+ lineWidth: 2, // in pixels
+ fill: false,
+ fillColor: null,
+ steps: false
+ // Omit 'zero', so we can later default its value to
+ // match that of the 'fill' option.
+ },
+ bars: {
+ show: false,
+ lineWidth: 2, // in pixels
+ barWidth: 1, // in units of the x axis
+ fill: true,
+ fillColor: null,
+ align: "left", // "left", "right", or "center"
+ horizontal: false,
+ zero: true
+ },
+ shadowSize: 3,
+ highlightColor: null
+ },
+ grid: {
+ show: true,
+ aboveData: false,
+ color: "#545454", // primary color used for outline and labels
+ backgroundColor: null, // null for transparent, else color
+ borderColor: null, // set if different from the grid color
+ tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"
+ margin: 0, // distance from the canvas edge to the grid
+ labelMargin: 5, // in pixels
+ axisMargin: 8, // in pixels
+ borderWidth: 2, // in pixels
+ minBorderMargin: null, // in pixels, null means taken from points radius
+ markings: null, // array of ranges or fn: axes -> array of ranges
+ markingsColor: "#f4f4f4",
+ markingsLineWidth: 2,
+ // interactive stuff
+ clickable: false,
+ hoverable: false,
+ autoHighlight: true, // highlight in case mouse is near
+ mouseActiveRadius: 10 // how far the mouse can be away to activate an item
+ },
+ interaction: {
+ redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow
+ },
+ hooks: {}
+ },
+ surface = null, // the canvas for the plot itself
+ overlay = null, // canvas for interactive stuff on top of plot
+ eventHolder = null, // jQuery object that events should be bound to
+ ctx = null, octx = null,
+ xaxes = [], yaxes = [],
+ plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
+ plotWidth = 0, plotHeight = 0,
+ hooks = {
+ processOptions: [],
+ processRawData: [],
+ processDatapoints: [],
+ processOffset: [],
+ drawBackground: [],
+ drawSeries: [],
+ draw: [],
+ bindEvents: [],
+ drawOverlay: [],
+ shutdown: []
+ },
+ plot = this;
+
+ // public functions
+ plot.setData = setData;
+ plot.setupGrid = setupGrid;
+ plot.draw = draw;
+ plot.getPlaceholder = function() { return placeholder; };
+ plot.getCanvas = function() { return surface.element; };
+ plot.getPlotOffset = function() { return plotOffset; };
+ plot.width = function () { return plotWidth; };
+ plot.height = function () { return plotHeight; };
+ plot.offset = function () {
+ var o = eventHolder.offset();
+ o.left += plotOffset.left;
+ o.top += plotOffset.top;
+ return o;
+ };
+ plot.getData = function () { return series; };
+ plot.getAxes = function () {
+ var res = {}, i;
+ $.each(xaxes.concat(yaxes), function (_, axis) {
+ if (axis)
+ res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis;
+ });
+ return res;
+ };
+ plot.getXAxes = function () { return xaxes; };
+ plot.getYAxes = function () { return yaxes; };
+ plot.c2p = canvasToAxisCoords;
+ plot.p2c = axisToCanvasCoords;
+ plot.getOptions = function () { return options; };
+ plot.highlight = highlight;
+ plot.unhighlight = unhighlight;
+ plot.triggerRedrawOverlay = triggerRedrawOverlay;
+ plot.pointOffset = function(point) {
+ return {
+ left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left, 10),
+ top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top, 10)
+ };
+ };
+ plot.shutdown = shutdown;
+ plot.resize = function () {
+ var width = placeholder.width(),
+ height = placeholder.height();
+ surface.resize(width, height);
+ overlay.resize(width, height);
+ };
+
+ // public attributes
+ plot.hooks = hooks;
+
+ // initialize
+ initPlugins(plot);
+ parseOptions(options_);
+ setupCanvases();
+ setData(data_);
+ setupGrid();
+ draw();
+ bindEvents();
+
+
+ function executeHooks(hook, args) {
+ args = [plot].concat(args);
+ for (var i = 0; i < hook.length; ++i)
+ hook[i].apply(this, args);
+ }
+
+ function initPlugins() {
+
+ // References to key classes, allowing plugins to modify them
+
+ var classes = {
+ Canvas: Canvas
+ };
+
+ for (var i = 0; i < plugins.length; ++i) {
+ var p = plugins[i];
+ p.init(plot, classes);
+ if (p.options)
+ $.extend(true, options, p.options);
+ }
+ }
+
+ function parseOptions(opts) {
+
+ $.extend(true, options, opts);
+
+ // $.extend merges arrays, rather than replacing them. When less
+ // colors are provided than the size of the default palette, we
+ // end up with those colors plus the remaining defaults, which is
+ // not expected behavior; avoid it by replacing them here.
+
+ if (opts && opts.colors) {
+ options.colors = opts.colors;
+ }
+
+ if (options.xaxis.color == null)
+ options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();
+ if (options.yaxis.color == null)
+ options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();
+
+ if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility
+ options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;
+ if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility
+ options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;
+
+ if (options.grid.borderColor == null)
+ options.grid.borderColor = options.grid.color;
+ if (options.grid.tickColor == null)
+ options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();
+
+ // Fill in defaults for axis options, including any unspecified
+ // font-spec fields, if a font-spec was provided.
+
+ // If no x/y axis options were provided, create one of each anyway,
+ // since the rest of the code assumes that they exist.
+
+ var i, axisOptions, axisCount,
+ fontDefaults = {
+ style: placeholder.css("font-style"),
+ size: Math.round(0.8 * (+placeholder.css("font-size").replace("px", "") || 13)),
+ variant: placeholder.css("font-variant"),
+ weight: placeholder.css("font-weight"),
+ family: placeholder.css("font-family")
+ };
+
+ fontDefaults.lineHeight = fontDefaults.size * 1.15;
+
+ axisCount = options.xaxes.length || 1;
+ for (i = 0; i < axisCount; ++i) {
+
+ axisOptions = options.xaxes[i];
+ if (axisOptions && !axisOptions.tickColor) {
+ axisOptions.tickColor = axisOptions.color;
+ }
+
+ axisOptions = $.extend(true, {}, options.xaxis, axisOptions);
+ options.xaxes[i] = axisOptions;
+
+ if (axisOptions.font) {
+ axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);
+ if (!axisOptions.font.color) {
+ axisOptions.font.color = axisOptions.color;
+ }
+ }
+ }
+
+ axisCount = options.yaxes.length || 1;
+ for (i = 0; i < axisCount; ++i) {
+
+ axisOptions = options.yaxes[i];
+ if (axisOptions && !axisOptions.tickColor) {
+ axisOptions.tickColor = axisOptions.color;
+ }
+
+ axisOptions = $.extend(true, {}, options.yaxis, axisOptions);
+ options.yaxes[i] = axisOptions;
+
+ if (axisOptions.font) {
+ axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);
+ if (!axisOptions.font.color) {
+ axisOptions.font.color = axisOptions.color;
+ }
+ }
+ }
+
+ // backwards compatibility, to be removed in future
+ if (options.xaxis.noTicks && options.xaxis.ticks == null)
+ options.xaxis.ticks = options.xaxis.noTicks;
+ if (options.yaxis.noTicks && options.yaxis.ticks == null)
+ options.yaxis.ticks = options.yaxis.noTicks;
+ if (options.x2axis) {
+ options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);
+ options.xaxes[1].position = "top";
+ }
+ if (options.y2axis) {
+ options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);
+ options.yaxes[1].position = "right";
+ }
+ if (options.grid.coloredAreas)
+ options.grid.markings = options.grid.coloredAreas;
+ if (options.grid.coloredAreasColor)
+ options.grid.markingsColor = options.grid.coloredAreasColor;
+ if (options.lines)
+ $.extend(true, options.series.lines, options.lines);
+ if (options.points)
+ $.extend(true, options.series.points, options.points);
+ if (options.bars)
+ $.extend(true, options.series.bars, options.bars);
+ if (options.shadowSize != null)
+ options.series.shadowSize = options.shadowSize;
+ if (options.highlightColor != null)
+ options.series.highlightColor = options.highlightColor;
+
+ // save options on axes for future reference
+ for (i = 0; i < options.xaxes.length; ++i)
+ getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];
+ for (i = 0; i < options.yaxes.length; ++i)
+ getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];
+
+ // add hooks from options
+ for (var n in hooks)
+ if (options.hooks[n] && options.hooks[n].length)
+ hooks[n] = hooks[n].concat(options.hooks[n]);
+
+ executeHooks(hooks.processOptions, [options]);
+ }
+
+ function setData(d) {
+ series = parseData(d);
+ fillInSeriesOptions();
+ processData();
+ }
+
+ function parseData(d) {
+ var res = [];
+ for (var i = 0; i < d.length; ++i) {
+ var s = $.extend(true, {}, options.series);
+
+ if (d[i].data != null) {
+ s.data = d[i].data; // move the data instead of deep-copy
+ delete d[i].data;
+
+ $.extend(true, s, d[i]);
+
+ d[i].data = s.data;
+ }
+ else
+ s.data = d[i];
+ res.push(s);
+ }
+
+ return res;
+ }
+
+ function axisNumber(obj, coord) {
+ var a = obj[coord + "axis"];
+ if (typeof a == "object") // if we got a real axis, extract number
+ a = a.n;
+ if (typeof a != "number")
+ a = 1; // default to first axis
+ return a;
+ }
+
+ function allAxes() {
+ // return flat array without annoying null entries
+ return $.grep(xaxes.concat(yaxes), function (a) { return a; });
+ }
+
+ function canvasToAxisCoords(pos) {
+ // return an object with x/y corresponding to all used axes
+ var res = {}, i, axis;
+ for (i = 0; i < xaxes.length; ++i) {
+ axis = xaxes[i];
+ if (axis && axis.used)
+ res["x" + axis.n] = axis.c2p(pos.left);
+ }
+
+ for (i = 0; i < yaxes.length; ++i) {
+ axis = yaxes[i];
+ if (axis && axis.used)
+ res["y" + axis.n] = axis.c2p(pos.top);
+ }
+
+ if (res.x1 !== undefined)
+ res.x = res.x1;
+ if (res.y1 !== undefined)
+ res.y = res.y1;
+
+ return res;
+ }
+
+ function axisToCanvasCoords(pos) {
+ // get canvas coords from the first pair of x/y found in pos
+ var res = {}, i, axis, key;
+
+ for (i = 0; i < xaxes.length; ++i) {
+ axis = xaxes[i];
+ if (axis && axis.used) {
+ key = "x" + axis.n;
+ if (pos[key] == null && axis.n == 1)
+ key = "x";
+
+ if (pos[key] != null) {
+ res.left = axis.p2c(pos[key]);
+ break;
+ }
+ }
+ }
+
+ for (i = 0; i < yaxes.length; ++i) {
+ axis = yaxes[i];
+ if (axis && axis.used) {
+ key = "y" + axis.n;
+ if (pos[key] == null && axis.n == 1)
+ key = "y";
+
+ if (pos[key] != null) {
+ res.top = axis.p2c(pos[key]);
+ break;
+ }
+ }
+ }
+
+ return res;
+ }
+
+ function getOrCreateAxis(axes, number) {
+ if (!axes[number - 1])
+ axes[number - 1] = {
+ n: number, // save the number for future reference
+ direction: axes == xaxes ? "x" : "y",
+ options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)
+ };
+
+ return axes[number - 1];
+ }
+
+ function fillInSeriesOptions() {
+
+ var neededColors = series.length, maxIndex = -1, i;
+
+ // Subtract the number of series that already have fixed colors or
+ // color indexes from the number that we still need to generate.
+
+ for (i = 0; i < series.length; ++i) {
+ var sc = series[i].color;
+ if (sc != null) {
+ neededColors--;
+ if (typeof sc == "number" && sc > maxIndex) {
+ maxIndex = sc;
+ }
+ }
+ }
+
+ // If any of the series have fixed color indexes, then we need to
+ // generate at least as many colors as the highest index.
+
+ if (neededColors <= maxIndex) {
+ neededColors = maxIndex + 1;
+ }
+
+ // Generate all the colors, using first the option colors and then
+ // variations on those colors once they're exhausted.
+
+ var c, colors = [], colorPool = options.colors,
+ colorPoolSize = colorPool.length, variation = 0;
+
+ for (i = 0; i < neededColors; i++) {
+
+ c = $.color.parse(colorPool[i % colorPoolSize] || "#666");
+
+ // Each time we exhaust the colors in the pool we adjust
+ // a scaling factor used to produce more variations on
+ // those colors. The factor alternates negative/positive
+ // to produce lighter/darker colors.
+
+ // Reset the variation after every few cycles, or else
+ // it will end up producing only white or black colors.
+
+ if (i % colorPoolSize == 0 && i) {
+ if (variation >= 0) {
+ if (variation < 0.5) {
+ variation = -variation - 0.2;
+ } else variation = 0;
+ } else variation = -variation;
+ }
+
+ colors[i] = c.scale('rgb', 1 + variation);
+ }
+
+ // Finalize the series options, filling in their colors
+
+ var colori = 0, s;
+ for (i = 0; i < series.length; ++i) {
+ s = series[i];
+
+ // assign colors
+ if (s.color == null) {
+ s.color = colors[colori].toString();
+ ++colori;
+ }
+ else if (typeof s.color == "number")
+ s.color = colors[s.color].toString();
+
+ // turn on lines automatically in case nothing is set
+ if (s.lines.show == null) {
+ var v, show = true;
+ for (v in s)
+ if (s[v] && s[v].show) {
+ show = false;
+ break;
+ }
+ if (show)
+ s.lines.show = true;
+ }
+
+ // If nothing was provided for lines.zero, default it to match
+ // lines.fill, since areas by default should extend to zero.
+
+ if (s.lines.zero == null) {
+ s.lines.zero = !!s.lines.fill;
+ }
+
+ // setup axes
+ s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x"));
+ s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y"));
+ }
+ }
+
+ function processData() {
+ var topSentry = Number.POSITIVE_INFINITY,
+ bottomSentry = Number.NEGATIVE_INFINITY,
+ fakeInfinity = Number.MAX_VALUE,
+ i, j, k, m, length,
+ s, points, ps, x, y, axis, val, f, p,
+ data, format;
+
+ function updateAxis(axis, min, max) {
+ if (min < axis.datamin && min != -fakeInfinity)
+ axis.datamin = min;
+ if (max > axis.datamax && max != fakeInfinity)
+ axis.datamax = max;
+ }
+
+ $.each(allAxes(), function (_, axis) {
+ // init axis
+ axis.datamin = topSentry;
+ axis.datamax = bottomSentry;
+ axis.used = false;
+ });
+
+ for (i = 0; i < series.length; ++i) {
+ s = series[i];
+ s.datapoints = { points: [] };
+
+ executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);
+ }
+
+ // first pass: clean and copy data
+ for (i = 0; i < series.length; ++i) {
+ s = series[i];
+
+ data = s.data;
+ format = s.datapoints.format;
+
+ if (!format) {
+ format = [];
+ // find out how to copy
+ format.push({ x: true, number: true, required: true });
+ format.push({ y: true, number: true, required: true });
+
+ if (s.bars.show || (s.lines.show && s.lines.fill)) {
+ var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));
+ format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });
+ if (s.bars.horizontal) {
+ delete format[format.length - 1].y;
+ format[format.length - 1].x = true;
+ }
+ }
+
+ s.datapoints.format = format;
+ }
+
+ if (s.datapoints.pointsize != null)
+ continue; // already filled in
+
+ s.datapoints.pointsize = format.length;
+
+ ps = s.datapoints.pointsize;
+ points = s.datapoints.points;
+
+ var insertSteps = s.lines.show && s.lines.steps;
+ s.xaxis.used = s.yaxis.used = true;
+
+ for (j = k = 0; j < data.length; ++j, k += ps) {
+ p = data[j];
+
+ var nullify = p == null;
+ if (!nullify) {
+ for (m = 0; m < ps; ++m) {
+ val = p[m];
+ f = format[m];
+
+ if (f) {
+ if (f.number && val != null) {
+ val = +val; // convert to number
+ if (isNaN(val))
+ val = null;
+ else if (val == Infinity)
+ val = fakeInfinity;
+ else if (val == -Infinity)
+ val = -fakeInfinity;
+ }
+
+ if (val == null) {
+ if (f.required)
+ nullify = true;
+
+ if (f.defaultValue != null)
+ val = f.defaultValue;
+ }
+ }
+
+ points[k + m] = val;
+ }
+ }
+
+ if (nullify) {
+ for (m = 0; m < ps; ++m) {
+ val = points[k + m];
+ if (val != null) {
+ f = format[m];
+ // extract min/max info
+ if (f.autoscale !== false) {
+ if (f.x) {
+ updateAxis(s.xaxis, val, val);
+ }
+ if (f.y) {
+ updateAxis(s.yaxis, val, val);
+ }
+ }
+ }
+ points[k + m] = null;
+ }
+ }
+ else {
+ // a little bit of line specific stuff that
+ // perhaps shouldn't be here, but lacking
+ // better means...
+ if (insertSteps && k > 0
+ && points[k - ps] != null
+ && points[k - ps] != points[k]
+ && points[k - ps + 1] != points[k + 1]) {
+ // copy the point to make room for a middle point
+ for (m = 0; m < ps; ++m)
+ points[k + ps + m] = points[k + m];
+
+ // middle point has same y
+ points[k + 1] = points[k - ps + 1];
+
+ // we've added a point, better reflect that
+ k += ps;
+ }
+ }
+ }
+ }
+
+ // give the hooks a chance to run
+ for (i = 0; i < series.length; ++i) {
+ s = series[i];
+
+ executeHooks(hooks.processDatapoints, [ s, s.datapoints]);
+ }
+
+ // second pass: find datamax/datamin for auto-scaling
+ for (i = 0; i < series.length; ++i) {
+ s = series[i];
+ points = s.datapoints.points;
+ ps = s.datapoints.pointsize;
+ format = s.datapoints.format;
+
+ var xmin = topSentry, ymin = topSentry,
+ xmax = bottomSentry, ymax = bottomSentry;
+
+ for (j = 0; j < points.length; j += ps) {
+ if (points[j] == null)
+ continue;
+
+ for (m = 0; m < ps; ++m) {
+ val = points[j + m];
+ f = format[m];
+ if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)
+ continue;
+
+ if (f.x) {
+ if (val < xmin)
+ xmin = val;
+ if (val > xmax)
+ xmax = val;
+ }
+ if (f.y) {
+ if (val < ymin)
+ ymin = val;
+ if (val > ymax)
+ ymax = val;
+ }
+ }
+ }
+
+ if (s.bars.show) {
+ // make sure we got room for the bar on the dancing floor
+ var delta;
+
+ switch (s.bars.align) {
+ case "left":
+ delta = 0;
+ break;
+ case "right":
+ delta = -s.bars.barWidth;
+ break;
+ default:
+ delta = -s.bars.barWidth / 2;
+ }
+
+ if (s.bars.horizontal) {
+ ymin += delta;
+ ymax += delta + s.bars.barWidth;
+ }
+ else {
+ xmin += delta;
+ xmax += delta + s.bars.barWidth;
+ }
+ }
+
+ updateAxis(s.xaxis, xmin, xmax);
+ updateAxis(s.yaxis, ymin, ymax);
+ }
+
+ $.each(allAxes(), function (_, axis) {
+ if (axis.datamin == topSentry)
+ axis.datamin = null;
+ if (axis.datamax == bottomSentry)
+ axis.datamax = null;
+ });
+ }
+
+ function setupCanvases() {
+
+ // Make sure the placeholder is clear of everything except canvases
+ // from a previous plot in this container that we'll try to re-use.
+
+ placeholder.css("padding", 0) // padding messes up the positioning
+ .children(":not(.flot-base,.flot-overlay)").remove();
+
+ if (placeholder.css("position") == 'static')
+ placeholder.css("position", "relative"); // for positioning labels and overlay
+
+ surface = new Canvas("flot-base", placeholder);
+ overlay = new Canvas("flot-overlay", placeholder); // overlay canvas for interactive features
+
+ ctx = surface.context;
+ octx = overlay.context;
+
+ // define which element we're listening for events on
+ eventHolder = $(overlay.element).unbind();
+
+ // If we're re-using a plot object, shut down the old one
+
+ var existing = placeholder.data("plot");
+
+ if (existing) {
+ existing.shutdown();
+ overlay.clear();
+ }
+
+ // save in case we get replotted
+ placeholder.data("plot", plot);
+ }
+
+ function bindEvents() {
+ // bind events
+ if (options.grid.hoverable) {
+ eventHolder.mousemove(onMouseMove);
+
+ // Use bind, rather than .mouseleave, because we officially
+ // still support jQuery 1.2.6, which doesn't define a shortcut
+ // for mouseenter or mouseleave. This was a bug/oversight that
+ // was fixed somewhere around 1.3.x. We can return to using
+ // .mouseleave when we drop support for 1.2.6.
+
+ eventHolder.bind("mouseleave", onMouseLeave);
+ }
+
+ if (options.grid.clickable)
+ eventHolder.click(onClick);
+
+ executeHooks(hooks.bindEvents, [eventHolder]);
+ }
+
+ function shutdown() {
+ if (redrawTimeout)
+ clearTimeout(redrawTimeout);
+
+ eventHolder.unbind("mousemove", onMouseMove);
+ eventHolder.unbind("mouseleave", onMouseLeave);
+ eventHolder.unbind("click", onClick);
+
+ executeHooks(hooks.shutdown, [eventHolder]);
+ }
+
+ function setTransformationHelpers(axis) {
+ // set helper functions on the axis, assumes plot area
+ // has been computed already
+
+ function identity(x) { return x; }
+
+ var s, m, t = axis.options.transform || identity,
+ it = axis.options.inverseTransform;
+
+ // precompute how much the axis is scaling a point
+ // in canvas space
+ if (axis.direction == "x") {
+ s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));
+ m = Math.min(t(axis.max), t(axis.min));
+ }
+ else {
+ s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));
+ s = -s;
+ m = Math.max(t(axis.max), t(axis.min));
+ }
+
+ // data point to canvas coordinate
+ if (t == identity) // slight optimization
+ axis.p2c = function (p) { return (p - m) * s; };
+ else
+ axis.p2c = function (p) { return (t(p) - m) * s; };
+ // canvas coordinate to data point
+ if (!it)
+ axis.c2p = function (c) { return m + c / s; };
+ else
+ axis.c2p = function (c) { return it(m + c / s); };
+ }
+
+ function measureTickLabels(axis) {
+
+ var opts = axis.options,
+ ticks = axis.ticks || [],
+ labelWidth = opts.labelWidth || 0,
+ labelHeight = opts.labelHeight || 0,
+ maxWidth = labelWidth || axis.direction == "x" ? Math.floor(surface.width / (ticks.length || 1)) : null,
+ legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",
+ layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,
+ font = opts.font || "flot-tick-label tickLabel";
+
+ for (var i = 0; i < ticks.length; ++i) {
+
+ var t = ticks[i];
+
+ if (!t.label)
+ continue;
+
+ var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);
+
+ labelWidth = Math.max(labelWidth, info.width);
+ labelHeight = Math.max(labelHeight, info.height);
+ }
+
+ axis.labelWidth = opts.labelWidth || labelWidth;
+ axis.labelHeight = opts.labelHeight || labelHeight;
+ }
+
+ function allocateAxisBoxFirstPhase(axis) {
+ // find the bounding box of the axis by looking at label
+ // widths/heights and ticks, make room by diminishing the
+ // plotOffset; this first phase only looks at one
+ // dimension per axis, the other dimension depends on the
+ // other axes so will have to wait
+
+ var lw = axis.labelWidth,
+ lh = axis.labelHeight,
+ pos = axis.options.position,
+ tickLength = axis.options.tickLength,
+ axisMargin = options.grid.axisMargin,
+ padding = options.grid.labelMargin,
+ all = axis.direction == "x" ? xaxes : yaxes,
+ index, innermost;
+
+ // determine axis margin
+ var samePosition = $.grep(all, function (a) {
+ return a && a.options.position == pos && a.reserveSpace;
+ });
+ if ($.inArray(axis, samePosition) == samePosition.length - 1)
+ axisMargin = 0; // outermost
+
+ // Determine whether the axis is the first (innermost) on its side
+
+ innermost = $.inArray(axis, samePosition) == 0;
+
+ // determine tick length - if we're innermost, we can use "full"
+
+ if (tickLength == null) {
+ if (innermost)
+ tickLength = "full";
+ else
+ tickLength = 5;
+ }
+
+ if (!isNaN(+tickLength))
+ padding += +tickLength;
+
+ // compute box
+ if (axis.direction == "x") {
+ lh += padding;
+
+ if (pos == "bottom") {
+ plotOffset.bottom += lh + axisMargin;
+ axis.box = { top: surface.height - plotOffset.bottom, height: lh };
+ }
+ else {
+ axis.box = { top: plotOffset.top + axisMargin, height: lh };
+ plotOffset.top += lh + axisMargin;
+ }
+ }
+ else {
+ lw += padding;
+
+ if (pos == "left") {
+ axis.box = { left: plotOffset.left + axisMargin, width: lw };
+ plotOffset.left += lw + axisMargin;
+ }
+ else {
+ plotOffset.right += lw + axisMargin;
+ axis.box = { left: surface.width - plotOffset.right, width: lw };
+ }
+ }
+
+ // save for future reference
+ axis.position = pos;
+ axis.tickLength = tickLength;
+ axis.box.padding = padding;
+ axis.innermost = innermost;
+ }
+
+ function allocateAxisBoxSecondPhase(axis) {
+ // now that all axis boxes have been placed in one
+ // dimension, we can set the remaining dimension coordinates
+ if (axis.direction == "x") {
+ axis.box.left = plotOffset.left - axis.labelWidth / 2;
+ axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;
+ }
+ else {
+ axis.box.top = plotOffset.top - axis.labelHeight / 2;
+ axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;
+ }
+ }
+
+ function adjustLayoutForThingsStickingOut() {
+ // possibly adjust plot offset to ensure everything stays
+ // inside the canvas and isn't clipped off
+
+ var minMargin = options.grid.minBorderMargin,
+ margins = { x: 0, y: 0 }, i, axis;
+
+ // check stuff from the plot (FIXME: this should just read
+ // a value from the series, otherwise it's impossible to
+ // customize)
+ if (minMargin == null) {
+ minMargin = 0;
+ for (i = 0; i < series.length; ++i)
+ minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));
+ }
+
+ margins.x = margins.y = Math.ceil(minMargin);
+
+ // check axis labels, note we don't check the actual
+ // labels but instead use the overall width/height to not
+ // jump as much around with replots
+ $.each(allAxes(), function (_, axis) {
+ var dir = axis.direction;
+ if (axis.reserveSpace)
+ margins[dir] = Math.ceil(Math.max(margins[dir], (dir == "x" ? axis.labelWidth : axis.labelHeight) / 2));
+ });
+
+ plotOffset.left = Math.max(margins.x, plotOffset.left);
+ plotOffset.right = Math.max(margins.x, plotOffset.right);
+ plotOffset.top = Math.max(margins.y, plotOffset.top);
+ plotOffset.bottom = Math.max(margins.y, plotOffset.bottom);
+ }
+
+ function setupGrid() {
+ var i, axes = allAxes(), showGrid = options.grid.show;
+
+ // Initialize the plot's offset from the edge of the canvas
+
+ for (var a in plotOffset) {
+ var margin = options.grid.margin || 0;
+ plotOffset[a] = typeof margin == "number" ? margin : margin[a] || 0;
+ }
+
+ executeHooks(hooks.processOffset, [plotOffset]);
+
+ // If the grid is visible, add its border width to the offset
+
+ for (var a in plotOffset) {
+ if(typeof(options.grid.borderWidth) == "object") {
+ plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;
+ }
+ else {
+ plotOffset[a] += showGrid ? options.grid.borderWidth : 0;
+ }
+ }
+
+ // init axes
+ $.each(axes, function (_, axis) {
+ axis.show = axis.options.show;
+ if (axis.show == null)
+ axis.show = axis.used; // by default an axis is visible if it's got data
+
+ axis.reserveSpace = axis.show || axis.options.reserveSpace;
+
+ setRange(axis);
+ });
+
+ if (showGrid) {
+
+ var allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });
+
+ $.each(allocatedAxes, function (_, axis) {
+ // make the ticks
+ setupTickGeneration(axis);
+ setTicks(axis);
+ snapRangeToTicks(axis, axis.ticks);
+ // find labelWidth/Height for axis
+ measureTickLabels(axis);
+ });
+
+ // with all dimensions calculated, we can compute the
+ // axis bounding boxes, start from the outside
+ // (reverse order)
+ for (i = allocatedAxes.length - 1; i >= 0; --i)
+ allocateAxisBoxFirstPhase(allocatedAxes[i]);
+
+ // make sure we've got enough space for things that
+ // might stick out
+ adjustLayoutForThingsStickingOut();
+
+ $.each(allocatedAxes, function (_, axis) {
+ allocateAxisBoxSecondPhase(axis);
+ });
+ }
+
+ plotWidth = surface.width - plotOffset.left - plotOffset.right;
+ plotHeight = surface.height - plotOffset.bottom - plotOffset.top;
+
+ // now we got the proper plot dimensions, we can compute the scaling
+ $.each(axes, function (_, axis) {
+ setTransformationHelpers(axis);
+ });
+
+ if (showGrid) {
+ drawAxisLabels();
+ }
+
+ insertLegend();
+ }
+
+ function setRange(axis) {
+ var opts = axis.options,
+ min = +(opts.min != null ? opts.min : axis.datamin),
+ max = +(opts.max != null ? opts.max : axis.datamax),
+ delta = max - min;
+
+ if (delta == 0.0) {
+ // degenerate case
+ var widen = max == 0 ? 1 : 0.01;
+
+ if (opts.min == null)
+ min -= widen;
+ // always widen max if we couldn't widen min to ensure we
+ // don't fall into min == max which doesn't work
+ if (opts.max == null || opts.min != null)
+ max += widen;
+ }
+ else {
+ // consider autoscaling
+ var margin = opts.autoscaleMargin;
+ if (margin != null) {
+ if (opts.min == null) {
+ min -= delta * margin;
+ // make sure we don't go below zero if all values
+ // are positive
+ if (min < 0 && axis.datamin != null && axis.datamin >= 0)
+ min = 0;
+ }
+ if (opts.max == null) {
+ max += delta * margin;
+ if (max > 0 && axis.datamax != null && axis.datamax <= 0)
+ max = 0;
+ }
+ }
+ }
+ axis.min = min;
+ axis.max = max;
+ }
+
+ function setupTickGeneration(axis) {
+ var opts = axis.options;
+
+ // estimate number of ticks
+ var noTicks;
+ if (typeof opts.ticks == "number" && opts.ticks > 0)
+ noTicks = opts.ticks;
+ else
+ // heuristic based on the model a*sqrt(x) fitted to
+ // some data points that seemed reasonable
+ noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? surface.width : surface.height);
+
+ var delta = (axis.max - axis.min) / noTicks,
+ dec = -Math.floor(Math.log(delta) / Math.LN10),
+ maxDec = opts.tickDecimals;
+
+ if (maxDec != null && dec > maxDec) {
+ dec = maxDec;
+ }
+
+ var magn = Math.pow(10, -dec),
+ norm = delta / magn, // norm is between 1.0 and 10.0
+ size;
+
+ if (norm < 1.5) {
+ size = 1;
+ } else if (norm < 3) {
+ size = 2;
+ // special case for 2.5, requires an extra decimal
+ if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
+ size = 2.5;
+ ++dec;
+ }
+ } else if (norm < 7.5) {
+ size = 5;
+ } else {
+ size = 10;
+ }
+
+ size *= magn;
+
+ if (opts.minTickSize != null && size < opts.minTickSize) {
+ size = opts.minTickSize;
+ }
+
+ axis.delta = delta;
+ axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);
+ axis.tickSize = opts.tickSize || size;
+
+ // Time mode was moved to a plug-in in 0.8, but since so many people use this
+ // we'll add an especially friendly make sure they remembered to include it.
+
+ if (opts.mode == "time" && !axis.tickGenerator) {
+ throw new Error("Time mode requires the flot.time plugin.");
+ }
+
+ // Flot supports base-10 axes; any other mode else is handled by a plug-in,
+ // like flot.time.js.
+
+ if (!axis.tickGenerator) {
+
+ axis.tickGenerator = function (axis) {
+
+ var ticks = [],
+ start = floorInBase(axis.min, axis.tickSize),
+ i = 0,
+ v = Number.NaN,
+ prev;
+
+ do {
+ prev = v;
+ v = start + i * axis.tickSize;
+ ticks.push(v);
+ ++i;
+ } while (v < axis.max && v != prev);
+ return ticks;
+ };
+
+ axis.tickFormatter = function (value, axis) {
+
+ var factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;
+ var formatted = "" + Math.round(value * factor) / factor;
+
+ // If tickDecimals was specified, ensure that we have exactly that
+ // much precision; otherwise default to the value's own precision.
+
+ if (axis.tickDecimals != null) {
+ var decimal = formatted.indexOf(".");
+ var precision = decimal == -1 ? 0 : formatted.length - decimal - 1;
+ if (precision < axis.tickDecimals) {
+ return (precision ? formatted : formatted + ".") + ("" + factor).substr(1, axis.tickDecimals - precision);
+ }
+ }
+
+ return formatted;
+ };
+ }
+
+ if ($.isFunction(opts.tickFormatter))
+ axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };
+
+ if (opts.alignTicksWithAxis != null) {
+ var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];
+ if (otherAxis && otherAxis.used && otherAxis != axis) {
+ // consider snapping min/max to outermost nice ticks
+ var niceTicks = axis.tickGenerator(axis);
+ if (niceTicks.length > 0) {
+ if (opts.min == null)
+ axis.min = Math.min(axis.min, niceTicks[0]);
+ if (opts.max == null && niceTicks.length > 1)
+ axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);
+ }
+
+ axis.tickGenerator = function (axis) {
+ // copy ticks, scaled to this axis
+ var ticks = [], v, i;
+ for (i = 0; i < otherAxis.ticks.length; ++i) {
+ v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);
+ v = axis.min + v * (axis.max - axis.min);
+ ticks.push(v);
+ }
+ return ticks;
+ };
+
+ // we might need an extra decimal since forced
+ // ticks don't necessarily fit naturally
+ if (!axis.mode && opts.tickDecimals == null) {
+ var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),
+ ts = axis.tickGenerator(axis);
+
+ // only proceed if the tick interval rounded
+ // with an extra decimal doesn't give us a
+ // zero at end
+ if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))
+ axis.tickDecimals = extraDec;
+ }
+ }
+ }
+ }
+
+ function setTicks(axis) {
+ var oticks = axis.options.ticks, ticks = [];
+ if (oticks == null || (typeof oticks == "number" && oticks > 0))
+ ticks = axis.tickGenerator(axis);
+ else if (oticks) {
+ if ($.isFunction(oticks))
+ // generate the ticks
+ ticks = oticks(axis);
+ else
+ ticks = oticks;
+ }
+
+ // clean up/labelify the supplied ticks, copy them over
+ var i, v;
+ axis.ticks = [];
+ for (i = 0; i < ticks.length; ++i) {
+ var label = null;
+ var t = ticks[i];
+ if (typeof t == "object") {
+ v = +t[0];
+ if (t.length > 1)
+ label = t[1];
+ }
+ else
+ v = +t;
+ if (label == null)
+ label = axis.tickFormatter(v, axis);
+ if (!isNaN(v))
+ axis.ticks.push({ v: v, label: label });
+ }
+ }
+
+ function snapRangeToTicks(axis, ticks) {
+ if (axis.options.autoscaleMargin && ticks.length > 0) {
+ // snap to ticks
+ if (axis.options.min == null)
+ axis.min = Math.min(axis.min, ticks[0].v);
+ if (axis.options.max == null && ticks.length > 1)
+ axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);
+ }
+ }
+
+ function draw() {
+
+ surface.clear();
+
+ executeHooks(hooks.drawBackground, [ctx]);
+
+ var grid = options.grid;
+
+ // draw background, if any
+ if (grid.show && grid.backgroundColor)
+ drawBackground();
+
+ if (grid.show && !grid.aboveData) {
+ drawGrid();
+ }
+
+ for (var i = 0; i < series.length; ++i) {
+ executeHooks(hooks.drawSeries, [ctx, series[i]]);
+ drawSeries(series[i]);
+ }
+
+ executeHooks(hooks.draw, [ctx]);
+
+ if (grid.show && grid.aboveData) {
+ drawGrid();
+ }
+
+ surface.render();
+
+ // A draw implies that either the axes or data have changed, so we
+ // should probably update the overlay highlights as well.
+
+ triggerRedrawOverlay();
+ }
+
+ function extractRange(ranges, coord) {
+ var axis, from, to, key, axes = allAxes();
+
+ for (var i = 0; i < axes.length; ++i) {
+ axis = axes[i];
+ if (axis.direction == coord) {
+ key = coord + axis.n + "axis";
+ if (!ranges[key] && axis.n == 1)
+ key = coord + "axis"; // support x1axis as xaxis
+ if (ranges[key]) {
+ from = ranges[key].from;
+ to = ranges[key].to;
+ break;
+ }
+ }
+ }
+
+ // backwards-compat stuff - to be removed in future
+ if (!ranges[key]) {
+ axis = coord == "x" ? xaxes[0] : yaxes[0];
+ from = ranges[coord + "1"];
+ to = ranges[coord + "2"];
+ }
+
+ // auto-reverse as an added bonus
+ if (from != null && to != null && from > to) {
+ var tmp = from;
+ from = to;
+ to = tmp;
+ }
+
+ return { from: from, to: to, axis: axis };
+ }
+
+ function drawBackground() {
+ ctx.save();
+ ctx.translate(plotOffset.left, plotOffset.top);
+
+ ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");
+ ctx.fillRect(0, 0, plotWidth, plotHeight);
+ ctx.restore();
+ }
+
+ function drawGrid() {
+ var i, axes, bw, bc;
+
+ ctx.save();
+ ctx.translate(plotOffset.left, plotOffset.top);
+
+ // draw markings
+ var markings = options.grid.markings;
+ if (markings) {
+ if ($.isFunction(markings)) {
+ axes = plot.getAxes();
+ // xmin etc. is backwards compatibility, to be
+ // removed in the future
+ axes.xmin = axes.xaxis.min;
+ axes.xmax = axes.xaxis.max;
+ axes.ymin = axes.yaxis.min;
+ axes.ymax = axes.yaxis.max;
+
+ markings = markings(axes);
+ }
+
+ for (i = 0; i < markings.length; ++i) {
+ var m = markings[i],
+ xrange = extractRange(m, "x"),
+ yrange = extractRange(m, "y");
+
+ // fill in missing
+ if (xrange.from == null)
+ xrange.from = xrange.axis.min;
+ if (xrange.to == null)
+ xrange.to = xrange.axis.max;
+ if (yrange.from == null)
+ yrange.from = yrange.axis.min;
+ if (yrange.to == null)
+ yrange.to = yrange.axis.max;
+
+ // clip
+ if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||
+ yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)
+ continue;
+
+ xrange.from = Math.max(xrange.from, xrange.axis.min);
+ xrange.to = Math.min(xrange.to, xrange.axis.max);
+ yrange.from = Math.max(yrange.from, yrange.axis.min);
+ yrange.to = Math.min(yrange.to, yrange.axis.max);
+
+ if (xrange.from == xrange.to && yrange.from == yrange.to)
+ continue;
+
+ // then draw
+ xrange.from = xrange.axis.p2c(xrange.from);
+ xrange.to = xrange.axis.p2c(xrange.to);
+ yrange.from = yrange.axis.p2c(yrange.from);
+ yrange.to = yrange.axis.p2c(yrange.to);
+
+ if (xrange.from == xrange.to || yrange.from == yrange.to) {
+ // draw line
+ ctx.beginPath();
+ ctx.strokeStyle = m.color || options.grid.markingsColor;
+ ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;
+ ctx.moveTo(xrange.from, yrange.from);
+ ctx.lineTo(xrange.to, yrange.to);
+ ctx.stroke();
+ }
+ else {
+ // fill area
+ ctx.fillStyle = m.color || options.grid.markingsColor;
+ ctx.fillRect(xrange.from, yrange.to,
+ xrange.to - xrange.from,
+ yrange.from - yrange.to);
+ }
+ }
+ }
+
+ // draw the ticks
+ axes = allAxes();
+ bw = options.grid.borderWidth;
+
+ for (var j = 0; j < axes.length; ++j) {
+ var axis = axes[j], box = axis.box,
+ t = axis.tickLength, x, y, xoff, yoff;
+ if (!axis.show || axis.ticks.length == 0)
+ continue;
+
+ ctx.lineWidth = 1;
+
+ // find the edges
+ if (axis.direction == "x") {
+ x = 0;
+ if (t == "full")
+ y = (axis.position == "top" ? 0 : plotHeight);
+ else
+ y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0);
+ }
+ else {
+ y = 0;
+ if (t == "full")
+ x = (axis.position == "left" ? 0 : plotWidth);
+ else
+ x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0);
+ }
+
+ // draw tick bar
+ if (!axis.innermost) {
+ ctx.strokeStyle = axis.options.color;
+ ctx.beginPath();
+ xoff = yoff = 0;
+ if (axis.direction == "x")
+ xoff = plotWidth + 1;
+ else
+ yoff = plotHeight + 1;
+
+ if (ctx.lineWidth == 1) {
+ if (axis.direction == "x") {
+ y = Math.floor(y) + 0.5;
+ } else {
+ x = Math.floor(x) + 0.5;
+ }
+ }
+
+ ctx.moveTo(x, y);
+ ctx.lineTo(x + xoff, y + yoff);
+ ctx.stroke();
+ }
+
+ // draw ticks
+
+ ctx.strokeStyle = axis.options.tickColor;
+
+ ctx.beginPath();
+ for (i = 0; i < axis.ticks.length; ++i) {
+ var v = axis.ticks[i].v;
+
+ xoff = yoff = 0;
+
+ if (isNaN(v) || v < axis.min || v > axis.max
+ // skip those lying on the axes if we got a border
+ || (t == "full"
+ && ((typeof bw == "object" && bw[axis.position] > 0) || bw > 0)
+ && (v == axis.min || v == axis.max)))
+ continue;
+
+ if (axis.direction == "x") {
+ x = axis.p2c(v);
+ yoff = t == "full" ? -plotHeight : t;
+
+ if (axis.position == "top")
+ yoff = -yoff;
+ }
+ else {
+ y = axis.p2c(v);
+ xoff = t == "full" ? -plotWidth : t;
+
+ if (axis.position == "left")
+ xoff = -xoff;
+ }
+
+ if (ctx.lineWidth == 1) {
+ if (axis.direction == "x")
+ x = Math.floor(x) + 0.5;
+ else
+ y = Math.floor(y) + 0.5;
+ }
+
+ ctx.moveTo(x, y);
+ ctx.lineTo(x + xoff, y + yoff);
+ }
+
+ ctx.stroke();
+ }
+
+
+ // draw border
+ if (bw) {
+ // If either borderWidth or borderColor is an object, then draw the border
+ // line by line instead of as one rectangle
+ bc = options.grid.borderColor;
+ if(typeof bw == "object" || typeof bc == "object") {
+ if (typeof bw !== "object") {
+ bw = {top: bw, right: bw, bottom: bw, left: bw};
+ }
+ if (typeof bc !== "object") {
+ bc = {top: bc, right: bc, bottom: bc, left: bc};
+ }
+
+ if (bw.top > 0) {
+ ctx.strokeStyle = bc.top;
+ ctx.lineWidth = bw.top;
+ ctx.beginPath();
+ ctx.moveTo(0 - bw.left, 0 - bw.top/2);
+ ctx.lineTo(plotWidth, 0 - bw.top/2);
+ ctx.stroke();
+ }
+
+ if (bw.right > 0) {
+ ctx.strokeStyle = bc.right;
+ ctx.lineWidth = bw.right;
+ ctx.beginPath();
+ ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);
+ ctx.lineTo(plotWidth + bw.right / 2, plotHeight);
+ ctx.stroke();
+ }
+
+ if (bw.bottom > 0) {
+ ctx.strokeStyle = bc.bottom;
+ ctx.lineWidth = bw.bottom;
+ ctx.beginPath();
+ ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);
+ ctx.lineTo(0, plotHeight + bw.bottom / 2);
+ ctx.stroke();
+ }
+
+ if (bw.left > 0) {
+ ctx.strokeStyle = bc.left;
+ ctx.lineWidth = bw.left;
+ ctx.beginPath();
+ ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);
+ ctx.lineTo(0- bw.left/2, 0);
+ ctx.stroke();
+ }
+ }
+ else {
+ ctx.lineWidth = bw;
+ ctx.strokeStyle = options.grid.borderColor;
+ ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);
+ }
+ }
+
+ ctx.restore();
+ }
+
+ function drawAxisLabels() {
+
+ $.each(allAxes(), function (_, axis) {
+ var box = axis.box,
+ legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",
+ layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,
+ font = axis.options.font || "flot-tick-label tickLabel",
+ tick, x, y, halign, valign;
+
+ // Remove text before checking for axis.show and ticks.length;
+ // otherwise plugins, like flot-tickrotor, that draw their own
+ // tick labels will end up with both theirs and the defaults.
+
+ surface.removeText(layer);
+
+ if (!axis.show || axis.ticks.length == 0)
+ return;
+
+ for (var i = 0; i < axis.ticks.length; ++i) {
+
+ tick = axis.ticks[i];
+ if (!tick.label || tick.v < axis.min || tick.v > axis.max)
+ continue;
+
+ if (axis.direction == "x") {
+ halign = "center";
+ x = plotOffset.left + axis.p2c(tick.v);
+ if (axis.position == "bottom") {
+ y = box.top + box.padding;
+ } else {
+ y = box.top + box.height - box.padding;
+ valign = "bottom";
+ }
+ } else {
+ valign = "middle";
+ y = plotOffset.top + axis.p2c(tick.v);
+ if (axis.position == "left") {
+ x = box.left + box.width - box.padding;
+ halign = "right";
+ } else {
+ x = box.left + box.padding;
+ }
+ }
+
+ surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);
+ }
+ });
+ }
+
+ function drawSeries(series) {
+ if (series.lines.show)
+ drawSeriesLines(series);
+ if (series.bars.show)
+ drawSeriesBars(series);
+ if (series.points.show)
+ drawSeriesPoints(series);
+ }
+
+ function drawSeriesLines(series) {
+ function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {
+ var points = datapoints.points,
+ ps = datapoints.pointsize,
+ prevx = null, prevy = null;
+
+ ctx.beginPath();
+ for (var i = ps; i < points.length; i += ps) {
+ var x1 = points[i - ps], y1 = points[i - ps + 1],
+ x2 = points[i], y2 = points[i + 1];
+
+ if (x1 == null || x2 == null)
+ continue;
+
+ // clip with ymin
+ if (y1 <= y2 && y1 < axisy.min) {
+ if (y2 < axisy.min)
+ continue; // line segment is outside
+ // compute new intersection point
+ x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = axisy.min;
+ }
+ else if (y2 <= y1 && y2 < axisy.min) {
+ if (y1 < axisy.min)
+ continue;
+ x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = axisy.min;
+ }
+
+ // clip with ymax
+ if (y1 >= y2 && y1 > axisy.max) {
+ if (y2 > axisy.max)
+ continue;
+ x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = axisy.max;
+ }
+ else if (y2 >= y1 && y2 > axisy.max) {
+ if (y1 > axisy.max)
+ continue;
+ x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = axisy.max;
+ }
+
+ // clip with xmin
+ if (x1 <= x2 && x1 < axisx.min) {
+ if (x2 < axisx.min)
+ continue;
+ y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = axisx.min;
+ }
+ else if (x2 <= x1 && x2 < axisx.min) {
+ if (x1 < axisx.min)
+ continue;
+ y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = axisx.min;
+ }
+
+ // clip with xmax
+ if (x1 >= x2 && x1 > axisx.max) {
+ if (x2 > axisx.max)
+ continue;
+ y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = axisx.max;
+ }
+ else if (x2 >= x1 && x2 > axisx.max) {
+ if (x1 > axisx.max)
+ continue;
+ y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = axisx.max;
+ }
+
+ if (x1 != prevx || y1 != prevy)
+ ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);
+
+ prevx = x2;
+ prevy = y2;
+ ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);
+ }
+ ctx.stroke();
+ }
+
+ function plotLineArea(datapoints, axisx, axisy) {
+ var points = datapoints.points,
+ ps = datapoints.pointsize,
+ bottom = Math.min(Math.max(0, axisy.min), axisy.max),
+ i = 0, top, areaOpen = false,
+ ypos = 1, segmentStart = 0, segmentEnd = 0;
+
+ // we process each segment in two turns, first forward
+ // direction to sketch out top, then once we hit the
+ // end we go backwards to sketch the bottom
+ while (true) {
+ if (ps > 0 && i > points.length + ps)
+ break;
+
+ i += ps; // ps is negative if going backwards
+
+ var x1 = points[i - ps],
+ y1 = points[i - ps + ypos],
+ x2 = points[i], y2 = points[i + ypos];
+
+ if (areaOpen) {
+ if (ps > 0 && x1 != null && x2 == null) {
+ // at turning point
+ segmentEnd = i;
+ ps = -ps;
+ ypos = 2;
+ continue;
+ }
+
+ if (ps < 0 && i == segmentStart + ps) {
+ // done with the reverse sweep
+ ctx.fill();
+ areaOpen = false;
+ ps = -ps;
+ ypos = 1;
+ i = segmentStart = segmentEnd + ps;
+ continue;
+ }
+ }
+
+ if (x1 == null || x2 == null)
+ continue;
+
+ // clip x values
+
+ // clip with xmin
+ if (x1 <= x2 && x1 < axisx.min) {
+ if (x2 < axisx.min)
+ continue;
+ y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = axisx.min;
+ }
+ else if (x2 <= x1 && x2 < axisx.min) {
+ if (x1 < axisx.min)
+ continue;
+ y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = axisx.min;
+ }
+
+ // clip with xmax
+ if (x1 >= x2 && x1 > axisx.max) {
+ if (x2 > axisx.max)
+ continue;
+ y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = axisx.max;
+ }
+ else if (x2 >= x1 && x2 > axisx.max) {
+ if (x1 > axisx.max)
+ continue;
+ y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = axisx.max;
+ }
+
+ if (!areaOpen) {
+ // open area
+ ctx.beginPath();
+ ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
+ areaOpen = true;
+ }
+
+ // now first check the case where both is outside
+ if (y1 >= axisy.max && y2 >= axisy.max) {
+ ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
+ continue;
+ }
+ else if (y1 <= axisy.min && y2 <= axisy.min) {
+ ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
+ continue;
+ }
+
+ // else it's a bit more complicated, there might
+ // be a flat maxed out rectangle first, then a
+ // triangular cutout or reverse; to find these
+ // keep track of the current x values
+ var x1old = x1, x2old = x2;
+
+ // clip the y values, without shortcutting, we
+ // go through all cases in turn
+
+ // clip with ymin
+ if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {
+ x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = axisy.min;
+ }
+ else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {
+ x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = axisy.min;
+ }
+
+ // clip with ymax
+ if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {
+ x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = axisy.max;
+ }
+ else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {
+ x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = axisy.max;
+ }
+
+ // if the x value was changed we got a rectangle
+ // to fill
+ if (x1 != x1old) {
+ ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));
+ // it goes to (x1, y1), but we fill that below
+ }
+
+ // fill triangular section, this sometimes result
+ // in redundant points if (x1, y1) hasn't changed
+ // from previous line to, but we just ignore that
+ ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));
+
+ // fill the other rectangle if it's there
+ if (x2 != x2old) {
+ ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));
+ ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));
+ }
+ }
+ }
+
+ ctx.save();
+ ctx.translate(plotOffset.left, plotOffset.top);
+ ctx.lineJoin = "round";
+
+ var lw = series.lines.lineWidth,
+ sw = series.shadowSize;
+ // FIXME: consider another form of shadow when filling is turned on
+ if (lw > 0 && sw > 0) {
+ // draw shadow as a thick and thin line with transparency
+ ctx.lineWidth = sw;
+ ctx.strokeStyle = "rgba(0,0,0,0.1)";
+ // position shadow at angle from the mid of line
+ var angle = Math.PI/18;
+ plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);
+ ctx.lineWidth = sw/2;
+ plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);
+ }
+
+ ctx.lineWidth = lw;
+ ctx.strokeStyle = series.color;
+ var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);
+ if (fillStyle) {
+ ctx.fillStyle = fillStyle;
+ plotLineArea(series.datapoints, series.xaxis, series.yaxis);
+ }
+
+ if (lw > 0)
+ plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);
+ ctx.restore();
+ }
+
+ function drawSeriesPoints(series) {
+ function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {
+ var points = datapoints.points, ps = datapoints.pointsize;
+
+ for (var i = 0; i < points.length; i += ps) {
+ var x = points[i], y = points[i + 1];
+ if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
+ continue;
+
+ ctx.beginPath();
+ x = axisx.p2c(x);
+ y = axisy.p2c(y) + offset;
+ if (symbol == "circle")
+ ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);
+ else
+ symbol(ctx, x, y, radius, shadow);
+ ctx.closePath();
+
+ if (fillStyle) {
+ ctx.fillStyle = fillStyle;
+ ctx.fill();
+ }
+ ctx.stroke();
+ }
+ }
+
+ ctx.save();
+ ctx.translate(plotOffset.left, plotOffset.top);
+
+ var lw = series.points.lineWidth,
+ sw = series.shadowSize,
+ radius = series.points.radius,
+ symbol = series.points.symbol;
+
+ // If the user sets the line width to 0, we change it to a very
+ // small value. A line width of 0 seems to force the default of 1.
+ // Doing the conditional here allows the shadow setting to still be
+ // optional even with a lineWidth of 0.
+
+ if( lw == 0 )
+ lw = 0.0001;
+
+ if (lw > 0 && sw > 0) {
+ // draw shadow in two steps
+ var w = sw / 2;
+ ctx.lineWidth = w;
+ ctx.strokeStyle = "rgba(0,0,0,0.1)";
+ plotPoints(series.datapoints, radius, null, w + w/2, true,
+ series.xaxis, series.yaxis, symbol);
+
+ ctx.strokeStyle = "rgba(0,0,0,0.2)";
+ plotPoints(series.datapoints, radius, null, w/2, true,
+ series.xaxis, series.yaxis, symbol);
+ }
+
+ ctx.lineWidth = lw;
+ ctx.strokeStyle = series.color;
+ plotPoints(series.datapoints, radius,
+ getFillStyle(series.points, series.color), 0, false,
+ series.xaxis, series.yaxis, symbol);
+ ctx.restore();
+ }
+
+ function drawBar(x, y, b, barLeft, barRight, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {
+ var left, right, bottom, top,
+ drawLeft, drawRight, drawTop, drawBottom,
+ tmp;
+
+ // in horizontal mode, we start the bar from the left
+ // instead of from the bottom so it appears to be
+ // horizontal rather than vertical
+ if (horizontal) {
+ drawBottom = drawRight = drawTop = true;
+ drawLeft = false;
+ left = b;
+ right = x;
+ top = y + barLeft;
+ bottom = y + barRight;
+
+ // account for negative bars
+ if (right < left) {
+ tmp = right;
+ right = left;
+ left = tmp;
+ drawLeft = true;
+ drawRight = false;
+ }
+ }
+ else {
+ drawLeft = drawRight = drawTop = true;
+ drawBottom = false;
+ left = x + barLeft;
+ right = x + barRight;
+ bottom = b;
+ top = y;
+
+ // account for negative bars
+ if (top < bottom) {
+ tmp = top;
+ top = bottom;
+ bottom = tmp;
+ drawBottom = true;
+ drawTop = false;
+ }
+ }
+
+ // clip
+ if (right < axisx.min || left > axisx.max ||
+ top < axisy.min || bottom > axisy.max)
+ return;
+
+ if (left < axisx.min) {
+ left = axisx.min;
+ drawLeft = false;
+ }
+
+ if (right > axisx.max) {
+ right = axisx.max;
+ drawRight = false;
+ }
+
+ if (bottom < axisy.min) {
+ bottom = axisy.min;
+ drawBottom = false;
+ }
+
+ if (top > axisy.max) {
+ top = axisy.max;
+ drawTop = false;
+ }
+
+ left = axisx.p2c(left);
+ bottom = axisy.p2c(bottom);
+ right = axisx.p2c(right);
+ top = axisy.p2c(top);
+
+ // fill the bar
+ if (fillStyleCallback) {
+ c.fillStyle = fillStyleCallback(bottom, top);
+ c.fillRect(left, top, right - left, bottom - top)
+ }
+
+ // draw outline
+ if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {
+ c.beginPath();
+
+ // FIXME: inline moveTo is buggy with excanvas
+ c.moveTo(left, bottom);
+ if (drawLeft)
+ c.lineTo(left, top);
+ else
+ c.moveTo(left, top);
+ if (drawTop)
+ c.lineTo(right, top);
+ else
+ c.moveTo(right, top);
+ if (drawRight)
+ c.lineTo(right, bottom);
+ else
+ c.moveTo(right, bottom);
+ if (drawBottom)
+ c.lineTo(left, bottom);
+ else
+ c.moveTo(left, bottom);
+ c.stroke();
+ }
+ }
+
+ function drawSeriesBars(series) {
+ function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {
+ var points = datapoints.points, ps = datapoints.pointsize;
+
+ for (var i = 0; i < points.length; i += ps) {
+ if (points[i] == null)
+ continue;
+ drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);
+ }
+ }
+
+ ctx.save();
+ ctx.translate(plotOffset.left, plotOffset.top);
+
+ // FIXME: figure out a way to add shadows (for instance along the right edge)
+ ctx.lineWidth = series.bars.lineWidth;
+ ctx.strokeStyle = series.color;
+
+ var barLeft;
+
+ switch (series.bars.align) {
+ case "left":
+ barLeft = 0;
+ break;
+ case "right":
+ barLeft = -series.bars.barWidth;
+ break;
+ default:
+ barLeft = -series.bars.barWidth / 2;
+ }
+
+ var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
+ plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);
+ ctx.restore();
+ }
+
+ function getFillStyle(filloptions, seriesColor, bottom, top) {
+ var fill = filloptions.fill;
+ if (!fill)
+ return null;
+
+ if (filloptions.fillColor)
+ return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);
+
+ var c = $.color.parse(seriesColor);
+ c.a = typeof fill == "number" ? fill : 0.4;
+ c.normalize();
+ return c.toString();
+ }
+
+ function insertLegend() {
+
+ placeholder.find(".legend").remove();
+
+ if (!options.legend.show)
+ return;
+
+ var fragments = [], entries = [], rowStarted = false,
+ lf = options.legend.labelFormatter, s, label;
+
+ // Build a list of legend entries, with each having a label and a color
+
+ for (var i = 0; i < series.length; ++i) {
+ s = series[i];
+ if (s.label) {
+ label = lf ? lf(s.label, s) : s.label;
+ if (label) {
+ entries.push({
+ label: label,
+ color: s.color
+ });
+ }
+ }
+ }
+
+ // Sort the legend using either the default or a custom comparator
+
+ if (options.legend.sorted) {
+ if ($.isFunction(options.legend.sorted)) {
+ entries.sort(options.legend.sorted);
+ } else if (options.legend.sorted == "reverse") {
+ entries.reverse();
+ } else {
+ var ascending = options.legend.sorted != "descending";
+ entries.sort(function(a, b) {
+ return a.label == b.label ? 0 : (
+ (a.label < b.label) != ascending ? 1 : -1 // Logical XOR
+ );
+ });
+ }
+ }
+
+ // Generate markup for the list of entries, in their final order
+
+ for (var i = 0; i < entries.length; ++i) {
+
+ var entry = entries[i];
+
+ if (i % options.legend.noColumns == 0) {
+ if (rowStarted)
+ fragments.push('</tr>');
+ fragments.push('<tr>');
+ rowStarted = true;
+ }
+
+ fragments.push(
+ '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden"></div></div></td>' +
+ '<td class="legendLabel">' + entry.label + '</td>'
+ );
+ }
+
+ if (rowStarted)
+ fragments.push('</tr>');
+
+ if (fragments.length == 0)
+ return;
+
+ var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';
+ if (options.legend.container != null)
+ $(options.legend.container).html(table);
+ else {
+ var pos = "",
+ p = options.legend.position,
+ m = options.legend.margin;
+ if (m[0] == null)
+ m = [m, m];
+ if (p.charAt(0) == "n")
+ pos += 'top:' + (m[1] + plotOffset.top) + 'px;';
+ else if (p.charAt(0) == "s")
+ pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';
+ if (p.charAt(1) == "e")
+ pos += 'right:' + (m[0] + plotOffset.right) + 'px;';
+ else if (p.charAt(1) == "w")
+ pos += 'left:' + (m[0] + plotOffset.left) + 'px;';
+ var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);
+ if (options.legend.backgroundOpacity != 0.0) {
+ // put in the transparent background
+ // separately to avoid blended labels and
+ // label boxes
+ var c = options.legend.backgroundColor;
+ if (c == null) {
+ c = options.grid.backgroundColor;
+ if (c && typeof c == "string")
+ c = $.color.parse(c);
+ else
+ c = $.color.extract(legend, 'background-color');
+ c.a = 1;
+ c = c.toString();
+ }
+ var div = legend.children();
+ $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
+ }
+ }
+ }
+
+
+ // interactive features
+
+ var highlights = [],
+ redrawTimeout = null;
+
+ // returns the data item the mouse is over, or null if none is found
+ function findNearbyItem(mouseX, mouseY, seriesFilter) {
+ var maxDistance = options.grid.mouseActiveRadius,
+ smallestDistance = maxDistance * maxDistance + 1,
+ item = null, foundPoint = false, i, j, ps;
+
+ for (i = series.length - 1; i >= 0; --i) {
+ if (!seriesFilter(series[i]))
+ continue;
+
+ var s = series[i],
+ axisx = s.xaxis,
+ axisy = s.yaxis,
+ points = s.datapoints.points,
+ mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster
+ my = axisy.c2p(mouseY),
+ maxx = maxDistance / axisx.scale,
+ maxy = maxDistance / axisy.scale;
+
+ ps = s.datapoints.pointsize;
+ // with inverse transforms, we can't use the maxx/maxy
+ // optimization, sadly
+ if (axisx.options.inverseTransform)
+ maxx = Number.MAX_VALUE;
+ if (axisy.options.inverseTransform)
+ maxy = Number.MAX_VALUE;
+
+ if (s.lines.show || s.points.show) {
+ for (j = 0; j < points.length; j += ps) {
+ var x = points[j], y = points[j + 1];
+ if (x == null)
+ continue;
+
+ // For points and lines, the cursor must be within a
+ // certain distance to the data point
+ if (x - mx > maxx || x - mx < -maxx ||
+ y - my > maxy || y - my < -maxy)
+ continue;
+
+ // We have to calculate distances in pixels, not in
+ // data units, because the scales of the axes may be different
+ var dx = Math.abs(axisx.p2c(x) - mouseX),
+ dy = Math.abs(axisy.p2c(y) - mouseY),
+ dist = dx * dx + dy * dy; // we save the sqrt
+
+ // use <= to ensure last point takes precedence
+ // (last generally means on top of)
+ if (dist < smallestDistance) {
+ smallestDistance = dist;
+ item = [i, j / ps];
+ }
+ }
+ }
+
+ if (s.bars.show && !item) { // no other point can be nearby
+
+ var barLeft, barRight;
+
+ switch (s.bars.align) {
+ case "left":
+ barLeft = 0;
+ break;
+ case "right":
+ barLeft = -s.bars.barWidth;
+ break;
+ default:
+ barLeft = -s.bars.barWidth / 2;
+ }
+
+ barRight = barLeft + s.bars.barWidth;
+
+ for (j = 0; j < points.length; j += ps) {
+ var x = points[j], y = points[j + 1], b = points[j + 2];
+ if (x == null)
+ continue;
+
+ // for a bar graph, the cursor must be inside the bar
+ if (series[i].bars.horizontal ?
+ (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&
+ my >= y + barLeft && my <= y + barRight) :
+ (mx >= x + barLeft && mx <= x + barRight &&
+ my >= Math.min(b, y) && my <= Math.max(b, y)))
+ item = [i, j / ps];
+ }
+ }
+ }
+
+ if (item) {
+ i = item[0];
+ j = item[1];
+ ps = series[i].datapoints.pointsize;
+
+ return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),
+ dataIndex: j,
+ series: series[i],
+ seriesIndex: i };
+ }
+
+ return null;
+ }
+
+ function onMouseMove(e) {
+ if (options.grid.hoverable)
+ triggerClickHoverEvent("plothover", e,
+ function (s) { return s["hoverable"] != false; });
+ }
+
+ function onMouseLeave(e) {
+ if (options.grid.hoverable)
+ triggerClickHoverEvent("plothover", e,
+ function (s) { return false; });
+ }
+
+ function onClick(e) {
+ triggerClickHoverEvent("plotclick", e,
+ function (s) { return s["clickable"] != false; });
+ }
+
+ // trigger click or hover event (they send the same parameters
+ // so we share their code)
+ function triggerClickHoverEvent(eventname, event, seriesFilter) {
+ var offset = eventHolder.offset(),
+ canvasX = event.pageX - offset.left - plotOffset.left,
+ canvasY = event.pageY - offset.top - plotOffset.top,
+ pos = canvasToAxisCoords({ left: canvasX, top: canvasY });
+
+ pos.pageX = event.pageX;
+ pos.pageY = event.pageY;
+
+ var item = findNearbyItem(canvasX, canvasY, seriesFilter);
+
+ if (item) {
+ // fill in mouse pos for any listeners out there
+ item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);
+ item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);
+ }
+
+ if (options.grid.autoHighlight) {
+ // clear auto-highlights
+ for (var i = 0; i < highlights.length; ++i) {
+ var h = highlights[i];
+ if (h.auto == eventname &&
+ !(item && h.series == item.series &&
+ h.point[0] == item.datapoint[0] &&
+ h.point[1] == item.datapoint[1]))
+ unhighlight(h.series, h.point);
+ }
+
+ if (item)
+ highlight(item.series, item.datapoint, eventname);
+ }
+
+ placeholder.trigger(eventname, [ pos, item ]);
+ }
+
+ function triggerRedrawOverlay() {
+ var t = options.interaction.redrawOverlayInterval;
+ if (t == -1) { // skip event queue
+ drawOverlay();
+ return;
+ }
+
+ if (!redrawTimeout)
+ redrawTimeout = setTimeout(drawOverlay, t);
+ }
+
+ function drawOverlay() {
+ redrawTimeout = null;
+
+ // draw highlights
+ octx.save();
+ overlay.clear();
+ octx.translate(plotOffset.left, plotOffset.top);
+
+ var i, hi;
+ for (i = 0; i < highlights.length; ++i) {
+ hi = highlights[i];
+
+ if (hi.series.bars.show)
+ drawBarHighlight(hi.series, hi.point);
+ else
+ drawPointHighlight(hi.series, hi.point);
+ }
+ octx.restore();
+
+ executeHooks(hooks.drawOverlay, [octx]);
+ }
+
+ function highlight(s, point, auto) {
+ if (typeof s == "number")
+ s = series[s];
+
+ if (typeof point == "number") {
+ var ps = s.datapoints.pointsize;
+ point = s.datapoints.points.slice(ps * point, ps * (point + 1));
+ }
+
+ var i = indexOfHighlight(s, point);
+ if (i == -1) {
+ highlights.push({ series: s, point: point, auto: auto });
+
+ triggerRedrawOverlay();
+ }
+ else if (!auto)
+ highlights[i].auto = false;
+ }
+
+ function unhighlight(s, point) {
+ if (s == null && point == null) {
+ highlights = [];
+ triggerRedrawOverlay();
+ return;
+ }
+
+ if (typeof s == "number")
+ s = series[s];
+
+ if (typeof point == "number") {
+ var ps = s.datapoints.pointsize;
+ point = s.datapoints.points.slice(ps * point, ps * (point + 1));
+ }
+
+ var i = indexOfHighlight(s, point);
+ if (i != -1) {
+ highlights.splice(i, 1);
+
+ triggerRedrawOverlay();
+ }
+ }
+
+ function indexOfHighlight(s, p) {
+ for (var i = 0; i < highlights.length; ++i) {
+ var h = highlights[i];
+ if (h.series == s && h.point[0] == p[0]
+ && h.point[1] == p[1])
+ return i;
+ }
+ return -1;
+ }
+
+ function drawPointHighlight(series, point) {
+ var x = point[0], y = point[1],
+ axisx = series.xaxis, axisy = series.yaxis,
+ highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();
+
+ if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
+ return;
+
+ var pointRadius = series.points.radius + series.points.lineWidth / 2;
+ octx.lineWidth = pointRadius;
+ octx.strokeStyle = highlightColor;
+ var radius = 1.5 * pointRadius;
+ x = axisx.p2c(x);
+ y = axisy.p2c(y);
+
+ octx.beginPath();
+ if (series.points.symbol == "circle")
+ octx.arc(x, y, radius, 0, 2 * Math.PI, false);
+ else
+ series.points.symbol(octx, x, y, radius, false);
+ octx.closePath();
+ octx.stroke();
+ }
+
+ function drawBarHighlight(series, point) {
+ var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),
+ fillStyle = highlightColor,
+ barLeft;
+
+ switch (series.bars.align) {
+ case "left":
+ barLeft = 0;
+ break;
+ case "right":
+ barLeft = -series.bars.barWidth;
+ break;
+ default:
+ barLeft = -series.bars.barWidth / 2;
+ }
+
+ octx.lineWidth = series.bars.lineWidth;
+ octx.strokeStyle = highlightColor;
+
+ drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,
+ function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);
+ }
+
+ function getColorOrGradient(spec, bottom, top, defaultColor) {
+ if (typeof spec == "string")
+ return spec;
+ else {
+ // assume this is a gradient spec; IE currently only
+ // supports a simple vertical gradient properly, so that's
+ // what we support too
+ var gradient = ctx.createLinearGradient(0, top, 0, bottom);
+
+ for (var i = 0, l = spec.colors.length; i < l; ++i) {
+ var c = spec.colors[i];
+ if (typeof c != "string") {
+ var co = $.color.parse(defaultColor);
+ if (c.brightness != null)
+ co = co.scale('rgb', c.brightness);
+ if (c.opacity != null)
+ co.a *= c.opacity;
+ c = co.toString();
+ }
+ gradient.addColorStop(i / (l - 1), c);
+ }
+
+ return gradient;
+ }
+ }
+ }
+
+ // Add the plot function to the top level of the jQuery object
+
+ $.plot = function(placeholder, data, options) {
+ //var t0 = new Date();
+ var plot = new Plot($(placeholder), data, options, $.plot.plugins);
+ //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime()));
+ return plot;
+ };
+
+ $.plot.version = "0.8.2-alpha";
+
+ $.plot.plugins = [];
+
+ // Also add the plot function as a chainable property
+
+ $.fn.plot = function(data, options) {
+ return this.each(function() {
+ $.plot(this, data, options);
+ });
+ };
+
+ // round to nearby lower multiple of base
+ function floorInBase(n, base) {
+ return base * Math.floor(n / base);
+ }
+
+})(jQuery);
diff --git a/app/assets/javascripts/jquery.flot.min.js b/app/assets/javascripts/jquery.flot.min.js
index 3706512c4..b82faa18f 100644
--- a/app/assets/javascripts/jquery.flot.min.js
+++ b/app/assets/javascripts/jquery.flot.min.js
@@ -1,29 +1 @@
-/* Javascript plotting library for jQuery, version 0.8.1.
-
-Copyright (c) 2007-2013 IOLA and Ole Laursen.
-Licensed under the MIT license.
-
-*/// first an inline dependency, jquery.colorhelpers.js, we inline it here
-// for convenience
-/* Plugin for jQuery for working with colors.
- *
- * Version 1.1.
- *
- * Inspiration from jQuery color animation plugin by John Resig.
- *
- * Released under the MIT license by Ole Laursen, October 2009.
- *
- * Examples:
- *
- * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
- * var c = $.color.extract($("#mydiv"), 'background-color');
- * console.log(c.r, c.g, c.b, c.a);
- * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
- *
- * Note that .scale() and .add() return the same modified object
- * instead of making a new one.
- *
- * V. 1.1: Fix error handling so e.g. parsing an empty string does
- * produce a color rather than just crashing.
- */(function(e){e.color={},e.color.make=function(t,n,r,i){var s={};return s.r=t||0,s.g=n||0,s.b=r||0,s.a=i!=null?i:1,s.add=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]+=t;return s.normalize()},s.scale=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]*=t;return s.normalize()},s.toString=function(){return s.a>=1?"rgb("+[s.r,s.g,s.b].join(",")+")":"rgba("+[s.r,s.g,s.b,s.a].join(",")+")"},s.normalize=function(){function e(e,t,n){return t<e?e:t>n?n:t}return s.r=e(0,parseInt(s.r),255),s.g=e(0,parseInt(s.g),255),s.b=e(0,parseInt(s.b),255),s.a=e(0,s.a,1),s},s.clone=function(){return e.color.make(s.r,s.b,s.g,s.a)},s.normalize()},e.color.extract=function(t,n){var r;do{r=t.css(n).toLowerCase();if(r!=""&&r!="transparent")break;t=t.parent()}while(!e.nodeName(t.get(0),"body"));return r=="rgba(0, 0, 0, 0)"&&(r="transparent"),e.color.parse(r)},e.color.parse=function(n){var r,i=e.color.make;if(r=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10));if(r=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseFloat(r[4]));if(r=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55);if(r=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55,parseFloat(r[4]));if(r=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return i(parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16));if(r=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return i(parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16));var s=e.trim(n).toLowerCase();return s=="transparent"?i(255,255,255,0):(r=t[s]||[0,0,0],i(r[0],r[1],r[2]))};var t={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery),function(e){function n(t,n){var r=n.children("."+t)[0];if(r==null){r=document.createElement("canvas"),r.className=t,e(r).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(n);if(!r.getContext){if(!window.G_vmlCanvasManager)throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");r=window.G_vmlCanvasManager.initElement(r)}}this.element=r;var i=this.context=r.getContext("2d"),s=window.devicePixelRatio||1,o=i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1;this.pixelRatio=s/o,this.resize(n.width(),n.height()),this.textContainer=null,this.text={},this._textCache={}}function r(t,r,s,o){function E(e,t){t=[w].concat(t);for(var n=0;n<e.length;++n)e[n].apply(this,t)}function S(){var t={Canvas:n};for(var r=0;r<o.length;++r){var i=o[r];i.init(w,t),i.options&&e.extend(!0,a,i.options)}}function x(n){e.extend(!0,a,n),n&&n.colors&&(a.colors=n.colors),a.xaxis.color==null&&(a.xaxis.color=e.color.parse(a.grid.color).scale("a",.22).toString()),a.yaxis.color==null&&(a.yaxis.color=e.color.parse(a.grid.color).scale("a",.22).toString()),a.xaxis.tickColor==null&&(a.xaxis.tickColor=a.grid.tickColor||a.xaxis.color),a.yaxis.tickColor==null&&(a.yaxis.tickColor=a.grid.tickColor||a.yaxis.color),a.grid.borderColor==null&&(a.grid.borderColor=a.grid.color),a.grid.tickColor==null&&(a.grid.tickColor=e.color.parse(a.grid.color).scale("a",.22).toString());var r,i,s,o={style:t.css("font-style"),size:Math.round(.8*(+t.css("font-size").replace("px","")||13)),variant:t.css("font-variant"),weight:t.css("font-weight"),family:t.css("font-family")};o.lineHeight=o.size*1.15,s=a.xaxes.length||1;for(r=0;r<s;++r)i=a.xaxes[r],i&&!i.tickColor&&(i.tickColor=i.color),i=e.extend(!0,{},a.xaxis,i),a.xaxes[r]=i,i.font&&(i.font=e.extend({},o,i.font),i.font.color||(i.font.color=i.color));s=a.yaxes.length||1;for(r=0;r<s;++r)i=a.yaxes[r],i&&!i.tickColor&&(i.tickColor=i.color),i=e.extend(!0,{},a.yaxis,i),a.yaxes[r]=i,i.font&&(i.font=e.extend({},o,i.font),i.font.color||(i.font.color=i.color));a.xaxis.noTicks&&a.xaxis.ticks==null&&(a.xaxis.ticks=a.xaxis.noTicks),a.yaxis.noTicks&&a.yaxis.ticks==null&&(a.yaxis.ticks=a.yaxis.noTicks),a.x2axis&&(a.xaxes[1]=e.extend(!0,{},a.xaxis,a.x2axis),a.xaxes[1].position="top"),a.y2axis&&(a.yaxes[1]=e.extend(!0,{},a.yaxis,a.y2axis),a.yaxes[1].position="right"),a.grid.coloredAreas&&(a.grid.markings=a.grid.coloredAreas),a.grid.coloredAreasColor&&(a.grid.markingsColor=a.grid.coloredAreasColor),a.lines&&e.extend(!0,a.series.lines,a.lines),a.points&&e.extend(!0,a.series.points,a.points),a.bars&&e.extend(!0,a.series.bars,a.bars),a.shadowSize!=null&&(a.series.shadowSize=a.shadowSize),a.highlightColor!=null&&(a.series.highlightColor=a.highlightColor);for(r=0;r<a.xaxes.length;++r)O(d,r+1).options=a.xaxes[r];for(r=0;r<a.yaxes.length;++r)O(v,r+1).options=a.yaxes[r];for(var u in b)a.hooks[u]&&a.hooks[u].length&&(b[u]=b[u].concat(a.hooks[u]));E(b.processOptions,[a])}function T(e){u=N(e),M(),_()}function N(t){var n=[];for(var r=0;r<t.length;++r){var i=e.extend(!0,{},a.series);t[r].data!=null?(i.data=t[r].data,delete t[r].data,e.extend(!0,i,t[r]),t[r].data=i.data):i.data=t[r],n.push(i)}return n}function C(e,t){var n=e[t+"axis"];return typeof n=="object"&&(n=n.n),typeof n!="number"&&(n=1),n}function k(){return e.grep(d.concat(v),function(e){return e})}function L(e){var t={},n,r;for(n=0;n<d.length;++n)r=d[n],r&&r.used&&(t["x"+r.n]=r.c2p(e.left));for(n=0;n<v.length;++n)r=v[n],r&&r.used&&(t["y"+r.n]=r.c2p(e.top));return t.x1!==undefined&&(t.x=t.x1),t.y1!==undefined&&(t.y=t.y1),t}function A(e){var t={},n,r,i;for(n=0;n<d.length;++n){r=d[n];if(r&&r.used){i="x"+r.n,e[i]==null&&r.n==1&&(i="x");if(e[i]!=null){t.left=r.p2c(e[i]);break}}}for(n=0;n<v.length;++n){r=v[n];if(r&&r.used){i="y"+r.n,e[i]==null&&r.n==1&&(i="y");if(e[i]!=null){t.top=r.p2c(e[i]);break}}}return t}function O(t,n){return t[n-1]||(t[n-1]={n:n,direction:t==d?"x":"y",options:e.extend(!0,{},t==d?a.xaxis:a.yaxis)}),t[n-1]}function M(){var t=u.length,n=-1,r;for(r=0;r<u.length;++r){var i=u[r].color;i!=null&&(t--,typeof i=="number"&&i>n&&(n=i))}t<=n&&(t=n+1);var s,o=[],f=a.colors,l=f.length,c=0;for(r=0;r<t;r++)s=e.color.parse(f[r%l]||"#666"),r%l==0&&r&&(c>=0?c<.5?c=-c-.2:c=0:c=-c),o[r]=s.scale("rgb",1+c);var h=0,p;for(r=0;r<u.length;++r){p=u[r],p.color==null?(p.color=o[h].toString(),++h):typeof p.color=="number"&&(p.color=o[p.color].toString());if(p.lines.show==null){var m,g=!0;for(m in p)if(p[m]&&p[m].show){g=!1;break}g&&(p.lines.show=!0)}p.lines.zero==null&&(p.lines.zero=!!p.lines.fill),p.xaxis=O(d,C(p,"x")),p.yaxis=O(v,C(p,"y"))}}function _(){function x(e,t,n){t<e.datamin&&t!=-r&&(e.datamin=t),n>e.datamax&&n!=r&&(e.datamax=n)}var t=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY,r=Number.MAX_VALUE,i,s,o,a,f,l,c,h,p,d,v,m,g,y,w,S;e.each(k(),function(e,r){r.datamin=t,r.datamax=n,r.used=!1});for(i=0;i<u.length;++i)l=u[i],l.datapoints={points:[]},E(b.processRawData,[l,l.data,l.datapoints]);for(i=0;i<u.length;++i){l=u[i],w=l.data,S=l.datapoints.format;if(!S){S=[],S.push({x:!0,number:!0,required:!0}),S.push({y:!0,number:!0,required:!0});if(l.bars.show||l.lines.show&&l.lines.fill){var T=!!(l.bars.show&&l.bars.zero||l.lines.show&&l.lines.zero);S.push({y:!0,number:!0,required:!1,defaultValue:0,autoscale:T}),l.bars.horizontal&&(delete S[S.length-1].y,S[S.length-1].x=!0)}l.datapoints.format=S}if(l.datapoints.pointsize!=null)continue;l.datapoints.pointsize=S.length,h=l.datapoints.pointsize,c=l.datapoints.points;var N=l.lines.show&&l.lines.steps;l.xaxis.used=l.yaxis.used=!0;for(s=o=0;s<w.length;++s,o+=h){y=w[s];var C=y==null;if(!C)for(a=0;a<h;++a)m=y[a],g=S[a],g&&(g.number&&m!=null&&(m=+m,isNaN(m)?m=null:m==Infinity?m=r:m==-Infinity&&(m=-r)),m==null&&(g.required&&(C=!0),g.defaultValue!=null&&(m=g.defaultValue))),c[o+a]=m;if(C)for(a=0;a<h;++a)m=c[o+a],m!=null&&(g=S[a],g.autoscale&&(g.x&&x(l.xaxis,m,m),g.y&&x(l.yaxis,m,m))),c[o+a]=null;else if(N&&o>0&&c[o-h]!=null&&c[o-h]!=c[o]&&c[o-h+1]!=c[o+1]){for(a=0;a<h;++a)c[o+h+a]=c[o+a];c[o+1]=c[o-h+1],o+=h}}}for(i=0;i<u.length;++i)l=u[i],E(b.processDatapoints,[l,l.datapoints]);for(i=0;i<u.length;++i){l=u[i],c=l.datapoints.points,h=l.datapoints.pointsize,S=l.datapoints.format;var L=t,A=t,O=n,M=n;for(s=0;s<c.length;s+=h){if(c[s]==null)continue;for(a=0;a<h;++a){m=c[s+a],g=S[a];if(!g||g.autoscale===!1||m==r||m==-r)continue;g.x&&(m<L&&(L=m),m>O&&(O=m)),g.y&&(m<A&&(A=m),m>M&&(M=m))}}if(l.bars.show){var _;switch(l.bars.align){case"left":_=0;break;case"right":_=-l.bars.barWidth;break;case"center":_=-l.bars.barWidth/2;break;default:throw new Error("Invalid bar alignment: "+l.bars.align)}l.bars.horizontal?(A+=_,M+=_+l.bars.barWidth):(L+=_,O+=_+l.bars.barWidth)}x(l.xaxis,L,O),x(l.yaxis,A,M)}e.each(k(),function(e,r){r.datamin==t&&(r.datamin=null),r.datamax==n&&(r.datamax=null)})}function D(){t.css("padding",0).children(":not(.flot-base,.flot-overlay)").remove(),t.css("position")=="static"&&t.css("position","relative"),f=new n("flot-base",t),l=new n("flot-overlay",t),h=f.context,p=l.context,c=e(l.element).unbind();var r=t.data("plot");r&&(r.shutdown(),l.clear()),t.data("plot",w)}function P(){a.grid.hoverable&&(c.mousemove(at),c.bind("mouseleave",ft)),a.grid.clickable&&c.click(lt),E(b.bindEvents,[c])}function H(){ot&&clearTimeout(ot),c.unbind("mousemove",at),c.unbind("mouseleave",ft),c.unbind("click",lt),E(b.shutdown,[c])}function B(e){function t(e){return e}var n,r,i=e.options.transform||t,s=e.options.inverseTransform;e.direction=="x"?(n=e.scale=g/Math.abs(i(e.max)-i(e.min)),r=Math.min(i(e.max),i(e.min))):(n=e.scale=y/Math.abs(i(e.max)-i(e.min)),n=-n,r=Math.max(i(e.max),i(e.min))),i==t?e.p2c=function(e){return(e-r)*n}:e.p2c=function(e){return(i(e)-r)*n},s?e.c2p=function(e){return s(r+e/n)}:e.c2p=function(e){return r+e/n}}function j(e){var t=e.options,n=e.ticks||[],r=t.labelWidth||0,i=t.labelHeight||0,s=r||e.direction=="x"?Math.floor(f.width/(n.length||1)):null;legacyStyles=e.direction+"Axis "+e.direction+e.n+"Axis",layer="flot-"+e.direction+"-axis flot-"+e.direction+e.n+"-axis "+legacyStyles,font=t.font||"flot-tick-label tickLabel";for(var o=0;o<n.length;++o){var u=n[o];if(!u.label)continue;var a=f.getTextInfo(layer,u.label,font,null,s);r=Math.max(r,a.width),i=Math.max(i,a.height)}e.labelWidth=t.labelWidth||r,e.labelHeight=t.labelHeight||i}function F(t){var n=t.labelWidth,r=t.labelHeight,i=t.options.position,s=t.options.tickLength,o=a.grid.axisMargin,u=a.grid.labelMargin,l=t.direction=="x"?d:v,c,h,p=e.grep(l,function(e){return e&&e.options.position==i&&e.reserveSpace});e.inArray(t,p)==p.length-1&&(o=0);if(s==null){var g=e.grep(l,function(e){return e&&e.reserveSpace});h=e.inArray(t,g)==0,h?s="full":s=5}isNaN(+s)||(u+=+s),t.direction=="x"?(r+=u,i=="bottom"?(m.bottom+=r+o,t.box={top:f.height-m.bottom,height:r}):(t.box={top:m.top+o,height:r},m.top+=r+o)):(n+=u,i=="left"?(t.box={left:m.left+o,width:n},m.left+=n+o):(m.right+=n+o,t.box={left:f.width-m.right,width:n})),t.position=i,t.tickLength=s,t.box.padding=u,t.innermost=h}function I(e){e.direction=="x"?(e.box.left=m.left-e.labelWidth/2,e.box.width=f.width-m.left-m.right+e.labelWidth):(e.box.top=m.top-e.labelHeight/2,e.box.height=f.height-m.bottom-m.top+e.labelHeight)}function q(){var t=a.grid.minBorderMargin,n={x:0,y:0},r,i;if(t==null){t=0;for(r=0;r<u.length;++r)t=Math.max(t,2*(u[r].points.radius+u[r].points.lineWidth/2))}n.x=n.y=Math.ceil(t),e.each(k(),function(e,t){var r=t.direction;t.reserveSpace&&(n[r]=Math.ceil(Math.max(n[r],(r=="x"?t.labelWidth:t.labelHeight)/2)))}),m.left=Math.max(n.x,m.left),m.right=Math.max(n.x,m.right),m.top=Math.max(n.y,m.top),m.bottom=Math.max(n.y,m.bottom)}function R(){var t,n=k(),r=a.grid.show;for(var i in m){var s=a.grid.margin||0;m[i]=typeof s=="number"?s:s[i]||0}E(b.processOffset,[m]);for(var i in m)typeof a.grid.borderWidth=="object"?m[i]+=r?a.grid.borderWidth[i]:0:m[i]+=r?a.grid.borderWidth:0;e.each(n,function(e,t){t.show=t.options.show,t.show==null&&(t.show=t.used),t.reserveSpace=t.show||t.options.reserveSpace,U(t)});if(r){var o=e.grep(n,function(e){return e.reserveSpace});e.each(o,function(e,t){z(t),W(t),X(t,t.ticks),j(t)});for(t=o.length-1;t>=0;--t)F(o[t]);q(),e.each(o,function(e,t){I(t)})}g=f.width-m.left-m.right,y=f.height-m.bottom-m.top,e.each(n,function(e,t){B(t)}),r&&G(),it()}function U(e){var t=e.options,n=+(t.min!=null?t.min:e.datamin),r=+(t.max!=null?t.max:e.datamax),i=r-n;if(i==0){var s=r==0?1:.01;t.min==null&&(n-=s);if(t.max==null||t.min!=null)r+=s}else{var o=t.autoscaleMargin;o!=null&&(t.min==null&&(n-=i*o,n<0&&e.datamin!=null&&e.datamin>=0&&(n=0)),t.max==null&&(r+=i*o,r>0&&e.datamax!=null&&e.datamax<=0&&(r=0)))}e.min=n,e.max=r}function z(t){var n=t.options,r;typeof n.ticks=="number"&&n.ticks>0?r=n.ticks:r=.3*Math.sqrt(t.direction=="x"?f.width:f.height);var s=(t.max-t.min)/r,o=-Math.floor(Math.log(s)/Math.LN10),u=n.tickDecimals;u!=null&&o>u&&(o=u);var a=Math.pow(10,-o),l=s/a,c;l<1.5?c=1:l<3?(c=2,l>2.25&&(u==null||o+1<=u)&&(c=2.5,++o)):l<7.5?c=5:c=10,c*=a,n.minTickSize!=null&&c<n.minTickSize&&(c=n.minTickSize),t.delta=s,t.tickDecimals=Math.max(0,u!=null?u:o),t.tickSize=n.tickSize||c;if(n.mode=="time"&&!t.tickGenerator)throw new Error("Time mode requires the flot.time plugin.");t.tickGenerator||(t.tickGenerator=function(e){var t=[],n=i(e.min,e.tickSize),r=0,s=Number.NaN,o;do o=s,s=n+r*e.tickSize,t.push(s),++r;while(s<e.max&&s!=o);return t},t.tickFormatter=function(e,t){var n=t.tickDecimals?Math.pow(10,t.tickDecimals):1,r=""+Math.round(e*n)/n;if(t.tickDecimals!=null){var i=r.indexOf("."),s=i==-1?0:r.length-i-1;if(s<t.tickDecimals)return(s?r:r+".")+(""+n).substr(1,t.tickDecimals-s)}return r}),e.isFunction(n.tickFormatter)&&(t.tickFormatter=function(e,t){return""+n.tickFormatter(e,t)});if(n.alignTicksWithAxis!=null){var h=(t.direction=="x"?d:v)[n.alignTicksWithAxis-1];if(h&&h.used&&h!=t){var p=t.tickGenerator(t);p.length>0&&(n.min==null&&(t.min=Math.min(t.min,p[0])),n.max==null&&p.length>1&&(t.max=Math.max(t.max,p[p.length-1]))),t.tickGenerator=function(e){var t=[],n,r;for(r=0;r<h.ticks.length;++r)n=(h.ticks[r].v-h.min)/(h.max-h.min),n=e.min+n*(e.max-e.min),t.push(n);return t};if(!t.mode&&n.tickDecimals==null){var m=Math.max(0,-Math.floor(Math.log(t.delta)/Math.LN10)+1),g=t.tickGenerator(t);g.length>1&&/\..*0$/.test((g[1]-g[0]).toFixed(m))||(t.tickDecimals=m)}}}}function W(t){var n=t.options.ticks,r=[];n==null||typeof n=="number"&&n>0?r=t.tickGenerator(t):n&&(e.isFunction(n)?r=n(t):r=n);var i,s;t.ticks=[];for(i=0;i<r.length;++i){var o=null,u=r[i];typeof u=="object"?(s=+u[0],u.length>1&&(o=u[1])):s=+u,o==null&&(o=t.tickFormatter(s,t)),isNaN(s)||t.ticks.push({v:s,label:o})}}function X(e,t){e.options.autoscaleMargin&&t.length>0&&(e.options.min==null&&(e.min=Math.min(e.min,t[0].v)),e.options.max==null&&t.length>1&&(e.max=Math.max(e.max,t[t.length-1].v)))}function V(){f.clear(),E(b.drawBackground,[h]);var e=a.grid;e.show&&e.backgroundColor&&K(),e.show&&!e.aboveData&&Q();for(var t=0;t<u.length;++t)E(b.drawSeries,[h,u[t]]),Y(u[t]);E(b.draw,[h]),e.show&&e.aboveData&&Q(),f.render(),ht()}function J(e,t){var n,r,i,s,o=k();for(var u=0;u<o.length;++u){n=o[u];if(n.direction==t){s=t+n.n+"axis",!e[s]&&n.n==1&&(s=t+"axis");if(e[s]){r=e[s].from,i=e[s].to;break}}}e[s]||(n=t=="x"?d[0]:v[0],r=e[t+"1"],i=e[t+"2"]);if(r!=null&&i!=null&&r>i){var a=r;r=i,i=a}return{from:r,to:i,axis:n}}function K(){h.save(),h.translate(m.left,m.top),h.fillStyle=bt(a.grid.backgroundColor,y,0,"rgba(255, 255, 255, 0)"),h.fillRect(0,0,g,y),h.restore()}function Q(){var t,n,r,i;h.save(),h.translate(m.left,m.top);var s=a.grid.markings;if(s){e.isFunction(s)&&(n=w.getAxes(),n.xmin=n.xaxis.min,n.xmax=n.xaxis.max,n.ymin=n.yaxis.min,n.ymax=n.yaxis.max,s=s(n));for(t=0;t<s.length;++t){var o=s[t],u=J(o,"x"),f=J(o,"y");u.from==null&&(u.from=u.axis.min),u.to==null&&(u.to=u.axis.max),f.from==null&&(f.from=f.axis.min),f.to==null&&(f.to=f.axis.max);if(u.to<u.axis.min||u.from>u.axis.max||f.to<f.axis.min||f.from>f.axis.max)continue;u.from=Math.max(u.from,u.axis.min),u.to=Math.min(u.to,u.axis.max),f.from=Math.max(f.from,f.axis.min),f.to=Math.min(f.to,f.axis.max);if(u.from==u.to&&f.from==f.to)continue;u.from=u.axis.p2c(u.from),u.to=u.axis.p2c(u.to),f.from=f.axis.p2c(f.from),f.to=f.axis.p2c(f.to),u.from==u.to||f.from==f.to?(h.beginPath(),h.strokeStyle=o.color||a.grid.markingsColor,h.lineWidth=o.lineWidth||a.grid.markingsLineWidth,h.moveTo(u.from,f.from),h.lineTo(u.to,f.to),h.stroke()):(h.fillStyle=o.color||a.grid.markingsColor,h.fillRect(u.from,f.to,u.to-u.from,f.from-f.to))}}n=k(),r=a.grid.borderWidth;for(var l=0;l<n.length;++l){var c=n[l],p=c.box,d=c.tickLength,v,b,E,S;if(!c.show||c.ticks.length==0)continue;h.lineWidth=1,c.direction=="x"?(v=0,d=="full"?b=c.position=="top"?0:y:b=p.top-m.top+(c.position=="top"?p.height:0)):(b=0,d=="full"?v=c.position=="left"?0:g:v=p.left-m.left+(c.position=="left"?p.width:0)),c.innermost||(h.strokeStyle=c.options.color,h.beginPath(),E=S=0,c.direction=="x"?E=g+1:S=y+1,h.lineWidth==1&&(c.direction=="x"?b=Math.floor(b)+.5:v=Math.floor(v)+.5),h.moveTo(v,b),h.lineTo(v+E,b+S),h.stroke()),h.strokeStyle=c.options.tickColor,h.beginPath();for(t=0;t<c.ticks.length;++t){var x=c.ticks[t].v;E=S=0;if(isNaN(x)||x<c.min||x>c.max||d=="full"&&(typeof r=="object"&&r[c.position]>0||r>0)&&(x==c.min||x==c.max))continue;c.direction=="x"?(v=c.p2c(x),S=d=="full"?-y:d,c.position=="top"&&(S=-S)):(b=c.p2c(x),E=d=="full"?-g:d,c.position=="left"&&(E=-E)),h.lineWidth==1&&(c.direction=="x"?v=Math.floor(v)+.5:b=Math.floor(b)+.5),h.moveTo(v,b),h.lineTo(v+E,b+S)}h.stroke()}r&&(i=a.grid.borderColor,typeof r=="object"||typeof i=="object"?(typeof r!="object"&&(r={top:r,right:r,bottom:r,left:r}),typeof i!="object"&&(i={top:i,right:i,bottom:i,left:i}),r.top>0&&(h.strokeStyle=i.top,h.lineWidth=r.top,h.beginPath(),h.moveTo(0-r.left,0-r.top/2),h.lineTo(g,0-r.top/2),h.stroke()),r.right>0&&(h.strokeStyle=i.right,h.lineWidth=r.right,h.beginPath(),h.moveTo(g+r.right/2,0-r.top),h.lineTo(g+r.right/2,y),h.stroke()),r.bottom>0&&(h.strokeStyle=i.bottom,h.lineWidth=r.bottom,h.beginPath(),h.moveTo(g+r.right,y+r.bottom/2),h.lineTo(0,y+r.bottom/2),h.stroke()),r.left>0&&(h.strokeStyle=i.left,h.lineWidth=r.left,h.beginPath(),h.moveTo(0-r.left/2,y+r.bottom),h.lineTo(0-r.left/2,0),h.stroke())):(h.lineWidth=r,h.strokeStyle=a.grid.borderColor,h.strokeRect(-r/2,-r/2,g+r,y+r))),h.restore()}function G(){e.each(k(),function(e,t){if(!t.show||t.ticks.length==0)return;var n=t.box,r=t.direction+"Axis "+t.direction+t.n+"Axis",i="flot-"+t.direction+"-axis flot-"+t.direction+t.n+"-axis "+r,s=t.options.font||"flot-tick-label tickLabel",o,u,a,l,c;f.removeText(i);for(var h=0;h<t.ticks.length;++h){o=t.ticks[h];if(!o.label||o.v<t.min||o.v>t.max)continue;t.direction=="x"?(l="center",u=m.left+t.p2c(o.v),t.position=="bottom"?a=n.top+n.padding:(a=n.top+n.height-n.padding,c="bottom")):(c="middle",a=m.top+t.p2c(o.v),t.position=="left"?(u=n.left+n.width-n.padding,l="right"):u=n.left+n.padding),f.addText(i,u,a,o.label,s,null,null,l,c)}})}function Y(e){e.lines.show&&Z(e),e.bars.show&&nt(e),e.points.show&&et(e)}function Z(e){function t(e,t,n,r,i){var s=e.points,o=e.pointsize,u=null,a=null;h.beginPath();for(var f=o;f<s.length;f+=o){var l=s[f-o],c=s[f-o+1],p=s[f],d=s[f+1];if(l==null||p==null)continue;if(c<=d&&c<i.min){if(d<i.min)continue;l=(i.min-c)/(d-c)*(p-l)+l,c=i.min}else if(d<=c&&d<i.min){if(c<i.min)continue;p=(i.min-c)/(d-c)*(p-l)+l,d=i.min}if(c>=d&&c>i.max){if(d>i.max)continue;l=(i.max-c)/(d-c)*(p-l)+l,c=i.max}else if(d>=c&&d>i.max){if(c>i.max)continue;p=(i.max-c)/(d-c)*(p-l)+l,d=i.max}if(l<=p&&l<r.min){if(p<r.min)continue;c=(r.min-l)/(p-l)*(d-c)+c,l=r.min}else if(p<=l&&p<r.min){if(l<r.min)continue;d=(r.min-l)/(p-l)*(d-c)+c,p=r.min}if(l>=p&&l>r.max){if(p>r.max)continue;c=(r.max-l)/(p-l)*(d-c)+c,l=r.max}else if(p>=l&&p>r.max){if(l>r.max)continue;d=(r.max-l)/(p-l)*(d-c)+c,p=r.max}(l!=u||c!=a)&&h.moveTo(r.p2c(l)+t,i.p2c(c)+n),u=p,a=d,h.lineTo(r.p2c(p)+t,i.p2c(d)+n)}h.stroke()}function n(e,t,n){var r=e.points,i=e.pointsize,s=Math.min(Math.max(0,n.min),n.max),o=0,u,a=!1,f=1,l=0,c=0;for(;;){if(i>0&&o>r.length+i)break;o+=i;var p=r[o-i],d=r[o-i+f],v=r[o],m=r[o+f];if(a){if(i>0&&p!=null&&v==null){c=o,i=-i,f=2;continue}if(i<0&&o==l+i){h.fill(),a=!1,i=-i,f=1,o=l=c+i;continue}}if(p==null||v==null)continue;if(p<=v&&p<t.min){if(v<t.min)continue;d=(t.min-p)/(v-p)*(m-d)+d,p=t.min}else if(v<=p&&v<t.min){if(p<t.min)continue;m=(t.min-p)/(v-p)*(m-d)+d,v=t.min}if(p>=v&&p>t.max){if(v>t.max)continue;d=(t.max-p)/(v-p)*(m-d)+d,p=t.max}else if(v>=p&&v>t.max){if(p>t.max)continue;m=(t.max-p)/(v-p)*(m-d)+d,v=t.max}a||(h.beginPath(),h.moveTo(t.p2c(p),n.p2c(s)),a=!0);if(d>=n.max&&m>=n.max){h.lineTo(t.p2c(p),n.p2c(n.max)),h.lineTo(t.p2c(v),n.p2c(n.max));continue}if(d<=n.min&&m<=n.min){h.lineTo(t.p2c(p),n.p2c(n.min)),h.lineTo(t.p2c(v),n.p2c(n.min));continue}var g=p,y=v;d<=m&&d<n.min&&m>=n.min?(p=(n.min-d)/(m-d)*(v-p)+p,d=n.min):m<=d&&m<n.min&&d>=n.min&&(v=(n.min-d)/(m-d)*(v-p)+p,m=n.min),d>=m&&d>n.max&&m<=n.max?(p=(n.max-d)/(m-d)*(v-p)+p,d=n.max):m>=d&&m>n.max&&d<=n.max&&(v=(n.max-d)/(m-d)*(v-p)+p,m=n.max),p!=g&&h.lineTo(t.p2c(g),n.p2c(d)),h.lineTo(t.p2c(p),n.p2c(d)),h.lineTo(t.p2c(v),n.p2c(m)),v!=y&&(h.lineTo(t.p2c(v),n.p2c(m)),h.lineTo(t.p2c(y),n.p2c(m)))}}h.save(),h.translate(m.left,m.top),h.lineJoin="round";var r=e.lines.lineWidth,i=e.shadowSize;if(r>0&&i>0){h.lineWidth=i,h.strokeStyle="rgba(0,0,0,0.1)";var s=Math.PI/18;t(e.datapoints,Math.sin(s)*(r/2+i/2),Math.cos(s)*(r/2+i/2),e.xaxis,e.yaxis),h.lineWidth=i/2,t(e.datapoints,Math.sin(s)*(r/2+i/4),Math.cos(s)*(r/2+i/4),e.xaxis,e.yaxis)}h.lineWidth=r,h.strokeStyle=e.color;var o=rt(e.lines,e.color,0,y);o&&(h.fillStyle=o,n(e.datapoints,e.xaxis,e.yaxis)),r>0&&t(e.datapoints,0,0,e.xaxis,e.yaxis),h.restore()}function et(e){function t(e,t,n,r,i,s,o,u){var a=e.points,f=e.pointsize;for(var l=0;l<a.length;l+=f){var c=a[l],p=a[l+1];if(c==null||c<s.min||c>s.max||p<o.min||p>o.max)continue;h.beginPath(),c=s.p2c(c),p=o.p2c(p)+r,u=="circle"?h.arc(c,p,t,0,i?Math.PI:Math.PI*2,!1):u(h,c,p,t,i),h.closePath(),n&&(h.fillStyle=n,h.fill()),h.stroke()}}h.save(),h.translate(m.left,m.top);var n=e.points.lineWidth,r=e.shadowSize,i=e.points.radius,s=e.points.symbol;n==0&&(n=1e-4);if(n>0&&r>0){var o=r/2;h.lineWidth=o,h.strokeStyle="rgba(0,0,0,0.1)",t(e.datapoints,i,null,o+o/2,!0,e.xaxis,e.yaxis,s),h.strokeStyle="rgba(0,0,0,0.2)",t(e.datapoints,i,null,o/2,!0,e.xaxis,e.yaxis,s)}h.lineWidth=n,h.strokeStyle=e.color,t(e.datapoints,i,rt(e.points,e.color),0,!1,e.xaxis,e.yaxis,s),h.restore()}function tt(e,t,n,r,i,s,o,u,a,f,l,c){var h,p,d,v,m,g,y,b,w;l?(b=g=y=!0,m=!1,h=n,p=e,v=t+r,d=t+i,p<h&&(w=p,p=h,h=w,m=!0,g=!1)):(m=g=y=!0,b=!1,h=e+r,p=e+i,d=n,v=t,v<d&&(w=v,v=d,d=w,b=!0,y=!1));if(p<u.min||h>u.max||v<a.min||d>a.max)return;h<u.min&&(h=u.min,m=!1),p>u.max&&(p=u.max,g=!1),d<a.min&&(d=a.min,b=!1),v>a.max&&(v=a.max,y=!1),h=u.p2c(h),d=a.p2c(d),p=u.p2c(p),v=a.p2c(v),o&&(f.beginPath(),f.moveTo(h,d),f.lineTo(h,v),f.lineTo(p,v),f.lineTo(p,d),f.fillStyle=o(d,v),f.fill()),c>0&&(m||g||y||b)&&(f.beginPath(),f.moveTo(h,d+s),m?f.lineTo(h,v+s):f.moveTo(h,v+s),y?f.lineTo(p,v+s):f.moveTo(p,v+s),g?f.lineTo(p,d+s):f.moveTo(p,d+s),b?f.lineTo(h,d+s):f.moveTo(h,d+s),f.stroke())}function nt(e){function t(t,n,r,i,s,o,u){var a=t.points,f=t.pointsize;for(var l=0;l<a.length;l+=f){if(a[l]==null)continue;tt(a[l],a[l+1],a[l+2],n,r,i,s,o,u,h,e.bars.horizontal,e.bars.lineWidth)}}h.save(),h.translate(m.left,m.top),h.lineWidth=e.bars.lineWidth,h.strokeStyle=e.color;var n;switch(e.bars.align){case"left":n=0;break;case"right":n=-e.bars.barWidth;break;case"center":n=-e.bars.barWidth/2;break;default:throw new Error("Invalid bar alignment: "+e.bars.align)}var r=e.bars.fill?function(t,n){return rt(e.bars,e.color,t,n)}:null;t(e.datapoints,n,n+e.bars.barWidth,0,r,e.xaxis,e.yaxis),h.restore()}function rt(t,n,r,i){var s=t.fill;if(!s)return null;if(t.fillColor)return bt(t.fillColor,r,i,n);var o=e.color.parse(n);return o.a=typeof s=="number"?s:.4,o.normalize(),o.toString()}function it(){t.find(".legend").remove();if(!a.legend.show)return;var n=[],r=[],i=!1,s=a.legend.labelFormatter,o,f;for(var l=0;l<u.length;++l)o=u[l],o.label&&(f=s?s(o.label,o):o.label,f&&r.push({label:f,color:o.color}));if(a.legend.sorted)if(e.isFunction(a.legend.sorted))r.sort(a.legend.sorted);else if(a.legend.sorted=="reverse")r.reverse();else{var c=a.legend.sorted!="descending";r.sort(function(e,t){return e.label==t.label?0:e.label<t.label!=c?1:-1})}for(var l=0;l<r.length;++l){var h=r[l];l%a.legend.noColumns==0&&(i&&n.push("</tr>"),n.push("<tr>"),i=!0),n.push('<td class="legendColorBox"><div style="border:1px solid '+a.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+h.color+';overflow:hidden"></div></div></td>'+'<td class="legendLabel">'+h.label+"</td>")}i&&n.push("</tr>");if(n.length==0)return;var p='<table style="font-size:smaller;color:'+a.grid.color+'">'+n.join("")+"</table>";if(a.legend.container!=null)e(a.legend.container).html(p);else{var d="",v=a.legend.position,g=a.legend.margin;g[0]==null&&(g=[g,g]),v.charAt(0)=="n"?d+="top:"+(g[1]+m.top)+"px;":v.charAt(0)=="s"&&(d+="bottom:"+(g[1]+m.bottom)+"px;"),v.charAt(1)=="e"?d+="right:"+(g[0]+m.right)+"px;":v.charAt(1)=="w"&&(d+="left:"+(g[0]+m.left)+"px;");var y=e('<div class="legend">'+p.replace('style="','style="position:absolute;'+d+";")+"</div>").appendTo(t);if(a.legend.backgroundOpacity!=0){var b=a.legend.backgroundColor;b==null&&(b=a.grid.backgroundColor,b&&typeof b=="string"?b=e.color.parse(b):b=e.color.extract(y,"background-color"),b.a=1,b=b.toString());var w=y.children();e('<div style="position:absolute;width:'+w.width()+"px;height:"+w.height()+"px;"+d+"background-color:"+b+';"> </div>').prependTo(y).css("opacity",a.legend.backgroundOpacity)}}}function ut(e,t,n){var r=a.grid.mouseActiveRadius,i=r*r+1,s=null,o=!1,f,l,c;for(f=u.length-1;f>=0;--f){if(!n(u[f]))continue;var h=u[f],p=h.xaxis,d=h.yaxis,v=h.datapoints.points,m=p.c2p(e),g=d.c2p(t),y=r/p.scale,b=r/d.scale;c=h.datapoints.pointsize,p.options.inverseTransform&&(y=Number.MAX_VALUE),d.options.inverseTransform&&(b=Number.MAX_VALUE);if(h.lines.show||h.points.show)for(l=0;l<v.length;l+=c){var w=v[l],E=v[l+1];if(w==null)continue;if(w-m>y||w-m<-y||E-g>b||E-g<-b)continue;var S=Math.abs(p.p2c(w)-e),x=Math.abs(d.p2c(E)-t),T=S*S+x*x;T<i&&(i=T,s=[f,l/c])}if(h.bars.show&&!s){var N=h.bars.align=="left"?0:-h.bars.barWidth/2,C=N+h.bars.barWidth;for(l=0;l<v.length;l+=c){var w=v[l],E=v[l+1],k=v[l+2];if(w==null)continue;if(u[f].bars.horizontal?m<=Math.max(k,w)&&m>=Math.min(k,w)&&g>=E+N&&g<=E+C:m>=w+N&&m<=w+C&&g>=Math.min(k,E)&&g<=Math.max(k,E))s=[f,l/c]}}}return s?(f=s[0],l=s[1],c=u[f].datapoints.pointsize,{datapoint:u[f].datapoints.points.slice(l*c,(l+1)*c),dataIndex:l,series:u[f],seriesIndex:f}):null}function at(e){a.grid.hoverable&&ct("plothover",e,function(e){return e["hoverable"]!=0})}function ft(e){a.grid.hoverable&&ct("plothover",e,function(e){return!1})}function lt(e){ct("plotclick",e,function(e){return e["clickable"]!=0})}function ct(e,n,r){var i=c.offset(),s=n.pageX-i.left-m.left,o=n.pageY-i.top-m.top,u=L({left:s,top:o});u.pageX=n.pageX,u.pageY=n.pageY;var f=ut(s,o,r);f&&(f.pageX=parseInt(f.series.xaxis.p2c(f.datapoint[0])+i.left+m.left,10),f.pageY=parseInt(f.series.yaxis.p2c(f.datapoint[1])+i.top+m.top,10));if(a.grid.autoHighlight){for(var l=0;l<st.length;++l){var h=st[l];h.auto==e&&(!f||h.series!=f.series||h.point[0]!=f.datapoint[0]||h.point[1]!=f.datapoint[1])&&vt(h.series,h.point)}f&&dt(f.series,f.datapoint,e)}t.trigger(e,[u,f])}function ht(){var e=a.interaction.redrawOverlayInterval;if(e==-1){pt();return}ot||(ot=setTimeout(pt,e))}function pt(){ot=null,p.save(),l.clear(),p.translate(m.left,m.top);var e,t;for(e=0;e<st.length;++e)t=st[e],t.series.bars.show?yt(t.series,t.point):gt(t.series,t.point);p.restore(),E(b.drawOverlay,[p])}function dt(e,t,n){typeof e=="number"&&(e=u[e]);if(typeof t=="number"){var r=e.datapoints.pointsize;t=e.datapoints.points.slice(r*t,r*(t+1))}var i=mt(e,t);i==-1?(st.push({series:e,point:t,auto:n}),ht()):n||(st[i].auto=!1)}function vt(e,t){if(e==null&&t==null){st=[],ht();return}typeof e=="number"&&(e=u[e]);if(typeof t=="number"){var n=e.datapoints.pointsize;t=e.datapoints.points.slice(n*t,n*(t+1))}var r=mt(e,t);r!=-1&&(st.splice(r,1),ht())}function mt(e,t){for(var n=0;n<st.length;++n){var r=st[n];if(r.series==e&&r.point[0]==t[0]&&r.point[1]==t[1])return n}return-1}function gt(t,n){var r=n[0],i=n[1],s=t.xaxis,o=t.yaxis,u=typeof t.highlightColor=="string"?t.highlightColor:e.color.parse(t.color).scale("a",.5).toString();if(r<s.min||r>s.max||i<o.min||i>o.max)return;var a=t.points.radius+t.points.lineWidth/2;p.lineWidth=a,p.strokeStyle=u;var f=1.5*a;r=s.p2c(r),i=o.p2c(i),p.beginPath(),t.points.symbol=="circle"?p.arc(r,i,f,0,2*Math.PI,!1):t.points.symbol(p,r,i,f,!1),p.closePath(),p.stroke()}function yt(t,n){var r=typeof t.highlightColor=="string"?t.highlightColor:e.color.parse(t.color).scale("a",.5).toString(),i=r,s=t.bars.align=="left"?0:-t.bars.barWidth/2;p.lineWidth=t.bars.lineWidth,p.strokeStyle=r,tt(n[0],n[1],n[2]||0,s,s+t.bars.barWidth,0,function(){return i},t.xaxis,t.yaxis,p,t.bars.horizontal,t.bars.lineWidth)}function bt(t,n,r,i){if(typeof t=="string")return t;var s=h.createLinearGradient(0,r,0,n);for(var o=0,u=t.colors.length;o<u;++o){var a=t.colors[o];if(typeof a!="string"){var f=e.color.parse(i);a.brightness!=null&&(f=f.scale("rgb",a.brightness)),a.opacity!=null&&(f.a*=a.opacity),a=f.toString()}s.addColorStop(o/(u-1),a)}return s}var u=[],a={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:!0,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:!1,radius:3,lineWidth:2,fill:!0,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:!1,fillColor:null,steps:!1},bars:{show:!1,lineWidth:2,barWidth:1,fill:!0,fillColor:null,align:"left",horizontal:!1,zero:!0},shadowSize:3,highlightColor:null},grid:{show:!0,aboveData:!1,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:!1,hoverable:!1,autoHighlight:!0,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},f=null,l=null,c=null,h=null,p=null,d=[],v=[],m={left:0,right:0,top:0,bottom
-:0},g=0,y=0,b={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},w=this;w.setData=T,w.setupGrid=R,w.draw=V,w.getPlaceholder=function(){return t},w.getCanvas=function(){return f.element},w.getPlotOffset=function(){return m},w.width=function(){return g},w.height=function(){return y},w.offset=function(){var e=c.offset();return e.left+=m.left,e.top+=m.top,e},w.getData=function(){return u},w.getAxes=function(){var t={},n;return e.each(d.concat(v),function(e,n){n&&(t[n.direction+(n.n!=1?n.n:"")+"axis"]=n)}),t},w.getXAxes=function(){return d},w.getYAxes=function(){return v},w.c2p=L,w.p2c=A,w.getOptions=function(){return a},w.highlight=dt,w.unhighlight=vt,w.triggerRedrawOverlay=ht,w.pointOffset=function(e){return{left:parseInt(d[C(e,"x")-1].p2c(+e.x)+m.left,10),top:parseInt(v[C(e,"y")-1].p2c(+e.y)+m.top,10)}},w.shutdown=H,w.resize=function(){var e=t.width(),n=t.height();f.resize(e,n),l.resize(e,n)},w.hooks=b,S(w),x(s),D(),T(r),R(),V(),P();var st=[],ot=null}function i(e,t){return t*Math.floor(e/t)}var t=Object.prototype.hasOwnProperty;n.prototype.resize=function(e,t){if(e<=0||t<=0)throw new Error("Invalid dimensions for plot, width = "+e+", height = "+t);var n=this.element,r=this.context,i=this.pixelRatio;this.width!=e&&(n.width=e*i,n.style.width=e+"px",this.width=e),this.height!=t&&(n.height=t*i,n.style.height=t+"px",this.height=t),r.restore(),r.save(),r.scale(i,i)},n.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},n.prototype.render=function(){var e=this._textCache;for(var n in e)if(t.call(e,n)){var r=this.getTextLayer(n),i=e[n];r.hide();for(var s in i)if(t.call(i,s)){var o=i[s];for(var u in o)if(t.call(o,u)){var a=o[u].positions;for(var f=0,l;l=a[f];f++)l.active?l.rendered||(r.append(l.element),l.rendered=!0):(a.splice(f--,1),l.rendered&&l.element.detach());a.length==0&&delete o[u]}}r.show()}},n.prototype.getTextLayer=function(t){var n=this.text[t];return n==null&&(this.textContainer==null&&(this.textContainer=e("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)),n=this.text[t]=e("<div></div>").addClass(t).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)),n},n.prototype.getTextInfo=function(t,n,r,i,s){var o,u,a,f;n=""+n,typeof r=="object"?o=r.style+" "+r.variant+" "+r.weight+" "+r.size+"px/"+r.lineHeight+"px "+r.family:o=r,u=this._textCache[t],u==null&&(u=this._textCache[t]={}),a=u[o],a==null&&(a=u[o]={}),f=a[n];if(f==null){var l=e("<div></div>").html(n).css({position:"absolute","max-width":s,top:-9999}).appendTo(this.getTextLayer(t));typeof r=="object"?l.css({font:o,color:r.color}):typeof r=="string"&&l.addClass(r),f=a[n]={width:l.outerWidth(!0),height:l.outerHeight(!0),element:l,positions:[]},l.detach()}return f},n.prototype.addText=function(e,t,n,r,i,s,o,u,a){var f=this.getTextInfo(e,r,i,s,o),l=f.positions;u=="center"?t-=f.width/2:u=="right"&&(t-=f.width),a=="middle"?n-=f.height/2:a=="bottom"&&(n-=f.height);for(var c=0,h;h=l[c];c++)if(h.x==t&&h.y==n){h.active=!0;return}h={active:!0,rendered:!1,element:l.length?f.element.clone():f.element,x:t,y:n},l.push(h),h.element.css({top:Math.round(n),left:Math.round(t),"text-align":u})},n.prototype.removeText=function(e,n,r,i,s,o){if(i==null){var u=this._textCache[e];if(u!=null)for(var a in u)if(t.call(u,a)){var f=u[a];for(var l in f)if(t.call(f,l)){var c=f[l].positions;for(var h=0,p;p=c[h];h++)p.active=!1}}}else{var c=this.getTextInfo(e,i,s,o).positions;for(var h=0,p;p=c[h];h++)p.x==n&&p.y==r&&(p.active=!1)}},e.plot=function(t,n,i){var s=new r(e(t),n,i,e.plot.plugins);return s},e.plot.version="0.8.1",e.plot.plugins=[],e.fn.plot=function(t,n){return this.each(function(){e.plot(this,t,n)})}}(jQuery); \ No newline at end of file
+(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return"rgb("+[G.r,G.g,G.b].join(",")+")"}else{return"rgba("+[G.r,G.g,G.b,G.a].join(",")+")"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=""&&E!="transparent"){break}D=D.parent()}while(!B.nodeName(D.get(0),"body"));if(E=="rgba(0, 0, 0, 0)"){E="transparent"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D=="transparent"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;function Canvas(cls,container){var element=container.children("."+cls)[0];if(element==null){element=document.createElement("canvas");element.className=cls;$(element).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;var context=this.context=element.getContext("2d");var devicePixelRatio=window.devicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||context.mozBackingStorePixelRatio||context.msBackingStorePixelRatio||context.oBackingStorePixelRatio||context.backingStorePixelRatio||1;this.pixelRatio=devicePixelRatio/backingStoreRatio;this.resize(container.width(),container.height());this.textContainer=null;this.text={};this._textCache={}}Canvas.prototype.resize=function(width,height){if(width<=0||height<=0){throw new Error("Invalid dimensions for plot, width = "+width+", height = "+height)}var element=this.element,context=this.context,pixelRatio=this.pixelRatio;if(this.width!=width){element.width=width*pixelRatio;element.style.width=width+"px";this.width=width}if(this.height!=height){element.height=height*pixelRatio;element.style.height=height+"px";this.height=height}context.restore();context.save();context.scale(pixelRatio,pixelRatio)};Canvas.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)};Canvas.prototype.render=function(){var cache=this._textCache;for(var layerKey in cache){if(hasOwnProperty.call(cache,layerKey)){var layer=this.getTextLayer(layerKey),layerCache=cache[layerKey];layer.hide();for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){if(position.active){if(!position.rendered){layer.append(position.element);position.rendered=true}}else{positions.splice(i--,1);if(position.rendered){position.element.detach()}}}if(positions.length==0){delete styleCache[key]}}}}}layer.show()}}};Canvas.prototype.getTextLayer=function(classes){var layer=this.text[classes];if(layer==null){if(this.textContainer==null){this.textContainer=$("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)}layer=this.text[classes]=$("<div></div>").addClass(classes).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)}return layer};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){var textStyle,layerCache,styleCache,info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px/"+font.lineHeight+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var element=$("<div></div>").html(text).css({position:"absolute","max-width":width,top:-9999}).appendTo(this.getTextLayer(layer));if(typeof font==="object"){element.css({font:textStyle,color:font.color})}else{if(typeof font==="string"){element.addClass(font)}}info=styleCache[text]={width:element.outerWidth(true),height:element.outerHeight(true),element:element,positions:[]};element.detach()}return info};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){var info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions;if(halign=="center"){x-=info.width/2}else{if(halign=="right"){x-=info.width}}if(valign=="middle"){y-=info.height/2}else{if(valign=="bottom"){y-=info.height}}for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,rendered:false,element:positions.length?info.element.clone():info.element,x:x,y:y};positions.push(position);position.element.css({top:Math.round(y),left:Math.round(x),"text-align":halign})};Canvas.prototype.removeText=function(layer,x,y,text,font,angle){if(text==null){var layerCache=this._textCache[layer];if(layerCache!=null){for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){position.active=false}}}}}}}else{var positions=this.getTextInfo(layer,text,font,angle).positions;for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=false}}}};function Plot(placeholder,data_,options_,plugins){var series=[],options={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false,zero:true},shadowSize:3,highlightColor:null},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1000/60},hooks:{}},surface=null,overlay=null,eventHolder=null,ctx=null,octx=null,xaxes=[],yaxes=[],plotOffset={left:0,right:0,top:0,bottom:0},plotWidth=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},plot=this;plot.setData=setData;plot.setupGrid=setupGrid;plot.draw=draw;plot.getPlaceholder=function(){return placeholder};plot.getCanvas=function(){return surface.element};plot.getPlotOffset=function(){return plotOffset};plot.width=function(){return plotWidth};plot.height=function(){return plotHeight};plot.offset=function(){var o=eventHolder.offset();o.left+=plotOffset.left;o.top+=plotOffset.top;return o};plot.getData=function(){return series};plot.getAxes=function(){var res={},i;$.each(xaxes.concat(yaxes),function(_,axis){if(axis){res[axis.direction+(axis.n!=1?axis.n:"")+"axis"]=axis}});return res};plot.getXAxes=function(){return xaxes};plot.getYAxes=function(){return yaxes};plot.c2p=canvasToAxisCoords;plot.p2c=axisToCanvasCoords;plot.getOptions=function(){return options};plot.highlight=highlight;plot.unhighlight=unhighlight;plot.triggerRedrawOverlay=triggerRedrawOverlay;plot.pointOffset=function(point){return{left:parseInt(xaxes[axisNumber(point,"x")-1].p2c(+point.x)+plotOffset.left,10),top:parseInt(yaxes[axisNumber(point,"y")-1].p2c(+point.y)+plotOffset.top,10)}};plot.shutdown=shutdown;plot.resize=function(){var width=placeholder.width(),height=placeholder.height();surface.resize(width,height);overlay.resize(width,height)};plot.hooks=hooks;initPlugins(plot);parseOptions(options_);setupCanvases();setData(data_);setupGrid();draw();bindEvents();function executeHooks(hook,args){args=[plot].concat(args);for(var i=0;i<hook.length;++i){hook[i].apply(this,args)}}function initPlugins(){var classes={Canvas:Canvas};for(var i=0;i<plugins.length;++i){var p=plugins[i];p.init(plot,classes);if(p.options){$.extend(true,options,p.options)}}}function parseOptions(opts){$.extend(true,options,opts);if(opts&&opts.colors){options.colors=opts.colors}if(options.xaxis.color==null){options.xaxis.color=$.color.parse(options.grid.color).scale("a",0.22).toString()}if(options.yaxis.color==null){options.yaxis.color=$.color.parse(options.grid.color).scale("a",0.22).toString()}if(options.xaxis.tickColor==null){options.xaxis.tickColor=options.grid.tickColor||options.xaxis.color}if(options.yaxis.tickColor==null){options.yaxis.tickColor=options.grid.tickColor||options.yaxis.color}if(options.grid.borderColor==null){options.grid.borderColor=options.grid.color}if(options.grid.tickColor==null){options.grid.tickColor=$.color.parse(options.grid.color).scale("a",0.22).toString()}var i,axisOptions,axisCount,fontDefaults={style:placeholder.css("font-style"),size:Math.round(0.8*(+placeholder.css("font-size").replace("px","")||13)),variant:placeholder.css("font-variant"),weight:placeholder.css("font-weight"),family:placeholder.css("font-family")};fontDefaults.lineHeight=fontDefaults.size*1.15;axisCount=options.xaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.xaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.xaxis,axisOptions);options.xaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}}}axisCount=options.yaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.yaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.yaxis,axisOptions);options.yaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}}}if(options.xaxis.noTicks&&options.xaxis.ticks==null){options.xaxis.ticks=options.xaxis.noTicks}if(options.yaxis.noTicks&&options.yaxis.ticks==null){options.yaxis.ticks=options.yaxis.noTicks}if(options.x2axis){options.xaxes[1]=$.extend(true,{},options.xaxis,options.x2axis);options.xaxes[1].position="top"}if(options.y2axis){options.yaxes[1]=$.extend(true,{},options.yaxis,options.y2axis);options.yaxes[1].position="right"}if(options.grid.coloredAreas){options.grid.markings=options.grid.coloredAreas}if(options.grid.coloredAreasColor){options.grid.markingsColor=options.grid.coloredAreasColor}if(options.lines){$.extend(true,options.series.lines,options.lines)}if(options.points){$.extend(true,options.series.points,options.points)}if(options.bars){$.extend(true,options.series.bars,options.bars)}if(options.shadowSize!=null){options.series.shadowSize=options.shadowSize}if(options.highlightColor!=null){options.series.highlightColor=options.highlightColor}for(i=0;i<options.xaxes.length;++i){getOrCreateAxis(xaxes,i+1).options=options.xaxes[i]}for(i=0;i<options.yaxes.length;++i){getOrCreateAxis(yaxes,i+1).options=options.yaxes[i]}for(var n in hooks){if(options.hooks[n]&&options.hooks[n].length){hooks[n]=hooks[n].concat(options.hooks[n])}}executeHooks(hooks.processOptions,[options])}function setData(d){series=parseData(d);fillInSeriesOptions();processData()}function parseData(d){var res=[];for(var i=0;i<d.length;++i){var s=$.extend(true,{},options.series);if(d[i].data!=null){s.data=d[i].data;delete d[i].data;$.extend(true,s,d[i]);d[i].data=s.data}else{s.data=d[i]}res.push(s)}return res}function axisNumber(obj,coord){var a=obj[coord+"axis"];if(typeof a=="object"){a=a.n}if(typeof a!="number"){a=1}return a}function allAxes(){return $.grep(xaxes.concat(yaxes),function(a){return a})}function canvasToAxisCoords(pos){var res={},i,axis;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used){res["x"+axis.n]=axis.c2p(pos.left)}}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used){res["y"+axis.n]=axis.c2p(pos.top)}}if(res.x1!==undefined){res.x=res.x1}if(res.y1!==undefined){res.y=res.y1}return res}function axisToCanvasCoords(pos){var res={},i,axis,key;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used){key="x"+axis.n;if(pos[key]==null&&axis.n==1){key="x"}if(pos[key]!=null){res.left=axis.p2c(pos[key]);break}}}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used){key="y"+axis.n;if(pos[key]==null&&axis.n==1){key="y"}if(pos[key]!=null){res.top=axis.p2c(pos[key]);break}}}return res}function getOrCreateAxis(axes,number){if(!axes[number-1]){axes[number-1]={n:number,direction:axes==xaxes?"x":"y",options:$.extend(true,{},axes==xaxes?options.xaxis:options.yaxis)}}return axes[number-1]}function fillInSeriesOptions(){var neededColors=series.length,maxIndex=-1,i;for(i=0;i<series.length;++i){var sc=series[i].color;if(sc!=null){neededColors--;if(typeof sc=="number"&&sc>maxIndex){maxIndex=sc}}}if(neededColors<=maxIndex){neededColors=maxIndex+1}var c,colors=[],colorPool=options.colors,colorPoolSize=colorPool.length,variation=0;for(i=0;i<neededColors;i++){c=$.color.parse(colorPool[i%colorPoolSize]||"#666");if(i%colorPoolSize==0&&i){if(variation>=0){if(variation<0.5){variation=-variation-0.2}else{variation=0}}else{variation=-variation}}colors[i]=c.scale("rgb",1+variation)}var colori=0,s;for(i=0;i<series.length;++i){s=series[i];if(s.color==null){s.color=colors[colori].toString();++colori}else{if(typeof s.color=="number"){s.color=colors[s.color].toString()}}if(s.lines.show==null){var v,show=true;for(v in s){if(s[v]&&s[v].show){show=false;break}}if(show){s.lines.show=true}}if(s.lines.zero==null){s.lines.zero=!!s.lines.fill}s.xaxis=getOrCreateAxis(xaxes,axisNumber(s,"x"));s.yaxis=getOrCreateAxis(yaxes,axisNumber(s,"y"))}}function processData(){var topSentry=Number.POSITIVE_INFINITY,bottomSentry=Number.NEGATIVE_INFINITY,fakeInfinity=Number.MAX_VALUE,i,j,k,m,length,s,points,ps,x,y,axis,val,f,p,data,format;function updateAxis(axis,min,max){if(min<axis.datamin&&min!=-fakeInfinity){axis.datamin=min}if(max>axis.datamax&&max!=fakeInfinity){axis.datamax=max}}$.each(allAxes(),function(_,axis){axis.datamin=topSentry;axis.datamax=bottomSentry;axis.used=false});for(i=0;i<series.length;++i){s=series[i];s.datapoints={points:[]};executeHooks(hooks.processRawData,[s,s.data,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];data=s.data;format=s.datapoints.format;if(!format){format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show||(s.lines.show&&s.lines.fill)){var autoscale=!!((s.bars.show&&s.bars.zero)||(s.lines.show&&s.lines.zero));format.push({y:true,number:true,required:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete format[format.length-1].y;format[format.length-1].x=true}}s.datapoints.format=format}if(s.datapoints.pointsize!=null){continue}s.datapoints.pointsize=format.length;ps=s.datapoints.pointsize;points=s.datapoints.points;var insertSteps=s.lines.show&&s.lines.steps;s.xaxis.used=s.yaxis.used=true;for(j=k=0;j<data.length;++j,k+=ps){p=data[j];var nullify=p==null;if(!nullify){for(m=0;m<ps;++m){val=p[m];f=format[m];if(f){if(f.number&&val!=null){val=+val;if(isNaN(val)){val=null}else{if(val==Infinity){val=fakeInfinity}else{if(val==-Infinity){val=-fakeInfinity}}}}if(val==null){if(f.required){nullify=true}if(f.defaultValue!=null){val=f.defaultValue}}}points[k+m]=val}}if(nullify){for(m=0;m<ps;++m){val=points[k+m];if(val!=null){f=format[m];if(f.autoscale!==false){if(f.x){updateAxis(s.xaxis,val,val)}if(f.y){updateAxis(s.yaxis,val,val)}}}points[k+m]=null}}else{if(insertSteps&&k>0&&points[k-ps]!=null&&points[k-ps]!=points[k]&&points[k-ps+1]!=points[k+1]){for(m=0;m<ps;++m){points[k+ps+m]=points[k+m]}points[k+1]=points[k-ps+1];k+=ps}}}}for(i=0;i<series.length;++i){s=series[i];executeHooks(hooks.processDatapoints,[s,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];points=s.datapoints.points;ps=s.datapoints.pointsize;format=s.datapoints.format;var xmin=topSentry,ymin=topSentry,xmax=bottomSentry,ymax=bottomSentry;for(j=0;j<points.length;j+=ps){if(points[j]==null){continue}for(m=0;m<ps;++m){val=points[j+m];f=format[m];if(!f||f.autoscale===false||val==fakeInfinity||val==-fakeInfinity){continue}if(f.x){if(val<xmin){xmin=val}if(val>xmax){xmax=val}}if(f.y){if(val<ymin){ymin=val}if(val>ymax){ymax=val}}}}if(s.bars.show){var delta;switch(s.bars.align){case"left":delta=0;break;case"right":delta=-s.bars.barWidth;break;default:delta=-s.bars.barWidth/2}if(s.bars.horizontal){ymin+=delta;ymax+=delta+s.bars.barWidth}else{xmin+=delta;xmax+=delta+s.bars.barWidth}}updateAxis(s.xaxis,xmin,xmax);updateAxis(s.yaxis,ymin,ymax)}$.each(allAxes(),function(_,axis){if(axis.datamin==topSentry){axis.datamin=null}if(axis.datamax==bottomSentry){axis.datamax=null}})}function setupCanvases(){placeholder.css("padding",0).children(":not(.flot-base,.flot-overlay)").remove();if(placeholder.css("position")=="static"){placeholder.css("position","relative")}surface=new Canvas("flot-base",placeholder);overlay=new Canvas("flot-overlay",placeholder);ctx=surface.context;octx=overlay.context;eventHolder=$(overlay.element).unbind();var existing=placeholder.data("plot");if(existing){existing.shutdown();overlay.clear()}placeholder.data("plot",plot)}function bindEvents(){if(options.grid.hoverable){eventHolder.mousemove(onMouseMove);eventHolder.bind("mouseleave",onMouseLeave)}if(options.grid.clickable){eventHolder.click(onClick)}executeHooks(hooks.bindEvents,[eventHolder])}function shutdown(){if(redrawTimeout){clearTimeout(redrawTimeout)}eventHolder.unbind("mousemove",onMouseMove);eventHolder.unbind("mouseleave",onMouseLeave);eventHolder.unbind("click",onClick);executeHooks(hooks.shutdown,[eventHolder])}function setTransformationHelpers(axis){function identity(x){return x}var s,m,t=axis.options.transform||identity,it=axis.options.inverseTransform;if(axis.direction=="x"){s=axis.scale=plotWidth/Math.abs(t(axis.max)-t(axis.min));m=Math.min(t(axis.max),t(axis.min))}else{s=axis.scale=plotHeight/Math.abs(t(axis.max)-t(axis.min));s=-s;m=Math.max(t(axis.max),t(axis.min))}if(t==identity){axis.p2c=function(p){return(p-m)*s}}else{axis.p2c=function(p){return(t(p)-m)*s}}if(!it){axis.c2p=function(c){return m+c/s}}else{axis.c2p=function(c){return it(m+c/s)}}}function measureTickLabels(axis){var opts=axis.options,ticks=axis.ticks||[],labelWidth=opts.labelWidth||0,labelHeight=opts.labelHeight||0,maxWidth=labelWidth||axis.direction=="x"?Math.floor(surface.width/(ticks.length||1)):null,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=opts.font||"flot-tick-label tickLabel";for(var i=0;i<ticks.length;++i){var t=ticks[i];if(!t.label){continue}var info=surface.getTextInfo(layer,t.label,font,null,maxWidth);labelWidth=Math.max(labelWidth,info.width);labelHeight=Math.max(labelHeight,info.height)}axis.labelWidth=opts.labelWidth||labelWidth;axis.labelHeight=opts.labelHeight||labelHeight}function allocateAxisBoxFirstPhase(axis){var lw=axis.labelWidth,lh=axis.labelHeight,pos=axis.options.position,tickLength=axis.options.tickLength,axisMargin=options.grid.axisMargin,padding=options.grid.labelMargin,all=axis.direction=="x"?xaxes:yaxes,index,innermost;var samePosition=$.grep(all,function(a){return a&&a.options.position==pos&&a.reserveSpace});if($.inArray(axis,samePosition)==samePosition.length-1){axisMargin=0}innermost=$.inArray(axis,samePosition)==0;if(tickLength==null){if(innermost){tickLength="full"}else{tickLength=5}}if(!isNaN(+tickLength)){padding+=+tickLength}if(axis.direction=="x"){lh+=padding;if(pos=="bottom"){plotOffset.bottom+=lh+axisMargin;axis.box={top:surface.height-plotOffset.bottom,height:lh}}else{axis.box={top:plotOffset.top+axisMargin,height:lh};plotOffset.top+=lh+axisMargin}}else{lw+=padding;if(pos=="left"){axis.box={left:plotOffset.left+axisMargin,width:lw};plotOffset.left+=lw+axisMargin}else{plotOffset.right+=lw+axisMargin;axis.box={left:surface.width-plotOffset.right,width:lw}}}axis.position=pos;axis.tickLength=tickLength;axis.box.padding=padding;axis.innermost=innermost}function allocateAxisBoxSecondPhase(axis){if(axis.direction=="x"){axis.box.left=plotOffset.left-axis.labelWidth/2;axis.box.width=surface.width-plotOffset.left-plotOffset.right+axis.labelWidth}else{axis.box.top=plotOffset.top-axis.labelHeight/2;axis.box.height=surface.height-plotOffset.bottom-plotOffset.top+axis.labelHeight}}function adjustLayoutForThingsStickingOut(){var minMargin=options.grid.minBorderMargin,margins={x:0,y:0},i,axis;if(minMargin==null){minMargin=0;for(i=0;i<series.length;++i){minMargin=Math.max(minMargin,2*(series[i].points.radius+series[i].points.lineWidth/2))}}margins.x=margins.y=Math.ceil(minMargin);$.each(allAxes(),function(_,axis){var dir=axis.direction;if(axis.reserveSpace){margins[dir]=Math.ceil(Math.max(margins[dir],(dir=="x"?axis.labelWidth:axis.labelHeight)/2))}});plotOffset.left=Math.max(margins.x,plotOffset.left);plotOffset.right=Math.max(margins.x,plotOffset.right);plotOffset.top=Math.max(margins.y,plotOffset.top);plotOffset.bottom=Math.max(margins.y,plotOffset.bottom)}function setupGrid(){var i,axes=allAxes(),showGrid=options.grid.show;for(var a in plotOffset){var margin=options.grid.margin||0;plotOffset[a]=typeof margin=="number"?margin:margin[a]||0}executeHooks(hooks.processOffset,[plotOffset]);for(var a in plotOffset){if(typeof(options.grid.borderWidth)=="object"){plotOffset[a]+=showGrid?options.grid.borderWidth[a]:0}else{plotOffset[a]+=showGrid?options.grid.borderWidth:0}}$.each(axes,function(_,axis){axis.show=axis.options.show;if(axis.show==null){axis.show=axis.used}axis.reserveSpace=axis.show||axis.options.reserveSpace;setRange(axis)});if(showGrid){var allocatedAxes=$.grep(axes,function(axis){return axis.reserveSpace});$.each(allocatedAxes,function(_,axis){setupTickGeneration(axis);setTicks(axis);snapRangeToTicks(axis,axis.ticks);measureTickLabels(axis)});for(i=allocatedAxes.length-1;i>=0;--i){allocateAxisBoxFirstPhase(allocatedAxes[i])}adjustLayoutForThingsStickingOut();$.each(allocatedAxes,function(_,axis){allocateAxisBoxSecondPhase(axis)})}plotWidth=surface.width-plotOffset.left-plotOffset.right;plotHeight=surface.height-plotOffset.bottom-plotOffset.top;$.each(axes,function(_,axis){setTransformationHelpers(axis)});if(showGrid){drawAxisLabels()}insertLegend()}function setRange(axis){var opts=axis.options,min=+(opts.min!=null?opts.min:axis.datamin),max=+(opts.max!=null?opts.max:axis.datamax),delta=max-min;if(delta==0){var widen=max==0?1:0.01;if(opts.min==null){min-=widen}if(opts.max==null||opts.min!=null){max+=widen}}else{var margin=opts.autoscaleMargin;if(margin!=null){if(opts.min==null){min-=delta*margin;if(min<0&&axis.datamin!=null&&axis.datamin>=0){min=0}}if(opts.max==null){max+=delta*margin;if(max>0&&axis.datamax!=null&&axis.datamax<=0){max=0}}}}axis.min=min;axis.max=max}function setupTickGeneration(axis){var opts=axis.options;var noTicks;if(typeof opts.ticks=="number"&&opts.ticks>0){noTicks=opts.ticks}else{noTicks=0.3*Math.sqrt(axis.direction=="x"?surface.width:surface.height)}var delta=(axis.max-axis.min)/noTicks,dec=-Math.floor(Math.log(delta)/Math.LN10),maxDec=opts.tickDecimals;if(maxDec!=null&&dec>maxDec){dec=maxDec}var magn=Math.pow(10,-dec),norm=delta/magn,size;if(norm<1.5){size=1}else{if(norm<3){size=2;if(norm>2.25&&(maxDec==null||dec+1<=maxDec)){size=2.5;++dec}}else{if(norm<7.5){size=5}else{size=10}}}size*=magn;if(opts.minTickSize!=null&&size<opts.minTickSize){size=opts.minTickSize}axis.delta=delta;axis.tickDecimals=Math.max(0,maxDec!=null?maxDec:dec);axis.tickSize=opts.tickSize||size;if(opts.mode=="time"&&!axis.tickGenerator){throw new Error("Time mode requires the flot.time plugin.")}if(!axis.tickGenerator){axis.tickGenerator=function(axis){var ticks=[],start=floorInBase(axis.min,axis.tickSize),i=0,v=Number.NaN,prev;do{prev=v;v=start+i*axis.tickSize;ticks.push(v);++i}while(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(value,axis){var factor=axis.tickDecimals?Math.pow(10,axis.tickDecimals):1;var formatted=""+Math.round(value*factor)/factor;if(axis.tickDecimals!=null){var decimal=formatted.indexOf(".");var precision=decimal==-1?0:formatted.length-decimal-1;if(precision<axis.tickDecimals){return(precision?formatted:formatted+".")+(""+factor).substr(1,axis.tickDecimals-precision)}}return formatted}}if($.isFunction(opts.tickFormatter)){axis.tickFormatter=function(v,axis){return""+opts.tickFormatter(v,axis)}}if(opts.alignTicksWithAxis!=null){var otherAxis=(axis.direction=="x"?xaxes:yaxes)[opts.alignTicksWithAxis-1];if(otherAxis&&otherAxis.used&&otherAxis!=axis){var niceTicks=axis.tickGenerator(axis);if(niceTicks.length>0){if(opts.min==null){axis.min=Math.min(axis.min,niceTicks[0])}if(opts.max==null&&niceTicks.length>1){axis.max=Math.max(axis.max,niceTicks[niceTicks.length-1])}}axis.tickGenerator=function(axis){var ticks=[],v,i;for(i=0;i<otherAxis.ticks.length;++i){v=(otherAxis.ticks[i].v-otherAxis.min)/(otherAxis.max-otherAxis.min);v=axis.min+v*(axis.max-axis.min);ticks.push(v)}return ticks};if(!axis.mode&&opts.tickDecimals==null){var extraDec=Math.max(0,-Math.floor(Math.log(axis.delta)/Math.LN10)+1),ts=axis.tickGenerator(axis);if(!(ts.length>1&&/\..*0$/.test((ts[1]-ts[0]).toFixed(extraDec)))){axis.tickDecimals=extraDec}}}}}function setTicks(axis){var oticks=axis.options.ticks,ticks=[];if(oticks==null||(typeof oticks=="number"&&oticks>0)){ticks=axis.tickGenerator(axis)}else{if(oticks){if($.isFunction(oticks)){ticks=oticks(axis)}else{ticks=oticks}}}var i,v;axis.ticks=[];for(i=0;i<ticks.length;++i){var label=null;var t=ticks[i];if(typeof t=="object"){v=+t[0];if(t.length>1){label=t[1]}}else{v=+t}if(label==null){label=axis.tickFormatter(v,axis)}if(!isNaN(v)){axis.ticks.push({v:v,label:label})}}}function snapRangeToTicks(axis,ticks){if(axis.options.autoscaleMargin&&ticks.length>0){if(axis.options.min==null){axis.min=Math.min(axis.min,ticks[0].v)}if(axis.options.max==null&&ticks.length>1){axis.max=Math.max(axis.max,ticks[ticks.length-1].v)}}}function draw(){surface.clear();executeHooks(hooks.drawBackground,[ctx]);var grid=options.grid;if(grid.show&&grid.backgroundColor){drawBackground()}if(grid.show&&!grid.aboveData){drawGrid()}for(var i=0;i<series.length;++i){executeHooks(hooks.drawSeries,[ctx,series[i]]);drawSeries(series[i])}executeHooks(hooks.draw,[ctx]);if(grid.show&&grid.aboveData){drawGrid()}surface.render();triggerRedrawOverlay()}function extractRange(ranges,coord){var axis,from,to,key,axes=allAxes();for(var i=0;i<axes.length;++i){axis=axes[i];if(axis.direction==coord){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1){key=coord+"axis"}if(ranges[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coord=="x"?xaxes[0]:yaxes[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=null&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:axis}}function drawBackground(){ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.fillStyle=getColorOrGradient(options.grid.backgroundColor,plotHeight,0,"rgba(255, 255, 255, 0)");ctx.fillRect(0,0,plotWidth,plotHeight);ctx.restore()}function drawGrid(){var i,axes,bw,bc;ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var markings=options.grid.markings;if(markings){if($.isFunction(markings)){axes=plot.getAxes();axes.xmin=axes.xaxis.min;axes.xmax=axes.xaxis.max;axes.ymin=axes.yaxis.min;axes.ymax=axes.yaxis.max;markings=markings(axes)}for(i=0;i<markings.length;++i){var m=markings[i],xrange=extractRange(m,"x"),yrange=extractRange(m,"y");if(xrange.from==null){xrange.from=xrange.axis.min}if(xrange.to==null){xrange.to=xrange.axis.max}if(yrange.from==null){yrange.from=yrange.axis.min}if(yrange.to==null){yrange.to=yrange.axis.max}if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.to<yrange.axis.min||yrange.from>yrange.axis.max){continue}xrange.from=Math.max(xrange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.axis.max);if(xrange.from==xrange.to&&yrange.from==yrange.to){continue}xrange.from=xrange.axis.p2c(xrange.from);xrange.to=xrange.axis.p2c(xrange.to);yrange.from=yrange.axis.p2c(yrange.from);yrange.to=yrange.axis.p2c(yrange.to);if(xrange.from==xrange.to||yrange.from==yrange.to){ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=m.lineWidth||options.grid.markingsLineWidth;ctx.moveTo(xrange.from,yrange.from);ctx.lineTo(xrange.to,yrange.to);ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;for(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,y,xoff,yoff;if(!axis.show||axis.ticks.length==0){continue}ctx.lineWidth=1;if(axis.direction=="x"){x=0;if(t=="full"){y=(axis.position=="top"?0:plotHeight)}else{y=box.top-plotOffset.top+(axis.position=="top"?box.height:0)}}else{y=0;if(t=="full"){x=(axis.position=="left"?0:plotWidth)}else{x=box.left-plotOffset.left+(axis.position=="left"?box.width:0)}}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx.beginPath();xoff=yoff=0;if(axis.direction=="x"){xoff=plotWidth+1}else{yoff=plotHeight+1}if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+0.5}else{x=Math.floor(x)+0.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.strokeStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||(t=="full"&&((typeof bw=="object"&&bw[axis.position]>0)||bw>0)&&(v==axis.min||v==axis.max))){continue}if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(axis.position=="top"){yoff=-yoff}}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(axis.position=="left"){xoff=-xoff}}if(ctx.lineWidth==1){if(axis.direction=="x"){x=Math.floor(x)+0.5}else{y=Math.floor(y)+0.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}if(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-bw.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.strokeStyle=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.right/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.bottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.moveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bottom/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;ctx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}function drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(layer);if(!axis.show||axis.ticks.length==0){return}for(var i=0;i<axis.ticks.length;++i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max){continue}if(axis.direction=="x"){halign="center";x=plotOffset.left+axis.p2c(tick.v);if(axis.position=="bottom"){y=box.top+box.padding}else{y=box.top+box.height-box.padding;valign="bottom"}}else{valign="middle";y=plotOffset.top+axis.p2c(tick.v);if(axis.position=="left"){x=box.left+box.width-box.padding;halign="right"}else{x=box.left+box.padding}}surface.addText(layer,x,y,tick.label,font,null,null,halign,valign)}})}function drawSeries(series){if(series.lines.show){drawSeriesLines(series)}if(series.bars.show){drawSeriesBars(series)}if(series.points.show){drawSeriesPoints(series)}}function drawSeriesLines(series){function plotLine(datapoints,xoffset,yoffset,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,prevx=null,prevy=null;ctx.beginPath();for(var i=ps;i<points.length;i+=ps){var x1=points[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(x1==null||x2==null){continue}if(y1<=y2&&y1<axisy.min){if(y2<axisy.min){continue}x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else{if(y2<=y1&&y2<axisy.min){if(y1<axisy.min){continue}x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}}if(y1>=y2&&y1>axisy.max){if(y2>axisy.max){continue}x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else{if(y2>=y1&&y2>axisy.max){if(y1>axisy.max){continue}x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}}if(x1<=x2&&x1<axisx.min){if(x2<axisx.min){continue}y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else{if(x2<=x1&&x2<axisx.min){if(x1<axisx.min){continue}y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max){continue}y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else{if(x2>=x1&&x2>axisx.max){if(x1>axisx.max){continue}y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}}if(x1!=prevx||y1!=prevy){ctx.moveTo(axisx.p2c(x1)+xoffset,axisy.p2c(y1)+yoffset)}prevx=x2;prevy=y2;ctx.lineTo(axisx.p2c(x2)+xoffset,axisy.p2c(y2)+yoffset)}ctx.stroke()}function plotLineArea(datapoints,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,bottom=Math.min(Math.max(0,axisy.min),axisy.max),i=0,top,areaOpen=false,ypos=1,segmentStart=0,segmentEnd=0;while(true){if(ps>0&&i>points.length+ps){break}i+=ps;var x1=points[i-ps],y1=points[i-ps+ypos],x2=points[i],y2=points[i+ypos];if(areaOpen){if(ps>0&&x1!=null&&x2==null){segmentEnd=i;ps=-ps;ypos=2;continue}if(ps<0&&i==segmentStart+ps){ctx.fill();areaOpen=false;ps=-ps;ypos=1;i=segmentStart=segmentEnd+ps;continue}}if(x1==null||x2==null){continue}if(x1<=x2&&x1<axisx.min){if(x2<axisx.min){continue}y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else{if(x2<=x1&&x2<axisx.min){if(x1<axisx.min){continue}y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max){continue}y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else{if(x2>=x1&&x2>axisx.max){if(x1>axisx.max){continue}y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}}if(!areaOpen){ctx.beginPath();ctx.moveTo(axisx.p2c(x1),axisy.p2c(bottom));areaOpen=true}if(y1>=axisy.max&&y2>=axisy.max){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.max));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.max));continue}else{if(y1<=axisy.min&&y2<=axisy.min){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.min));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.min));continue}}var x1old=x1,x2old=x2;if(y1<=y2&&y1<axisy.min&&y2>=axisy.min){x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else{if(y2<=y1&&y2<axisy.min&&y1>=axisy.min){x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}}if(y1>=y2&&y1>axisy.max&&y2<=axisy.max){x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else{if(y2>=y1&&y2>axisy.max&&y1<=axisy.max){x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}}if(x1!=x1old){ctx.lineTo(axisx.p2c(x1old),axisy.p2c(y1))}ctx.lineTo(axisx.p2c(x1),axisy.p2c(y1));ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));if(x2!=x2old){ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));ctx.lineTo(axisx.p2c(x2old),axisy.p2c(y2))}}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineJoin="round";var lw=series.lines.lineWidth,sw=series.shadowSize;if(lw>0&&sw>0){ctx.lineWidth=sw;ctx.strokeStyle="rgba(0,0,0,0.1)";var angle=Math.PI/18;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/2),Math.cos(angle)*(lw/2+sw/2),series.xaxis,series.yaxis);ctx.lineWidth=sw/2;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/4),Math.cos(angle)*(lw/2+sw/4),series.xaxis,series.yaxis)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;var fillStyle=getFillStyle(series.lines,series.color,0,plotHeight);if(fillStyle){ctx.fillStyle=fillStyle;plotLineArea(series.datapoints,series.xaxis,series.yaxis)}if(lw>0){plotLine(series.datapoints,0,0,series.xaxis,series.yaxis)}ctx.restore()}function drawSeriesPoints(series){function plotPoints(datapoints,radius,fillStyle,offset,shadow,axisx,axisy,symbol){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){var x=points[i],y=points[i+1];if(x==null||x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max){continue}ctx.beginPath();x=axisx.p2c(x);y=axisy.p2c(y)+offset;if(symbol=="circle"){ctx.arc(x,y,radius,0,shadow?Math.PI:Math.PI*2,false)}else{symbol(ctx,x,y,radius,shadow)}ctx.closePath();if(fillStyle){ctx.fillStyle=fillStyle;ctx.fill()}ctx.stroke()}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var lw=series.points.lineWidth,sw=series.shadowSize,radius=series.points.radius,symbol=series.points.symbol;if(lw==0){lw=0.0001}if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";plotPoints(series.datapoints,radius,null,w+w/2,true,series.xaxis,series.yaxis,symbol);ctx.strokeStyle="rgba(0,0,0,0.2)";plotPoints(series.datapoints,radius,null,w/2,true,series.xaxis,series.yaxis,symbol)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;plotPoints(series.datapoints,radius,getFillStyle(series.points,series.color),0,false,series.xaxis,series.yaxis,symbol);ctx.restore()}function drawBar(x,y,b,barLeft,barRight,fillStyleCallback,axisx,axisy,c,horizontal,lineWidth){var left,right,bottom,top,drawLeft,drawRight,drawTop,drawBottom,tmp;if(horizontal){drawBottom=drawRight=drawTop=true;drawLeft=false;left=b;right=x;top=y+barLeft;bottom=y+barRight;if(right<left){tmp=right;right=left;left=tmp;drawLeft=true;drawRight=false}}else{drawLeft=drawRight=drawTop=true;drawBottom=false;left=x+barLeft;right=x+barRight;bottom=b;top=y;if(top<bottom){tmp=top;top=bottom;bottom=tmp;drawBottom=true;drawTop=false}}if(right<axisx.min||left>axisx.max||top<axisy.min||bottom>axisy.max){return}if(left<axisx.min){left=axisx.min;drawLeft=false}if(right>axisx.max){right=axisx.max;drawRight=false}if(bottom<axisy.min){bottom=axisy.min;drawBottom=false}if(top>axisy.max){top=axisy.max;drawTop=false}left=axisx.p2c(left);bottom=axisy.p2c(bottom);right=axisx.p2c(right);top=axisy.p2c(top);if(fillStyleCallback){c.fillStyle=fillStyleCallback(bottom,top);c.fillRect(left,top,right-left,bottom-top)}if(lineWidth>0&&(drawLeft||drawRight||drawTop||drawBottom)){c.beginPath();c.moveTo(left,bottom);if(drawLeft){c.lineTo(left,top)}else{c.moveTo(left,top)}if(drawTop){c.lineTo(right,top)}else{c.moveTo(right,top)}if(drawRight){c.lineTo(right,bottom)}else{c.moveTo(right,bottom)}if(drawBottom){c.lineTo(left,bottom)}else{c.moveTo(left,bottom)}c.stroke()}}function drawSeriesBars(series){function plotBars(datapoints,barLeft,barRight,fillStyleCallback,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){if(points[i]==null){continue}drawBar(points[i],points[i+1],points[i+2],barLeft,barRight,fillStyleCallback,axisx,axisy,ctx,series.bars.horizontal,series.bars.lineWidth)}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineWidth=series.bars.lineWidth;ctx.strokeStyle=series.color;var barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}var fillStyleCallback=series.bars.fill?function(bottom,top){return getFillStyle(series.bars,series.color,bottom,top)}:null;plotBars(series.datapoints,barLeft,barLeft+series.bars.barWidth,fillStyleCallback,series.xaxis,series.yaxis);ctx.restore()}function getFillStyle(filloptions,seriesColor,bottom,top){var fill=filloptions.fill;if(!fill){return null}if(filloptions.fillColor){return getColorOrGradient(filloptions.fillColor,bottom,top,seriesColor)}var c=$.color.parse(seriesColor);c.a=typeof fill=="number"?fill:0.4;c.normalize();return c.toString()}function insertLegend(){placeholder.find(".legend").remove();if(!options.legend.show){return}var fragments=[],entries=[],rowStarted=false,lf=options.legend.labelFormatter,s,label;for(var i=0;i<series.length;++i){s=series[i];if(s.label){label=lf?lf(s.label,s):s.label;if(label){entries.push({label:label,color:s.color})}}}if(options.legend.sorted){if($.isFunction(options.legend.sorted)){entries.sort(options.legend.sorted)}else{if(options.legend.sorted=="reverse"){entries.reverse()}else{var ascending=options.legend.sorted!="descending";entries.sort(function(a,b){return a.label==b.label?0:((a.label<b.label)!=ascending?1:-1)})}}}for(var i=0;i<entries.length;++i){var entry=entries[i];if(i%options.legend.noColumns==0){if(rowStarted){fragments.push("</tr>")}fragments.push("<tr>");rowStarted=true}fragments.push('<td class="legendColorBox"><div style="border:1px solid '+options.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+entry.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+entry.label+"</td>")}if(rowStarted){fragments.push("</tr>")}if(fragments.length==0){return}var table='<table style="font-size:smaller;color:'+options.grid.color+'">'+fragments.join("")+"</table>";if(options.legend.container!=null){$(options.legend.container).html(table)}else{var pos="",p=options.legend.position,m=options.legend.margin;if(m[0]==null){m=[m,m]}if(p.charAt(0)=="n"){pos+="top:"+(m[1]+plotOffset.top)+"px;"}else{if(p.charAt(0)=="s"){pos+="bottom:"+(m[1]+plotOffset.bottom)+"px;"}}if(p.charAt(1)=="e"){pos+="right:"+(m[0]+plotOffset.right)+"px;"}else{if(p.charAt(1)=="w"){pos+="left:"+(m[0]+plotOffset.left)+"px;"}}var legend=$('<div class="legend">'+table.replace('style="','style="position:absolute;'+pos+";")+"</div>").appendTo(placeholder);if(options.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==null){c=options.grid.backgroundColor;if(c&&typeof c=="string"){c=$.color.parse(c)}else{c=$.color.extract(legend,"background-color")}c.a=1;c=c.toString()}var div=legend.children();$('<div style="position:absolute;width:'+div.width()+"px;height:"+div.height()+"px;"+pos+"background-color:"+c+';"> </div>').prependTo(legend).css("opacity",options.legend.backgroundOpacity)}}}var highlights=[],redrawTimeout=null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options.grid.mouseActiveRadius,smallestDistance=maxDistance*maxDistance+1,item=null,foundPoint=false,i,j,ps;for(i=series.length-1;i>=0;--i){if(!seriesFilter(series[i])){continue}var s=series[i],axisx=s.xaxis,axisy=s.yaxis,points=s.datapoints.points,mx=axisx.c2p(mouseX),my=axisy.c2p(mouseY),maxx=maxDistance/axisx.scale,maxy=maxDistance/axisy.scale;ps=s.datapoints.pointsize;if(axisx.options.inverseTransform){maxx=Number.MAX_VALUE}if(axisy.options.inverseTransform){maxy=Number.MAX_VALUE}if(s.lines.show||s.points.show){for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1];if(x==null){continue}if(x-mx>maxx||x-mx<-maxx||y-my>maxy||y-my<-maxy){continue}var dx=Math.abs(axisx.p2c(x)-mouseX),dy=Math.abs(axisy.p2c(y)-mouseY),dist=dx*dx+dy*dy;if(dist<smallestDistance){smallestDistance=dist;item=[i,j/ps]}}}if(s.bars.show&&!item){var barLeft,barRight;switch(s.bars.align){case"left":barLeft=0;break;case"right":barLeft=-s.bars.barWidth;break;default:barLeft=-s.bars.barWidth/2}barRight=barLeft+s.bars.barWidth;for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1],b=points[j+2];if(x==null){continue}if(series[i].bars.horizontal?(mx<=Math.max(b,x)&&mx>=Math.min(b,x)&&my>=y+barLeft&&my<=y+barRight):(mx>=x+barLeft&&mx<=x+barRight&&my>=Math.min(b,y)&&my<=Math.max(b,y))){item=[i,j/ps]}}}}if(item){i=item[0];j=item[1];ps=series[i].datapoints.pointsize;return{datapoint:series[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],seriesIndex:i}}return null}function onMouseMove(e){if(options.grid.hoverable){triggerClickHoverEvent("plothover",e,function(s){return s.hoverable!=false})}}function onMouseLeave(e){if(options.grid.hoverable){triggerClickHoverEvent("plothover",e,function(s){return false})}}function onClick(e){triggerClickHoverEvent("plotclick",e,function(s){return s.clickable!=false})}function triggerClickHoverEvent(eventname,event,seriesFilter){var offset=eventHolder.offset(),canvasX=event.pageX-offset.left-plotOffset.left,canvasY=event.pageY-offset.top-plotOffset.top,pos=canvasToAxisCoords({left:canvasX,top:canvasY});pos.pageX=event.pageX;pos.pageY=event.pageY;var item=findNearbyItem(canvasX,canvasY,seriesFilter);if(item){item.pageX=parseInt(item.series.xaxis.p2c(item.datapoint[0])+offset.left+plotOffset.left,10);item.pageY=parseInt(item.series.yaxis.p2c(item.datapoint[1])+offset.top+plotOffset.top,10)}if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series&&h.point[0]==item.datapoint[0]&&h.point[1]==item.datapoint[1])){unhighlight(h.series,h.point)}}if(item){highlight(item.series,item.datapoint,eventname)}}placeholder.trigger(eventname,[pos,item])}function triggerRedrawOverlay(){var t=options.interaction.redrawOverlayInterval;if(t==-1){drawOverlay();return}if(!redrawTimeout){redrawTimeout=setTimeout(drawOverlay,t)}}function drawOverlay(){redrawTimeout=null;octx.save();overlay.clear();octx.translate(plotOffset.left,plotOffset.top);var i,hi;for(i=0;i<highlights.length;++i){hi=highlights[i];if(hi.series.bars.show){drawBarHighlight(hi.series,hi.point)}else{drawPointHighlight(hi.series,hi.point)}}octx.restore();executeHooks(hooks.drawOverlay,[octx])}function highlight(s,point,auto){if(typeof s=="number"){s=series[s]}if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i==-1){highlights.push({series:s,point:point,auto:auto});triggerRedrawOverlay()}else{if(!auto){highlights[i].auto=false}}}function unhighlight(s,point){if(s==null&&point==null){highlights=[];triggerRedrawOverlay();return}if(typeof s=="number"){s=series[s]}if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i!=-1){highlights.splice(i,1);triggerRedrawOverlay()}}function indexOfHighlight(s,p){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s&&h.point[0]==p[0]&&h.point[1]==p[1]){return i}}return -1}function drawPointHighlight(series,point){var x=point[0],y=point[1],axisx=series.xaxis,axisy=series.yaxis,highlightColor=(typeof series.highlightColor==="string")?series.highlightColor:$.color.parse(series.color).scale("a",0.5).toString();if(x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max){return}var pointRadius=series.points.radius+series.points.lineWidth/2;octx.lineWidth=pointRadius;octx.strokeStyle=highlightColor;var radius=1.5*pointRadius;x=axisx.p2c(x);y=axisy.p2c(y);octx.beginPath();if(series.points.symbol=="circle"){octx.arc(x,y,radius,0,2*Math.PI,false)}else{series.points.symbol(octx,x,y,radius,false)}octx.closePath();octx.stroke()}function drawBarHighlight(series,point){var highlightColor=(typeof series.highlightColor==="string")?series.highlightColor:$.color.parse(series.color).scale("a",0.5).toString(),fillStyle=highlightColor,barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}octx.lineWidth=series.bars.lineWidth;octx.strokeStyle=highlightColor;drawBar(point[0],point[1],point[2]||0,barLeft,barLeft+series.bars.barWidth,function(){return fillStyle},series.xaxis,series.yaxis,octx,series.bars.horizontal,series.bars.lineWidth)}function getColorOrGradient(spec,bottom,top,defaultColor){if(typeof spec=="string"){return spec}else{var gradient=ctx.createLinearGradient(0,top,0,bottom);for(var i=0,l=spec.colors.length;i<l;++i){var c=spec.colors[i];if(typeof c!="string"){var co=$.color.parse(defaultColor);if(c.brightness!=null){co=co.scale("rgb",c.brightness)}if(c.opacity!=null){co.a*=c.opacity}c=co.toString()}gradient.addColorStop(i/(l-1),c)}return gradient}}}$.plot=function(placeholder,data,options){var plot=new Plot($(placeholder),data,options,$.plot.plugins);return plot};$.plot.version="0.8.2-alpha";$.plot.plugins=[];$.fn.plot=function(data,options){return this.each(function(){$.plot(this,data,options)})};function floorInBase(n,base){return base*Math.floor(n/base)}})(jQuery); \ No newline at end of file
diff --git a/app/assets/javascripts/jquery.flot.tickrotor.js b/app/assets/javascripts/jquery.flot.tickrotor.js
new file mode 100644
index 000000000..404b2b0a7
--- /dev/null
+++ b/app/assets/javascripts/jquery.flot.tickrotor.js
@@ -0,0 +1,205 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is flot-tickrotor.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Mark Cote <mcote@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * flot-tickrotor: flot plugin to display angled X-axis tick labels.
+ *
+ * Requires flot 0.7 or higher and a browser supporting <canvas>.
+ *
+ * To activate, just set xaxis.rotateTicks to an angle in degrees. Labels
+ * are rotated clockwise, so if you want the labels to angle up and to the right (/)
+ * you need to provide an angle > 90. The text will be flipped so that it is still
+ * right-side-up.
+ * Angles greater than or equal to 180 are ignored.
+ */
+(function ($) {
+ var options = { };
+
+ function init(plot) {
+ // Taken from flot-axislabels.
+ // This is kind of a hack. There are no hooks in Flot between
+ // the creation and measuring of the ticks (setTicks, measureTickLabels
+ // in setupGrid() ) and the drawing of the ticks and plot box
+ // (insertAxisLabels in setupGrid() ).
+ //
+ // Therefore, we use a trick where we run the draw routine twice:
+ // the first time to get the tick measurements, so that we can change
+ // them, and then have it draw it again.
+ var ticks = [];
+ var font;
+ var secondPass = false;
+ var rotateTicks, rotateTicksRads, radsAboveHoriz;
+ plot.hooks.draw.push(function (plot, ctx) {
+ if (!secondPass) {
+ var opts = plot.getAxes().xaxis.options;
+ if (opts.rotateTicks === undefined) {
+ return;
+ }
+
+ rotateTicks = parseInt(opts.rotateTicks, 10);
+ if (rotateTicks.toString() != opts.rotateTicks || rotateTicks == 0 || rotateTicks >= 180) {
+ return;
+ }
+
+ rotateTicksRads = rotateTicks * Math.PI/180;
+ if (rotateTicks > 90) {
+ radsAboveHoriz = Math.PI - rotateTicksRads;
+ } else {
+ radsAboveHoriz = Math.PI/2 - rotateTicksRads;
+ }
+
+ font = opts.rotateTicksFont;
+ if (!font) {
+ font = $('.tickLabel').css('font');
+ }
+ if (!font) {
+ font = 'smaller sans-serif';
+ }
+
+ var elem, maxLabelWidth = 0, maxLabelHeight = 0, minX = 0, maxX = 0;
+
+ var xaxis = plot.getAxes().xaxis;
+ ticks = plot.getAxes().xaxis.ticks;
+ opts.ticks = []; // we'll make our own
+
+ var x;
+ for (var i = 0; i < ticks.length; i++) {
+ elem = $('<span style="font:' + font + '">' + ticks[i].label + '</span>');
+ plot.getPlaceholder().append(elem);
+ ticks[i].height = elem.outerHeight(true);
+ ticks[i].width = elem.outerWidth(true);
+ elem.remove();
+ if (ticks[i].height > maxLabelHeight) {
+ maxLabelHeight = ticks[i].height;
+ }
+ if (ticks[i].width > maxLabelWidth) {
+ maxLabelWidth = ticks[i].width;
+ }
+ var tick = ticks[i];
+ // See second-draw code below for explanation of offsets.
+ if (rotateTicks > 90) {
+ // See if any labels are too long and require increased left
+ // padding.
+ x = Math.round(plot.getPlotOffset().left + xaxis.p2c(tick.v))
+ - Math.ceil(Math.cos(radsAboveHoriz) * tick.height)
+ - Math.ceil(Math.cos(radsAboveHoriz) * tick.width);
+ if (x < minX) {
+ minX = x;
+ }
+ } else {
+ // See if any labels are too long and require increased right
+ // padding.
+ x = Math.round(plot.getPlotOffset().left + xaxis.p2c(tick.v))
+ + Math.ceil(Math.cos(radsAboveHoriz) * tick.height)
+ + Math.ceil(Math.cos(radsAboveHoriz) * tick.width);
+ if (x > maxX) {
+ maxX = x;
+ }
+ }
+ }
+
+ // Calculate maximum label height after rotating.
+ if (rotateTicks > 90) {
+ var acuteRads = rotateTicksRads - Math.PI/2;
+ opts.labelHeight = Math.ceil(Math.sin(acuteRads) * maxLabelWidth)
+ + Math.ceil(Math.sin(acuteRads) * maxLabelHeight);
+ } else {
+ var acuteRads = Math.PI/2 - rotateTicksRads;
+ // Center such that the top of the label is at the center of the tick.
+ opts.labelHeight = Math.ceil(Math.sin(rotateTicksRads) * maxLabelWidth)
+ + Math.ceil(Math.sin(acuteRads) * maxLabelHeight);
+ }
+
+ if (minX < 0) {
+ plot.getAxes().yaxis.options.labelWidth = -1 * minX;
+ }
+
+ // Doesn't seem to work if there are no values using the second y axis.
+ //if (maxX > xaxis.box.left + xaxis.box.width) {
+ // plot.getAxes().y2axis.options.labelWidth = maxX - xaxis.box.left - xaxis.box.width;
+ //}
+
+ // re-draw with new label widths and heights
+ secondPass = true;
+ plot.setupGrid();
+ plot.draw();
+ } else {
+ if (ticks.length == 0) {
+ return;
+ }
+ var xaxis = plot.getAxes().xaxis;
+ var box = xaxis.box;
+ var tick, label, xoffset, yoffset;
+ for (var i = 0; i < ticks.length; i++) {
+ tick = ticks[i];
+ if (!tick.label) {
+ continue;
+ }
+ ctx.save();
+ ctx.font = font;
+ if (rotateTicks <= 90) {
+ // Center such that the top of the label is at the center of the tick.
+ xoffset = -Math.ceil(Math.cos(radsAboveHoriz) * tick.height);
+ yoffset = Math.ceil(Math.sin(radsAboveHoriz) * tick.height);
+ ctx.translate(Math.round(plot.getPlotOffset().left + xaxis.p2c(tick.v)) + xoffset,
+ box.top + box.padding + plot.getOptions().grid.labelMargin + yoffset);
+ ctx.rotate(rotateTicksRads);
+ } else {
+ // We want the text to facing up, so we have to rotate counterclockwise,
+ // which means the label has to *end* at the center of the tick.
+ xoffset = Math.ceil(Math.cos(radsAboveHoriz) * tick.height)
+ - Math.ceil(Math.cos(radsAboveHoriz) * tick.width);
+ yoffset = Math.ceil(Math.sin(radsAboveHoriz) * tick.width)
+ + Math.ceil(Math.sin(radsAboveHoriz) * tick.height);
+ ctx.translate(Math.round(plot.getPlotOffset().left + xaxis.p2c(tick.v) + xoffset),
+ box.top + box.padding + plot.getOptions().grid.labelMargin + yoffset);
+ ctx.rotate(-radsAboveHoriz);
+ }
+ ctx.fillText(tick.label, 0, 0);
+ ctx.restore();
+ }
+ }
+ });
+ }
+
+ $.plot.plugins.push({
+ init: init,
+ options: options,
+ name: 'tickRotor',
+ version: '1.0'
+ });
+})(jQuery);
diff --git a/app/assets/javascripts/jquery.flot.tickrotor.min.js b/app/assets/javascripts/jquery.flot.tickrotor.min.js
new file mode 100644
index 000000000..87fc79d10
--- /dev/null
+++ b/app/assets/javascripts/jquery.flot.tickrotor.min.js
@@ -0,0 +1 @@
+(function($){var options={};function init(plot){var ticks=[];var font;var secondPass=false;var rotateTicks,rotateTicksRads,radsAboveHoriz;plot.hooks.draw.push(function(plot,ctx){if(!secondPass){var opts=plot.getAxes().xaxis.options;if(opts.rotateTicks===undefined){return}rotateTicks=parseInt(opts.rotateTicks,10);if(rotateTicks.toString()!=opts.rotateTicks||rotateTicks==0||rotateTicks>=180){return}rotateTicksRads=rotateTicks*Math.PI/180;if(rotateTicks>90){radsAboveHoriz=Math.PI-rotateTicksRads}else{radsAboveHoriz=Math.PI/2-rotateTicksRads}font=opts.rotateTicksFont;if(!font){font=$(".tickLabel").css("font")}if(!font){font="smaller sans-serif"}var elem,maxLabelWidth=0,maxLabelHeight=0,minX=0,maxX=0;var xaxis=plot.getAxes().xaxis;ticks=plot.getAxes().xaxis.ticks;opts.ticks=[];var x;for(var i=0;i<ticks.length;i++){elem=$('<span style="font:'+font+'">'+ticks[i].label+"</span>");plot.getPlaceholder().append(elem);ticks[i].height=elem.outerHeight(true);ticks[i].width=elem.outerWidth(true);elem.remove();if(ticks[i].height>maxLabelHeight){maxLabelHeight=ticks[i].height}if(ticks[i].width>maxLabelWidth){maxLabelWidth=ticks[i].width}var tick=ticks[i];if(rotateTicks>90){x=Math.round(plot.getPlotOffset().left+xaxis.p2c(tick.v))-Math.ceil(Math.cos(radsAboveHoriz)*tick.height)-Math.ceil(Math.cos(radsAboveHoriz)*tick.width);if(x<minX){minX=x}}else{x=Math.round(plot.getPlotOffset().left+xaxis.p2c(tick.v))+Math.ceil(Math.cos(radsAboveHoriz)*tick.height)+Math.ceil(Math.cos(radsAboveHoriz)*tick.width);if(x>maxX){maxX=x}}}if(rotateTicks>90){var acuteRads=rotateTicksRads-Math.PI/2;opts.labelHeight=Math.ceil(Math.sin(acuteRads)*maxLabelWidth)+Math.ceil(Math.sin(acuteRads)*maxLabelHeight)}else{var acuteRads=Math.PI/2-rotateTicksRads;opts.labelHeight=Math.ceil(Math.sin(rotateTicksRads)*maxLabelWidth)+Math.ceil(Math.sin(acuteRads)*maxLabelHeight)}if(minX<0){plot.getAxes().yaxis.options.labelWidth=-1*minX}secondPass=true;plot.setupGrid();plot.draw()}else{if(ticks.length==0){return}var xaxis=plot.getAxes().xaxis;var box=xaxis.box;var tick,label,xoffset,yoffset;for(var i=0;i<ticks.length;i++){tick=ticks[i];if(!tick.label){continue}ctx.save();ctx.font=font;if(rotateTicks<=90){xoffset=-Math.ceil(Math.cos(radsAboveHoriz)*tick.height);yoffset=Math.ceil(Math.sin(radsAboveHoriz)*tick.height);ctx.translate(Math.round(plot.getPlotOffset().left+xaxis.p2c(tick.v))+xoffset,box.top+box.padding+plot.getOptions().grid.labelMargin+yoffset);ctx.rotate(rotateTicksRads)}else{xoffset=Math.ceil(Math.cos(radsAboveHoriz)*tick.height)-Math.ceil(Math.cos(radsAboveHoriz)*tick.width);yoffset=Math.ceil(Math.sin(radsAboveHoriz)*tick.width)+Math.ceil(Math.sin(radsAboveHoriz)*tick.height);ctx.translate(Math.round(plot.getPlotOffset().left+xaxis.p2c(tick.v)+xoffset),box.top+box.padding+plot.getOptions().grid.labelMargin+yoffset);ctx.rotate(-radsAboveHoriz)}ctx.fillText(tick.label,0,0);ctx.restore()}}})}$.plot.plugins.push({init:init,options:options,name:"tickRotor",version:"1.0"})})(jQuery); \ No newline at end of file
diff --git a/app/assets/javascripts/stats-graphs.js b/app/assets/javascripts/stats-graphs.js
index 73e19a6fc..ff3d3a11a 100644
--- a/app/assets/javascripts/stats-graphs.js
+++ b/app/assets/javascripts/stats-graphs.js
@@ -11,7 +11,8 @@ $(document).ready(function() {
dataset,
plot,
graph_data,
- graph_div = $('#' + graph_id);
+ graph_div = $('#' + graph_id),
+ previousPoint = null;
if (!graph_data.x_values) {
/* Then there's no data for this graph */
@@ -19,7 +20,7 @@ $(document).ready(function() {
}
graph_div.css('width', '700px');
- graph_div.css('height', '400px');
+ graph_div.css('height', '600px');
dataset = [
{'color': 'orange',
@@ -56,8 +57,10 @@ $(document).ready(function() {
}
options = {
+ 'grid': { 'hoverable': true, 'clickable': true },
'xaxis': {
'ticks': graph_data.x_ticks,
+ 'rotateTicks': 90
},
'yaxis': {
'min': 0,
@@ -83,5 +86,50 @@ $(document).ready(function() {
plot = $.plot(graph_div,
dataset,
options);
+
+ graph_div.bind("plotclick", function(event, pos, item) {
+ var i, pb, url, name;
+ if (item) {
+ i = item.dataIndex;
+ pb = graph_data.public_bodies[i];
+ url = pb.url;
+ name = pb.name;
+ window.location.href = url;
+ }
+ });
+
+ /* This code is adapted from:
+ http://www.flotcharts.org/flot/examples/interacting/ */
+
+ function showTooltip(x, y, contents) {
+ $('<div id="flot-tooltip">' + contents + '</div>').css({
+ 'position': 'absolute',
+ 'display': 'none',
+ 'top': y + 10,
+ 'left': x + 10,
+ 'border': '1px solid #fdd',
+ 'padding': '2px',
+ 'background-color': '#fee',
+ 'opacity': 0.80
+ }).appendTo("body").fadeIn(200);
+ }
+
+ graph_div.bind("plothover", function (event, pos, item) {
+ var escapedName, x, y;
+ if (item) {
+ if (previousPoint != item.dataIndex) {
+ previousPoint = item.dataIndex;
+ $("#flot-tooltip").remove();
+ escapedName = $('<div />').text(
+ graph_data.tooltips[item.dataIndex]).html();
+ showTooltip(item.pageX,
+ item.pageY,
+ escapedName);
+ }
+ } else {
+ $("#flot-tooltip").remove();
+ previousPoint = null;
+ }
+ });
});
});
diff --git a/app/assets/javascripts/stats.js b/app/assets/javascripts/stats.js
index cafea336a..8c743ad87 100644
--- a/app/assets/javascripts/stats.js
+++ b/app/assets/javascripts/stats.js
@@ -1,5 +1,6 @@
// ...
//= require jquery.flot.min
//= require jquery.flot.errorbars.min
+//= require jquery.flot.tickrotor.min
//= require jquery.flot.axislabels
//= require stats-graphs
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css
index 9f66182a9..097221b2f 100644
--- a/app/assets/stylesheets/application.css
+++ b/app/assets/stylesheets/application.css
@@ -1,3 +1,7 @@
/* ...
*= require_self
+*= require main
+*= require custom
+*= require jquery.ui.datepicker
+*= require jquery.ui.tabs
*/
diff --git a/app/assets/stylesheets/custom.css b/app/assets/stylesheets/custom.css
new file mode 100644
index 000000000..f1df5cca5
--- /dev/null
+++ b/app/assets/stylesheets/custom.css
@@ -0,0 +1,5 @@
+/* Themes will typically add a custom.css file with their own CSS.
+ This file is present to stop errors where THEME_URLS is empty,
+ since it is mentioned in the application.css manifest. Themes
+ should prepend their directories to the asset path so this will
+ be overriden by any custom.css in the theme. */
diff --git a/app/assets/stylesheets/fonts.scss b/app/assets/stylesheets/fonts.scss
index 18b2b76a9..2bfb8d222 100644
--- a/app/assets/stylesheets/fonts.scss
+++ b/app/assets/stylesheets/fonts.scss
@@ -1,11 +1,11 @@
@font-face {
font-family: 'DeliciousBold';
- src: url(font-path('delicious-bold-webfont.eot'));
- src: url(font-path('delicious-bold-webfont.eot?#iefix')) format('embedded-opentype'),
- url(font-path('delicious-bold-webfont.woff')) format('woff'),
- url(font-path('delicious-bold-webfont.ttf')) format('truetype'),
- url(font-path('delicious-bold-webfont.svg#DeliciousBold')) format('svg');
+ src: font-url('delicious-bold-webfont.eot');
+ src: font-url('delicious-bold-webfont.eot?#iefix') format('embedded-opentype'),
+ font-url('delicious-bold-webfont.woff') format('woff'),
+ font-url('delicious-bold-webfont.ttf') format('truetype'),
+ font-url('delicious-bold-webfont.svg#DeliciousBold') format('svg');
font-weight: normal;
font-style: normal;
@@ -13,11 +13,11 @@
@font-face {
font-family: 'DeliciousBoldItalic';
- src: url(font-path('delicious-bolditalic-webfont.eot'));
- src: url(font-path('delicious-bolditalic-webfont.eot?#iefix')) format('embedded-opentype'),
- url(font-path('delicious-bolditalic-webfont.woff')) format('woff'),
- url(font-path('delicious-bolditalic-webfont.ttf')) format('truetype'),
- url(font-path('delicious-bolditalic-webfont.svg#DeliciousBoldItalic')) format('svg');
+ src: font-url('delicious-bolditalic-webfont.eot');
+ src: font-url('delicious-bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
+ font-url('delicious-bolditalic-webfont.woff') format('woff'),
+ font-url('delicious-bolditalic-webfont.ttf') format('truetype'),
+ font-url('delicious-bolditalic-webfont.svg#DeliciousBoldItalic') format('svg');
font-weight: normal;
font-style: normal;
@@ -25,11 +25,11 @@
@font-face {
font-family: 'DeliciousHeavyRegular';
- src: url(font-path('delicious-heavy-webfont.eot'));
- src: url(font-path('delicious-heavy-webfont.eot?#iefix')) format('embedded-opentype'),
- url(font-path('delicious-heavy-webfont.woff')) format('woff'),
- url(font-path('delicious-heavy-webfont.ttf')) format('truetype'),
- url(font-path('delicious-heavy-webfont.svg#DeliciousHeavyRegular')) format('svg');
+ src: font-url('delicious-heavy-webfont.eot');
+ src: font-url('delicious-heavy-webfont.eot?#iefix') format('embedded-opentype'),
+ font-url('delicious-heavy-webfont.woff') format('woff'),
+ font-url('delicious-heavy-webfont.ttf') format('truetype'),
+ font-url('delicious-heavy-webfont.svg#DeliciousHeavyRegular') format('svg');
font-weight: normal;
font-style: normal;
@@ -37,11 +37,11 @@
@font-face {
font-family: 'DeliciousItalic';
- src: url(font-path('delicious-italic-webfont.eot'));
- src: url(font-path('delicious-italic-webfont.eot?#iefix')) format('embedded-opentype'),
- url(font-path('delicious-italic-webfont.woff')) format('woff'),
- url(font-path('delicious-italic-webfont.ttf')) format('truetype'),
- url(font-path('delicious-italic-webfont.svg#DeliciousItalic')) format('svg');
+ src: font-url('delicious-italic-webfont.eot');
+ src: font-url('delicious-italic-webfont.eot?#iefix') format('embedded-opentype'),
+ font-url('delicious-italic-webfont.woff') format('woff'),
+ font-url('delicious-italic-webfont.ttf') format('truetype'),
+ font-url('delicious-italic-webfont.svg#DeliciousItalic') format('svg');
font-weight: normal;
font-style: normal;
@@ -49,11 +49,11 @@
@font-face {
font-family: 'DeliciousRoman';
- src: url(font-path('delicious-roman-webfont.eot'));
- src: url(font-path('delicious-roman-webfont.eot?#iefix')) format('embedded-opentype'),
- url(font-path('delicious-roman-webfont.woff')) format('woff'),
- url(font-path('delicious-roman-webfont.ttf')) format('truetype'),
- url(font-path('delicious-roman-webfont.svg#DeliciousRoman')) format('svg');
+ src: font-url('delicious-roman-webfont.eot');
+ src: font-url('delicious-roman-webfont.eot?#iefix') format('embedded-opentype'),
+ font-url('delicious-roman-webfont.woff') format('woff'),
+ font-url('delicious-roman-webfont.ttf') format('truetype'),
+ font-url('delicious-roman-webfont.svg#DeliciousRoman') format('svg');
font-weight: normal;
font-style: normal;
@@ -61,11 +61,11 @@
@font-face {
font-family: 'DeliciousSmallCapsRegular';
- src: url(font-path('delicious-smallcaps-webfont.eot'));
- src: url(font-path('delicious-smallcaps-webfont.eot?#iefix')) format('embedded-opentype'),
- url(font-path('delicious-smallcaps-webfont.woff')) format('woff'),
- url(font-path('delicious-smallcaps-webfont.ttf')) format('truetype'),
- url(font-path('delicious-smallcaps-webfont.svg#DeliciousSmallCapsRegular')) format('svg');
+ src: font-url('delicious-smallcaps-webfont.eot');
+ src: font-url('delicious-smallcaps-webfont.eot?#iefix') format('embedded-opentype'),
+ font-url('delicious-smallcaps-webfont.woff') format('woff'),
+ font-url('delicious-smallcaps-webfont.ttf') format('truetype'),
+ font-url('delicious-smallcaps-webfont.svg#DeliciousSmallCapsRegular') format('svg');
font-weight: normal;
font-style: normal;
diff --git a/app/controllers/general_controller.rb b/app/controllers/general_controller.rb
index 540f67ec9..beefef4e6 100644
--- a/app/controllers/general_controller.rb
+++ b/app/controllers/general_controller.rb
@@ -178,6 +178,7 @@ class GeneralController < ApplicationController
@xapian_requests_hits = @xapian_requests.results.size
@xapian_requests_total_hits = @xapian_requests.matches_estimated
@total_hits += @xapian_requests.matches_estimated
+ @request_for_spelling = @xapian_requests
end
if @bodies
@xapian_bodies = perform_search([PublicBody], @query, @sortby, nil, 5)
@@ -186,6 +187,7 @@ class GeneralController < ApplicationController
@xapian_bodies_hits = @xapian_bodies.results.size
@xapian_bodies_total_hits = @xapian_bodies.matches_estimated
@total_hits += @xapian_bodies.matches_estimated
+ @request_for_spelling = @xapian_bodies
end
if @users
@xapian_users = perform_search([User], @query, @sortby, nil, 5)
@@ -194,14 +196,13 @@ class GeneralController < ApplicationController
@xapian_users_hits = @xapian_users.results.size
@xapian_users_total_hits = @xapian_users.matches_estimated
@total_hits += @xapian_users.matches_estimated
+ @request_for_spelling = @xapian_users
end
# Spelling and highight words are same for all three queries
- if !@xapian_requests.nil?
- @highlight_words = @xapian_requests.words_to_highlight
- if !(@xapian_requests.spelling_correction =~ /[a-z]+:/)
- @spelling_correction = @xapian_requests.spelling_correction
- end
+ @highlight_words = @request_for_spelling.words_to_highlight
+ if !(@request_for_spelling.spelling_correction =~ /[a-z]+:/)
+ @spelling_correction = @request_for_spelling.spelling_correction
end
@track_thing = TrackThing.create_track_for_search_query(@query, @variety_postfix)
diff --git a/app/controllers/public_body_controller.rb b/app/controllers/public_body_controller.rb
index 02f0ceb19..308d38e4c 100644
--- a/app/controllers/public_body_controller.rb
+++ b/app/controllers/public_body_controller.rb
@@ -7,6 +7,7 @@
require 'fastercsv'
require 'confidence_intervals'
+require 'tempfile'
class PublicBodyController < ApplicationController
# XXX tidy this up with better error messages, and a more standard infrastructure for the redirect to canonical URL
@@ -113,8 +114,8 @@ class PublicBodyController < ApplicationController
elsif @tag == 'other'
category_list = PublicBodyCategories::get().tags().map{|c| "'"+c+"'"}.join(",")
where_condition += base_tag_condition + " AND has_tag_string_tags.name in (#{category_list})) = 0"
- elsif @tag.size == 1
- @tag.upcase!
+ elsif @tag.scan(/./mu).size == 1
+ @tag = Unicode.upcase @tag
# The first letter queries have to be done on
# translations, so just indicate to add that later:
first_letter = true
@@ -191,9 +192,76 @@ class PublicBodyController < ApplicationController
end
def list_all_csv
- send_data(PublicBody.export_csv, :type=> 'text/csv; charset=utf-8; header=present',
+ # FIXME: this is just using the download directory for zip
+ # archives, since we know that is allowed for X-Sendfile and
+ # the filename can't clash with the numeric subdirectory names
+ # used for the zips. However, really there should be a
+ # generically named downloads directory that contains all
+ # kinds of downloadable assets.
+ download_directory = File.join(InfoRequest.download_zip_dir(),
+ 'download')
+ FileUtils.mkdir_p download_directory
+ output_leafname = 'all-authorities.csv'
+ output_filename = File.join download_directory, output_leafname
+ # Create a temporary file in the same directory, so we can
+ # rename it atomically to the intended filename:
+ tmp = Tempfile.new output_leafname, download_directory
+ tmp.close
+ # Export all the public bodies to that temporary path and make
+ # it readable:
+ PublicBody.export_csv tmp.path
+ FileUtils.chmod 0644, tmp.path
+ # Rename into place and send the file:
+ File.rename tmp.path, output_filename
+ send_file(output_filename,
+ :type => 'text/csv; charset=utf-8; header=present',
:filename => 'all-authorities.csv',
- :disposition =>'attachment', :encoding => 'utf8')
+ :disposition =>'attachment',
+ :encoding => 'utf8')
+ end
+
+
+ # This is a helper method to take data returned by the PublicBody
+ # model's statistics-generating methods, and converting them to
+ # simpler data structure that can be rendered by a Javascript
+ # graph library. (This could be a class method except that we need
+ # access to the URL helper public_body_path.)
+ def simplify_stats_for_graphs(data,
+ column,
+ percentages,
+ graph_properties)
+ # Copy the data, only taking known-to-be-safe keys:
+ result = Hash.new { |h, k| h[k] = [] }
+ result.update Hash[data.select do |key, value|
+ ['y_values',
+ 'y_max',
+ 'totals',
+ 'cis_below',
+ 'cis_above'].include? key
+ end]
+
+ # Extract data about the public bodies for the x-axis,
+ # tooltips, and so on:
+ data['public_bodies'].each_with_index do |pb, i|
+ result['x_values'] << i
+ result['x_ticks'] << [i, pb.name]
+ result['tooltips'] << "#{pb.name} (#{result['totals'][i]})"
+ result['public_bodies'] << {
+ 'name' => pb.name,
+ 'url' => public_body_path(pb)
+ }
+ end
+
+ # Set graph metadata properties, like the title, axis labels, etc.
+ graph_id = "#{column}-"
+ graph_id += graph_properties[:highest] ? 'highest' : 'lowest'
+ result.update({
+ 'id' => graph_id,
+ 'x_axis' => _('Public Bodies'),
+ 'y_axis' => graph_properties[:y_axis],
+ 'errorbars' => percentages,
+ 'title' => graph_properties[:title]
+ })
end
def statistics
@@ -201,7 +269,7 @@ class PublicBodyController < ApplicationController
raise ActiveRecord::RecordNotFound.new("Page not enabled")
end
- per_graph = 8
+ per_graph = 10
minimum_requests = AlaveteliConfiguration::minimum_requests_for_statistics
# Make sure minimum_requests is > 0 to avoid division-by-zero
minimum_requests = [minimum_requests, 1].max
@@ -251,20 +319,12 @@ class PublicBodyController < ApplicationController
minimum_requests)
end
- data_to_draw = {
- 'id' => "#{column}-#{highest ? 'highest' : 'lowest'}",
- 'x_axis' => _('Public Bodies'),
- 'y_axis' => graph_properties[:y_axis],
- 'errorbars' => percentages,
- 'title' => graph_properties[:title]}
-
if data
- data_to_draw.update(data)
- data_to_draw['x_values'] = data['public_bodies'].each_with_index.map { |pb, i| i }
- data_to_draw['x_ticks'] = data['public_bodies'].each_with_index.map { |pb, i| [i, pb.name] }
+ @graph_list.push simplify_stats_for_graphs(data,
+ column,
+ percentages,
+ graph_properties)
end
-
- @graph_list.push data_to_draw
end
end
diff --git a/app/controllers/track_controller.rb b/app/controllers/track_controller.rb
index 9e41e35f9..1123903f9 100644
--- a/app/controllers/track_controller.rb
+++ b/app/controllers/track_controller.rb
@@ -184,7 +184,8 @@ class TrackController < ApplicationController
if new_medium == 'delete'
track_thing.destroy
flash[:notice] = _("You are no longer following {{track_description}}.", :track_description => track_thing.params[:list_description])
- redirect_to params[:r]
+ redirect_to URI.parse(params[:r]).path
+
# Reuse code like this if we let medium change again.
#elsif new_medium == 'email_daily'
# track_thing.track_medium = new_medium
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index aaced91a2..9463a236e 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -271,15 +271,9 @@ public
# Subject lines for emails about the request
def email_subject_request
- # XXX pull out this general_register_office specialisation
- # into some sort of separate jurisdiction dependent file
- if self.public_body.url_name == 'general_register_office'
- # without GQ in the subject, you just get an auto response
- _('{{law_used_full}} request GQ - {{title}}',:law_used_full=>self.law_used_full,:title=>self.title.html_safe)
- else
- _('{{law_used_full}} request - {{title}}',:law_used_full=>self.law_used_full,:title=>self.title.html_safe)
- end
+ _('{{law_used_full}} request - {{title}}',:law_used_full=>self.law_used_full,:title=>self.title.html_safe)
end
+
def email_subject_followup(incoming_message = nil)
if incoming_message.nil? || !incoming_message.valid_to_reply_to? || !incoming_message.subject
'Re: ' + self.email_subject_request
@@ -1188,14 +1182,23 @@ public
after_save :update_counter_cache
after_destroy :update_counter_cache
+ # This method updates the count columns of the PublicBody that
+ # store the number of "not held", "to some extent successful" and
+ # "both visible and classified" requests when saving or destroying
+ # an InfoRequest associated with the body:
def update_counter_cache
PublicBody.skip_callback(:save, :after, :purge_in_cache)
- self.public_body.info_requests_not_held_count = InfoRequest.where(
- :public_body_id => self.public_body.id,
- :described_state => 'not_held').count
- self.public_body.info_requests_successful_count = InfoRequest.where(
- :public_body_id => self.public_body.id,
- :described_state => ['successful', 'partially_successful']).count
+ basic_params = {
+ :public_body_id => self.public_body_id,
+ :awaiting_description => false,
+ :prominence => 'normal'
+ }
+ [['info_requests_not_held_count', {:described_state => 'not_held'}],
+ ['info_requests_successful_count', {:described_state => ['successful', 'partially_successful']}],
+ ['info_requests_visible_classified_count', {}]].each do |column, extra_params|
+ params = basic_params.clone.update extra_params
+ self.public_body.send "#{column}=", InfoRequest.where(params).count
+ end
self.public_body.without_revision do
public_body.no_xapian_reindex = true
public_body.save
diff --git a/app/models/info_request_event.rb b/app/models/info_request_event.rb
index 67cdda1b4..e268b28ca 100644
--- a/app/models/info_request_event.rb
+++ b/app/models/info_request_event.rb
@@ -339,6 +339,9 @@ class InfoRequestEvent < ActiveRecord::Base
end
raise _("unknown status ") + status
end
+ # TRANSLATORS: "Follow up" in this context means a further
+ # message sent by the requester to the authority after
+ # the initial request
return _("Follow up")
end
diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb
index e2ee696c5..6efc1d2ba 100644
--- a/app/models/outgoing_message.rb
+++ b/app/models/outgoing_message.rb
@@ -12,6 +12,8 @@
# last_sent_at :datetime
# incoming_message_followup_id :integer
# what_doing :string(255) not null
+# prominence :string(255) default("normal"), not null
+# prominence_reason :text
#
# models/outgoing_message.rb:
diff --git a/app/models/public_body.rb b/app/models/public_body.rb
index 28db5c99c..883afc3af 100644
--- a/app/models/public_body.rb
+++ b/app/models/public_body.rb
@@ -3,23 +3,27 @@
#
# Table name: public_bodies
#
-# id :integer not null, primary key
-# name :text not null
-# short_name :text not null
-# request_email :text not null
-# version :integer not null
-# last_edit_editor :string(255) not null
-# last_edit_comment :text not null
-# created_at :datetime not null
-# updated_at :datetime not null
-# url_name :text not null
-# home_page :text default(""), not null
-# notes :text default(""), not null
-# first_letter :string(255) not null
-# publication_scheme :text default(""), not null
-# api_key :string(255) not null
-# info_requests_count :integer default(0), not null
-# disclosure_log :text default(""), not null
+# id :integer not null, primary key
+# name :text not null
+# short_name :text not null
+# request_email :text not null
+# version :integer not null
+# last_edit_editor :string(255) not null
+# last_edit_comment :text not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# url_name :text not null
+# home_page :text default(""), not null
+# notes :text default(""), not null
+# first_letter :string(255) not null
+# publication_scheme :text default(""), not null
+# api_key :string(255) not null
+# info_requests_count :integer default(0), not null
+# disclosure_log :text default(""), not null
+# info_requests_successful_count :integer
+# info_requests_not_held_count :integer
+# info_requests_overdue_count :integer
+# info_requests_visible_classified_count :integer
#
require 'csv'
@@ -71,7 +75,7 @@ class PublicBody < ActiveRecord::Base
def PublicBody.set_first_letter(instance)
unless instance.name.nil? or instance.name.empty?
# we use a regex to ensure it works with utf-8/multi-byte
- first_letter = instance.name.scan(/^./mu)[0].upcase
+ first_letter = Unicode.upcase instance.name.scan(/^./mu)[0]
if first_letter != instance.first_letter
instance.first_letter = first_letter
end
@@ -190,6 +194,7 @@ class PublicBody < ActiveRecord::Base
acts_as_versioned
self.non_versioned_columns << 'created_at' << 'updated_at' << 'first_letter' << 'api_key'
self.non_versioned_columns << 'info_requests_count' << 'info_requests_successful_count'
+ self.non_versioned_columns << 'info_requests_count' << 'info_requests_visible_classified_count'
self.non_versioned_columns << 'info_requests_not_held_count' << 'info_requests_overdue'
self.non_versioned_columns << 'info_requests_overdue_count'
@@ -406,6 +411,8 @@ class PublicBody < ActiveRecord::Base
fields = {}
field_names.each{|name, i| fields[name] = row[i]}
+ yield line, fields if block_given?
+
name = row[field_names['name']]
email = row[field_names['request_email']]
next if name.nil?
@@ -506,10 +513,8 @@ class PublicBody < ActiveRecord::Base
end
# Returns all public bodies (except for the internal admin authority) as csv
- def self.export_csv
- public_bodies = PublicBody.visible.find(:all, :order => 'url_name',
- :include => [:translations, :tags])
- FasterCSV.generate() do |csv|
+ def self.export_csv(output_filename)
+ CSV.open(output_filename, "w") do |csv|
csv << [
'Name',
'Short name',
@@ -524,7 +529,7 @@ class PublicBody < ActiveRecord::Base
'Updated at',
'Version',
]
- public_bodies.each do |public_body|
+ PublicBody.visible.find_each(:include => [:translations, :tags]) do |public_body|
# Skip bodies we use only for site admin
next if public_body.has_tag?('site_administration')
csv << [
@@ -647,20 +652,30 @@ class PublicBody < ActiveRecord::Base
end
end
+ def self.where_clause_for_stats(minimum_requests, total_column)
+ # When producing statistics for public bodies, we want to
+ # exclude any that are tagged with 'test' - we use a
+ # sub-select to find the IDs of those public bodies.
+ test_tagged_query = "SELECT model_id FROM has_tag_string_tags" \
+ " WHERE model = 'PublicBody' AND name = 'test'"
+ "#{total_column} >= #{minimum_requests} AND id NOT IN (#{test_tagged_query})"
+ end
+
# Return data for the 'n' public bodies with the highest (or
# lowest) number of requests, but only returning data for those
# with at least 'minimum_requests' requests.
def self.get_request_totals(n, highest, minimum_requests)
ordering = "info_requests_count"
ordering += " DESC" if highest
- where_clause = "info_requests_count >= #{minimum_requests}"
+ where_clause = where_clause_for_stats minimum_requests, 'info_requests_count'
public_bodies = PublicBody.order(ordering).where(where_clause).limit(n)
public_bodies.reverse! if highest
y_values = public_bodies.map { |pb| pb.info_requests_count }
return {
'public_bodies' => public_bodies,
'y_values' => y_values,
- 'y_max' => y_values.max}
+ 'y_max' => y_values.max,
+ 'totals' => y_values}
end
# Return data for the 'n' public bodies with the highest (or
@@ -669,11 +684,12 @@ class PublicBody < ActiveRecord::Base
# percentage. This only returns data for those public bodies with
# at least 'minimum_requests' requests.
def self.get_request_percentages(column, n, highest, minimum_requests)
- total_column = "info_requests_count"
+ total_column = "info_requests_visible_classified_count"
ordering = "y_value"
ordering += " DESC" if highest
y_value_column = "(cast(#{column} as float) / #{total_column})"
- where_clause = "#{total_column} >= #{minimum_requests} AND #{column} IS NOT NULL"
+ where_clause = where_clause_for_stats minimum_requests, total_column
+ where_clause += " AND #{column} IS NOT NULL"
public_bodies = PublicBody.select("*, #{y_value_column} AS y_value").order(ordering).where(where_clause).limit(n)
public_bodies.reverse! if highest
y_values = public_bodies.map { |pb| pb.y_value.to_f }
@@ -703,7 +719,8 @@ class PublicBody < ActiveRecord::Base
'y_values' => y_values,
'cis_below' => cis_below,
'cis_above' => cis_above,
- 'y_max' => 100}
+ 'y_max' => 100,
+ 'totals' => original_totals}
end
private
diff --git a/app/models/user.rb b/app/models/user.rb
index d7c1c854e..2c4f87944 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -20,8 +20,6 @@
# email_bounce_message :text default(""), not null
# no_limit :boolean default(FALSE), not null
# receive_email_alerts :boolean default(TRUE), not null
-# address :string(255)
-# dob :date
#
require 'digest/sha1'
diff --git a/app/views/general/_advanced_search_tips.html.erb b/app/views/general/_advanced_search_tips.html.erb
index 08ce04439..5e19c41e0 100644
--- a/app/views/general/_advanced_search_tips.html.erb
+++ b/app/views/general/_advanced_search_tips.html.erb
@@ -40,7 +40,10 @@
<p><%= _("All the options below can use <strong>variety</strong> or <strong>latest_variety</strong> before the colon. For example, <strong>variety:sent</strong> will match requests which have <em>ever</em> been sent; <strong>latest_variety:sent</strong> will match only requests that are <em>currently</em> marked as sent.") %></p>
<table class="status_table">
<tr><td><strong><%=search_link('variety:sent')%></strong></td><td><%= _('Original request sent') %></td></tr>
- <tr><td><strong><%=search_link('variety:followup_sent')%></strong></td><td><%= _('Follow up message sent by requester') %></td></tr>
+ <tr><td><strong><%=search_link('variety:followup_sent')%></strong></td><td><%= # TRANSLATORS: "Follow up message" in this context means a
+ # further message sent by the requester to the authority after
+ # the initial request
+ _('Follow up message sent by requester') %></td></tr>
<tr><td><strong><%=search_link('variety:response')%></strong></td><td><%= _('Response from a public authority') %></td></tr>
<tr><td><strong><%=search_link('variety:comment')%></strong></td><td><%= _('Annotation added to request') %></td></tr>
<tr><td><strong><%=search_link('variety:authority')%></strong></td><td><%= _('A public authority') %></td></tr>
diff --git a/app/views/general/_stylesheet_includes.html.erb b/app/views/general/_stylesheet_includes.html.erb
index 8f375d777..b3f32054c 100644
--- a/app/views/general/_stylesheet_includes.html.erb
+++ b/app/views/general/_stylesheet_includes.html.erb
@@ -4,13 +4,12 @@
<%= Rails.application.assets["print.css"].to_s %>
</style>
<%- else %>
- <%= stylesheet_link_tag 'main', :title => "Main", :rel => "stylesheet", :media => "all" %>
+ <%= stylesheet_link_tag 'application', :title => "Main", :rel => "stylesheet", :media => "all" %>
<%= stylesheet_link_tag 'fonts', :rel => "stylesheet", :media => "all" %>
<%= stylesheet_link_tag 'print', :rel => "stylesheet", :media => "print" %>
<% if !params[:print_stylesheet].nil? %>
<%= stylesheet_link_tag 'print', :rel => "stylesheet", :media => "all" %>
<% end %>
- <%= stylesheet_link_tag 'jquery-ui-1.8.15.custom.css', :rel => 'stylesheet'%>
<!--[if LT IE 7]>
<%= stylesheet_link_tag 'ie6.css' %>
<![endif]-->
@@ -18,6 +17,6 @@
<%= stylesheet_link_tag 'ie7.css' %>
<![endif]-->
<% if AlaveteliConfiguration::force_registration_on_new_request %>
- <%= stylesheet_link_tag 'jquery.fancybox-1.3.4', :rel => "stylesheet" %>
+ <%= stylesheet_link_tag 'jquery.fancybox-1.3.4.pack.js', :rel => "stylesheet" %>
<% end %>
<% end %>
diff --git a/app/views/general/search.html.erb b/app/views/general/search.html.erb
index d526a93c0..18f258444 100644
--- a/app/views/general/search.html.erb
+++ b/app/views/general/search.html.erb
@@ -116,7 +116,7 @@
<% end # if @advanced %>
- <% if !@query.nil? %>
+ <% if !@query.nil? && @total_hits > 0 %>
<p id="search_controls">
<%=link_to_unless @sortby == 'relevant', _("Show most relevant results first"), search_path([params[:query], @variety_postfix, 'relevant'], params) %>
|
@@ -137,6 +137,9 @@
<div style="clear:both;"></div>
<% if @total_hits == 0 %>
<h2><%=@title %></h2>
+ <% if @spelling_correction %>
+ <p id="did_you_mean"><%= _('Did you mean: {{correction}}', :correction => search_link(@spelling_correction)) %></p>
+ <% end %>
<% end %>
<% if not @query.nil? %>
@@ -155,10 +158,7 @@
</div>
<%= will_paginate WillPaginate::Collection.new(@page, @bodies_per_page, @xapian_bodies.matches_estimated) %>
- <% elsif @bodies && !@query.nil? && @xapian_bodies.results.size == 0 && @page == 1 %>
- <% if @spelling_correction %>
- <p id="did_you_mean"><%= _('Did you mean: {{correction}}', :correction => search_link(@spelling_correction)) %></p>
- <% end %>
+ <% elsif @variety_postfix == 'bodies' %>
<p><%= raw(_('<a href="{{browse_url}}">Browse all</a> or <a href="{{add_url}}">ask us to add one</a>.', :browse_url => list_public_bodies_default_path.html_safe, :add_url => (help_requesting_path + '#missing_body').html_safe)) %></p>
<% end %>
</div>
diff --git a/app/views/layouts/admin.html.erb b/app/views/layouts/admin.html.erb
index 0815809b3..c1f9335b1 100644
--- a/app/views/layouts/admin.html.erb
+++ b/app/views/layouts/admin.html.erb
@@ -5,7 +5,6 @@
<title><%= site_name %> admin<%= @title ? ":" : "" %> <%=@title%></title>
<%= javascript_include_tag "admin" %>
- <%= stylesheet_link_tag "jquery-ui-1.8.15.custom.css", :rel => 'stylesheet'%>
<%= stylesheet_link_tag "admin", :title => "Main", :rel => "stylesheet" %>
</head>
diff --git a/app/views/layouts/default.html.erb b/app/views/layouts/default.html.erb
index 35bf85d03..8d69b2a08 100644
--- a/app/views/layouts/default.html.erb
+++ b/app/views/layouts/default.html.erb
@@ -20,7 +20,7 @@
<%= javascript_include_tag "application" %>
<% if @profile_photo_javascript %>
<%= javascript_include_tag "profile-photos" %>
- <%= stylesheet_link_tag "jquery.Jcrop" %>
+ <%= stylesheet_link_tag "jquery.Jcrop.css" %>
<% end %>
<% if @feed_autodetect %>
@@ -43,7 +43,7 @@
</head>
<body class="<%= 'front' if params[:action] == 'frontpage' %>">
<% if AlaveteliConfiguration::force_registration_on_new_request && !@user %>
- <%= javascript_include_tag 'jquery.fancybox-1.3.4.pack' %>
+ <%= javascript_include_tag 'jquery.fancybox-1.3.4.pack.js' %>
<script type="text/javascript">
$(document).ready(function() {
$("#make-request-link").fancybox({
diff --git a/app/views/layouts/no_chrome.html.erb b/app/views/layouts/no_chrome.html.erb
index f7a40490e..589e1bb76 100644
--- a/app/views/layouts/no_chrome.html.erb
+++ b/app/views/layouts/no_chrome.html.erb
@@ -12,13 +12,12 @@
<%= javascript_include_tag "application" %>
- <%= stylesheet_link_tag 'main', :title => "Main", :rel => "stylesheet" %>
+ <%= stylesheet_link_tag 'application', :title => "Main", :rel => "stylesheet" %>
<%= stylesheet_link_tag 'fonts', :rel => "stylesheet" %>
<%= stylesheet_link_tag 'theme', :rel => "stylesheet" %>
<!--[if LT IE 7]>
<%= stylesheet_link_tag 'ie6', :rel => "stylesheet" %>
<![endif]-->
- <%= stylesheet_link_tag 'custom', :title => "Main", :rel => "stylesheet" %>
</head>
<body>
<div class="entirebody">
diff --git a/app/views/public_body/_search_ahead.html.erb b/app/views/public_body/_search_ahead.html.erb
index 3d1dc8f93..2de638034 100644
--- a/app/views/public_body/_search_ahead.html.erb
+++ b/app/views/public_body/_search_ahead.html.erb
@@ -14,7 +14,5 @@
<% end %>
</div>
<%= will_paginate WillPaginate::Collection.new(@page, @per_page, @xapian_requests.matches_estimated), :params => {:controller=>"request", :action => "select_authority"} %>
+ <p><%= raw(_('<a href="{{browse_url}}">Browse all</a> or <a href="{{add_url}}">ask us to add one</a>.', :browse_url => list_public_bodies_default_path.html_safe, :add_url => (help_requesting_path + '#missing_body').html_safe)) %></p>
<% end %>
-
-
-
diff --git a/app/views/public_body/statistics.html.erb b/app/views/public_body/statistics.html.erb
index 8e887bc1b..d935a9e47 100644
--- a/app/views/public_body/statistics.html.erb
+++ b/app/views/public_body/statistics.html.erb
@@ -52,9 +52,9 @@ are due to him.") %></p>
</tr>
</thead>
<tbody>
- <% graph_data['x_ticks'].each_with_index do |pb_and_index, i| %>
+ <% graph_data['public_bodies'].each_with_index do |pb, i| %>
<tr>
- <td><%= pb_and_index[1] %></td>
+ <td><%= link_to pb['name'], pb['url'] %></td>
<td class="statistic"><%= graph_data['y_values'][i].round %></td>
</tr>
<% end %>
@@ -69,7 +69,7 @@ are due to him.") %></p>
<script type="text/javascript">
var graphs_data = <%= @graph_list.to_json.html_safe %>;
</script>
-<!--[if lte IE 8]><%= javascript_include_tag "excanvas.min" %><![endif]-->
+<!--[if lte IE 8]><%= javascript_include_tag "excanvas.min.js" %><![endif]-->
<%= javascript_include_tag "stats" %>
</div>
diff --git a/app/views/request/_describe_state.html.erb b/app/views/request/_describe_state.html.erb
index 05cce013e..7b6fa9683 100644
--- a/app/views/request/_describe_state.html.erb
+++ b/app/views/request/_describe_state.html.erb
@@ -80,7 +80,7 @@
<% if @update_status %>
<div>
<%= radio_button "incoming_message", "described_state", "requires_admin", :id => 'requires_admin' + id_suffix %>
- <label for="error_message<%=id_suffix%>">
+ <label for="requires_admin<%=id_suffix%>">
<%= _('This request <strong>requires administrator attention</strong>') %>
</label>
</div>
diff --git a/app/views/request/_followup.html.erb b/app/views/request/_followup.html.erb
index bb099ff15..2643b767f 100644
--- a/app/views/request/_followup.html.erb
+++ b/app/views/request/_followup.html.erb
@@ -45,7 +45,12 @@
</div>
<% end %>
<% if @info_request.allow_new_responses_from == 'nobody' %>
- <p><%= _('Follow ups and new responses to this request have been stopped to prevent spam. Please <a href="{{url}}">contact us</a> if you are {{user_link}} and need to send a follow up.',:user_link=>user_link(@info_request.user), :url=>help_contact_path) %></p>
+
+ <p><%=
+ # TRANSLATORS: "Follow ups" in this context means further
+ # messages sent by the requester to the authority after
+ # the initial request
+ _('Follow ups and new responses to this request have been stopped to prevent spam. Please <a href="{{url}}">contact us</a> if you are {{user_link}} and need to send a follow up.',:user_link=>user_link(@info_request.user), :url=>help_contact_path) %></p>
<% else %>
<% if @internal_review %>
<p>
diff --git a/app/views/request/_sidebar.html.erb b/app/views/request/_sidebar.html.erb
index e08f43eaa..8d4a4a2d8 100644
--- a/app/views/request/_sidebar.html.erb
+++ b/app/views/request/_sidebar.html.erb
@@ -60,7 +60,6 @@
<% if @xapian_similar_more %>
<p><%= link_to _("More similar requests"), similar_request_path(@info_request.url_title) %></p>
<% end %>
- <!-- Important terms: <%= @xapian_similar.important_terms.join(" ") %> -->
<% end %>
<p><%= link_to _('Event history details'), request_details_path(@info_request) %></p>
diff --git a/app/views/request/similar.html.erb b/app/views/request/similar.html.erb
index eb7ff636d..5bdefc494 100644
--- a/app/views/request/similar.html.erb
+++ b/app/views/request/similar.html.erb
@@ -12,8 +12,6 @@
<%- end %>
</h1>
-<!-- Important terms: <%= @xapian_object.important_terms.join(" ") %> -->
-
<% if @xapian_object.results.empty? %>
<p><%= _('No similar requests found.')%></p>
<% else %>
diff --git a/commonlib b/commonlib
-Subproject 9462a28fe12b25637d6e67d7140d444632e3ff7
+Subproject 8070e4c27c903d886963d662db40bb91d56f8c5
diff --git a/config/Vagrantfile b/config/Vagrantfile
new file mode 100644
index 000000000..4253215fc
--- /dev/null
+++ b/config/Vagrantfile
@@ -0,0 +1,23 @@
+# This Vagrantfile should be used with the --no-color option, e.g.
+# vagrant --no-color up
+# Then you should be able to visit the site at:
+# http://alaveteli.10.10.10.30.xip.io
+
+Vagrant::Config.run do |config|
+ config.vm.box = "precise64"
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
+ config.vm.network :hostonly, "10.10.10.30"
+ # The bundle install fails unless you have quite a large amount of
+ # memory; insist on 1.5GiB:
+ config.vm.customize ["modifyvm", :id, "--memory", 1536]
+ # Fetch and run the install script:
+ config.vm.provision :shell, :inline => "wget -O install-site.sh https://raw.github.com/mysociety/commonlib/master/bin/install-site.sh"
+ config.vm.provision :shell, :inline => "chmod a+rx install-site.sh"
+ # This is only needed before the install-script branch is merged to
+ # master:
+ config.vm.provision :shell, :inline => "sed -i -e 's/BRANCH=master/BRANCH=install-script/' install-site.sh"
+ config.vm.provision :shell, :inline => "./install-site.sh " \
+ "alaveteli " \
+ "alaveteli " \
+ "alaveteli.10.10.10.30.xip.io"
+end
diff --git a/config/application.rb b/config/application.rb
index acea68e8e..4fc6f83e5 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -70,7 +70,7 @@ module Alaveteli
# Insert a bit of middleware code to prevent uneeded cookie setting.
require "#{Rails.root}/lib/whatdotheyknow/strip_empty_sessions"
- config.middleware.insert_before ActionDispatch::Session::CookieStore, WhatDoTheyKnow::StripEmptySessions, :key => '_wdtk_cookie_session', :path => "/", :httponly => true
+ config.middleware.insert_before ::ActionDispatch::Cookies, WhatDoTheyKnow::StripEmptySessions, :key => '_wdtk_cookie_session', :path => "/", :httponly => true
# Enable the asset pipeline
config.assets.enabled = true
@@ -89,10 +89,11 @@ module Alaveteli
# ... while these are individual files that can't easily be
# grouped:
config.assets.precompile += ['jquery.fancybox-1.3.4.pack.js',
- 'jquery-ui-1.8.15.custom.css',
+ 'jquery.Jcrop.css',
'excanvas.min.js',
'fonts.css',
- 'main.css',
+ 'print.css',
+ 'admin.css',
'ie6.css',
'ie7.css']
diff --git a/config/crontab-example b/config/crontab-example
index d2c3f6bd9..366624998 100644
--- a/config/crontab-example
+++ b/config/crontab-example
@@ -8,33 +8,33 @@ PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=cron-!!(*= $site *)!!@mysociety.org
# Every 5 minutes
-*/5 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/change-xapian-database.lock "/data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/update-xapian-index verbose=true" >> /data/vhost/!!(*= $vhost *)!!/logs/update-xapian-index.log || echo "stalled?"
+*/5 * * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/change-xapian-database.lock "!!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/update-xapian-index verbose=true" >> !!(*= $vhost_dir *)!!/logs/update-xapian-index.log || echo "stalled?"
# Every 10 minutes
5,15,25,35,45,55 * * * * !!(*= $user *)!! /etc/init.d/foi-alert-tracks check
5,15,25,35,45,55 * * * * !!(*= $user *)!! /etc/init.d/foi-purge-varnish check
# Once an hour
-09 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/alert-comment-on-request.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/alert-comment-on-request || echo "stalled?"
+09 * * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/alert-comment-on-request.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/alert-comment-on-request || echo "stalled?"
# Only root can read the log files
-31 * * * * root run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/load-mail-server-logs.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/load-mail-server-logs || echo "stalled?"
+31 * * * * root run-with-lockfile -n !!(*= $vhost_dir *)!!/load-mail-server-logs.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/load-mail-server-logs || echo "stalled?"
# Once a day, early morning
-23 4 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/delete-old-things.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/delete-old-things || echo "stalled?"
-0 6 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/alert-overdue-requests.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/alert-overdue-requests || echo "stalled?"
-0 7 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/alert-new-response-reminders.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/alert-new-response-reminders || echo "stalled?"
-0 8 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/alert-not-clarified-request.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/alert-not-clarified-request || echo "stalled?"
-2 4 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/check-recent-requests-sent.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/check-recent-requests-sent || echo "stalled?"
-45 3 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/stop-new-responses-on-old-requests.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/stop-new-responses-on-old-requests || echo "stalled?"
-55 4 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/update-public-body-stats.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/update-public-body-stats || echo "stalled?"
+23 4 * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/delete-old-things.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/delete-old-things || echo "stalled?"
+0 6 * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/alert-overdue-requests.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/alert-overdue-requests || echo "stalled?"
+0 7 * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/alert-new-response-reminders.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/alert-new-response-reminders || echo "stalled?"
+0 8 * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/alert-not-clarified-request.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/alert-not-clarified-request || echo "stalled?"
+2 4 * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/check-recent-requests-sent.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/check-recent-requests-sent || echo "stalled?"
+45 3 * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/stop-new-responses-on-old-requests.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/stop-new-responses-on-old-requests || echo "stalled?"
+55 4 * * * !!(*= $user *)!! run-with-lockfile -n !!(*= $vhost_dir *)!!/update-public-body-stats.lock !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/update-public-body-stats || echo "stalled?"
# Only root can restart apache
-31 1 * * * root run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/change-xapian-database.lock "/data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/compact-xapian-database production" || echo "stalled?"
+31 1 * * * root run-with-lockfile -n !!(*= $vhost_dir *)!!/change-xapian-database.lock "!!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/compact-xapian-database production" || echo "stalled?"
# Once a day on all servers
-43 2 * * * !!(*= $user *)!! /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/request-creation-graph
-48 2 * * * !!(*= $user *)!! /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/user-use-graph
+43 2 * * * !!(*= $user *)!! !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/request-creation-graph
+48 2 * * * !!(*= $user *)!! !!(*= $vhost_dir *)!!/!!(*= $vcspath *)!!/script/user-use-graph
# Once a year :)
0 0 1 11 * !!(*= $user *)!! /bin/echo "A year has passed, please update the bank holidays for the Freedom of Information site, thank you."
diff --git a/config/deploy.rb b/config/deploy.rb
index d26a199c8..8ab67bc98 100644
--- a/config/deploy.rb
+++ b/config/deploy.rb
@@ -13,6 +13,7 @@ set :git_enable_submodules, true
set :deploy_to, configuration['deploy_to']
set :user, configuration['user']
set :use_sudo, false
+set :rails_env, configuration['rails_env']
server configuration['server'], :app, :web, :db, :primary => true
diff --git a/config/deploy.yml.example b/config/deploy.yml.example
index 61931e50e..a20eb3c22 100644
--- a/config/deploy.yml.example
+++ b/config/deploy.yml.example
@@ -4,10 +4,12 @@ production:
branch: master
server: www.example.com
user: deploy
+ rails_env: production
deploy_to: /srv/www/alaveteli_production
staging:
repository: git://github.com/mysociety/alaveteli.git
branch: develop
server: test.example.com
user: deploy
+ rails_env: production
deploy_to: /srv/www/alaveteli_staging
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 84569f4ab..dbf8d7b2a 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -16,9 +16,14 @@ Alaveteli::Application.configure do
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
config.action_mailer.perform_deliveries = true
- # Use mailcatcher in development
- config.action_mailer.delivery_method = :smtp # so is queued, rather than giving immediate errors
- config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
+
+ if AlaveteliConfiguration::use_mailcatcher_in_development
+ # Use mailcatcher in development
+ config.action_mailer.delivery_method = :smtp # so is queued, rather than giving immediate errors
+ config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
+ else
+ config.action_mailer.delivery_method = :sendmail
+ end
# Writes useful log files to debug memory leaks, of the sort where have
# unintentionally kept references to objects, especially strings.
diff --git a/config/general.yml-example b/config/general.yml-example
index 8e749d9d6..60eb5ae1c 100644
--- a/config/general.yml-example
+++ b/config/general.yml-example
@@ -205,3 +205,7 @@ MINIMUM_REQUESTS_FOR_STATISTICS: 50
# available locale, you can allow a fallback to the default locale for
# listing of public bodies.
PUBLIC_BODY_LIST_FALLBACK_TO_DEFAULT_LOCALE: false
+
+# If true, while in development mode, try to send mail by SMTP to port
+# 1025 (the port the mailcatcher listens on by default):
+USE_MAILCATCHER_IN_DEVELOPMENT: true
diff --git a/config/initializers/alaveteli.rb b/config/initializers/alaveteli.rb
index 8ae78c80c..631251b87 100644
--- a/config/initializers/alaveteli.rb
+++ b/config/initializers/alaveteli.rb
@@ -10,7 +10,7 @@ load "debug_helpers.rb"
load "util.rb"
# Application version
-ALAVETELI_VERSION = '0.14'
+ALAVETELI_VERSION = '0.15'
# Add new inflection rules using the following format
# (all these examples are active by default):
@@ -50,6 +50,8 @@ require 'normalize_string'
require 'alaveteli_file_types'
require 'alaveteli_localization'
require 'message_prominence'
+require 'actionmailer_patches'
+require 'theme'
AlaveteliLocalization.set_locales(AlaveteliConfiguration::available_locales,
AlaveteliConfiguration::default_locale)
diff --git a/config/initializers/theme_loader.rb b/config/initializers/theme_loader.rb
index 1ad2d01f1..b3ae11e1e 100644
--- a/config/initializers/theme_loader.rb
+++ b/config/initializers/theme_loader.rb
@@ -18,7 +18,6 @@ if Rails.env == "test"
end
else
for url in AlaveteliConfiguration::theme_urls.reverse
- theme_name = url.sub(/.*\/(.*).git/, "\\1")
- require_theme(theme_name)
+ require_theme theme_url_to_theme_name(url)
end
end
diff --git a/config/nginx.conf.example b/config/nginx.conf.example
new file mode 100644
index 000000000..56e720abb
--- /dev/null
+++ b/config/nginx.conf.example
@@ -0,0 +1,29 @@
+upstream alaveteli {
+ server 127.0.0.1:3300;
+}
+
+server {
+ listen 80;
+ root /var/www/alaveteli/alaveteli/public;
+
+ location / {
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-Proto http;
+ proxy_redirect off;
+ try_files $uri @ruby;
+ }
+
+ location /download {
+ internal;
+ alias /var/www/alaveteli/alaveteli/cache/zips/development/download;
+ }
+
+ location @ruby {
+ proxy_pass http://alaveteli;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Sendfile-Type X-Accel-Redirect;
+ proxy_set_header X-Accel-Mapping /var/www/alaveteli/alaveteli/cache/zips/development/download=/download;
+ }
+}
diff --git a/config/packages.debian-squeeze b/config/packages.debian-squeeze
new file mode 100644
index 000000000..6cdf2f9d6
--- /dev/null
+++ b/config/packages.debian-squeeze
@@ -0,0 +1,39 @@
+ruby1.8
+ruby
+libruby1.8
+rdoc1.8
+irb1.8
+wv
+poppler-utils
+pdftk
+ghostscript
+catdoc
+links
+elinks
+unrtf
+xlhtml
+xapian-tools
+gnuplot-nox
+php5-cli
+sharutils
+unzip
+mutt
+tnef
+gettext
+python-yaml
+wkhtmltopdf-static
+libmagic-dev
+libmagickwand-dev
+libpq-dev
+libxml2-dev
+libxslt-dev
+uuid-dev
+ruby1.8-dev
+rubygems/squeeze-backports
+rake
+build-essential
+sqlite3
+libsqlite3-dev
+libicu-dev
+postgresql
+postgresql-client
diff --git a/config/packages.ubuntu-precise b/config/packages.ubuntu-precise
new file mode 100644
index 000000000..177d504e2
--- /dev/null
+++ b/config/packages.ubuntu-precise
@@ -0,0 +1,35 @@
+ruby1.9.1
+wv
+poppler-utils
+pdftk
+ghostscript
+catdoc
+links
+elinks
+unrtf
+xlhtml
+xapian-tools
+gnuplot-nox
+sharutils
+unzip
+mutt
+tnef
+gettext
+python-yaml
+wkhtmltopdf-static
+libmagic-dev
+libmagickwand-dev
+libpq-dev
+libxml2-dev
+libxslt1-dev
+uuid-dev
+ruby1.9.1-dev
+rubygems
+rake
+build-essential
+ruby-bundler
+sqlite3
+libsqlite3-dev
+libicu-dev
+postgresql
+postgresql-client
diff --git a/config/purge-varnish-debian.ugly b/config/purge-varnish-debian.ugly
index 04458ea78..3f11344f2 100644
--- a/config/purge-varnish-debian.ugly
+++ b/config/purge-varnish-debian.ugly
@@ -22,6 +22,8 @@ DUSER=!!(*= $user *)!!
# RAILS_ENV=your_rails_env
# export RAILS_ENV
+type varnishadm > /dev/null 2>&1 || exit
+
trap "" 1
export PIDFILE LOGFILE
diff --git a/config/sysvinit.example b/config/sysvinit.example
new file mode 100755
index 000000000..443e7c3fb
--- /dev/null
+++ b/config/sysvinit.example
@@ -0,0 +1,53 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: application-thin-alaveteli
+# Required-Start: $local_fs $network
+# Required-Stop: $local_fs $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Starts the Thin web server for the "Alaveteli" site
+# Description: The Thin web server for the "Alaveteli" site
+### END INIT INFO
+
+# This example sysvinit script is based on the helpful example here:
+# http://richard.wallman.org.uk/2010/02/howto-deploy-a-catalyst-application-using-fastcgi-and-nginx/
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+SITE_HOME=/var/www/alaveteli
+NAME=alaveteli
+DESC="Alaveteli app server"
+USER=fms
+
+echo $DAEMON
+test -f $DAEMON || exit 0
+
+set -e
+
+start_daemon() {
+ su -l -c "cd $SITE_HOME/alaveteli && bundle exec thin -d -p 3300 -e development start" $USER
+}
+
+stop_daemon() {
+ pkill -f thin -u $USER || true
+}
+
+case "$1" in
+ start)
+ start_daemon
+ ;;
+ stop)
+ stop_daemon
+ ;;
+ reload|restart|force-reload)
+ stop_daemon
+ sleep 5
+ start_daemon
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|reload|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/db/migrate/20131101155844_add_stats_denominator.rb b/db/migrate/20131101155844_add_stats_denominator.rb
new file mode 100644
index 000000000..7df4c8200
--- /dev/null
+++ b/db/migrate/20131101155844_add_stats_denominator.rb
@@ -0,0 +1,15 @@
+class AddStatsDenominator < ActiveRecord::Migration
+ def up
+ add_column :public_bodies, :info_requests_visible_classified_count, :integer
+ PublicBody.connection.execute("UPDATE public_bodies
+ SET info_requests_visible_classified_count =
+ (SELECT COUNT(*) FROM info_requests
+ WHERE awaiting_description = FALSE AND
+ prominence = 'normal' AND
+ public_body_id = public_bodies.id);")
+ end
+
+ def down
+ remove_column :public_bodies, :info_requests_visible_classified_count
+ end
+end
diff --git a/doc/CHANGES.md b/doc/CHANGES.md
index 9ad605559..45b8c3cc9 100644
--- a/doc/CHANGES.md
+++ b/doc/CHANGES.md
@@ -1,3 +1,31 @@
+# Version 0.15
+
+## Highlighted features
+
+* A new install script for setting up Alaveteli automatically on
+ a fresh Debian wheezy or Ubuntu precise server, and a
+ Vagrantfile so that it can be easily invoked by `vagrant up`
+* Salutations in outgoing messages now can contain regular
+ expression special characters.
+* The links to public bodies from the first letters of the
+ alphabet now work properly in when the letter would be
+ represented by multiple bytes in UTF-8.
+* There are improvements to searching for public bodies and
+ when the "ask us to add one" message is shown.
+* There is a fix for the
+ [long-standing error](https://github.com/mysociety/alaveteli/issues/555)
+ about duplicate Xapian job creation.
+* A new rake task for importing large numbers of public bodies
+ from CSV files: `rake import:import_csv`.
+* Various improvements to the public body statistics graphs,
+ thanks to feedback from the WDTK volunteers.
+* The new_relic gem has been updated (Matthew Landauer)
+* An example nginx config file for running Alaveteli behind
+ nginx: `config/nginx.conf.example`.
+* There's now a simple script for switching between themes
+ (`script/switch-theme.rb`) for developers who have to work on
+ more than one jurisdiction's theme.
+
# Version 0.14
## Highlighted features
diff --git a/doc/INSTALL.md b/doc/INSTALL.md
index e466edd55..f39789936 100644
--- a/doc/INSTALL.md
+++ b/doc/INSTALL.md
@@ -1,3 +1,123 @@
+# Installation Script and AMI
+
+The easiest options for installating Alaveteli for evaluation
+are to use our install script or to use the AMI (Amazon Machine
+Image) to create an instance on Amazon EC2. These options are
+described below. If you would prefer to install the site
+manually, please go to the Manual Installation section below.
+
+## Installing from an AMI (Amazon Machine Image)
+
+To help people try out Alaveteli, we have created an AMI (Amazon
+Machine Image) with a basic installation of Alaveteli, which you
+can use to create a running server on an Amazon EC2 instance.
+This creates an instance that runs in development mode, so we
+wouldn't recommend you use it for a production system without
+changing the configuration.
+
+If you haven't used Amazon Web Services before, then you can get
+a Micro instance which will be
+[free for a year](http://aws.amazon.com/free/). You will find
+that a micro instance isn't powerful enough for anything other
+very basic testing of Alaveteli, however.
+
+The AMI can be found in the EU West (Ireland) region, with the
+ID ami-0f24c678 and name “Basic Alaveteli installation
+2013-10-31”. You can launch an instance based on that AMI with
+[this link](https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-0f24c678).
+
+When you create an EC2 instance based on that AMI, make sure
+that you choose Security Groups that allows at least inbound
+HTTP, HTTPS, SSH and, if you want to test incoming mail as well,
+SMTP.
+
+When your EC2 instance is launched, you will be able to log in
+as the `ubuntu` user. This user can `sudo` freely to run
+commands as root. However, the code is actually owned by (and
+runs as) the `alaveteli` user. After creating the instance, you
+may want to edit a configuration file to customize the site's
+configuration. That configuration file is
+`/var/www/alaveteli/alaveteli/config/general.yml`, which can be
+edited with:
+
+ ubuntu@ip-10-58-191-98:~$ sudo su - alaveteli
+ alaveteli@ip-10-58-191-98:~$ cd alaveteli
+ alaveteli@ip-10-58-191-98:~/alaveteli$ nano config/general.yml
+
+Then you should restart the Thin webserver with:
+
+ alaveteli@ip-10-58-191-98:~/alaveteli$ logout
+ ubuntu@ip-10-58-191-98:~$ sudo /etc/init.d/alaveteli restart
+
+If you find the hostname of your EC2 instance from the AWS
+console, you should then be able to see the site at
+`http://your-ec2-hostname.eu-west-1.compute.amazonaws.com`
+
+If you have any problems or questions, please ask on the
+[Alaveteli Google Group](https://groups.google.com/forum/#!forum/alaveteli-dev)
+or [report an issue](https://github.com/mysociety/alaveteli/issues?state=open).
+
+## Installing with the Installation Script
+
+If you have a clean installation of Debian squeeze or Ubuntu
+precise, you can use an install script in our commonlib
+repository to set up a working instance of Alaveteli. This is
+not suitable for production (it runs in development mode, for
+example) but should set up a functional installation of the
+site.
+
+**Warning: only use this script on a newly installed server – it
+will make significant changes to your server’s setup, including
+modifying your nginx setup, creating a user account, creating a
+database, installing new packages etc.**
+
+To download the script, run the following command:
+
+ curl -O https://raw.github.com/mysociety/commonlib/master/bin/install-site.sh
+
+If you run this script with `sh install-site.sh`, you'll see its
+usage message:
+
+ Usage: ./install-site.sh [--default] <SITE-NAME> <UNIX-USER> [HOST]
+ HOST is only optional if you are running this on an EC2 instance.
+ --default means to install as the default site for this server,
+ rather than a virtualhost for HOST.
+
+In this case `<SITE-NAME>` should be `alaveteli`. `<UNIX-USER>`
+is the name of the Unix user that you want to own and run the
+code. (This user will be created by the script.)
+
+The `HOST` parameter is a hostname for the server that will be
+usable externally – a virtualhost for this name will be created
+by the script, unless you specified the `--default` option. This
+parameter is optional if you are on an EC2 instance, in which
+case the hostname of that instance will be used.
+
+For example, if you wish to use a new user called `alaveteli`
+and the hostname `alaveteli.127.0.0.1.xip.io`, creating a
+virtualhost just for that hostname, you could download and run
+the script with:
+
+ sudo sh install-site.sh alaveteli alaveteli alaveteli.127.0.0.1.xip.io
+
+([xip.io](http://xip.io/) is a helpful domain for development.)
+
+Or, if you want to set this up as the default site on an EC2
+instance, you could download the script, make it executable and
+then invoke it with:
+
+ sudo ./install-site.sh --default alaveteli alaveteli
+
+When the script has finished, you should have a working copy of
+the website, accessible via the hostname you supplied to the
+script.
+
+If you have any problems or questions, please ask on the
+[Alaveteli Google Group](https://groups.google.com/forum/#!forum/alaveteli-dev)
+or [report an issue](https://github.com/mysociety/alaveteli/issues?state=open).
+
+# Manual Installation
+
These instructions assume Debian Squeeze (64-bit) or Ubuntu 12.04 LTS (precise).
[Install instructions for OS X](https://github.com/mysociety/alaveteli/wiki/OS-X-Quickstart)
are under development. Debian Squeeze is the best supported
@@ -9,7 +129,7 @@ As an aid to evaluation, there is an
[Amazon AMI](https://github.com/mysociety/alaveteli/wiki/Alaveteli-ec2-ami)
with all these steps configured. It is *not* production-ready.
-# Get Alaveteli
+## Get Alaveteli
To start with, you may need to install git, e.g. with `sudo apt-get
install git-core`
@@ -25,7 +145,7 @@ master branch (which always contains the latest stable release):
git checkout master
-# Package pinning
+## Package pinning
You need to configure [apt-pinning](http://wiki.debian.org/AptPreferences#Pinning-1) preferences in order to prevent packages being pulled from the debian wheezy distribution in preference to the stable distribution once you have added the wheezy repository as described below.
@@ -41,7 +161,7 @@ In order to configure apt-pinning and to keep most packages coming from the Debi
sudo cp /tmp/preferences /etc/apt/
rm /tmp/preferences
-# Install system dependencies
+## Install system dependencies
These are packages that the software depends on: third-party software
used to parse documents, host the site, etc. There are also packages
@@ -70,7 +190,7 @@ Some of the files also have a version number listed in config/packages
- check that you have appropriate versions installed. Some also list
"|" and offer a choice of packages.
-# Install Ruby dependencies
+## Install Ruby dependencies
To install Alaveteli's Ruby dependencies, we need to install
bundler. In Debian, this is provided as a package (installed as part
@@ -79,7 +199,7 @@ gem:
sudo gem1.8 install bundler
-# Install mySociety libraries
+## Install mySociety libraries
You will also want to install mySociety's common ruby libraries and the Rails
code. Run:
@@ -88,7 +208,7 @@ code. Run:
to fetch the contents of the submodules.
-## Packages customised by mySociety
+### Packages customised by mySociety
Debian users should add the mySociety debian archive to their
`/etc/apt/sources.list` as described above. Doing this and following
@@ -115,7 +235,7 @@ use the Debian package compiled by mySociety (see link in
[issue 305](https://github.com/mysociety/alaveteli/issues/305))
-# Configure Database
+## Configure Database
There has been a little work done in trying to make the code work with
other databases (e.g. SQLite), but the currently supported database is
@@ -155,7 +275,7 @@ data that may not be valid UTF (for example, data originating from
various broken email clients that's not 8-bit clean), it's safer to be
able to store *anything*, than reject data at runtime.
-# Configure email
+## Configure email
You will need to set up an email server (MTA) to send and receive
emails. Full configuration for an MTA is beyond the scope of this
@@ -167,13 +287,13 @@ so that you can see the mails in a browser - see http://mailcatcher.me/
for more details. Start mailcatcher by running `bundle exec mailcatcher`
in your application directory.
-## Minimal
+### Minimal
If you just want to get the tests to pass, you will at a minimum need
to allow sending emails via a `sendmail` command (a requirement met,
for example, with `sudo apt-get install exim4`).
-## Detailed
+### Detailed
When an authority receives an email, the email's `reply-to` field is a
magic address which is parsed and consumed by the Rails app.
@@ -206,7 +326,7 @@ A well-configured installation of this code will separately have had
Exim make a backup copy of the email in a separate mailbox, just in
case.
-# Set up configs
+## Set up configs
Copy `config/general.yml-example` to `config/general.yml` and edit to
your taste.
@@ -225,7 +345,7 @@ performance management system. By default, monitoring is switched off
by the `agent_enabled: false` setting. See https://github.com/newrelic/rpm
for instructions on switching on local and remote performance analysis.
-# Deployment
+## Deployment
In the 'alaveteli' directory, run:
@@ -253,7 +373,7 @@ Next we need to create the index for the search engine (Xapian):
If this fails, the site should still mostly run, but it's a core
component so you should really try to get this working.
-# Run the Tests
+## Run the Tests
Make sure everything looks OK:
@@ -265,7 +385,7 @@ workaround). You might be able to move on to the next step, depending
on how serious they are, but ideally you should try to find out what's
gone wrong.
-## glibc bug workaround
+### glibc bug workaround
There's a
[bug in glibc](http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637239)
@@ -276,7 +396,7 @@ it's not as of version `2.11.3-2`.
Until it's fixed (e.g. `libc6 2.13-26` does work), you can get the
tests to pass by setting `export LD_PRELOAD=/lib/libuuid.so.1`.
-# Run the Server
+## Run the Server
Run the following to get the server running:
@@ -288,7 +408,7 @@ localhost interface by adding ` --binding=127.0.0.1`
The server should have told you the URL to access in your browser to see
the site in action.
-# Administrator privileges
+## Administrator privileges
The administrative interface is at the URL `/admin`.
@@ -311,7 +431,7 @@ in the front end.
It is possible completely to override the administrator authentication
by setting `SKIP_ADMIN_AUTH` to `true` in `general.yml`.
-# Cron jobs and init scripts
+## Cron jobs and init scripts
`config/crontab-example` contains the cronjobs run on WhatDoTheyKnow.
It's in a strange templating format they use in mySociety. mySociety
@@ -336,8 +456,20 @@ like `!!(*= $this *)!!`. The variables are:
* `user`: the user that the software runs as
* `site`: a string to identify your alaveteli instance
-There is a dumb python script at `script/make-crontab` which you can
-edit and run to do some basic substitution for you.
+There is a rake task that will help to rewrite this file into
+one that is useful to you, which can be invoked with:
+
+ bundle exec rake config_files:convert_crontab \
+ DEPLOY_USER=deploy \
+ VHOST_DIR=/dir/above/alaveteli \
+ VCSPATH=alaveteli \
+ SITE=alaveteli \
+ CRONTAB=config/crontab-example > crontab
+
+You should change the `DEPLOY_USER`, `VHOST_DIR`, `VCSPATH` and
+`SITE` environment variables to match your server and
+installation. You should also edit the resulting `crontab` file
+to customize the `MAILTO` variable.
One of the cron jobs refers to a script at
`/etc/init.d/foi-alert-tracks`. This is an init script, a copy of
@@ -360,7 +492,7 @@ discussion of where to find this program, and how you might replace
it. This [one line script](https://gist.github.com/3741194) can install
this program system-wide.
-# Set up production web server
+## Set up production web server
It is not recommended to run the website using the default Rails web
server. There are various recommendations here:
@@ -409,7 +541,7 @@ Some
[production server best practice notes](https://github.com/mysociety/alaveteli/wiki/Production-Server-Best-Practices)
are evolving on the wiki.
-# Upgrading Alaveteli
+## Upgrading Alaveteli
The developer team policy is that the master branch in git should
always contain the latest stable release. Therefore, in production,
@@ -437,7 +569,7 @@ You should always run the script `scripts/rails-post-deploy` after
each deployment. This runs any database migrations for you, plus
various other things that can be automated for deployment.
-# Troubleshooting
+## Troubleshooting
* **Incoming emails aren't appearing in my Alaveteli install**
diff --git a/doc/THEME-ASSETS-UPGRADE.md b/doc/THEME-ASSETS-UPGRADE.md
new file mode 100644
index 000000000..66a1e95f4
--- /dev/null
+++ b/doc/THEME-ASSETS-UPGRADE.md
@@ -0,0 +1,69 @@
+This document has notes on switching your Alaveteli theme to use
+the Rails asset pipeline.
+
+Firstly, add the following to your `lib/alavetelitheme.rb`, in
+order to add the subdirectories of your theme's `assets`
+directory to `config.assets.path`:
+
+ # Prepend the asset directories in this theme to the asset path:
+ ['stylesheets', 'images', 'javascripts'].each do |asset_type|
+ theme_asset_path = File.join(File.dirname(__FILE__),
+ '..',
+ 'assets',
+ asset_type)
+ Rails.application.config.assets.paths.unshift theme_asset_path
+ end
+
+In the root of your theme, create these directories:
+
+ assets
+ \ images
+ \ stylesheets
+ \ javascripts
+
+i.e. `assets` is at the same level as `lib` and `locale-theme`.
+
+Move any image files from `public/images` to `assets/images`.
+Now change any references to those images with a literal `<img>`
+tag to use `image_tag` instead. For example, instead of:
+
+ <img src="/images/helpmeinvestigate.png" alt="" class="rss">
+
+... you should have:
+
+ image_tag('helpmeinvestigate.png', :alt => "", :class => "rss")
+
+You should similarly move your stylesheets into
+`assets/stylesheets`. If a stylesheet refers to images, you
+should rename the `.css` file to `.css.scss`, and change `url`
+to the sass-rails `image-url` helper. e.g. instead of:
+
+ background-image: url(../images/mysociety.png);
+
+... you should have:
+
+ background-image: image-url('mysociety.png');
+
+If your only stylesheet is called `custom.css`, as in the
+example theme, you shouldn't need to make any other changes to
+the CSS. If you have added additional stylesheets
+(e.g. `extra.css`), then you'll need to both:
+
+1. add them to
+`lib/views/general/_stylesheet_includes.html.erb`, for example
+with:
+
+ <%= stylesheet_link_tag "extra" %>
+
+2. add the following in `lib/alavetelitheme.rb`:
+
+ config.assets.precompile.push 'extra.css'
+
+Any custom Javascript should be moved to `assets/javascripts` in
+your theme directory, and, simlarly to the additional CSS, it
+should be mentioned in `lib/alavetelitheme.rb` with:
+
+ config.assets.precompile.push 'fancy-effects.js'
+
+You should be left with nothing in the `public` directory after
+making these changes, except possibly custom error pages.
diff --git a/doc/TRANSLATE.md b/doc/TRANSLATE.md
index f8b4adbcb..2a8b0269e 100644
--- a/doc/TRANSLATE.md
+++ b/doc/TRANSLATE.md
@@ -46,6 +46,10 @@ application developers about the context in which the text appears in the
application - these comments will appear under the 'Details' tab for the
text in Transifex.
+Some texts will have placeholders in them to indicate that another bit of text generated by Alaveteli will be inserted into them when they're displayed. They will look like `some text with a {{placeholder}}`. For these texts, don't translate the placeholder. It needs to stay exactly the same for the text to be inserted properly.
+
+Similarly, some texts will have some code in angle brackets in them to turn bits of the text into links, and other small bits of HTML formatting. e.g. `please <a href=\"{{url}}\">send it to us</a>`. Again, don't edit the bits in angle brackets, preserve them in your translation, just edit the text around them.
+
Some bits of text are in the form of two bits of text separated by a `|`
character e.g. `IncomingMessage|Subject`. These represent attribute names, so
`IncomingMessage|Subject` is the subject attribute of an incoming message on
diff --git a/lib/actionmailer_patches.rb b/lib/actionmailer_patches.rb
new file mode 100644
index 000000000..600d3c8cc
--- /dev/null
+++ b/lib/actionmailer_patches.rb
@@ -0,0 +1,15 @@
+# Monkey patch for CVE-2013-4389
+# derived from http://seclists.org/oss-sec/2013/q4/118 to fix
+# a possible DoS vulnerability in the log subscriber component of
+# Action Mailer.
+
+require 'action_mailer'
+module ActionMailer
+ class LogSubscriber < ActiveSupport::LogSubscriber
+ def deliver(event)
+ recipients = Array.wrap(event.payload[:to]).join(', ')
+ info("\nSent mail to #{recipients} (#{event.duration.round(1)}ms)")
+ debug(event.payload[:mail])
+ end
+ end
+end
diff --git a/lib/configuration.rb b/lib/configuration.rb
index ab985c8bf..fba70f27c 100644
--- a/lib/configuration.rb
+++ b/lib/configuration.rb
@@ -69,6 +69,7 @@ module AlaveteliConfiguration
:TWITTER_WIDGET_ID => false,
:USE_DEFAULT_BROWSER_LANGUAGE => true,
:USE_GHOSTSCRIPT_COMPRESSION => false,
+ :USE_MAILCATCHER_IN_DEVELOPMENT => true,
:UTILITY_SEARCH_PATH => ["/usr/bin", "/usr/local/bin"],
:VARNISH_HOST => '',
:WORKING_OR_CALENDAR_DAYS => 'working',
diff --git a/lib/tasks/config_files.rake b/lib/tasks/config_files.rake
index d3843f3a4..d0e4001f0 100644
--- a/lib/tasks/config_files.rake
+++ b/lib/tasks/config_files.rake
@@ -11,11 +11,7 @@ namespace :config_files do
var = $1.to_sym
replacement = replacements[var]
if replacement == nil
- if ! (skip[var] == true)
- raise "Unhandled variable in .ugly file: $#{var}"
- else
- match
- end
+ raise "Unhandled variable in .ugly file: $#{var}"
else
replacements[var]
end
@@ -52,5 +48,23 @@ namespace :config_files do
end
end
+ desc 'Convert Debian .ugly crontab file in config to a form suitable for installing in /etc/cron.d'
+ task :convert_crontab => :environment do
+ example = 'rake config_files:convert_crontab DEPLOY_USER=deploy VHOST_DIR=/dir/above/alaveteli VCSPATH=alaveteli SITE=alaveteli CRONTAB=config/crontab-example'
+ check_for_env_vars(['DEPLOY_USER',
+ 'VHOST_DIR',
+ 'VCSPATH',
+ 'SITE',
+ 'CRONTAB'], example)
+ replacements = {
+ :user => ENV['DEPLOY_USER'],
+ :vhost_dir => ENV['VHOST_DIR'],
+ :vcspath => ENV['VCSPATH'],
+ :site => ENV['SITE']
+ }
+ convert_ugly(ENV['CRONTAB'], replacements).each do |line|
+ puts line
+ end
+ end
-end \ No newline at end of file
+end
diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake
new file mode 100644
index 000000000..0e8397fde
--- /dev/null
+++ b/lib/tasks/import.rake
@@ -0,0 +1,78 @@
+require 'csv'
+require 'tempfile'
+
+namespace :import do
+
+ desc 'Import public bodies from CSV provided on standard input'
+ task :import_csv => :environment do
+ dryrun = ENV['DRYRUN'] != '0'
+ if dryrun
+ STDERR.puts "Only a dry run; public bodies will not be created"
+ end
+
+ tmp_csv = nil
+ Tempfile.open('alaveteli') do |f|
+ f.write STDIN.read
+ tmp_csv = f
+ end
+
+ number_of_rows = 0
+
+ STDERR.puts "Preliminary check for ambiguous names or slugs..."
+
+ # Check that the name and slugified version of the name are
+ # unique:
+ url_part_count = Hash.new { 0 }
+ name_count = Hash.new { 0 }
+ reader = CSV.open tmp_csv.path, 'r'
+ header_line = reader.shift
+ headers = header_line.collect { |h| h.gsub /^#/, ''}
+
+ reader.each do |row_array|
+ row = Hash[headers.zip row_array]
+ name = row['name']
+ url_part = MySociety::Format::simplify_url_part name, "body"
+ name_count[name] += 1
+ url_part_count[url_part] += 1
+ number_of_rows += 1
+ end
+
+ non_unique_error = false
+
+ [[name_count, 'name'],
+ [url_part_count, 'url_part']].each do |counter, field|
+ counter.sort.map do |name, count|
+ if count > 1
+ non_unique_error = true
+ STDERR.puts "The #{field} #{name} was found #{count} times."
+ end
+ end
+ end
+
+ next if non_unique_error
+
+ STDERR.puts "Now importing the public bodies..."
+
+ # Now it's (probably) safe to try to import:
+ errors, notes = PublicBody.import_csv(tmp_csv.path,
+ tag='',
+ tag_behaviour='replace',
+ dryrun,
+ editor="#{ENV['USER']} (Unix user)",
+ I18n.available_locales) do |row_number, fields|
+ percent_complete = (100 * row_number.to_f / number_of_rows).to_i
+ STDERR.print "#{row_number} out of #{number_of_rows} "
+ STDERR.puts "(#{percent_complete}% complete)"
+ end
+
+ if errors.length > 0
+ STDERR.puts "Import failed, with the following errors:"
+ errors.each do |error|
+ STDERR.puts " #{error}"
+ end
+ else
+ STDERR.puts "Done."
+ end
+
+ end
+end
diff --git a/lib/tasks/stats.rake b/lib/tasks/stats.rake
index 4eda27289..38eb15996 100644
--- a/lib/tasks/stats.rake
+++ b/lib/tasks/stats.rake
@@ -1,8 +1,14 @@
namespace :stats do
- desc 'Produce transaction stats'
+ desc 'Produce monthly transaction stats for a period starting START_YEAR'
task :show => :environment do
- month_starts = (Date.new(2009, 1)..Date.new(2011, 8)).select { |d| d.day == 1 }
+ example = 'rake stats:show START_YEAR=2009 [START_MONTH=3 END_YEAR=2012 END_MONTH=10]'
+ check_for_env_vars(['START_YEAR'], example)
+ start_year = (ENV['START_YEAR']).to_i
+ start_month = (ENV['START_MONTH'] || 1).to_i
+ end_year = (ENV['END_YEAR'] || Time.now.year).to_i
+ end_month = (ENV['END_MONTH'] || Time.now.month).to_i
+ month_starts = (Date.new(start_year, start_month)..Date.new(end_year, end_month)).select { |d| d.day == 1 }
headers = ['Period',
'Requests sent',
'Annotations added',
@@ -94,7 +100,7 @@ namespace :stats do
desc 'Update statistics in the public_bodies table'
task :update_public_bodies_stats => :environment do
verbose = ENV['VERBOSE'] == '1'
- PublicBody.all.each do |public_body|
+ PublicBody.find_each(:batch_size => 10) do |public_body|
puts "Counting overdue requests for #{public_body.name}" if verbose
# Look for values of 'waiting_response_overdue' and
@@ -102,7 +108,12 @@ namespace :stats do
# described_state column, and instead need to be calculated:
overdue_count = 0
very_overdue_count = 0
- InfoRequest.find_each(:conditions => {:public_body_id => public_body.id}) do |ir|
+ InfoRequest.find_each(:batch_size => 200,
+ :conditions => {
+ :public_body_id => public_body.id,
+ :awaiting_description => false,
+ :prominence => 'normal'
+ }) do |ir|
case ir.calculate_status
when 'waiting_response_very_overdue'
very_overdue_count += 1
diff --git a/lib/tasks/themes.rake b/lib/tasks/themes.rake
index a8d16f108..1eed92f1e 100644
--- a/lib/tasks/themes.rake
+++ b/lib/tasks/themes.rake
@@ -85,7 +85,7 @@ namespace :themes do
def install_theme(theme_url, verbose, deprecated=false)
deprecation_string = deprecated ? " using deprecated THEME_URL" : ""
- theme_name = File.basename(theme_url, '.git')
+ theme_name = theme_url_to_theme_name theme_url
puts "Installing theme #{theme_name}#{deprecation_string} from #{theme_url}"
uninstall(theme_name, verbose) if installed?(theme_name)
install_theme_using_git(theme_name, theme_url, verbose)
diff --git a/lib/theme.rb b/lib/theme.rb
new file mode 100644
index 000000000..4f03b5d99
--- /dev/null
+++ b/lib/theme.rb
@@ -0,0 +1,3 @@
+def theme_url_to_theme_name(theme_url)
+ File.basename theme_url, '.git'
+end
diff --git a/lib/whatdotheyknow/strip_empty_sessions.rb b/lib/whatdotheyknow/strip_empty_sessions.rb
index e162acf67..6d175ca98 100644
--- a/lib/whatdotheyknow/strip_empty_sessions.rb
+++ b/lib/whatdotheyknow/strip_empty_sessions.rb
@@ -1,9 +1,9 @@
module WhatDoTheyKnow
-
+
class StripEmptySessions
ENV_SESSION_KEY = "rack.session".freeze
HTTP_SET_COOKIE = "Set-Cookie".freeze
- STRIPPABLE_KEYS = [:session_id, :_csrf_token, :locale]
+ STRIPPABLE_KEYS = ['session_id', '_csrf_token', 'locale']
def initialize(app, options = {})
@app = app
diff --git a/locale/aln/app.po b/locale/aln/app.po
index d8c0a3020..1acd58a2a 100644
--- a/locale/aln/app.po
+++ b/locale/aln/app.po
@@ -8,10 +8,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Albanian Gheg (http://www.transifex.com/projects/p/alaveteli/language/aln/)\n"
"Language: aln\n"
"MIME-Version: 1.0\n"
@@ -808,15 +808,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1791,6 +1800,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2720,18 +2732,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3421,9 +3427,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/app.pot b/locale/app.pot
index 94fbce86e..46114483a 100644
--- a/locale/app.pot
+++ b/locale/app.pot
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: version 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
"PO-Revision-Date: 2011-10-09 01:10+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -805,15 +805,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1788,6 +1797,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2717,18 +2729,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3418,9 +3424,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/ar/app.po b/locale/ar/app.po
index f49cfd658..6b0725bcb 100644
--- a/locale/ar/app.po
+++ b/locale/ar/app.po
@@ -13,10 +13,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/alaveteli/language/ar/)\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
@@ -813,15 +813,24 @@ msgstr "تابع هذا الشخص"
msgid "Follow this request"
msgstr "تابع هذا الطلب "
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "تابع"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "تابع الرسالة المرسلة من صاحب الطلب"
msgid "Follow up messages to existing requests are sent to "
msgstr "متابعة الرسائل المرسلة للطلبات الموجودة"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "المتابعات و الردود الجدبدة على هذا المطلب وقع ايقافها للتجنب الرسائل الغير مرغوب فيها. يرجى <a href=\"{{url}}\">الاتصال بنا</a> اذا كنت {{user_link}} و تحتاج الى ارسال متابعات."
@@ -1800,6 +1809,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "الهيكل العامّ|اخر تعليق محوّر"
@@ -2745,18 +2757,12 @@ msgstr "التنبيه المرسل للمستخدم صاحب الطلب|نوع
msgid "User|About me"
msgstr "مستخدم|معلومات عني"
-msgid "User|Address"
-msgstr "المستخدم|العنوان"
-
msgid "User|Admin level"
msgstr "مستخدم|مستوى المشرف"
msgid "User|Ban text"
msgstr "مستخدم|منع النص"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "المستخدم|البريد الالكتروني"
@@ -3470,9 +3476,6 @@ msgstr "{{info_request_user_name}} فقط:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "{{law_used_full}} طلب - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} طلب GQ - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} طلبات في {{public_body}}"
diff --git a/locale/bg/app.po b/locale/bg/app.po
index 849550a46..f42e6e10c 100644
--- a/locale/bg/app.po
+++ b/locale/bg/app.po
@@ -9,9 +9,9 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-22 20:14+0000\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 14:16+0000\n"
"Last-Translator: Valentin Laskov <laskov@festa.bg>\n"
"Language-Team: Bulgarian (http://www.transifex.com/projects/p/alaveteli/language/bg/)\n"
"Language: bg\n"
@@ -21,7 +21,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid " This will appear on your {{site_name}} profile, to make it\\n easier for others to get involved with what you're doing."
-msgstr ""
+msgstr "Това ще се появи в профила Ви в {{site_name}}, за да\\n улесни останалите да се включат в това, което правите."
msgid " (<strong>no ranty</strong> politics, read our <a href=\"{{url}}\">moderation policy</a>)"
msgstr ""
@@ -36,13 +36,13 @@ msgid " - view and make Freedom of Information requests"
msgstr " - преглед и отправяне на заявления за достъп до информация"
msgid " - wall"
-msgstr ""
+msgstr " - стена"
msgid " <strong>Note:</strong>\\n We will send you an email. Follow the instructions in it to change\\n your password."
msgstr " <strong>Бележка:</strong>\\n Ще Ви изпратим имейл. Следвайте инструкциите в него за да смените\\n Вашата парола."
msgid " <strong>Privacy note:</strong> Your email address will be given to"
-msgstr " <strong>Лични данни:</strong> Вашият имейл адрес ще бъде даден на"
+msgstr " <strong>Забележка за лични данни:</strong> Вашият имейл адрес ще бъде даден на"
msgid " <strong>Summarise</strong> the content of any information returned. "
msgstr " <strong>Обобщете</strong> съдържанието на каквато и да е върната информация. "
@@ -51,13 +51,13 @@ msgid " Advise on how to <strong>best clarify</strong> the request."
msgstr " Съветвайте как <strong>най-ясно да се състави</strong> заявлението."
msgid " Ideas on what <strong>other documents to request</strong> which the authority may hold. "
-msgstr " Идеи над това какви <strong>други документи да бъдат поискани</strong>, които публичният орган може да притежава. "
+msgstr " Идеи за това, какви <strong>други документи да бъдат поискани</strong>, които публичният орган може да притежава. "
msgid " If you know the address to use, then please <a href=\"{{url}}\">send it to us</a>.\\n You may be able to find the address on their website, or by phoning them up and asking."
-msgstr ""
+msgstr " Ако знаете нужния адрес, молим, <a href=\"{{url}}\">изпратете ни го</a>.\\n Бихте могли да намерите адреса на техния сайт, или като им се обадите по телефона и ги попитате."
msgid " Include relevant links, such as to a campaign page, your blog or a\\n twitter account. They will be made clickable. \\n e.g."
-msgstr ""
+msgstr "Поставете препратки към материали по темата като страници на кампании,\\nВашия блог или twitter акаунт. Върху тях ще може да се цъкне. \\n напр."
msgid " Link to the information requested, if it is <strong>already available</strong> on the Internet. "
msgstr " Въведете препратка към исканата информация, ако тя <strong>вече е налична</strong> в Интернет. "
@@ -90,7 +90,7 @@ msgid " when you send this message."
msgstr " когато изпратите това съобщение."
msgid "\"Hello! We have an <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">important message</a> for visitors outside {{country_name}}\""
-msgstr ""
+msgstr "\"Здравейте! Имаме <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">важно съобщение</a> за посетители извън {{country_name}}\""
msgid "'Crime statistics by ward level for Wales'"
msgstr "'Криминална статистика на ниво квартал за София област'"
@@ -108,10 +108,10 @@ msgid "'{{link_to_user}}', a person"
msgstr "'{{link_to_user}}', личност"
msgid "*unknown*"
-msgstr ""
+msgstr "*неизвестен*"
msgid ",\\n\\n\\n\\nYours,\\n\\n{{user_name}}"
-msgstr ""
+msgstr ",\\n\\n\\n\\nВаш,\\n\\n{{user_name}}"
msgid "- or -"
msgstr "- или -"
@@ -126,25 +126,25 @@ msgid "3. Now check your request"
msgstr "3. Сега проверете заявлението си"
msgid "<a href=\"{{browse_url}}\">Browse all</a> or <a href=\"{{add_url}}\">ask us to add one</a>."
-msgstr ""
+msgstr "<a href=\"{{browse_url}}\">Разгледайте всички</a> или <a href=\"{{add_url}}\">поискайте да добавим някой</a>."
msgid "<a href=\"{{url}}\">Add an annotation</a> (to help the requester or others)"
-msgstr ""
+msgstr "<a href=\"{{url}}\">Добавете коментар</a> (за да помогнете на заявителя или на други)"
msgid "<a href=\"{{url}}\">Sign in</a> to change password, subscriptions and more ({{user_name}} only)"
-msgstr ""
+msgstr "<a href=\"{{url}}\">Влезте</a> за да смените паролата, абонаментите или друго (само за {{user_name}})"
msgid "<p>All done! Thank you very much for your help.</p><p>There are <a href=\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>"
msgstr "<p>Готово! Много Ви благодарим за помощта!</p><p>Има още <a href=\"{{helpus_url}}\">неща, които можете да направите,</a> за да подпомогнете {{site_name}}.</p>"
msgid "<p>Thank you! Here are some ideas on what to do next:</p>\\n <ul>\\n <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\\n <li>If you would like to contest the authority's claim that they do not hold the information, here is\\n <a href=\"{{complain_url}}\">how to complain</a>.\\n </li>\\n <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\\n on other means to answer your question.\\n </li>\\n </ul>"
-msgstr ""
+msgstr "<p>Благодарим Ви! Ето няколко идеи за това, което може да направите:</p>\\n <ul>\\n <li>Да изпратите заявлението си до друг орган, копирайте първо текста на заявлението по-долу, след което <a href=\"{{find_authority_url}}\">намерете другия орган</a>.</li>\\n <li>Ако желаете да оспорите твърдението на органа, че не разполага с информацията, ето как\\n <a href=\"{{complain_url}}\">да се оплачете</a>.\\n </li>\\n <li>Ние имаме <a href=\"{{other_means_url}}\">предложения</a>\\n по какъв начин да стигнете до отговор на въпроса Ви.\\n </li>\\n </ul>"
msgid "<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you should have got a response promptly, and normally before the end of <strong>{{date_response_required_by}}</strong>.</p>"
msgstr "<p>Благодарим Ви! Надяваме се, че няма да се наложи да чакате дълго.</p> <p>По закон, Вие трябва да получите отговор скоро, като нормалният срок е преди края на <strong>{{date_response_required_by}}</strong>.</p>"
msgid "<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\\n{{date_response_required_by}}</strong>.</p>"
-msgstr ""
+msgstr "<p>Благодарим Ви! Надяваме се, не сте чакали твърде дълго.</p> <p>По закон, Вие трябва да получите отговор навреме, което нормално означава не по-късно от <strong>\\n{{date_response_required_by}}</strong>.</p>"
msgid "<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a response within {{late_number_of_days}} days, or be told if it will take longer (<a href=\"{{review_url}}\">details</a>).</p>"
msgstr "<p>Благодарим Ви! Да се надяваме, че няма да чакате твърде дълго.</p><p>Би трябвало да получите отговор в рамките на {{late_number_of_days}} дни, или ще бъдете известени, ако е нужно повече време (<a href=\"{{review_url}}\">подробности</a>).</p>"
@@ -153,25 +153,25 @@ msgid "<p>Thank you! Your request is long overdue, by more than {{very_late_numb
msgstr "<p>Благодарим Ви! Отговорът на Вашето заявление се забави повече от {{very_late_number_of_days}} работни дни. На повечето заявления се отговаря в рамките на {{late_number_of_days}} работни дни. Ако желаете да подадете оплакване за това, вижте надолу.</p>"
msgid "<p>Thanks for changing the text about you on your profile.</p>\\n <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
-msgstr ""
+msgstr "<p>Благодарим Ви, че обновихте текста за Вас в профила Ви.</p>\\n <p><strong>Сега може...</strong> Да качите и снимка в профила Ви.</p>"
msgid "<p>Thanks for updating your profile photo.</p>\\n <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
-msgstr ""
+msgstr "<p>Благодарим Ви, че обновихте снимката в профила Ви.</p>\\n <p><strong>Сега може...</strong> да напишете текст за Вас и разследванията Ви.</p>"
msgid "<p>We recommend that you edit your request and remove the email address.\\n If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
msgstr "<p>Препоръчваме Ви да редактирате заявлението си и да премахнете имейл адреса.\\n Ако го оставите, имейл адресът ще бъде изпратен на органа, но няма да бъде показван на сайта.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p>"
-msgstr ""
+msgstr "<p>Радваме се, че сте получили цялата, искана от Вас информация. Ако пишете за това или използвате информацията, молим, върнете се тук и добавете по-долу коментар за това, което сте направили.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p><p>If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p>"
-msgstr "<p>Радваме се, че сте получили цялата, искана от Вас информация. Ако пишете за това или използвате информацията, молим, върнете се тук и добавете по-долу анотация за това, което сте направили.</p><p>Ако считате, че {{site_name}} е полезен, <a href=\"{{donation_url}}\">направете дарение</a> в полза на организацията с нестопанска цел, която го поддържа.</p>"
+msgstr "<p>Радваме се, че сте получили цялата, искана от Вас информация. Ако пишете за това или използвате информацията, молим, върнете се тук и добавете по-долу коментар за това, което сте направили.</p><p>Ако считате, че {{site_name}} е полезен, <a href=\"{{donation_url}}\">направете дарение</a> в полза на организацията с нестопанска цел, която го поддържа.</p>"
msgid "<p>We're glad you got some of the information that you wanted. If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
msgstr "<p>Радваме се, че сте получили част от исканата от Вас информация. Ако считате, че {{site_name}} е полезен, <a href=\"{{donation_url}}\">направете дарение</a> в полза на организацията с нестопанска цел, която го поддържа.</p><p>Ако искате да продължите и да получите останалата част от информацията, ето какво трябва да направите сега.</p>"
msgid "<p>We're glad you got some of the information that you wanted.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
-msgstr ""
+msgstr "<p>Радваме се, че сте получили част от исканата от Вас информация.</p><p>Ако искате да опитате да получите останалата част от информацията, ето какво може да направите.</p>"
msgid "<p>You do not need to include your email in the request in order to get a reply (<a href=\"{{url}}\">details</a>).</p>"
msgstr "<p>Не е необходимо да посочвате Ваш имейл в заявлението за да получите отговор (<a href=\"{{url}}\">подробности</a>).</p>"
@@ -183,19 +183,19 @@ msgid "<p>Your request contains a <strong>postcode</strong>. Unless it directly
msgstr "<p>Вашето заявление съдържа <strong>пощенски код</strong>. Ако това не е пряко свързано с темата на заявлението, молим Ви, премахнете всякакви адреси, тъй като те ще <strong>станат публично видими в Интернет</strong>.</p>"
msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\\n <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\\n replied by then.</p>\\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an\\n annotation below telling people about your writing.</p>"
-msgstr "<p>Вашето заявление за {{law_used_full}} беше <strong>изпратено по пътя му</strong>!</p>\\n <p><strong>Ще Ви изпратим имейл,</strong> когато има отговор, или след {{late_number_of_days}} работни дни ако органът все още не е\\n отговорил дотогава.</p>\\n <p>Ако Вие пишете за това заявление (във форум или блог например), молим, поставете връзка към тази страница и добавете\\n анотация по-долу, информираща читателите за написаното.</p>"
+msgstr "<p>Вашето заявление за {{law_used_full}} беше <strong>изпратено по пътя му</strong>!</p>\\n <p><strong>Ще Ви изпратим имейл,</strong> когато има отговор, или след {{late_number_of_days}} работни дни ако органът все още не е\\n отговорил дотогава.</p>\\n <p>Ако Вие пишете за това заявление (във форум или блог например), молим, поставете връзка към тази страница и добавете\\n коментар по-долу, информиращ читателите за написаното.</p>"
msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
-msgstr "<p>{{site_name}} в момента е в профилактика. Вие може само да разглеждате съществуващи заявления. Не можете да създавате нови, да добавяте препратки или анотации, иначе казано, да променяте базата данни.</p> <p>{{read_only}}</p>"
+msgstr "<p>{{site_name}} в момента е в профилактика. Вие може само да разглеждате съществуващи заявления. Не можете да създавате нови, да добавяте последващи съобщения или коментари, иначе казано, да променяте базата данни.</p> <p>{{read_only}}</p>"
msgid "<small>If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way.</small>\\n</p>"
msgstr "<small>Ако използвате уеб-базирана поща или имате \"junk mail\" филтри, погледнете също и в\\nпапките за нежелана поща. Понякога нашите писма биват маркирани като нежелани.</small>\\n</p>"
msgid "<strong> Can I request information about myself?</strong>\\n\t\t\t<a href=\"{{url}}\">No! (Click here for details)</a>"
-msgstr ""
+msgstr "<strong> Мога ли да поискам информация за себе си?</strong>\\n\t\t\t<a href=\"{{url}}\">Не! (Цъкнете тук за подробности)</a>"
msgid "<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL."
-msgstr "<strong><code>commented_by:tony_bowden</code></strong> за да търсите анотации, направени от Tony Bowden, като пишете името както в URL."
+msgstr "<strong><code>commented_by:tony_bowden</code></strong> за да търсите коментари, направени от Tony Bowden, като пишете името както в URL."
msgid "<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
msgstr "<strong><code>filetype:pdf</code></strong> за да намерите всички отговори с приложен PDF файл. Или опитайте така: <code>{{list_of_file_extensions}}</code>"
@@ -213,7 +213,7 @@ msgid "<strong><code>status:</code></strong> to select based on the status or hi
msgstr "<strong><code>status:</code></strong> търсене, базирано на състоянието или предишно състояние на заявлението, вижте <a href=\"{{statuses_url}}\">таблица на състоянията</a> по-долу."
msgid "<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \\n and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\\n can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
-msgstr ""
+msgstr "<strong><code>tag:charity</code></strong> за да намерите всички публични органи или заявления с даден маркер. Може да включите повече маркери, \\n и стойности на маркери, напр. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Забележете, че по подразбиране може да напишете\\n който и да е маркер и че трябва да поставите <code>AND</code> само ако искате всички да се съдържат в резултатите."
msgid "<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
msgstr "<strong><code>variety:</code></strong> за да зададете тип на нещо за търсене, вижте <a href=\"{{varieties_url}}\">таблицата със свойства</a> по-долу."
@@ -234,25 +234,25 @@ msgid "<strong>Clarification</strong> has been requested"
msgstr "Поискано е <strong>пояснение</strong>"
msgid "<strong>No response</strong> has been received\\n <small>(maybe there's just an acknowledgement)</small>"
-msgstr ""
+msgstr "<strong>Не беше получен</strong> отговор\\n <small>(може би има само потвърждение)</small>"
msgid "<strong>Note:</strong> Because we're testing, requests are being sent to {{email}} rather than to the actual authority."
msgstr "<strong>Бележка:</strong> Поради това че тестваме, заявленията се изпращат до {{email}} вместо до действителния орган."
msgid "<strong>Note:</strong> You're sending a message to yourself, presumably\\n to try out how it works."
-msgstr ""
+msgstr "<strong>Забележете:</strong> Вие изпращате писмо до себе си, вероятно\\n за да видите как работи."
msgid "<strong>Note:</strong>\\n We will send an email to your new email address. Follow the\\n instructions in it to confirm changing your email."
msgstr "<strong>Бележка:</strong>\\n Ще изпратим имейл на новия Ви адрес. Следвайте\\n инструкциите в него за да потвърдите смяната на имейл адреса Ви."
msgid "<strong>Privacy note:</strong> If you want to request private information about\\n yourself then <a href=\"{{url}}\">click here</a>."
-msgstr ""
+msgstr "<strong>Забележка за лични данни:</strong> Ако желаете да поискате лична\\n информация за себе си, <a href=\"{{url}}\">цъкнете тук</a>."
msgid "<strong>Privacy note:</strong> Your photo will be shown in public on the Internet,\\n wherever you do something on {{site_name}}."
-msgstr ""
+msgstr "<strong>Важно! :</strong> Вашата снимка ще бъде показвана в Интернет,\\n всеки път, когато направите нещо в {{site_name}}."
msgid "<strong>Privacy warning:</strong> Your message, and any response\\n to it, will be displayed publicly on this website."
-msgstr ""
+msgstr "<strong>Предупреждение за лични данни:</strong> Вашето съобщение и последвалите \\n отговори към него, ще бъдат показвани публично на този сайт."
msgid "<strong>Some of the information</strong> has been sent "
msgstr "<strong>Част от информацията</strong> е изпратена "
@@ -264,10 +264,10 @@ msgid "<strong>did not have</strong> the information requested."
msgstr "<strong>не са имали</strong> исканата информация."
msgid "A <a href=\"{{request_url}}\">follow up</a> to <em>{{request_title}}</em> was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "<a href=\"{{request_url}}\">Пояснително съобщение</a> към <em>{{request_title}}</em> беше изпратено до {{public_body_name}} от {{info_request_user}} на {{date}}."
msgid "A <a href=\"{{request_url}}\">response</a> to <em>{{request_title}}</em> was sent by {{public_body_name}} to {{info_request_user}} on {{date}}. The request status is: {{request_status}}"
-msgstr ""
+msgstr "Към <em>{{request_title}}</em> беше изпратен <a href=\"{{request_url}}\">отговор</a> от {{public_body_name}} до {{info_request_user}} на {{date}}. Състоянието на заявлението е: {{request_status}}"
msgid "A <strong>summary</strong> of the response if you have received it by post. "
msgstr "<strong>Обобщение</strong> на отговора ако сте го получили по пощата. "
@@ -276,10 +276,10 @@ msgid "A Freedom of Information request"
msgstr "Заявление за достъп до обществена информация"
msgid "A full history of my FOI request and all correspondence is available on the Internet at this address: {{url}}"
-msgstr ""
+msgstr "Пълната история на моето заявление за ДдИ и цялата кореспонденция е достъпна в Интернет на този адрес: {{url}}"
msgid "A new request, <em><a href=\"{{request_url}}\">{{request_title}}</a></em>, was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "Ново заявление, <em><a href=\"{{request_url}}\">{{request_title}}</a></em>, беше изпратено до {{public_body_name}} от {{info_request_user}} на {{date}}."
msgid "A public authority"
msgstr "Публичен орган"
@@ -291,7 +291,7 @@ msgid "A strange reponse, required attention by the {{site_name}} team"
msgstr "Странен отговор, изисква вниманието на екипа на {{site_name}}"
msgid "A vexatious request"
-msgstr ""
+msgstr "Неоснователно Заявление"
msgid "A {{site_name}} user"
msgstr "Потребител на {{site_name}}"
@@ -312,10 +312,10 @@ msgid "ActsAsXapian::ActsAsXapianJob|Model"
msgstr ""
msgid "Add an annotation"
-msgstr "Добавяне на анотация"
+msgstr "Добавяне на коментар"
msgid "Add an annotation to your request with choice quotes, or\\n a <strong>summary of the response</strong>."
-msgstr ""
+msgstr "Добавете коментар към Вашето Заявление с избрани цитати, или\\n <strong>обобщение на отговора</strong>."
msgid "Added on {{date}}"
msgstr "Добавено на {{date}}"
@@ -336,7 +336,7 @@ msgid "Advise on whether the <strong>refusal is legal</strong>, and how to compl
msgstr "Съветвайте дали <strong>отказът е законен</strong> и как да се подаде оплакване, ако не е."
msgid "Air, water, soil, land, flora and fauna (including how these effect\\n human beings)"
-msgstr ""
+msgstr "Въздух, вода, почва, земя, флора и фауна (включително\\nтяхното влияние върху хората)"
msgid "All of the information requested has been received"
msgstr "Цялата поискана информация беше получена"
@@ -354,13 +354,13 @@ msgid "Also send me alerts by email"
msgstr "Изпращай ми известия и по имейл"
msgid "Alter your subscription"
-msgstr "Промяна на регистрацията Ви"
+msgstr "Промяна на абонамента Ви"
msgid "Although all responses are automatically published, we depend on\\nyou, the original requester, to evaluate them."
-msgstr ""
+msgstr "Въпреки че всички отговори автоматично се публикуват, разчитаме на Вас,\\nкато заявител, да ги оценявате."
msgid "An <a href=\"{{request_url}}\">annotation</a> to <em>{{request_title}}</em> was made by {{event_comment_user}} on {{date}}"
-msgstr ""
+msgstr "Беше добавен <a href=\"{{request_url}}\">коментар</a> към <em>{{request_title}}</em> от {{event_comment_user}} на {{date}}"
msgid "An <strong>error message</strong> has been received"
msgstr "Беше получено <strong>съобщение за грешка</strong>"
@@ -369,22 +369,22 @@ msgid "An Environmental Information Regulations request"
msgstr ""
msgid "An anonymous user"
-msgstr ""
+msgstr "Анонимен потребител"
msgid "Annotation added to request"
-msgstr "Добавена е анотация към заявление"
+msgstr "Добавен е коментар към заявление"
msgid "Annotations"
-msgstr "Анотации"
+msgstr "Коментари"
msgid "Annotations are so anyone, including you, can help the requester with their request. For example:"
-msgstr "С анотациите всеки, включително Вие, може да помогне на питащия за неговото заявление. Например:"
+msgstr "С коментарите всеки, включително Вие, може да помогне на питащия за неговото заявление. Например:"
msgid "Annotations will be posted publicly here, and are\\n <strong>not</strong> sent to {{public_body_name}}."
-msgstr ""
+msgstr "Коментарите ще бъдат публикувани тук и\\n <strong>няма</strong> да бъдат изпращани до {{public_body_name}}."
msgid "Anonymous user"
-msgstr ""
+msgstr "Анонимен потребител"
msgid "Anyone:"
msgstr "Който и да е:"
@@ -393,16 +393,16 @@ msgid "Applies to"
msgstr ""
msgid "Are we missing a public authority?"
-msgstr ""
+msgstr "Да не сме пропуснали публичен орган?"
msgid "Are you the owner of any commercial copyright on this page?"
-msgstr ""
+msgstr "Притежавате ли Вие някакви авторски права върху тази страница?"
msgid "Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries."
msgstr "Питайте за <strong>конкретни</strong> документи или информация, този сайт не е подходящ за запитвания от общ характер."
msgid "At the bottom of this page, write a reply to them trying to persuade them to scan it in\\n (<a href=\"{{url}}\">more details</a>)."
-msgstr ""
+msgstr "В дъното на тази страница, им напишете отговор, като се опитате да ги убедите,\\n да го сканират (<a href=\"{{url}}\">по-детайлно</a>)."
msgid "Attachment (optional):"
msgstr "Прикачени файлове (незадължително):"
@@ -420,7 +420,7 @@ msgid "Awaiting response."
msgstr "Чака отговор."
msgid "Beginning with"
-msgstr "Започващ с"
+msgstr "Започващи с"
msgid "Browse <a href='{{url}}'>other requests</a> for examples of how to word your request."
msgstr "Разгледайте <a href='{{url}}'>други запитвания</a> като примери за това как да опишете заявлението си."
@@ -441,7 +441,7 @@ msgid "Calculated home page"
msgstr ""
msgid "Can't find the one you want?"
-msgstr ""
+msgstr "Не намирате това, което искате?"
msgid "Cancel a {{site_name}} alert"
msgstr "Спиране на известия от {{site_name}}"
@@ -513,13 +513,13 @@ msgid "Clarification"
msgstr "Изясняване"
msgid "Clarify your FOI request - "
-msgstr ""
+msgstr "Пояснете Вашето Заявление за ДдИ - "
msgid "Classify an FOI response from "
msgstr ""
msgid "Clear photo"
-msgstr ""
+msgstr "Премахни снимката"
msgid "Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\\nreview, asking them to find out why response to the request has been so slow."
msgstr "Цъкнете връзката по-долу за да изпратите съобщение на {{public_body_name}}, казващо им да отговорят на заявлението Ви. Може да поискате да направят вътрешно\\nразглеждане, с което да открият причината защо отговорът на заявлението се е забавил толкова много."
@@ -528,10 +528,10 @@ msgid "Click on the link below to send a message to {{public_body}} reminding th
msgstr "Цъкнете върху връзката по-долу за да изпратите съобщение до {{public_body}}, подсещащо го да отговори на заявлението Ви."
msgid "Close"
-msgstr ""
+msgstr "Затвори"
msgid "Comment"
-msgstr ""
+msgstr "Коментар"
msgid "Comment|Body"
msgstr "Коментар|Тяло"
@@ -546,22 +546,22 @@ msgid "Comment|Visible"
msgstr ""
msgid "Confirm you want to follow all successful FOI requests"
-msgstr ""
+msgstr "Потвърдете, че искате да следвате всички успешни Заявления за ДдИ"
msgid "Confirm you want to follow new requests"
-msgstr ""
+msgstr "Потвърдете, че искате да следвате новите заявления"
msgid "Confirm you want to follow new requests or responses matching your search"
-msgstr ""
+msgstr "Потвърдете, че искате да следвате новите заявления или отговори, съвпадащи с търсенето Ви"
msgid "Confirm you want to follow requests by '{{user_name}}'"
-msgstr ""
+msgstr "Потвърдете, че искате да следвате заявления от '{{user_name}}'"
msgid "Confirm you want to follow requests to '{{public_body_name}}'"
-msgstr ""
+msgstr "Потвърдете, че искате да следвате заявления до '{{public_body_name}}'"
msgid "Confirm you want to follow the request '{{request_title}}'"
-msgstr ""
+msgstr "Потвърдете, че искате да следвате заявлението '{{request_title}}'"
msgid "Confirm your FOI request to "
msgstr "Потвърдете Вашето заявление за ДдИ до "
@@ -570,7 +570,7 @@ msgid "Confirm your account on {{site_name}}"
msgstr "Потвърдете Вашия акаунт в {{site_name}}"
msgid "Confirm your annotation to {{info_request_title}}"
-msgstr "Потвърдете Вашата анотация към {{info_request_title}}"
+msgstr "Потвърдете Вашия коментар към {{info_request_title}}"
msgid "Confirm your email address"
msgstr "Потвърдете Вашия имейл адрес"
@@ -579,10 +579,10 @@ msgid "Confirm your new email address on {{site_name}}"
msgstr "Потвърдете Вашия нов имейл адрес в {{site_name}}"
msgid "Considered by administrators as not an FOI request and hidden from site."
-msgstr ""
+msgstr "Според администраторите, не е Заявление за ДдИ и е скрито от сайта."
msgid "Considered by administrators as vexatious and hidden from site."
-msgstr ""
+msgstr "Според администраторите е неоснователно и е скрито от сайта."
msgid "Contact {{recipient}}"
msgstr ""
@@ -609,7 +609,7 @@ msgid "Date:"
msgstr "Дата:"
msgid "Dear {{name}},"
-msgstr ""
+msgstr "Уважаеми {{name}},"
msgid "Dear {{public_body_name}},"
msgstr "Уважаеми {{public_body_name}},"
@@ -621,7 +621,7 @@ msgid "Defunct."
msgstr ""
msgid "Delayed response to your FOI request - "
-msgstr "Закъснял отговор на Вашето заявление за ДдИ - "
+msgstr "Закъснява отговорът на Вашето заявление за ДдИ - "
msgid "Delayed."
msgstr "Закъснялo."
@@ -633,7 +633,7 @@ msgid "Destroy {{name}}"
msgstr ""
msgid "Details of request '"
-msgstr ""
+msgstr "Детайли за заявлението '"
msgid "Did you mean: {{correction}}"
msgstr "Може би имахте предвид: {{correction}}"
@@ -654,7 +654,7 @@ msgid "Done"
msgstr "Готово"
msgid "Done &gt;&gt;"
-msgstr ""
+msgstr "Готово &gt;&gt;"
msgid "Download a zip file of all correspondence"
msgstr "Сваляне на zip файл с цялата кореспонденция"
@@ -666,10 +666,10 @@ msgid "EIR"
msgstr ""
msgid "Edit"
-msgstr ""
+msgstr "Редактиране"
msgid "Edit and add <strong>more details</strong> to the message above,\\n explaining why you are dissatisfied with their response."
-msgstr ""
+msgstr "Редактирайте и добавете <strong>повече детайли</strong> към горното съобщение,\\n обяснявайки защо сте недоволни от техния отговор."
msgid "Edit text about you"
msgstr "Редактиране на текста за Вас"
@@ -711,13 +711,13 @@ msgid "Event history details"
msgstr "История на събитията в детайли"
msgid "Event {{id}}"
-msgstr ""
+msgstr "Събитие {{id}}"
msgid "Everything that you enter on this page, including <strong>your name</strong>,\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
-msgstr ""
+msgstr "Това, което напишете на тази страница, включително <strong>Вашето име</strong>,\\n ще бъде <strong>показвано публично</strong> на\\n този сайт завинаги, (<a href=\"{{url}}\">вижте защо</a>)."
msgid "Everything that you enter on this page\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
-msgstr ""
+msgstr "Всичко, което напишете на тази страница,\\n ще бъде <strong>показвано публично</strong> на\\n този уебсайт завинаги (<a href=\"{{url}}\">защо?</a>)."
msgid "FOI"
msgstr "ДдИ"
@@ -726,7 +726,7 @@ msgid "FOI email address for {{public_body}}"
msgstr "Имейл адрес за ДдИ за {{public_body}}"
msgid "FOI request – {{title}}"
-msgstr ""
+msgstr "Заявление за ДдИ – {{title}}"
msgid "FOI requests"
msgstr "Заявления за ДдИ"
@@ -738,25 +738,25 @@ msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
msgstr "Заявления за ДдИ {{start_count}} до {{end_count}} от {{total_count}}"
msgid "FOI response requires admin ({{reason}}) - {{title}}"
-msgstr ""
+msgstr "Отговорът за ДдИ изисква администратор ({{reason}}) - {{title}}"
msgid "Failed to convert image to a PNG"
msgstr "Неуспех при конвертиране на изображението в PNG"
msgid "Failed to convert image to the correct size: at {{cols}}x{{rows}}, need {{width}}x{{height}}"
-msgstr ""
+msgstr "Неуспех при конвертирането на изображение към коректния размер: от {{cols}}x{{rows}}, на {{width}}x{{height}}"
msgid "Filter"
msgstr "Филтър"
msgid "First, did your other requests succeed?"
-msgstr ""
+msgstr "Първо, успешни ли бяга другите Ви заявления?"
msgid "First, type in the <strong>name of the UK public authority</strong> you'd\\n like information from. <strong>By law, they have to respond</strong>\\n (<a href=\"{{url}}\">why?</a>)."
-msgstr ""
+msgstr "Първо, напишете <strong>името на публичния орган,</strong> от който\\n искате информация. <strong>По закон, те трябва да отговорят</strong>\\n (<a href=\"{{url}}\">ето защо</a>)."
msgid "Foi attachment"
-msgstr ""
+msgstr "ДдИ приложение"
msgid "FoiAttachment|Charset"
msgstr ""
@@ -780,22 +780,22 @@ msgid "FoiAttachment|Within rfc822 subject"
msgstr ""
msgid "Follow"
-msgstr ""
+msgstr "Следване"
msgid "Follow all new requests"
-msgstr ""
+msgstr "Следване на всички нови заявления"
msgid "Follow new successful responses"
-msgstr ""
+msgstr "Следене на новите успешни отговори"
msgid "Follow requests to {{public_body_name}}"
-msgstr ""
+msgstr "Следване на заявления до {{public_body_name}}"
msgid "Follow these requests"
msgstr "Следване на тези заявления"
msgid "Follow things matching this search"
-msgstr ""
+msgstr "Следене на нещата, съвпадащи с това търсене"
msgid "Follow this authority"
msgstr "Следване на този орган"
@@ -804,28 +804,37 @@ msgid "Follow this link to see the request:"
msgstr "Последвайте тази връзка за да видите заявлението:"
msgid "Follow this person"
-msgstr ""
+msgstr "Следвай този потребител"
msgid "Follow this request"
msgstr "Следване на това заявление"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
-msgstr "Последвайте"
+msgstr "Пояснително съобщение"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
-msgstr "Следвайте съобщението, изпратено от заявителя"
+msgstr "Пояснително съобщение, изпратено от заявителя"
msgid "Follow up messages to existing requests are sent to "
-msgstr "Следвайте съобщения към съществуващи заявления, изпратени към "
+msgstr "Пояснителни съобщения към съществуващи заявления, изпратени към "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
-msgstr "Следванията и новите отговори към това заявление бяха спрени за предотвратяване на спам. Моля, <a href=\"{{url}}\">свържете се с нас</a> ако сте {{user_link}} и се нуждаете от изпращане на следвания."
+msgstr "Пояснителни съобщения от заявителя и новите отговори от органа към това заявление бяха спрени за предотвратяване на спам. Моля, <a href=\"{{url}}\">свържете се с нас</a> ако сте {{user_link}} и имате нужда да изпратите пояснително съобщение."
msgid "Follow us on twitter"
msgstr "Последвайте ни в twitter"
msgid "Followups cannot be sent for this request, as it was made externally, and published here by {{public_body_name}} on the requester's behalf."
-msgstr ""
+msgstr "Не може да се изпращат пояснителни съобщения към това заявление, понеже то е външно за нас и е публикувано тук от {{public_body_name}} от името на заявителя."
msgid "For an unknown reason, it is not possible to make a request to this authority."
msgstr "Поради неопределена причина, не е възможно да се изпрати заявление към този орган."
@@ -835,8 +844,8 @@ msgstr "Забравили сте паролата си?"
msgid "Found {{count}} public authority {{description}}"
msgid_plural "Found {{count}} public authorities {{description}}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Намерен е {{count}} публичен орган {{description}}"
+msgstr[1] "Намерени са {{count}} публични органа {{description}}"
msgid "Freedom of Information"
msgstr "Достъп до информация"
@@ -845,13 +854,13 @@ msgid "Freedom of Information Act"
msgstr "Закон за достъп до обществена информация"
msgid "Freedom of Information law does not apply to this authority, so you cannot make\\n a request to it."
-msgstr ""
+msgstr "Законът за Достъп до Обществена Информация не е приложим за този орган,\\n така че, Вие не може да направите заявление към него."
msgid "Freedom of Information law no longer applies to"
msgstr "Законодателството за достъп до обществена информация вече не може да се прилага за"
msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
-msgstr "Законодателството за достъп до обществена информация вече не може да се прилага за този орган. Следващите съобщения към съществуващи заявления са изпращани до "
+msgstr "Законодателството за достъп до обществена информация вече не може да се прилага за този орган. Последващите съобщения към съществуващите заявления се изпращат до "
msgid "Freedom of Information requests made"
msgstr "Заявления за достъп до информация, направени"
@@ -869,10 +878,10 @@ msgid "Freedom of information requests to"
msgstr "Заявления за достъп до информация към"
msgid "From"
-msgstr ""
+msgstr "От"
msgid "From the request page, try replying to a particular message, rather than sending\\n a general followup. If you need to make a general followup, and know\\n an email which will go to the right place, please <a href=\"{{url}}\">send it to us</a>."
-msgstr ""
+msgstr "От страницата на Заявлението опитайте да отговорите на конкретно съобщение, вместо да изпращате\\n общо пояснително съобщение. Ако все пак искате да направите такова, и знаете\\n имейл адреса, към който да се отпрати, молим <a href=\"{{url}}\">изпратете ни този адрес</a>."
msgid "From:"
msgstr "От:"
@@ -911,13 +920,13 @@ msgid "Here is the message you wrote, in case you would like to copy the text an
msgstr "Ето съобщението, което написахте, в случай, че искате да копирате текста и да го запазите за по-късно."
msgid "Hi! We need your help. The person who made the following request\\n hasn't told us whether or not it was successful. Would you mind taking\\n a moment to read it and help us keep the place tidy for everyone?\\n Thanks."
-msgstr ""
+msgstr "Здравейте! Имаме нужда от помощта Ви. Потребителят, направил следното Заявление\\n не ни е казал дали то е успешно или не. Бихте ли отделили\\n минута да го прочетете и да ни помогнете да поддържаме нещата подредени?\\n Благодарим Ви!"
msgid "Hide request"
-msgstr ""
+msgstr "Скрий заявлението"
msgid "Holiday"
-msgstr ""
+msgstr "Празник"
msgid "Holiday|Day"
msgstr "Празник|Ден"
@@ -929,7 +938,7 @@ msgid "Home"
msgstr "Начало"
msgid "Home page"
-msgstr ""
+msgstr "Начална страница"
msgid "Home page of authority"
msgstr "Сайт на публичния орган"
@@ -947,7 +956,7 @@ msgid "I am requesting an <strong>internal review</strong>"
msgstr "Бих искал да се извърши <strong>вътрешно разглеждане</strong>"
msgid "I am writing to request an internal review of {{public_body_name}}'s handling of my FOI request '{{info_request_title}}'."
-msgstr ""
+msgstr "Пиша Ви, за да поискам вътрешно разглеждане на начина, по който {{public_body_name}} обработи моето Заявление за ДдИ '{{info_request_title}}'."
msgid "I don't like these ones &mdash; give me some more!"
msgstr "Тези не ги харесвам &mdash; дай ми още няколко!"
@@ -956,13 +965,13 @@ msgid "I don't want to do any more tidying now!"
msgstr "Не искам да чистя повече точно сега!"
msgid "I like this request"
-msgstr ""
+msgstr "Харесвам това Заявление"
msgid "I would like to <strong>withdraw this request</strong>"
msgstr "Бих искал да <strong>изтегля това заявление</strong>"
msgid "I'm still <strong>waiting</strong> for my information\\n <small>(maybe you got an acknowledgement)</small>"
-msgstr ""
+msgstr "Аз все още <strong>чакам</strong> за моята информация\\n <small>(може би Вие имате потвърждение)</small>"
msgid "I'm still <strong>waiting</strong> for the internal review"
msgstr "Аз все още <strong>чакам</strong> вътрешното разглеждане"
@@ -983,13 +992,13 @@ msgid "I've received an <strong>error message</strong>"
msgstr "Аз получих <strong>съобщение за грешка</strong>"
msgid "I've received an error message"
-msgstr ""
+msgstr "Получих съобщение за грешка"
msgid "Id"
msgstr ""
msgid "If the address is wrong, or you know a better address, please <a href=\"{{url}}\">contact us</a>."
-msgstr ""
+msgstr "Ако адресът е грешен, или знаете по-добър адрес, моля <a href=\"{{url}}\">пишете ни</a>."
msgid "If the error was a delivery failure, and you can find an up to date FOI email address for the authority, please tell us using the form below."
msgstr "Ако това е грешка при доставката и Вие можете да посочите актуален имейл адрес за органа, молим, уведомете ни чрез формата по-долу."
@@ -998,31 +1007,31 @@ msgid "If this is incorrect, or you would like to send a late response to the re
msgstr "Ако това е грешно, или бихте желали да изпратите закъснял отговор на заявлението\\nили имейл по друга тема до {{user}}, то молим,\\nпишете ни на {{contact_email}} за помощ."
msgid "If you are dissatisfied by the response you got from\\n the public authority, you have the right to\\n complain (<a href=\"{{url}}\">details</a>)."
-msgstr ""
+msgstr "Ако не сте удовлетворени от отговора, получен от\\n публичния орган, имате правото да\\n се оплачете (<a href=\"{{url}}\">още за това</a>)."
msgid "If you are still having trouble, please <a href=\"{{url}}\">contact us</a>."
-msgstr ""
+msgstr "Ако все още се затруднявате, моля <a href=\"{{url}}\">пишете ни</a>."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the message."
-msgstr ""
+msgstr "Ако заявителят сте Вие, <a href=\"{{url}}\">влезте</a> за да видите съобщението."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the request."
-msgstr ""
+msgstr "Ако Вие сте заявителя, може да <a href=\"{{url}}\">влезете</a> за да видите заявлението."
msgid "If you are thinking of using a pseudonym,\\n please <a href=\"{{url}}\">read this first</a>."
-msgstr ""
+msgstr "Ако възнамерявате да ползвате псевдоним,\\n молим <a href=\"{{url}}\">прочетете първо това</a>."
msgid "If you are {{user_link}}, please"
msgstr "Ако Вие сте {{user_link}}, моля"
msgid "If you believe this request is not suitable, you can report it for attention by the site administrators"
-msgstr ""
+msgstr "Ако смятате, че това заявление е неподходящо, може да го докладвате на вниманието на администратор на сайта"
msgid "If you can't click on it in the email, you'll have to <strong>select and copy\\nit</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\\nyou would type the address of any other webpage."
msgstr "Ако не можете да цъкнете върху нея в имейла, Вие ще трябва да я\\n<strong>маркирате и копирате</strong> от там. После я <strong>поставете в браузъра Ви</strong>,\\nкъдето пишете адреса на желаната от Вас страница."
msgid "If you can, scan in or photograph the response, and <strong>send us\\n a copy to upload</strong>."
-msgstr ""
+msgstr "Ако можете, сканирайте или снимайте отговора и <strong>ни пратете\\n копие за да го качим</strong>."
msgid "If you find this service useful as an FOI officer, please ask your web manager to link to us from your organisation's FOI page."
msgstr "Ако Вие, като занимаващ се с ДдИ, намирате тази услуга за полезна, моля, помолете Вашия уеб администратор да постави връзка към нас на страницата на Вашата организация."
@@ -1040,7 +1049,7 @@ msgid "If you use web-based email or have \"junk mail\" filters, also check your
msgstr "Ако използвате уеб-базирана поща или имате \"junk mail\" филтри, погледнете\\nсъщо и в папките за нежелана поща. Понякога нашите писма биват маркирани като нежелани."
msgid "If you would like us to lift this ban, then you may politely\\n<a href=\"/help/contact\">contact us</a> giving reasons.\\n"
-msgstr ""
+msgstr "Ако Вие искате да премахнем това ограничение, то може учтиво\\n<a href=\"/help/contact\">да се свържете с нас</a> и да ни дадете причини да го направим.\\n"
msgid "If you're new to {{site_name}}"
msgstr "Ако сте нов в {{site_name}}"
@@ -1049,13 +1058,13 @@ msgid "If you've used {{site_name}} before"
msgstr "Ако сте използвали {{site_name}} преди"
msgid "If your browser is set to accept cookies and you are seeing this message,\\nthen there is probably a fault with our server."
-msgstr ""
+msgstr "Ако Вашият браузър е настроен да работи с бисквитки и виждате това съобщение,\\nто вероятно има проблем с нашия сървър."
msgid "Incoming email address"
msgstr "Адрес за входяща поща"
msgid "Incoming message"
-msgstr ""
+msgstr "Входящо съобщение"
msgid "IncomingMessage|Cached attachment text clipped"
msgstr ""
@@ -1091,10 +1100,10 @@ msgid "IncomingMessage|Valid to reply to"
msgstr ""
msgid "Individual requests"
-msgstr ""
+msgstr "Индивидуални заявления"
msgid "Info request"
-msgstr ""
+msgstr "Info Заявление"
msgid "Info request event"
msgstr ""
@@ -1166,25 +1175,25 @@ msgid "Is {{email_address}} the wrong address for {{type_of_request}} requests t
msgstr "Грешен ли е адресът {{email_address}} за {{type_of_request}} заявления към {{public_body_name}}? Ако да, моля свържете се с нас, използвайки тази форма:"
msgid "It may be that your browser is not set to accept a thing called \"cookies\",\\nor cannot do so. If you can, please enable cookies, or try using a different\\nbrowser. Then press refresh to have another go."
-msgstr "Може да е от това, че браузърът Ви е конфигуриран да не работи с \"бисквитки\",\\nили не може да го прави. Ако можете, моля, разрешете бисквитките, или опитайте с друг\\nбраузър. След това натиснете опресняване, за да опитате отново."
+msgstr "Може да е от това, че браузърът Ви е конфигуриран да не работи с \"бисквитки\",\\nили не може да го прави. Ако е възможно, бихте ли разрешили бисквитките, или направили опит с друг\\nбраузър. След това натиснете опресняване, за да опитате отново."
msgid "Items matching the following conditions are currently displayed on your wall."
-msgstr ""
+msgstr "Нещата, съвпадащи със следните условия са показани в момента на стената Ви."
msgid "Items sent in last month"
-msgstr ""
+msgstr "Неща, изпратени през последния месец"
msgid "Joined in"
-msgstr "Присъединил се в"
+msgstr "Присъединил се през"
msgid "Joined {{site_name}} in"
-msgstr "Присъединил се към {{site_name}} в"
+msgstr "Присъединил се към {{site_name}} през"
msgid "Just one more thing"
-msgstr ""
+msgstr "Само още едно нещо"
msgid "Keep it <strong>focused</strong>, you'll be more likely to get what you want (<a href=\"{{url}}\">why?</a>)."
-msgstr ""
+msgstr "Бъдете <strong>конкретни</strong>, така увеличавате възможността да получите това, което искате (<a href=\"{{url}}\">ето защо</a>)."
msgid "Keywords"
msgstr "Ключови думи"
@@ -1196,37 +1205,37 @@ msgid "Last request viewed: "
msgstr "Последно гледано заявление: "
msgid "Let us know what you were doing when this message\\nappeared and your browser and operating system type and version."
-msgstr ""
+msgstr "Обяснете ни какво правите, когато това съобщение се появява,\\nа така също и какви са и коя версия са браузърът и операционната система."
msgid "Link to this"
msgstr "Връзка към това"
msgid "List all"
-msgstr ""
+msgstr "Покажи всички"
msgid "List of all authorities (CSV)"
msgstr "Списък на органите (CSV)"
msgid "Listing FOI requests"
-msgstr ""
+msgstr "Списък на Заявленията за ДдИ"
msgid "Listing public authorities"
-msgstr ""
+msgstr "Списък на публични органи"
msgid "Listing public authorities matching '{{query}}'"
-msgstr ""
+msgstr "Списък на публични органи, съвпадащи с '{{query}}'"
msgid "Listing tracks"
msgstr ""
msgid "Listing users"
-msgstr ""
+msgstr "Списък с потребители"
msgid "Log in to download a zip file of {{info_request_title}}"
msgstr "Влезте за да свалите zip файл на {{info_request_title}}"
msgid "Log into the admin interface"
-msgstr ""
+msgstr "Влезте в административния панел"
msgid "Long overdue."
msgstr "Значително пресрочено."
@@ -1253,13 +1262,13 @@ msgid "MailServerLog|Order"
msgstr ""
msgid "Make a new<br/>\\n <strong>Freedom <span>of</span><br/>\\n Information<br/>\\n request</strong>"
-msgstr ""
+msgstr "Създаване на ново<br/>\\n <strong>Заявление <span>за</span><br/>\\n Достъп до<br/>\\n Информация</strong>"
msgid "Make a request"
msgstr "Създаване на заявление"
msgid "Make a request to this authority"
-msgstr ""
+msgstr "Направете заявление към този орган"
msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
msgstr "Създаване на {{law_used_short}} заявление до '{{public_body_name}}'"
@@ -1271,13 +1280,13 @@ msgid "Make your own request"
msgstr "Създайте Ваше заявление"
msgid "Many requests"
-msgstr ""
+msgstr "Много заявления"
msgid "Message"
-msgstr ""
+msgstr "Съобщение"
msgid "Message has been removed"
-msgstr ""
+msgstr "Съобщението беше премахнато"
msgid "Message sent using {{site_name}} contact form, "
msgstr "Съобщението е изпратено чрез формата за контакти на {{site_name}}, "
@@ -1289,7 +1298,7 @@ msgid "More about this authority"
msgstr "Още за този орган"
msgid "More requests..."
-msgstr ""
+msgstr "Още заявления..."
msgid "More similar requests"
msgstr "Още подобни заявления"
@@ -1307,7 +1316,7 @@ msgid "My requests"
msgstr "Моите заявления"
msgid "My wall"
-msgstr ""
+msgstr "Моята стена"
msgid "Name can't be blank"
msgstr "Името не може да е празно"
@@ -1334,7 +1343,7 @@ msgid "New password: (again)"
msgstr "Новата парола: (отново)"
msgid "New response to '{{title}}'"
-msgstr ""
+msgstr "Нов отговор към '{{title}}'"
msgid "New response to your FOI request - "
msgstr "Нов отговор на Ваше заявление за ДдИ - "
@@ -1379,31 +1388,31 @@ msgid "None made."
msgstr "Няма създадени такива."
msgid "Not a valid FOI request"
-msgstr ""
+msgstr "Не е валидно Заявление за ДдИ"
msgid "Note that the requester will not be notified about your annotation, because the request was published by {{public_body_name}} on their behalf."
-msgstr ""
+msgstr "Имайте предвид, че заявителят няма да бъде уведомен за коментара Ви, понеже заявлението бе публикувано от {{public_body_name}} от тяхно име."
msgid "Now check your email!"
msgstr "Сега си проверете пощата!"
msgid "Now preview your annotation"
-msgstr "Сега прегледайте Вашата бележка"
+msgstr "Сега прегледайте Вашия коментар"
msgid "Now preview your follow up"
-msgstr ""
+msgstr "Сега, прегледайте пояснителното си съобщение"
msgid "Now preview your message asking for an internal review"
msgstr "Сега прегледайте съобщението, с което ще поискате вътрешно разглеждане"
msgid "Number of requests"
-msgstr ""
+msgstr "Брой заявления"
msgid "OR remove the existing photo"
msgstr "ИЛИ премахнете съществуващата снимка"
msgid "Offensive? Unsuitable?"
-msgstr ""
+msgstr "Обидно? Неподходящо?"
msgid "Oh no! Sorry to hear that your request was refused. Here is what to do now."
msgstr "Ех! Съжаляваме да чуем, че сте получили отказ на заявлението. Ето какво може да се направи сега."
@@ -1451,7 +1460,7 @@ msgid "Other:"
msgstr "Друг:"
msgid "Outgoing message"
-msgstr ""
+msgstr "Изходящо съобщение"
msgid "OutgoingMessage|Body"
msgstr ""
@@ -1490,16 +1499,16 @@ msgid "Paste this link into emails, tweets, and anywhere else:"
msgstr "Поставете тази препратка в имейли, туитове и където и да е:"
msgid "People"
-msgstr ""
+msgstr "Хора"
msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr "Хора от {{start_count}} до {{end_count}} от {{total_count}}"
+msgstr "Хора от {{start_count}} до {{end_count}}, от общо {{total_count}}"
msgid "Percentage of requests that are overdue"
-msgstr ""
+msgstr "Процент от просрочените заявления"
msgid "Percentage of total requests"
-msgstr ""
+msgstr "Процент от всички заявления"
msgid "Photo of you:"
msgstr "Ваша снимка:"
@@ -1517,16 +1526,16 @@ msgid "Please"
msgstr "Молим"
msgid "Please <a href=\"{{url}}\">contact us</a> if you have any questions."
-msgstr ""
+msgstr "Моля, <a href=\"{{url}}\">свържете се с нас</a> ако имате някакви въпроси."
msgid "Please <a href=\"{{url}}\">get in touch</a> with us so we can fix it."
-msgstr ""
+msgstr "Молим, <a href=\"{{url}}\">дръжте ни в течение</a>, за да можем да го оправим."
msgid "Please <strong>answer the question above</strong> so we know whether the "
msgstr "Молим, <strong>отговорете на въпроса по-горе</strong>, така ние ще знаем, че "
msgid "Please <strong>go to the following requests</strong>, and let us\\n know if there was information in the recent responses to them."
-msgstr ""
+msgstr "Моля,<strong>вижте следните заявления</strong>, и ни\\n уведомете ако има информация в скорошните отговори към тях."
msgid "Please <strong>only</strong> write messages directly relating to your request {{request_link}}. If you would like to ask for information that was not in your original request, then <a href=\"{{new_request_link}}\">file a new request</a>."
msgstr "Молим, пишете съобщения <strong>само</strong> пряко свързани с Вашето заявление {{request_link}}. Ако желаете да поискате информация, която не е в оригиналното заявление, <a href=\"{{new_request_link}}\">създайте ново заявление</a>."
@@ -1541,7 +1550,7 @@ msgid "Please choose a file containing your photo."
msgstr "Моля, изберете файл с Ваша снимка."
msgid "Please choose a reason"
-msgstr ""
+msgstr "Моля, изберете причина"
msgid "Please choose what sort of reply you are making."
msgstr "Моля, изберете вида отговор, който създавате."
@@ -1562,7 +1571,7 @@ msgid "Please describe more what the request is about in the subject. There is n
msgstr "Моля, по-подробно опишете заявлението в темата. Няма нужда да пишете, че е заявление за ДдИ, ние и без това го добавяме."
msgid "Please don't upload offensive pictures. We will take down images\\n that we consider inappropriate."
-msgstr ""
+msgstr "Молим, не качвайте оскърбителни снимки. Ще премахваме снимки,\\n за които преценим, че са неподходящи."
msgid "Please enable \"cookies\" to carry on"
msgstr "Моля, разрешете \"бисквитките\" за да продължим"
@@ -1586,16 +1595,16 @@ msgid "Please enter the same password twice"
msgstr "Моля, въведете еднаква парола на двете места"
msgid "Please enter your annotation"
-msgstr "Моля, въведете Вашата бележка"
+msgstr "Моля, въведете Вашия коментар"
msgid "Please enter your email address"
msgstr "Моля, въведете Вашия имейл адрес"
msgid "Please enter your follow up message"
-msgstr ""
+msgstr "Моля въведете Вашето пояснително съобщение"
msgid "Please enter your letter requesting information"
-msgstr "Моля, въведете Вашето писмо искащо информация"
+msgstr "Моля, опишете желаната от Вас информация"
msgid "Please enter your name"
msgstr "Моля, въведете Вашето име"
@@ -1622,13 +1631,13 @@ msgid "Please keep the summary short, like in the subject of an email. You can u
msgstr "Моля, напишете кратко описание, като в темата на имейл. По-добре ползвайте фраза, а не цяло изречение."
msgid "Please only request information that comes under those categories, <strong>do not waste your\\n time</strong> or the time of the public authority by requesting unrelated information."
-msgstr ""
+msgstr "Молим, искайте само информация, която попада в тези категории, <strong>не си губете\\n времето</strong> или времето на публичния орган с искане на несвързана информация."
msgid "Please pass this on to the person who conducts Freedom of Information reviews."
msgstr ""
msgid "Please select each of these requests in turn, and <strong>let everyone know</strong>\\nif they are successful yet or not."
-msgstr ""
+msgstr "Моля, влезте във всяко от тези заявления по ред и <strong>дайте мнението си</strong>\\nдали вече са успешни или не."
msgid "Please sign at the bottom with your name, or alter the \"{{signoff}}\" signature"
msgstr ""
@@ -1637,7 +1646,7 @@ msgid "Please sign in as "
msgstr "Моля, влезте като "
msgid "Please sign in or make a new account."
-msgstr ""
+msgstr "Моля, влезте или създайте нова регистрация."
msgid "Please type a message and/or choose a file containing your response."
msgstr "Моля, напишете съобщение и/или посочете файл, съдържащ Вашия отговор."
@@ -1652,22 +1661,22 @@ msgid "Please write the summary using a mixture of capital and lower case letter
msgstr "Моля, в обобщението използвайте и малки и главни букви. Това прави четенето лесно за другите."
msgid "Please write your annotation using a mixture of capital and lower case letters. This makes it easier for others to read."
-msgstr "Моля, в бележката си използвайте и малки и главни букви. Това прави четенето лесно за другите."
+msgstr "Моля, в коментара си използвайте и малки и главни букви. Това прави четенето лесно за другите."
msgid "Please write your follow up message containing the necessary clarifications below."
-msgstr ""
+msgstr "Моля, по-долу напишете пояснителното си съобщение, съдържащо необходимите разяснения."
msgid "Please write your message using a mixture of capital and lower case letters. This makes it easier for others to read."
msgstr "Моля, във Вашето съобщение използвайте и малки и главни букви. Това прави четенето лесно за другите."
msgid "Point to <strong>related information</strong>, campaigns or forums which may be useful."
-msgstr ""
+msgstr "Посочете <strong>свързана с това информация</strong>, кампании или форуми, които може да са полезни."
msgid "Possibly related requests:"
msgstr "Вероятно свързани заявления:"
msgid "Post annotation"
-msgstr ""
+msgstr "Публикувай коментара"
msgid "Post redirect"
msgstr ""
@@ -1700,13 +1709,13 @@ msgid "Prev"
msgstr "Преден"
msgid "Preview follow up to '"
-msgstr ""
+msgstr "Преглед на пояснително съобщение до '"
msgid "Preview new annotation on '{{info_request_title}}'"
-msgstr "Преглед на новата анотация на '{{info_request_title}}'"
+msgstr "Преглед на новия коментар към '{{info_request_title}}'"
msgid "Preview your annotation"
-msgstr "Преглед на бележката Ви"
+msgstr "Преглед на коментара Ви"
msgid "Preview your message"
msgstr "Преглед на съобщението Ви"
@@ -1715,7 +1724,7 @@ msgid "Preview your public request"
msgstr "Преглед на публичното Ви заявление"
msgid "Profile photo"
-msgstr ""
+msgstr "Снимка в профила"
msgid "ProfilePhoto|Data"
msgstr ""
@@ -1724,10 +1733,10 @@ msgid "ProfilePhoto|Draft"
msgstr ""
msgid "Public Bodies"
-msgstr ""
+msgstr "Публични органи"
msgid "Public Body Statistics"
-msgstr ""
+msgstr "Статистика за Публичен Огран"
msgid "Public authorities"
msgstr "Публични органи"
@@ -1739,34 +1748,34 @@ msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
msgstr "Публични органи от {{start_count}} до {{end_count}}, от общо{{total_count}}"
msgid "Public authority – {{name}}"
-msgstr ""
+msgstr "Публичен орган – {{name}}"
msgid "Public bodies that most frequently replied with \"Not Held\""
-msgstr ""
+msgstr "Публични органи, отговорили най-често с \"Не се пази\""
msgid "Public bodies with most overdue requests"
-msgstr ""
+msgstr "Публични органи с най-много просрочени заявления"
msgid "Public bodies with the fewest successful requests"
-msgstr ""
+msgstr "Публични органи с най-малко успешни заявления"
msgid "Public bodies with the most requests"
-msgstr ""
+msgstr "Публични органи с най-много заявления"
msgid "Public bodies with the most successful requests"
-msgstr ""
+msgstr "Публични органи с най-много успешни заявления"
msgid "Public body"
msgstr ""
msgid "Public notes"
-msgstr ""
+msgstr "Публични бележки"
msgid "Public page"
-msgstr ""
+msgstr "Публична страница"
msgid "Public page not available"
-msgstr ""
+msgstr "Публичната страница не е достъпна"
msgid "PublicBody|Api key"
msgstr ""
@@ -1792,6 +1801,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -1826,7 +1838,7 @@ msgid "Publication scheme URL"
msgstr ""
msgid "Purge request"
-msgstr ""
+msgstr "Прочистване на заявлението"
msgid "PurgeRequest|Model"
msgstr ""
@@ -1841,13 +1853,13 @@ msgid "RSS feed of updates"
msgstr "RSS емисия на новостите"
msgid "Re-edit this annotation"
-msgstr "Повторно редактиране на тази бележка"
+msgstr "Повторно редактиране на този коментар"
msgid "Re-edit this message"
msgstr "Повторно редактиране на това съобщение"
msgid "Read about <a href=\"{{advanced_search_url}}\">advanced search operators</a>, such as proximity and wildcards."
-msgstr ""
+msgstr "Прочетете за <a href=\"{{advanced_search_url}}\">детайлните оператори за търсене</a>, като приближения и заместващи символи."
msgid "Read blog"
msgstr "Четете в блога"
@@ -1862,22 +1874,22 @@ msgid "Refused."
msgstr "Отказано."
msgid "Remember me</label> (keeps you signed in longer;\\n do not use on a public computer) "
-msgstr ""
+msgstr "Запомни ме</label> (сайтът ще ви помни за по-дълго;\\n не ползвайте това на чужд компютър) "
msgid "Report abuse"
msgstr ""
msgid "Report an offensive or unsuitable request"
-msgstr ""
+msgstr "Докладване на обидно или неподходящо заявление"
msgid "Report request"
-msgstr ""
+msgstr "Докладвай заявлението"
msgid "Report this request"
-msgstr ""
+msgstr "Докладване на това заявление"
msgid "Reported for administrator attention."
-msgstr ""
+msgstr "Докладвано на вниманието на администратор."
msgid "Request an internal review"
msgstr "Искане на вътрешно разглеждане"
@@ -1886,7 +1898,7 @@ msgid "Request an internal review from {{person_or_body}}"
msgstr "Искане на вътрешно разглеждане от {{person_or_body}}"
msgid "Request email"
-msgstr ""
+msgstr "Поискай имейл"
msgid "Request has been removed"
msgstr "Заявлението беше премахнато"
@@ -1895,7 +1907,7 @@ msgid "Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}
msgstr "Заявление, изпратено до {{public_body_name}} от {{info_request_user}} на {{date}}."
msgid "Request to {{public_body_name}} by {{info_request_user}}. Annotated by {{event_comment_user}} on {{date}}."
-msgstr "Заявление до {{public_body_name}} от {{info_request_user}} с бележка от {{event_comment_user}} на {{date}}."
+msgstr "Заявление до {{public_body_name}} от {{info_request_user}} с коментар от {{event_comment_user}} на {{date}}."
msgid "Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
msgstr "Поискано от {{public_body_name}} от {{info_request_user}} на {{date}}"
@@ -1904,22 +1916,22 @@ msgid "Requested on {{date}}"
msgstr "Поискано на {{date}}"
msgid "Requests are considered overdue if they are in the 'Overdue' or 'Very Overdue' states."
-msgstr ""
+msgstr "За просрочени се считат заявления, които са в състояния 'Overdue' или 'Very Overdue'."
msgid "Requests are considered successful if they were classified as either 'Successful' or 'Partially Successful'."
-msgstr ""
+msgstr "За успешни се считат заявления, ако са класифицирани като 'Successful' или 'Partially Successful'."
msgid "Requests for personal information and vexatious requests are not considered valid for FOI purposes (<a href=\"/help/about\">read more</a>)."
-msgstr ""
+msgstr "Неоснователни заявления, или такива за лична информация, се считат за невалидни за целите на ДдИ (<a href=\"/help/about\">вижте повече</a>)."
msgid "Requests or responses matching your saved search"
-msgstr ""
+msgstr "Заявления или отговори, съвпадащи с Вашето запазено търсене"
msgid "Requests similar to '{{request_title}}'"
-msgstr ""
+msgstr "Заявления, подобни на '{{request_title}}'"
msgid "Requests similar to '{{request_title}}' (page {{page}})"
-msgstr ""
+msgstr "Заявления, подобни на '{{request_title}}' (стр. {{page}})"
msgid "Respond by email"
msgstr "Отговорете с имейл"
@@ -1940,7 +1952,7 @@ msgid "Response from a public authority"
msgstr "Отговор от публичен орган"
msgid "Response to '{{title}}'"
-msgstr ""
+msgstr "Отговор към '{{title}}'"
msgid "Response to this request is <strong>delayed</strong>."
msgstr "Отговорът на това заявление е <strong>закъснял</strong>."
@@ -1979,10 +1991,10 @@ msgid "Search in"
msgstr "Търсене в"
msgid "Search over<br/>\\n <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\\n <strong>{{number_of_authorities}} authorities</strong>"
-msgstr ""
+msgstr "Търсене измежду<br/>\\n <strong>{{number_of_requests}} заявления</strong> <span>и</span><br/>\\n <strong>{{number_of_authorities}} органа</strong>"
msgid "Search queries"
-msgstr ""
+msgstr "Заявки за търсене"
msgid "Search results"
msgstr "Резултати от търсенето"
@@ -1992,8 +2004,8 @@ msgstr "С търсачката в сайта може да намерите т
msgid "Search within the {{count}} Freedom of Information requests to {{public_body_name}}"
msgid_plural "Search within the {{count}} Freedom of Information requests made to {{public_body_name}}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Търсене измежду {{count}} Заявление за Достъп до Информация, отправено към {{public_body_name}}"
+msgstr[1] "Търсене измежду {{count}} Заявления за Достъп до Информация, отправени към {{public_body_name}}"
msgid "Search your contributions"
msgstr "Търсене в допринесеното от Вас"
@@ -2008,19 +2020,19 @@ msgid "Select the authority to write to"
msgstr "Изберете органа, на който ще пишете"
msgid "Send a followup"
-msgstr ""
+msgstr "Изпращане на пояснително съобщение"
msgid "Send a message to "
msgstr "Изпращане съобщение до "
msgid "Send a public follow up message to {{person_or_body}}"
-msgstr ""
+msgstr "Изпращане на публично пояснително съобщение до {{person_or_body}}"
msgid "Send a public reply to {{person_or_body}}"
msgstr "Изпращане публичен отговор до {{person_or_body}}"
msgid "Send follow up to '{{title}}'"
-msgstr ""
+msgstr "Изпращане на пояснително съобщение към '{{title}}'"
msgid "Send message"
msgstr "Изпращане на съобщение"
@@ -2035,22 +2047,22 @@ msgid "Set your profile photo"
msgstr "Задайте снимка за профила Ви"
msgid "Short name"
-msgstr ""
+msgstr "Кратко име"
msgid "Short name is already taken"
msgstr "Краткото име вече е заето"
msgid "Show most relevant results first"
-msgstr ""
+msgstr "Покажи първо най-близките по значение резултати"
msgid "Show only..."
msgstr "Покажи само..."
msgid "Showing"
-msgstr "Показва"
+msgstr "Търсене в"
msgid "Sign in"
-msgstr "Влизане"
+msgstr "Регистриране"
msgid "Sign in or make a new account"
msgstr "Вход или нова регистрация"
@@ -2077,19 +2089,19 @@ msgid "Some of the information requested has been received"
msgstr "Част от поисканата информация беше получена"
msgid "Some people who've made requests haven't let us know whether they were\\nsuccessful or not. We need <strong>your</strong> help &ndash;\\nchoose one of these requests, read it, and let everyone know whether or not the\\ninformation has been provided. Everyone'll be exceedingly grateful."
-msgstr ""
+msgstr "За няколко заявления, потребителите, които са ги отправили, не са отбелязали\\nуспешни ли са или не. Нужна ни е <strong>Вашата</strong> помощ &ndash;\\nизберете едно от тези Заявления, прочетете го и определете предоставена ли е\\nисканата информация или не. Всички ще научат за това и ще Ви бъдат изключително благодарни."
msgid "Somebody added a note to your FOI request - "
msgstr "Някой добави бележка към заявлението Ви за ДдИ - "
msgid "Someone has updated the status of your request"
-msgstr ""
+msgstr "Някой обнови състоянието на Заявлението Ви"
msgid "Someone, perhaps you, just tried to change their email address on\\n{{site_name}} from {{old_email}} to {{new_email}}."
msgstr "Някой, вероятно Вие, току-що се опита да смени своя имейл адрес в\\n{{site_name}} от {{old_email}} на {{new_email}}."
msgid "Sorry - you cannot respond to this request via {{site_name}}, because this is a copy of the request originally at {{link_to_original_request}}."
-msgstr ""
+msgstr "Съжаляваме - не може да отговорите на това заявление чрез {{site_name}}, понеже е копие на заявление на {{link_to_original_request}}."
msgid "Sorry, but only {{user_name}} is allowed to do that."
msgstr "Съжаляваме, но само {{user_name}} има право да направи това."
@@ -2110,13 +2122,13 @@ msgid "Start your own blog"
msgstr "Започнете собствен блог"
msgid "Stay up to date"
-msgstr ""
+msgstr "Бъди в час"
msgid "Still awaiting an <strong>internal review</strong>"
msgstr "Все още очаква <strong>вътрешно разглеждане</strong>"
msgid "Subject"
-msgstr ""
+msgstr "Тема"
msgid "Subject:"
msgstr "Тема:"
@@ -2152,7 +2164,7 @@ msgid "Table of varieties"
msgstr "Таблица на разновидностите"
msgid "Tags"
-msgstr ""
+msgstr "Маркери"
msgid "Tags (separated by a space):"
msgstr "Маркери (отделени с интервал):"
@@ -2167,7 +2179,7 @@ msgid "Thank you for helping us keep the site tidy!"
msgstr "Благодарим Ви, че ни помагате да поддържаме сайта спретнат!"
msgid "Thank you for making an annotation!"
-msgstr "Благодарим Ви, че добавихте бележка!"
+msgstr "Благодарим Ви, че добавихте коментар!"
msgid "Thank you for responding to this FOI request! Your response has been published below, and a link to your response has been emailed to "
msgstr "Благодарим Ви, че отговорихте на това заявление за ДдИ! Вашият отговор беше публикуван по-долу, а препратка към отговора Ви беше изпратена с имейл на "
@@ -2182,22 +2194,22 @@ msgid "Thank you for updating your profile photo"
msgstr "Благодарим Ви, че обновихте снимката си в профила"
msgid "Thank you! We'll look into what happened and try and fix it up."
-msgstr ""
+msgstr "Благодарим Ви! Ще наблюдаваме какво се случва, ще пробваме и ще го коригираме."
msgid "Thanks for helping - your work will make it easier for everyone to find successful\\nresponses, and maybe even let us make league tables..."
-msgstr ""
+msgstr "Благодарим за помощта - работата Ви ще улесни всички в намирането на успешните\\nотговори и ще ни помогне да поддържаме класациите..."
msgid "Thanks very much - this will help others find useful stuff. We'll\\n also, if you need it, give advice on what to do next about your\\n requests."
-msgstr ""
+msgstr "Благодарим Ви много - това ще помогне на всички в намирането на\\n полезно съдържание. Също, ако желаете, можем да Ви посъветваме за\\n следващата Ви стъпка с Вашето Заявление."
msgid "Thanks very much for helping keep everything <strong>neat and organised</strong>.\\n We'll also, if you need it, give you advice on what to do next about each of your\\n requests."
-msgstr ""
+msgstr "Благодарим Ви много за това, че ни помагате да поддържаме всичко <strong>спретнато и подредено</strong>.\\n Също така, ако желаете, можем да Ви дадем съвет за следващите\\n Ви стъпки за всяко от Вашите Заявления."
msgid "That doesn't look like a valid email address. Please check you have typed it correctly."
msgstr "Това не изглежда да е валиден имейл адрес. Моля, проверете дали сте го написали правилно."
msgid "The <strong>review has finished</strong> and overall:"
-msgstr ""
+msgstr "<strong>Вътрешното разглеждане завърши</strong>, и като цяло:"
msgid "The Freedom of Information Act <strong>does not apply</strong> to"
msgstr "Законът за Достъп до обществена информация <strong>не се прилага</strong> за"
@@ -2218,7 +2230,7 @@ msgid "The authority would like to / has <strong>responded by post</strong> to t
msgstr "Публичният орган би желал или вече е<strong>отговорил по пощата</strong> на това заявление."
msgid "The classification of requests (e.g. to say whether they were successful or not) is done manually by users and administrators of the site, which means that they are subject to error."
-msgstr ""
+msgstr "Класифицирането на заявления, (напр. дали са успешни или не) е направено от потребители и администратори на сайта, като те би могло да са сгрешили."
msgid "The email that you, on behalf of {{public_body}}, sent to\\n{{user}} to reply to an {{law_used_short}}\\nrequest has not been delivered."
msgstr "Имейлът, който Вие изпратихте от името на {{public_body}}, до\\n{{user}} в отговор на заявление за {{law_used_short}}\\nне беше доставено."
@@ -2230,7 +2242,7 @@ msgid "The page doesn't exist. Things you can try now:"
msgstr "Страницата не съществува. Това, което може да опитате сега:"
msgid "The percentages are calculated with respect to the total number of requests, which includes invalid requests; this is a known problem that will be fixed in a later release."
-msgstr ""
+msgstr "Процентите се изчисляват на база всички заявления, което включва и невалидните. Това е известен проблем, който ще бъде коригиран в следваща версия."
msgid "The public authority does not have the information requested"
msgstr "Публичният орган не разполага с исканата информация"
@@ -2263,16 +2275,16 @@ msgid "The request was refused by the public authority"
msgstr "Заявлението беше отхвърлено от публичния орган"
msgid "The request you have tried to view has been removed. There are\\nvarious reasons why we might have done this, sorry we can't be more specific here. Please <a\\n href=\"{{url}}\">contact us</a> if you have any questions."
-msgstr ""
+msgstr "Заявлението, което се опитвате да видите, беше премахнато. Има\\nразлични причини, поради които може да сме го направили, но за съжаление, тук не можем да сме по-конкретни. Молим <a\\n href=\"{{url}}\">свържете се с нас</a> ако имате въпроси."
msgid "The requester has abandoned this request for some reason"
msgstr "Това заявление беше изоставено от заявителя поради някаква причина"
msgid "The response to your request has been <strong>delayed</strong>. You can say that,\\n by law, the authority should normally have responded\\n <strong>promptly</strong> and"
-msgstr ""
+msgstr "Отговорът на Вашето заявление <strong>закъснява</strong>. Може да се каже,\\n че по закон, органът трябва да отговори\\n <strong>в срок</strong> и"
msgid "The response to your request is <strong>long overdue</strong>. You can say that, by\\n law, under all circumstances, the authority should have responded\\n by now"
-msgstr ""
+msgstr "Отговорът на Вашето заявление е <strong>доста закъснял</strong>. Може да се каже, че\\n по закон, при всички обстоятелства, органът трябваше да е отговорил\\n до сега"
msgid "The search index is currently offline, so we can't show the Freedom of Information requests that have been made to this authority."
msgstr "Търсачката ни не е достъпна в момента, поради което не можем да покажем Заявленията за Достъп до информация, отправени към този орган."
@@ -2299,7 +2311,7 @@ msgid "Then you can classify the FOI response you have got from "
msgstr "След това може да класифицирате отговора за ДдИ, който сте получили от "
msgid "Then you can download a zip file of {{info_request_title}}."
-msgstr "След това ще може да свалите zip файл на {{info_request_title}}."
+msgstr "След това ще може да свалите {{info_request_title}} като zip файл."
msgid "Then you can log into the administrative interface"
msgstr "След това ще можете да влезете в административния интерфейс"
@@ -2308,7 +2320,7 @@ msgid "Then you can play the request categorisation game."
msgstr ""
msgid "Then you can report the request '{{title}}'"
-msgstr ""
+msgstr "След това ще можете да докладвате заявлението '{{title}}'"
msgid "Then you can send a message to "
msgstr "След това ще може да изпратите съобщение до "
@@ -2317,31 +2329,31 @@ msgid "Then you can sign in to {{site_name}}"
msgstr "След това ще можете да влезете в {{site_name}}"
msgid "Then you can update the status of your request to "
-msgstr "След това ще можете да обновите статуса на заявлението Ви до "
+msgstr "След това ще можете да обновите статуса на заявлението Ви към"
msgid "Then you can upload an FOI response. "
msgstr "След това ще може да качите отговор за ДдИ. "
msgid "Then you can write follow up message to "
-msgstr ""
+msgstr "След това ще можете да изпратите пояснително съобщение до "
msgid "Then you can write your reply to "
msgstr "След това ще можете да напишете отговора си до "
msgid "Then you will be following all new FOI requests."
-msgstr ""
+msgstr "След това Вие ще следвате всички нови заявления за ДдИ."
msgid "Then you will be notified whenever '{{user_name}}' requests something or gets a response."
-msgstr ""
+msgstr "След това ще бъдете уведомявани, когато '{{user_name}}' отправи заявление или получи отговор."
msgid "Then you will be notified whenever a new request or response matches your search."
-msgstr ""
+msgstr "След това ще бъдете уведомяван всеки път, когато ново заявление или отговор съвпадне с търсенето Ви."
msgid "Then you will be notified whenever an FOI request succeeds."
-msgstr ""
+msgstr "След това ще бъдете уведомявани при всеки успех на заявление за ДдИ."
msgid "Then you will be notified whenever someone requests something or gets a response from '{{public_body_name}}'."
-msgstr ""
+msgstr "След това ще бъдете уведомявани, когато някой отправи заявление или получи отговор от '{{public_body_name}}'."
msgid "Then you will be updated whenever the request '{{request_title}}' is updated."
msgstr ""
@@ -2353,178 +2365,178 @@ msgid "Then your FOI request to {{public_body_name}} will be sent."
msgstr "След това Вашите заявления за ДдИ до {{public_body_name}} ще бъдат изпратени."
msgid "Then your annotation to {{info_request_title}} will be posted."
-msgstr ""
+msgstr "След това коментарът Ви към {{info_request_title}} ще бъде показан."
msgid "There are {{count}} new annotations on your {{info_request}} request. Follow this link to see what they wrote."
-msgstr ""
+msgstr "Има {{count}} нови коментари по заявлението Ви {{info_request}}. Последвайте тази връзка за да видите какво са написали."
msgid "There is <strong>more than one person</strong> who uses this site and has this name.\\n One of them is shown below, you may mean a different one:"
-msgstr ""
+msgstr "Има <strong>повече от един потребител</strong> с това име, ползващ този сайт.\\n Един от тях е показан по-долу, може би имате предвид друго:"
msgid "There is a limit on the number of requests you can make in a day, because we don’t want public authorities to be bombarded with large numbers of inappropriate requests. If you feel you have a good reason to ask for the limit to be lifted in your case, please <a href='{{help_contact_path}}'>get in touch</a>."
-msgstr ""
+msgstr "Има ограничение на броя заявления на ден, които може да направите, понеже не желаем публичните органи да бъдат бомбардирани с голям брой неуместни заявления. Ако считате, че имате основателна причина да поискате вдигане на лимита във Вашия случай, молим, <a href='{{help_contact_path}}'>уведомете ни</a>."
msgid "There is {{count}} person following this request"
msgid_plural "There are {{count}} people following this request"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Има {{count}} потребител, следящ това заявление"
+msgstr[1] "Има {{count}} потребители, следящи това заявление"
msgid "There was a <strong>delivery error</strong> or similar, which needs fixing by the {{site_name}} team."
-msgstr ""
+msgstr "Получи се някаква <strong>грешка при обработката</strong>, която се нуждае от вниманието на екипа на {{site_name}}."
msgid "There was an error with the words you entered, please try again."
-msgstr ""
+msgstr "Получи се грешка с въведените от Вас думи. Моля, опитайте отново."
msgid "There was no data calculated for this graph yet."
-msgstr ""
+msgstr "За тази графика все още няма изчислени данни."
msgid "There were no requests matching your query."
-msgstr ""
+msgstr "Няма заявления, съвпадащи със заявката Ви."
msgid "There were no results matching your query."
-msgstr ""
+msgstr "Няма резултати, съвпадащи със заявката ви."
msgid "These graphs were partly inspired by <a href=\"http://mark.goodge.co.uk/2011/08/number-crunching-whatdotheyknow/\">some statistics that Mark Goodge produced for WhatDoTheyKnow</a>, so thanks are due to him."
-msgstr ""
+msgstr "Тези графики са частично вдъхновени от <a href=\"http://mark.goodge.co.uk/2011/08/number-crunching-whatdotheyknow/\">някои статистики, които Mark Goodge създаде за WhatDoTheyKnow</a>, за което му благодарим."
msgid "They are going to reply <strong>by post</strong>"
-msgstr ""
+msgstr "Те ще отговорят <strong>по пощата</strong>"
msgid "They do <strong>not have</strong> the information <small>(maybe they say who does)</small>"
-msgstr ""
+msgstr "Те <strong>не притежават</strong> информацията <small>(вероятно посочват кой я притежава)</small>"
msgid "They have been given the following explanation:"
-msgstr ""
+msgstr "Те са дали следното обяснение:"
msgid "They have not replied to your {{law_used_short}} request {{title}} promptly, as normally required by law"
-msgstr ""
+msgstr "Те не са отговорили на заявлението Ви за {{law_used_short}} {{title}} навреме, както нормално се изисква по закон"
msgid "They have not replied to your {{law_used_short}} request {{title}}, \\nas required by law"
-msgstr ""
+msgstr "Те не са отговорили на Вашето Заявление {{title}} за {{law_used_short}} ,\\nкакто се изисква от закона"
msgid "Things to do with this request"
-msgstr ""
+msgstr "С това заявление можете да направите"
msgid "Things you're following"
-msgstr ""
+msgstr "Нещата, които следите"
msgid "This authority no longer exists, so you cannot make a request to it."
-msgstr ""
+msgstr "Този орган вече не съществува, поради което не може да отправите заявление към него."
msgid "This covers a very wide spectrum of information about the state of\\n the <strong>natural and built environment</strong>, such as:"
msgstr ""
msgid "This external request has been hidden"
-msgstr ""
+msgstr "Външното заявление беше скрито"
msgid "This is a plain-text version of the Freedom of Information request \"{{request_title}}\". The latest, full version is available online at {{full_url}}"
-msgstr ""
+msgstr "Това е текстова версия на Заявлението за Достъп до информация \"{{request_title}}\". Последната, пълна версия, може да видите на {{full_url}}"
msgid "This is an HTML version of an attachment to the Freedom of Information request"
-msgstr ""
+msgstr "Това е HTML версия на прикачен файл към Заявление за Достъп до информация"
msgid "This is because {{title}} is an old request that has been\\nmarked to no longer receive responses."
-msgstr ""
+msgstr "Причината е, че {{title}} е старо Заявление и е маркирано\\nкато неприемащо вече отговори."
msgid "This is the first version."
-msgstr ""
+msgstr "Това е първата версия."
msgid "This is your own request, so you will be automatically emailed when new responses arrive."
msgstr "Това е Ваше собствено заявление, така че автоматично ще Ви уведомяваме с имейл при пристигане на нови отговори."
msgid "This message has been hidden."
-msgstr ""
+msgstr "Това съобщение беше скрито."
msgid "This message has been hidden. There are various reasons why we might have done this, sorry we can't be more specific here."
-msgstr ""
+msgstr "Това съобщение беше скрито. Има различни причини, поради които скриваме съобщения. За съжаление не можем да бъдем по-конкретни."
msgid "This message has prominence 'hidden'. You can only see it because you are logged in as a super user."
-msgstr ""
+msgstr "Това съобщение е отбелязано като 'скрито'. Вие го виждате, понеже сте влезли като супер-потребител."
msgid "This message has prominence 'hidden'. {{reason}} You can only see it because you are logged in as a super user."
-msgstr ""
+msgstr "Това съобщение е отбелязано като 'скрито'. {{reason}} Вие го виждате, понеже сте влезли като супер-потребител."
msgid "This message is hidden, so that only you, the requester, can see it. Please <a href=\"{{url}}\">contact us</a> if you are not sure why."
-msgstr ""
+msgstr "Това съобщение е скрито, така че само Вие, заявителят, може да го види. Моля, <a href=\"{{url}}\">свържете се с нас</a> ако не сте сигурни за причината."
msgid "This message is hidden, so that only you, the requester, can see it. {{reason}}"
-msgstr ""
+msgstr "Това съобщение е скрито, така че само Вие, заявителят, може да го видите. {{reason}}"
msgid "This page of public body statistics is currently experimental, so there are some caveats that should be borne in mind:"
-msgstr ""
+msgstr "Тази страница със статистики за Публичен Орган към момента е експериментална, така че, някои предварителни уговорки трябва да се имат предвид:"
msgid "This particular request is finished:"
msgstr ""
msgid "This person has made no Freedom of Information requests using this site."
-msgstr ""
+msgstr "Този потребител не е отправял Заявления за Достъп до информация чрез този сайт."
msgid "This person's annotations"
-msgstr ""
+msgstr "Коментарите на този потребител"
msgid "This person's {{count}} Freedom of Information request"
msgid_plural "This person's {{count}} Freedom of Information requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} Заявление за Достъп до Информация на този потребител"
+msgstr[1] "{{count}} Заявления за Достъп до Информация на този потребител"
msgid "This person's {{count}} annotation"
msgid_plural "This person's {{count}} annotations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} коментар на този потребител"
+msgstr[1] "{{count}} коментара на този потребител"
msgid "This request <strong>requires administrator attention</strong>"
-msgstr ""
+msgstr "Това заявление <strong>изисква вниманието на администратор</strong>"
msgid "This request has already been reported for administrator attention"
-msgstr ""
+msgstr "Това заявление вече беше докладвано на вниманието на администратор"
msgid "This request has an <strong>unknown status</strong>."
-msgstr ""
+msgstr "Това заявление е в <strong>неизвестно състояние</strong>."
msgid "This request has been <strong>hidden</strong> from the site, because an administrator considers it not to be an FOI request"
-msgstr ""
+msgstr "Това заявление беше <strong>скрито</strong> от сайта, понеже администратор е преценил, че не е заявление за ДдИ"
msgid "This request has been <strong>hidden</strong> from the site, because an administrator considers it vexatious"
-msgstr ""
+msgstr "Това заявление беше <strong>скрито</strong> от сайта, понеже администратор е преценил, че е неоснователно"
msgid "This request has been <strong>reported</strong> as needing administrator attention (perhaps because it is vexatious, or a request for personal information)"
-msgstr ""
+msgstr "Това заявление беше <strong>докладвано</strong> на вниманието на администратор (вероятно защото е неоснователно или е заявление за лична информация)"
msgid "This request has been <strong>withdrawn</strong> by the person who made it.\\n There may be an explanation in the correspondence below."
-msgstr ""
+msgstr "Това Заявление беше <strong>оттеглено</strong> от потребителя, който го е създал.\\n Вероятно има обяснение в кореспонденцията по-долу."
msgid "This request has been marked for review by the site administrators, who have not hidden it at this time. If you believe it should be hidden, please <a href=\"{{url}}\">contact us</a>."
-msgstr ""
+msgstr "Това заявление беше отбелязано за преглед от админите на сайта, които не са го скрили засега. Ако смятате, че трябва да се скрие, молим <a href=\"{{url}}\">свържете се с нас</a>."
msgid "This request has been reported for administrator attention"
-msgstr ""
+msgstr "Това заявление беше докладвано на вниманието на администратор"
msgid "This request has been set by an administrator to \"allow new responses from nobody\""
-msgstr ""
+msgstr "От администратор е зададено това заявление да \"не приема нови отговори от никого\""
msgid "This request has had an unusual response, and <strong>requires attention</strong> from the {{site_name}} team."
-msgstr ""
+msgstr "Отговорът на това заявление е необичаен и <strong>изисква вниманието</strong> на екипа на {{site_name}}."
msgid "This request has prominence 'hidden'. You can only see it because you are logged\\n in as a super user."
-msgstr ""
+msgstr "Това съобщение е отбелязано като 'скрито'. Вие го виждате, понеже сте влезли\\n като супер-потребител."
msgid "This request is hidden, so that only you the requester can see it. Please\\n <a href=\"{{url}}\">contact us</a> if you are not sure why."
-msgstr ""
+msgstr "Това Заявление е скрито, така че само Вие, заявителят, може да го види. Молим\\n <a href=\"{{url}}\">свържете се с нас</a> ако не сте сигурни защо."
msgid "This request is still in progress:"
-msgstr ""
+msgstr "Това заявление все още се обработва:"
msgid "This request requires administrator attention"
-msgstr ""
+msgstr "Това Заявление изисква вниманието на администратор"
msgid "This request was not made via {{site_name}}"
-msgstr ""
+msgstr "Това заявление не е направено чрез {{site_name}}"
msgid "This table shows the technical details of the internal events that happened\\nto this request on {{site_name}}. This could be used to generate information about\\nthe speed with which authorities respond to requests, the number of requests\\nwhich require a postal response and much more."
msgstr "Тази таблица показва техническите подробности над вътрешните събития, случили се\\nпо това заявление в {{site_name}}. Това може да се използва за генериране на информация за\\nбързината, с която органите отговарят на заявления, броят на заявленията,\\nкоито изискват отговор по пощата и много други."
msgid "This user has been banned from {{site_name}} "
-msgstr ""
+msgstr "Този потребител беше блокиран от {{site_name}} "
msgid "This was not possible because there is already an account using \\nthe email address {{email}}."
msgstr "Това не е възможно, понеже вече има регистрация, използваща\\nимейл адрес {{email}}."
@@ -2536,7 +2548,7 @@ msgid "To cancel this alert"
msgstr "За да спрете това известяване"
msgid "To carry on, you need to sign in or make an account. Unfortunately, there\\nwas a technical problem trying to do this."
-msgstr ""
+msgstr "За да продължите, трябва да влезете или да създадете регистрация. За съжаление,\\nимаме технически проблем и в момента не може да направите това."
msgid "To change your email address used on {{site_name}}"
msgstr "За да промените Вашия имейл адрес, използван в {{site_name}}"
@@ -2548,55 +2560,55 @@ msgid "To do that please send a private email to "
msgstr "За да направите това, моля изпратете личен имейл до "
msgid "To do this, first click on the link below."
-msgstr ""
+msgstr "За да направите това, първо цъкнете върху връзката по-долу."
msgid "To download the zip file"
-msgstr ""
+msgstr "За да свалите zip файла"
msgid "To follow all successful requests"
-msgstr ""
+msgstr "Да следвате всички успешни заявления"
msgid "To follow new requests"
-msgstr ""
+msgstr "За да следвате нови заявления"
msgid "To follow requests and responses matching your search"
-msgstr ""
+msgstr "За да следите заявления и отговори, съвпадащи с търсенето Ви"
msgid "To follow requests by '{{user_name}}'"
-msgstr ""
+msgstr "За да следвате заявления от '{{user_name}}'"
msgid "To follow requests made using {{site_name}} to the public authority '{{public_body_name}}'"
-msgstr ""
+msgstr "За да следвате заявления направени чрез {{site_name}} до публичния орган '{{public_body_name}}'"
msgid "To follow the request '{{request_title}}'"
-msgstr ""
+msgstr "За да следвате заявлението '{{request_title}}'"
msgid "To help us keep the site tidy, someone else has updated the status of the \\n{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
-msgstr ""
+msgstr "За да ни помогне да поддържаме нещата подредени, някой е сменил състоянието на вашетп \\nЗаявление {{title}} за {{law_used_full}} до {{public_body}} на \"{{display_status}}\". Ако не сте съгласни с тази категоризация, молим, променете състоянието му отново така, както Вие смятате за правилно."
msgid "To let everyone know, follow this link and then select the appropriate box."
-msgstr ""
+msgstr "За да научат всички, последвайте тази връзка и след това отбележете подходящото."
msgid "To log into the administrative interface"
-msgstr ""
+msgstr "За да влезете в административния панел"
msgid "To play the request categorisation game"
msgstr ""
msgid "To post your annotation"
-msgstr ""
+msgstr "За да публикувате коментара си"
msgid "To reply to "
-msgstr ""
+msgstr "За да отговорите на "
msgid "To report this request"
-msgstr ""
+msgstr "За да докладвате това заявление"
msgid "To send a follow up message to "
-msgstr ""
+msgstr "За да изпратите пояснително съобщение до "
msgid "To send a message to "
-msgstr ""
+msgstr "За да изпратите съобщение на "
msgid "To send your FOI request"
msgstr "За да изпратите Вашето заявление за ДдИ"
@@ -2608,28 +2620,28 @@ msgid "To upload a response, you must be logged in using an email address from "
msgstr "За да качите отговор, трябва да сте влезли, използвайки имейл адрес от "
msgid "To use the advanced search, combine phrases and labels as described in the search tips below."
-msgstr ""
+msgstr "За да използвате разширено търсене, комбинирайте фрази и етикети, както е описано в съветите по-долу."
msgid "To view the email address that we use to send FOI requests to {{public_body_name}}, please enter these words."
msgstr "За да видите имейл адреса, използван от нас за изпращане на заявления за ДдИ до {{public_body_name}}, моля, въведете тези думи."
msgid "To view the response, click on the link below."
-msgstr ""
+msgstr "За да видите отговора, цъкнете върху връзката по-долу."
msgid "To {{public_body_link_absolute}}"
-msgstr ""
+msgstr "До {{public_body_link_absolute}}"
msgid "To:"
-msgstr ""
+msgstr "До:"
msgid "Today"
-msgstr ""
+msgstr "Днес"
msgid "Too many requests"
-msgstr ""
+msgstr "Твърде много заявления"
msgid "Top search results:"
-msgstr ""
+msgstr "Най-често търсени резултати:"
msgid "Track thing"
msgstr ""
@@ -2656,64 +2668,64 @@ msgid "Tweet this request"
msgstr ""
msgid "Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show things that happened in the first two weeks of January."
-msgstr ""
+msgstr "Напишете <strong><code>01/01/2013..14/01/2013</code></strong>, за да видите само случилото се през първите две седмици на януари."
msgid "URL name can't be blank"
-msgstr ""
+msgstr "URL името не може да е празно"
msgid "Unable to change email address on {{site_name}}"
msgstr "Не беше възможно да се промени имейл адрес на {{site_name}}"
msgid "Unable to send a reply to {{username}}"
-msgstr ""
+msgstr "Не е възможно изпращане на отговор до {{username}}"
msgid "Unable to send follow up message to {{username}}"
-msgstr ""
+msgstr "Не бе възможно да се изпрати пояснително съобщение до {{username}}"
msgid "Unexpected search result type"
-msgstr ""
+msgstr "Неочакван тип резултат на търсене"
msgid "Unexpected search result type "
-msgstr ""
+msgstr "Неочакван тип резултат на търсене "
msgid "Unfortunately we don't know the FOI\\nemail address for that authority, so we can't validate this.\\nPlease <a href=\"{{url}}\">contact us</a> to sort it out."
msgstr "За съжаление, не знаем имейл адреса\\nза ДдИ на този орган, така че, не можем да потвърдим това.\\nМолим <a href=\"{{url}}\">свържете се с нас</a> за да го оправим."
msgid "Unfortunately, we do not have a working {{info_request_law_used_full}}\\naddress for"
-msgstr ""
+msgstr "За съжаление, ние не разполагаме с работещ {{info_request_law_used_full}}\\nадрес за"
msgid "Unknown"
-msgstr ""
+msgstr "Неизвестен"
msgid "Unsubscribe"
-msgstr ""
+msgstr "Отписване"
msgid "Unusual response."
-msgstr ""
+msgstr "Необичаен отговор."
msgid "Update the status of this request"
-msgstr ""
+msgstr "Обновяване състоянието на това заявление"
msgid "Update the status of your request to "
-msgstr ""
+msgstr "Обновяване състоянието на Ваше заявление към"
msgid "Upload FOI response"
-msgstr ""
+msgstr "Качване на отговор за ДдИ"
msgid "Use OR (in capital letters) where you don't mind which word, e.g. <strong><code>commons OR lords</code></strong>"
-msgstr ""
+msgstr "Ползвайте OR (главни букви), когато няма значение коя от двете думи, напр. <strong><code>конкурс OR поръчка</code></strong>"
msgid "Use quotes when you want to find an exact phrase, e.g. <strong><code>\"Liverpool City Council\"</code></strong>"
-msgstr ""
+msgstr "Ползвайте кавички, когато искате да намерите точна фраза, напр. <strong><code>\"Народно Събрание\"</code></strong>"
msgid "User"
-msgstr ""
+msgstr "Потребител"
msgid "User info request sent alert"
msgstr ""
msgid "User – {{name}}"
-msgstr ""
+msgstr "Потребител – {{name}}"
msgid "UserInfoRequestSentAlert|Alert type"
msgstr ""
@@ -2721,18 +2733,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -2770,7 +2776,7 @@ msgid "User|Url name"
msgstr ""
msgid "Version {{version}}"
-msgstr ""
+msgstr "Версия {{version}}"
msgid "View FOI email address"
msgstr "Виж ДдИ имейл адрес"
@@ -2782,22 +2788,22 @@ msgid "View FOI email address for {{public_body_name}}"
msgstr "Показване ДдИ имейл адрес за {{public_body_name}}"
msgid "View Freedom of Information requests made by {{user_name}}:"
-msgstr ""
+msgstr "Преглед на Заявленията за Достъп до информация, направени от {{user_name}}:"
msgid "View and search requests"
-msgstr ""
+msgstr "Преглед и търсене на заявления"
msgid "View authorities"
-msgstr ""
+msgstr "Преглед на органите"
msgid "View email"
msgstr "Преглед на имейл"
msgid "View requests"
-msgstr ""
+msgstr "Преглед на заявления"
msgid "Waiting clarification."
-msgstr ""
+msgstr "Очаква пояснение."
msgid "Waiting for an <strong>internal review</strong> by {{public_body_link}} of their handling of this request."
msgstr "Очаква <strong>вътрешно разглеждане</strong> от {{public_body_link}} на тяхната работа по това заявление."
@@ -2806,25 +2812,25 @@ msgid "Waiting for the public authority to complete an internal review of their
msgstr "Чака публичния орган да завърши вътрешно разглеждане на тяхната обработка на заявлението"
msgid "Waiting for the public authority to reply"
-msgstr ""
+msgstr "Очаква отговор на публичния орган"
msgid "Was the response you got to your FOI request any good?"
-msgstr ""
+msgstr "Беше ли с нещо полезен отговорът на Вашето Заявление за ДдИ?"
msgid "We consider it is not a valid FOI request, and have therefore hidden it from other users."
-msgstr ""
+msgstr "Според нас, това не е валидно Заявление за ДдИ и затова го скрихме от останалите потребители."
msgid "We consider it to be vexatious, and have therefore hidden it from other users."
-msgstr ""
+msgstr "Според нас, това е неоснователно и затова го скрихме от останалите потребители."
msgid "We do not have a working request email address for this authority."
msgstr "Ние нямаме работещ имейл адрес за заявления към този орган."
msgid "We do not have a working {{law_used_full}} address for {{public_body_name}}."
-msgstr ""
+msgstr "Не разполагаме с работещ адрес за Заявления за {{law_used_full}} на {{public_body_name}}."
msgid "We don't know whether the most recent response to this request contains\\n information or not\\n &ndash;\\n\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
-msgstr ""
+msgstr "Ние не знаем дали най-скорошният отговор на това заявление съдържа\\n информация или не\\n &ndash;\\n\tако Вие сте {{user_link}}, моля, <a href=\"{{url}}\">влезте</a> и проверете, за да може всички да узнаят."
msgid "We will not reveal your email address to anybody unless you or\\n the law tell us to (<a href=\"{{url}}\">details</a>). "
msgstr "Ние няма да предоставим имейл адреса Ви на никого, освен ако Вие\\n или закон ни нареди. (<a href=\"{{url}}\">Още за това</a>). "
@@ -2836,10 +2842,10 @@ msgid "We will not reveal your email addresses to anybody unless you\\nor the la
msgstr "Ние няма да предоставим имейл адресите Ви на никого, освен ако Вие\\nили закон ни нареди това."
msgid "We're waiting for"
-msgstr ""
+msgstr "Ние чакаме"
msgid "We're waiting for someone to read"
-msgstr ""
+msgstr "Ние чакаме някой да прочете"
msgid "We've sent an email to your new email address. You'll need to click the link in\\nit before your email address will be changed."
msgstr "Изпратихме Ви имейл на новия адрес. Ще трябва да цъкнете върху връзката\\nв него, след което имейл адресът Ви ще бъде сменен."
@@ -2851,118 +2857,118 @@ msgid "We've sent you an email, click the link in it, then you can change your p
msgstr "Изпратихме Ви имейл. Цъкнете връзката в него, след което ще можете да смените паролата си."
msgid "What are you doing?"
-msgstr ""
+msgstr "Какво правите?"
msgid "What best describes the status of this request now?"
-msgstr ""
+msgstr "Кое най-добре описва текущото състоянието на това заявление?"
msgid "What information has been released?"
-msgstr ""
+msgstr "Каква информация бе предоставена?"
msgid "What information has been requested?"
-msgstr ""
+msgstr "Каква информация беше поискана?"
msgid "When you get there, please update the status to say if the response \\ncontains any useful information."
-msgstr ""
+msgstr "Когато отидете там, молим, обновете състоянието, за да е ясно дали\\nотговорът съдържа някаква полезна информация."
msgid "When you receive the paper response, please help\\n others find out what it says:"
-msgstr ""
+msgstr "Когато получите отговора на хартия, молим, помогнете\\n на другите да намерят какво се казва в него:"
msgid "When you're done, <strong>come back here</strong>, <a href=\"{{url}}\">reload this page</a> and file your new request."
-msgstr ""
+msgstr "След като сте готови, <strong>върнете се тук</strong>, <a href=\"{{url}}\">презаредете тази страница</a> и регистрирайте новото си Заявление."
msgid "Which of these is happening?"
-msgstr ""
+msgstr "Кое от тези се случва?"
msgid "Who can I request information from?"
-msgstr ""
+msgstr "От кого мога да поискам информация?"
msgid "Withdrawn by the requester."
-msgstr ""
+msgstr "Оттеглено от заявителя."
msgid "Wk"
msgstr ""
msgid "Would you like to see a website like this in your country?"
-msgstr ""
+msgstr "Искате ли да видите сайт като този за Вашата страна?"
msgid "Write a reply"
-msgstr ""
+msgstr "Напишете отговор"
msgid "Write a reply to "
-msgstr ""
+msgstr "Напишете отговор до "
msgid "Write your FOI follow up message to "
-msgstr ""
+msgstr "Напишете Вашето пояснително съобщение до "
msgid "Write your request in <strong>simple, precise language</strong>."
-msgstr ""
+msgstr "Напишете заявлението си <strong>ясно и конкретно</strong>."
msgid "You"
-msgstr ""
+msgstr "Вие"
msgid "You are already following new requests"
-msgstr ""
+msgstr "Вие вече следвате новите заявления"
msgid "You are already following requests to {{public_body_name}}"
-msgstr ""
+msgstr "Вие вече следвате заявленията до {{public_body_name}}"
msgid "You are already following things matching this search"
-msgstr ""
+msgstr "Вие вече следите нещата, съвпадащи с това търсене"
msgid "You are already following this person"
-msgstr ""
+msgstr "Вие вече следите този потребител"
msgid "You are already following this request"
-msgstr ""
+msgstr "Вие вече следвате това Заявление"
msgid "You are already following updates about {{track_description}}"
-msgstr ""
+msgstr "Вие вече следите новостите относно {{track_description}}"
msgid "You are currently receiving notification of new activity on your wall by email."
msgstr "Към момента Вие получавате известия с имейл при нова активност на стената Ви."
msgid "You are following all new successful responses"
-msgstr ""
+msgstr "Вие следите всички нови успешни отговори"
msgid "You are no longer following {{track_description}}."
-msgstr ""
+msgstr "Вие вече не следите {{track_description}}."
msgid "You are now <a href=\"{{wall_url_user}}\">following</a> updates about {{track_description}}"
-msgstr ""
+msgstr "Сега вече <a href=\"{{wall_url_user}}\">следите</a> новостите относно {{track_description}}"
msgid "You can <strong>complain</strong> by"
-msgstr ""
+msgstr "Можете да се <strong>оплачете</strong> като"
msgid "You can change the requests and users you are following on <a href=\"{{profile_url}}\">your profile page</a>."
-msgstr ""
+msgstr "Можете да променяте следваните от Вас заявления и потребители в <a href=\"{{profile_url}}\">страницата на профила Ви</a>."
msgid "You can get this page in computer-readable format as part of the main JSON\\npage for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
-msgstr ""
+msgstr "Вие може да получите тази страница в компютърно-четим формат като част от главната JSON\\nстраница за Заявлението. Вижте <a href=\"{{api_path}}\">API документацията</a>."
msgid "You can only request information about the environment from this authority."
-msgstr ""
+msgstr "От този орган, Вие можете да искате информация само за околната среда."
msgid "You have a new response to the {{law_used_full}} request "
-msgstr ""
+msgstr "Имате нов отговор на Заявлението за {{law_used_full}} "
msgid "You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to tell us about the problem"
-msgstr ""
+msgstr "Открили сте бъг. Моля, <a href=\"{{contact_url}}\">свържете се с нас</a> за да ни кажете за проблема"
msgid "You have hit the rate limit on new requests. Users are ordinarily limited to {{max_requests_per_user_per_day}} requests in any rolling 24-hour period. You will be able to make another request in {{can_make_another_request}}."
-msgstr ""
+msgstr "Вие достигнахте лимита за нови заявления. Потребителите обикновено са ограничени до {{max_requests_per_user_per_day}} заявления на всеки 24 часа. Ще можете да отправите друго заявление в {{can_make_another_request}}."
msgid "You have made no Freedom of Information requests using this site."
-msgstr ""
+msgstr "Вие не сте отправили Заявления за Достъп до информация чрез този сайт."
msgid "You have now changed the text about you on your profile."
-msgstr ""
+msgstr "Вие сменихте текста за Вас във Вашия профил."
msgid "You have now changed your email address used on {{site_name}}"
msgstr "Вие променихте имейл адреса си, използван в {{site_name}}"
msgid "You just tried to sign up to {{site_name}}, when you\\nalready have an account. Your name and password have been\\nleft as they previously were.\\n\\nPlease click on the link below."
-msgstr ""
+msgstr "Вие току-що се опитахте да се регистрирате в {{site_name}}, но \\nвече имате акаунт. Вашите име и парола са такива,\\nкаквито сте избрали първоначално.\\n\\nМоля, цъкнете върху връзката по-долу."
msgid "You know what caused the error, and can <strong>suggest a solution</strong>, such as a working email address."
msgstr "Знаете кое е предизвикало грешката и можете да <strong>предложите решение</strong>, като работещ имейл адрес."
@@ -2971,37 +2977,37 @@ msgid "You may <strong>include attachments</strong>. If you would like to attach
msgstr "Можете <strong>да добавяте файлове</strong>. Ако искате да прикрепите\\nфайл, твърде голям за имейл, ползвайте формата по-долу."
msgid "You may be able to find\\n one on their website, or by phoning them up and asking. If you manage\\n to find one, then please <a href=\"{{url}}\">send it to us</a>."
-msgstr ""
+msgstr "Вие може да откриете\\n такъв на техния сайт, или като им позвъните и ги попитате. Ако успеете\\n да откриете такъв, молим <a href=\"{{url}}\">изпратете го и на нас</a>."
msgid "You may be able to find\\none on their website, or by phoning them up and asking. If you manage\\nto find one, then please <a href=\"{{help_url}}\">send it to us</a>."
-msgstr ""
+msgstr "Бихте могли да откриете\\nтакъв на техния сайт, или като им позвъните и ги попитате. Ако успеете\\nда откриете такъв, молим <a href=\"{{help_url}}\">изпратете го и на нас</a>."
msgid "You need to be logged in to change the text about you on your profile."
-msgstr ""
+msgstr "Трябва да сте влезли за да смените текста за Вас в профила Ви."
msgid "You need to be logged in to change your profile photo."
-msgstr ""
+msgstr "Трябва да сте влезли за да смените снимката в профила Ви."
msgid "You need to be logged in to clear your profile photo."
-msgstr ""
+msgstr "Трябва да сте влезли за да премахнете снимката в профила Ви."
msgid "You need to be logged in to edit your profile."
-msgstr ""
+msgstr "Трябва да сте влезли за да можете да редактирате профила си."
msgid "You need to be logged in to report a request for administrator attention"
-msgstr ""
+msgstr "Трябва да сте влезли в сайта, за да докладвате заявление на вниманието на администратор"
msgid "You previously submitted that exact follow up message for this request."
-msgstr ""
+msgstr "Изпращали сте точно същото пояснително съобщение за това заявление и преди."
msgid "You should have received a copy of the request by email, and you can respond\\n by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
msgstr "Би трябвало да сте получили имейл с копие на заявлението. Можете да отговорите\\n <strong>просто като отговорите</strong> на имейла. За Ваше удобство, ето го адреса:"
msgid "You want to <strong>give your postal address</strong> to the authority in private."
-msgstr ""
+msgstr "Вие искате да <strong>предоставите пощенския си адрес</strong> на органа без това да е публично."
msgid "You will be unable to make new requests, send follow ups, add annotations or\\nsend messages to other users. You may continue to view other requests, and set\\nup\\nemail alerts."
-msgstr ""
+msgstr "Вие няма да можете да отправяте нови заявления, последващи съобщения,\\nда добавяте коментари и изпращате съобщения до други потребители. Можете\\nда разглеждате други заявления и да получавате известявания по имейл."
msgid "You will no longer be emailed updates for those alerts"
msgstr "Вие вече няма да получавате новости по имейл за тези известия"
@@ -3010,122 +3016,122 @@ msgid "You will now be emailed updates about {{track_description}}. <a href=\"{{
msgstr "Вече ще получавате имейли при новости за {{track_description}}. <a href=\"{{change_email_alerts_url}}\">Предпочитате да не получавате имейли?</a>"
msgid "You will only get an answer to your request if you follow up\\nwith the clarification."
-msgstr ""
+msgstr "Вие ще получите отговор на заявлението само ако изпратите\\nпояснително съобщение с разяснения."
msgid "You will still be able to view it while logged in to the site. Please reply to this email if you would like to discuss this decision further."
msgstr "Вие все още ще можете да го виждате, когато сте влезли в сайта. Молим, отговорете на този имейл, ако искате да това ваше решение да се обсъди по-подробно."
msgid "You're in. <a href=\"#\" id=\"send-request\">Continue sending your request</a>"
-msgstr ""
+msgstr "Влязохте. <a href=\"#\" id=\"send-request\">Продължаване с изпращането на Заявлението Ви</a>"
msgid "You're long overdue a response to your FOI request - "
-msgstr ""
+msgstr "Отговорът на ДдИ Заявлението Ви твърде много закъсня - "
msgid "You're not following anything."
-msgstr ""
+msgstr "Вие не следите нищо."
msgid "You've now cleared your profile photo"
-msgstr ""
+msgstr "Профилната Ви снимка беше премахната"
msgid "Your <strong>name will appear publicly</strong>\\n (<a href=\"{{why_url}}\">why?</a>)\\n on this website and in search engines. If you\\n are thinking of using a pseudonym, please\\n <a href=\"{{help_url}}\">read this first</a>."
-msgstr ""
+msgstr "Вашето <strong>име ще се показва публично</strong>\\n (<a href=\"{{why_url}}\">защо?</a>)\\n на този уеб сайт и в машините за търсене. Ако Вие\\n възнамерявате да ползвате псевдоним, молим\\n <a href=\"{{help_url}}\">прочетете първо това</a>."
msgid "Your annotations"
-msgstr ""
+msgstr "Вашите коментари"
msgid "Your details, including your email address, have not been given to anyone."
msgstr "Ваши данни, включително имейл адреса Ви, не са били дадени на никого."
msgid "Your e-mail:"
-msgstr ""
+msgstr "Вашият имейл:"
msgid "Your follow up has not been sent because this request has been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you really want to send a follow up message."
-msgstr ""
+msgstr "Вашето пояснително съобщение не беше изпратено понеже това заявление беше спряно с цел предотвратяване на спам. Моля <a href=\"{{url}}\">свържете се с нас</a> ако действително искате да изпратите пояснително съобщение."
msgid "Your follow up message has been sent on its way."
-msgstr ""
+msgstr "Вашето пояснително съобщение беше изпратено."
msgid "Your internal review request has been sent on its way."
msgstr "Вашето заявление за вътрешно разглеждане беше изпратено."
msgid "Your message has been sent. Thank you for getting in touch! We'll get back to you soon."
-msgstr ""
+msgstr "Вашето съобщение беше изпратено. Благодарим Ви, че ни пишете! Ще се постараем да Ви отговорим скоро."
msgid "Your message to {{recipient_user_name}} has been sent"
-msgstr ""
+msgstr "Съобщението Ви до {{recipient_user_name}} беше изпратено"
msgid "Your message to {{recipient_user_name}} has been sent!"
-msgstr ""
+msgstr "Съобщението Ви до {{recipient_user_name}} беше изпратено!"
msgid "Your message will appear in <strong>search engines</strong>"
-msgstr ""
+msgstr "Вашето съобщение ще се появи в <strong>Интернет търсачките</strong>"
msgid "Your name and annotation will appear in <strong>search engines</strong>."
-msgstr ""
+msgstr "Вашето име и коментар ще се появят в <strong>Интернет търсачките</strong>."
msgid "Your name, request and any responses will appear in <strong>search engines</strong>\\n (<a href=\"{{url}}\">details</a>)."
-msgstr ""
+msgstr "Вашето име, Заявление и каквито и да са отговори ще се появяват в <strong>машините за търсене</strong>\\n (<a href=\"{{url}}\">подробности</a>)."
msgid "Your name:"
-msgstr ""
+msgstr "Вашето име:"
msgid "Your original message is attached."
-msgstr ""
+msgstr "Оригиналното Ви съобщение е прикрепено."
msgid "Your password has been changed."
-msgstr ""
+msgstr "Паролата Ви беше сменена."
msgid "Your password:"
-msgstr ""
+msgstr "Вашата парола:"
msgid "Your photo will be shown in public <strong>on the Internet</strong>,\\n wherever you do something on {{site_name}}."
-msgstr ""
+msgstr "Снимката Ви ще бъде показвана публично <strong>в Интернет</strong>,\\n всеки път, когато правите нещо в {{site_name}}."
msgid "Your request '{{request}}' at {{url}} has been reviewed by moderators."
-msgstr ""
+msgstr "Вашето заявление '{{request}}' на {{url}} беше прегледано от модераторите."
msgid "Your request on {{site_name}} hidden"
-msgstr ""
+msgstr "Вашето заявление на {{site_name}} е скрито"
msgid "Your request was called {{info_request}}. Letting everyone know whether you got the information will help us keep tabs on"
-msgstr ""
+msgstr "Вашето Заявление беше наречено {{info_request}}. Като уведомите всички, че сте получили исканата информация, ще ни помогнете да следим "
msgid "Your request:"
-msgstr ""
+msgstr "Вашето заявление:"
msgid "Your response to an FOI request was not delivered"
-msgstr ""
+msgstr "Вашият отговор на заявлението за ДдИ не беше доставен"
msgid "Your response will <strong>appear on the Internet</strong>, <a href=\"{{url}}\">read why</a> and answers to other questions."
-msgstr ""
+msgstr "Вашият отговор <strong>ще се появи в Интернет</strong>, <a href=\"{{url}}\">вижте защо</a> и ще отговори на други въпроси."
msgid "Your thoughts on what the {{site_name}} <strong>administrators</strong> should do about the request."
-msgstr ""
+msgstr "Вашите мисли за това, какво {{site_name}} <strong>администраторите</strong> би трябвало да направят за Заявлението."
msgid "Your {{count}} Freedom of Information request"
msgid_plural "Your {{count}} Freedom of Information requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} Ваше Заявление за Достъп до Информация"
+msgstr[1] "{{count}} Ваши Заявления за Достъп до Информация"
msgid "Your {{count}} annotation"
msgid_plural "Your {{count}} annotations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} Ваш коментар"
+msgstr[1] "{{count}} Ваши коментара"
msgid "Your {{site_name}} email alert"
-msgstr ""
+msgstr "Вашето {{site_name}} имейл известие"
msgid "Yours faithfully,"
-msgstr ""
+msgstr "С уважение,"
msgid "Yours sincerely,"
-msgstr ""
+msgstr "Искрено Ваш,"
msgid "Yours,"
-msgstr ""
+msgstr "Ваш,"
msgid "[FOI #{{request}} email]"
-msgstr ""
+msgstr "[ДдИ #{{request}} имейл]"
msgid "[{{public_body}} request email]"
msgstr ""
@@ -3134,121 +3140,121 @@ msgid "[{{site_name}} contact email]"
msgstr ""
msgid "\\n\\n[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
-msgstr ""
+msgstr "\\n\\n[ {{site_name}} съобщение: Горният текст е в непозволен формат. Някои странни символи бяха премахнати. ]"
msgid "a one line summary of the information you are requesting, \\n\t\t\te.g."
-msgstr ""
+msgstr "обобщение на един ред на информацията, която искате, \\n\t\t\t\tнапр."
msgid "admin"
-msgstr ""
+msgstr "admin"
msgid "alaveteli_foi:The software that runs {{site_name}}"
msgstr ""
msgid "all requests"
-msgstr ""
+msgstr "всички заявления"
msgid "also called {{public_body_short_name}}"
-msgstr ""
+msgstr "наричан също {{public_body_short_name}}"
msgid "an anonymous user"
-msgstr ""
+msgstr "анонимен потребител"
msgid "and"
-msgstr ""
+msgstr "и"
msgid "and update the status accordingly. Perhaps <strong>you</strong> might like to help out by doing that?"
-msgstr ""
+msgstr "и обнови съответно състоянието. Може би <strong>Вие</strong> ще помогнете като го направите?"
msgid "and update the status."
-msgstr ""
+msgstr "и обнови състоянието."
msgid "and we'll suggest <strong>what to do next</strong>"
-msgstr ""
+msgstr "и ние ще предложим <strong>каква да е следващата стъпка</strong>"
msgid "any <a href=\"/list\">new requests</a>"
-msgstr ""
+msgstr "всякакви <a href=\"/list\">нови заявления</a>"
msgid "any <a href=\"/list/successful\">successful requests</a>"
-msgstr ""
+msgstr "всякакви <a href=\"/list/successful\">успешни заявления</a>"
msgid "anything"
-msgstr ""
+msgstr "каквото и да е"
msgid "are long overdue."
-msgstr ""
+msgstr "са много закъснели."
msgid "at"
-msgstr ""
+msgstr "на"
msgid "authorities"
-msgstr ""
+msgstr "органи"
msgid "awaiting a response"
-msgstr ""
+msgstr "в очакване на отговор"
msgid "beginning with ‘{{first_letter}}’"
-msgstr ""
+msgstr "започващи с ‘{{first_letter}}’"
msgid "between two dates"
-msgstr ""
+msgstr "между две дати"
msgid "but followupable"
msgstr ""
msgid "by"
-msgstr ""
+msgstr "от"
msgid "by <strong>{{date}}</strong>"
-msgstr ""
+msgstr "от <strong>{{date}}</strong>"
msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "от {{public_body_name}} до {{info_request_user}} на {{date}}."
msgid "by {{user_link_absolute}}"
-msgstr ""
+msgstr "от {{user_link_absolute}}"
msgid "comments"
-msgstr ""
+msgstr "коментари"
msgid "containing your postal address, and asking them to reply to this request.\\n Or you could phone them."
-msgstr ""
+msgstr "съдържащ Вашия пощенски адрес с искане те да отговорят на това Заявление.\\n Или може да им позвъните."
msgid "details"
-msgstr ""
+msgstr "подробности"
msgid "display_status only works for incoming and outgoing messages right now"
-msgstr ""
+msgstr "display_status засега работи само за входящи и изходящи съобщения"
msgid "during term time"
-msgstr ""
+msgstr "през периода време"
msgid "edit text about you"
-msgstr ""
+msgstr "редактиране на текста за Вас"
msgid "even during holidays"
-msgstr ""
+msgstr "дори и през празниците"
msgid "everything"
-msgstr ""
+msgstr "всичко"
msgid "external"
-msgstr ""
+msgstr "външен"
msgid "has reported an"
-msgstr ""
+msgstr "беше докладван"
msgid "have delayed."
-msgstr ""
+msgstr "се забавиха."
msgid "hide quoted sections"
-msgstr ""
+msgstr "скрий секциите в кавички"
msgid "in term time"
-msgstr ""
+msgstr "в периода време"
msgid "in the category ‘{{category_name}}’"
-msgstr ""
+msgstr "в категорията ‘{{category_name}}’"
msgid "internal error"
msgstr "вътрешна грешка"
@@ -3257,85 +3263,85 @@ msgid "internal reviews"
msgstr "вътрешни разглеждания"
msgid "is <strong>waiting for your clarification</strong>."
-msgstr ""
+msgstr "<strong>очаква Вашето пояснение</strong>."
msgid "just to see how it works"
-msgstr ""
+msgstr "само за да видя как работи"
msgid "left an annotation"
-msgstr ""
+msgstr "остави коментар"
msgid "made."
-msgstr ""
+msgstr "създаден."
msgid "matching the tag ‘{{tag_name}}’"
-msgstr ""
+msgstr "съвпадащ с маркера ‘{{tag_name}}’"
msgid "messages from authorities"
-msgstr ""
+msgstr "съобщения от органи"
msgid "messages from users"
-msgstr ""
+msgstr "съобщения от потребители"
msgid "move..."
-msgstr ""
+msgstr "преместване..."
msgid "no later than"
-msgstr ""
+msgstr "не по-късно от"
msgid "no longer exists. If you are trying to make\\n From the request page, try replying to a particular message, rather than sending\\n a general followup. If you need to make a general followup, and know\\n an email which will go to the right place, please <a href=\"{{url}}\">send it to us</a>."
-msgstr "не съществува вече. Ако се опитвате да го направите\\n от страницата на заявлението, опитайте да отговорите на конкретно съобщение, вместо да се обръщате\\n към органа за нова информация по заявлението. Ако искате да проверите какво става със заявлението, и знаете\\n подходящия за това имейл, молим <a href=\"{{url}}\">изпратете ни го</a>."
+msgstr "не съществува вече. Ако се опитвате да го направите\\n от страницата на заявлението, опитайте да отговорите на конкретно\\nсъобщение, вместо да изпращате общо последващо съобщение.\\nАко искате да изпратите общо последващо съобщение и знаете\\n подходящия за това имейл, молим <a href=\"{{url}}\">изпратете ни го</a>."
msgid "normally"
-msgstr ""
+msgstr "нормално"
msgid "not requestable due to: {{reason}}"
msgstr ""
msgid "please sign in as "
-msgstr ""
+msgstr "моля, влезте като "
msgid "requesting an internal review"
msgstr "искане на вътрешно разглеждане"
msgid "requests"
-msgstr ""
+msgstr "заявления"
msgid "requests which are {{list_of_statuses}}"
-msgstr ""
+msgstr "заявления, които са {{list_of_statuses}}"
msgid "response as needing administrator attention. Take a look, and reply to this\\nemail to let them know what you are going to do about it."
-msgstr ""
+msgstr "отговор като нуждаещ се от вниманието на администратор. Прегледайте го и отговорете\\nна този имейл за да ги уведомите какво смятате да направите."
msgid "send a follow up message"
-msgstr ""
+msgstr "изпратите пояснително съобщение"
msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "изпратено до {{public_body_name}} от {{info_request_user}} на {{date}}."
msgid "set to <strong>blank</strong> (empty string) if can't find an address; these emails are <strong>public</strong> as anyone can view with a CAPTCHA"
msgstr "оставете го <strong>празно</strong> (без символи) ако не можете да намерите адрес. Тези имейл адреси <strong>са публични</strong> и всеки може да ги види след CAPTCHA"
msgid "show quoted sections"
-msgstr ""
+msgstr "покажи секциите в кавички"
msgid "sign in"
-msgstr ""
+msgstr "влезте"
msgid "simple_date_format"
msgstr ""
msgid "successful"
-msgstr ""
+msgstr "успешно"
msgid "successful requests"
-msgstr ""
+msgstr "успешни заявления"
msgid "that you made to"
-msgstr ""
+msgstr "което направихте до"
msgid "the main FOI contact address for {{public_body}}"
-msgstr ""
+msgstr "основният адрес за контакти за ДдИ на {{public_body}}"
#. This phrase completes the following sentences:
#. Request an internal review from...
@@ -3343,168 +3349,165 @@ msgstr ""
#. Send a public reply to...
#. Don't want to address your message to... ?
msgid "the main FOI contact at {{public_body}}"
-msgstr ""
+msgstr "основния адрес за ДдИ на {{public_body}}"
msgid "the requester"
-msgstr ""
+msgstr "заявителят"
msgid "the {{site_name}} team"
-msgstr ""
+msgstr "екипът на {{site_name}}"
msgid "to read"
-msgstr ""
+msgstr "за четене"
msgid "to send a follow up message."
-msgstr ""
+msgstr "да изпратите пояснително съобщение."
msgid "to {{public_body}}"
-msgstr ""
+msgstr "дo {{public_body}}"
msgid "unknown reason "
-msgstr ""
+msgstr "непозната причина "
msgid "unknown status "
-msgstr ""
+msgstr "непознато състояние "
msgid "unresolved requests"
-msgstr ""
+msgstr "неудовлетворени заявления"
msgid "unsubscribe"
-msgstr ""
+msgstr "отпиши"
msgid "unsubscribe all"
-msgstr ""
+msgstr "отпиши всички"
msgid "unsuccessful"
-msgstr ""
+msgstr "неуспешно"
msgid "unsuccessful requests"
-msgstr ""
+msgstr "неуспешни заявления"
msgid "useful information."
-msgstr ""
+msgstr "полезна информация."
msgid "users"
-msgstr ""
+msgstr "потребители"
msgid "what's that?"
-msgstr ""
+msgstr "какво е това?"
msgid "{{count}} FOI requests found"
-msgstr ""
+msgstr "{{count}} намерени заявления за ДдИ"
msgid "{{count}} Freedom of Information request to {{public_body_name}}"
msgid_plural "{{count}} Freedom of Information requests to {{public_body_name}}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} Заявление за Достъп до Информация до {{public_body_name}}"
+msgstr[1] "{{count}} Заявления за Достъп до Информация до {{public_body_name}}"
msgid "{{count}} person is following this authority"
msgid_plural "{{count}} people are following this authority"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} човек следва този орган"
+msgstr[1] "{{count}} души следват този орган"
msgid "{{count}} request"
msgid_plural "{{count}} requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} Заявление"
+msgstr[1] "{{count}} Заявления"
msgid "{{count}} request made."
msgid_plural "{{count}} requests made."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{{count}} направено заявление."
+msgstr[1] "{{count}} направени заявления."
msgid "{{existing_request_user}} already\\n created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\\n or edit the details below to make a new but similar request."
-msgstr ""
+msgstr "{{existing_request_user}} вече\\n отправи същото заявление на {{date}}. Вие можете да разгледате <a href=\"{{existing_request}}\">съществуващото Заявление</a>,\\n или да редактирате детайли по-долу за да направите ново подобно Заявление."
msgid "{{info_request_user_name}} only:"
-msgstr ""
+msgstr "{{info_request_user_name}} само:"
msgid "{{law_used_full}} request - {{title}}"
-msgstr ""
-
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
+msgstr "{{law_used_full}} заявление - {{title}}"
msgid "{{law_used}} requests at {{public_body}}"
-msgstr ""
+msgstr "{{law_used}} заявления до {{public_body}}"
msgid "{{length_of_time}} ago"
-msgstr ""
+msgstr "преди {{length_of_time}}"
msgid "{{list_of_things}} matching text '{{search_query}}'"
-msgstr ""
+msgstr "{{list_of_things}} съвпада с търсеното '{{search_query}}'"
msgid "{{number_of_comments}} comments"
-msgstr ""
+msgstr "{{number_of_comments}} коментара"
msgid "{{public_body_link}} answered a request about"
-msgstr ""
+msgstr "{{public_body_link}} отговори на Заявление относно"
msgid "{{public_body_link}} was sent a request about"
-msgstr ""
+msgstr "{{public_body_link}} му бе изпратено Заявление относно"
msgid "{{public_body_name}} only:"
-msgstr ""
+msgstr "само {{public_body_name}}:"
msgid "{{public_body}} has asked you to explain part of your {{law_used}} request."
-msgstr ""
+msgstr "{{public_body}} поиска да поясните част от Вашето {{law_used}} Заявление."
msgid "{{public_body}} sent a response to {{user_name}}"
-msgstr ""
+msgstr "{{public_body}} изпрати отговор до {{user_name}}"
msgid "{{reason}}, please sign in or make a new account."
-msgstr ""
+msgstr "{{reason}}, моля влезте или създайте нова регистрация."
msgid "{{search_results}} matching '{{query}}'"
-msgstr ""
+msgstr "{{search_results}} съвпада с '{{query}}'"
msgid "{{site_name}} blog and tweets"
-msgstr ""
+msgstr "{{site_name}} блог и туитове"
msgid "{{site_name}} covers requests to {{number_of_authorities}} authorities, including:"
-msgstr ""
+msgstr "{{site_name}} съдържа заявления до {{number_of_authorities}} органа, като:"
msgid "{{site_name}} sends new requests to <strong>{{request_email}}</strong> for this authority."
msgstr "{{site_name}} изпраща новите заявления до <strong>{{request_email}}</strong> за този орган."
msgid "{{site_name}} users have made {{number_of_requests}} requests, including:"
-msgstr ""
+msgstr "Потребителите на {{site_name}} са направили {{number_of_requests}} заявления, като:"
msgid "{{thing_changed}} was changed from <code>{{from_value}}</code> to <code>{{to_value}}</code>"
-msgstr ""
+msgstr "{{thing_changed}} беше променен от <code>{{from_value}}</code> на <code>{{to_value}}</code>"
msgid "{{title}} - a Freedom of Information request to {{public_body}}"
-msgstr ""
+msgstr "{{title}} - Заявление за Достъп до Обществена Информация до {{public_body}}"
msgid "{{user_name}} (Account suspended)"
msgstr ""
msgid "{{user_name}} - Freedom of Information requests"
-msgstr ""
+msgstr "{{user_name}} - Заявления за Достъп до Обществена Информация"
msgid "{{user_name}} - user profile"
-msgstr ""
+msgstr "{{user_name}} - потребителски профил"
msgid "{{user_name}} added an annotation"
-msgstr ""
+msgstr "{{user_name}} добави коментар"
msgid "{{user_name}} has annotated your {{law_used_short}} \\nrequest. Follow this link to see what they wrote."
-msgstr ""
+msgstr "{{user_name}} коментира Вашето Заявление за {{law_used_short}} \\n. Последвайте тази връзка за да видите какво е написал."
msgid "{{user_name}} has used {{site_name}} to send you the message below."
-msgstr ""
+msgstr "{{user_name}} използва {{site_name}} за да Ви изпрати писмото по-долу."
msgid "{{user_name}} sent a follow up message to {{public_body}}"
-msgstr ""
+msgstr "{{user_name}} изпрати пояснително съобщение до {{public_body}}"
msgid "{{user_name}} sent a request to {{public_body}}"
-msgstr ""
+msgstr "{{user_name}} изпрати заявление до {{public_body}}"
msgid "{{username}} left an annotation:"
-msgstr ""
+msgstr "{{username}} остави коментар:"
msgid "{{user}} ({{user_admin_link}}) made this {{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
-msgstr ""
+msgstr "{{user}} ({{user_admin_link}}) отправи това заявление за {{law_used_full}} (<a href=\"{{request_admin_url}}\">admin</a>) до {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
msgid "{{user}} made this {{law_used_full}} request"
-msgstr ""
+msgstr "{{user}} отправи това {{law_used_full}} заявление"
diff --git a/locale/bs/app.po b/locale/bs/app.po
index 2782b2c79..0a4aeb082 100644
--- a/locale/bs/app.po
+++ b/locale/bs/app.po
@@ -12,10 +12,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Bosnian (http://www.transifex.com/projects/p/alaveteli/language/bs/)\n"
"Language: bs\n"
"MIME-Version: 1.0\n"
@@ -864,15 +864,24 @@ msgstr ""
msgid "Follow this request"
msgstr "Prati ovaj zahtjev"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Prateća poruka poslana od strane podnosioca zahtjeva"
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1899,6 +1908,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "Javno tijelo|Zadnji uređeni komentar"
@@ -2876,18 +2888,12 @@ msgstr ""
msgid "User|About me"
msgstr "Korisnik|O meni"
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr "Korisnik|Administratorski nivo"
msgid "User|Ban text"
msgstr "Korisnik|tekst isključenja"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "Korisnik|E-mail"
@@ -3616,9 +3622,6 @@ msgstr "{{info_request_user_name}} samo:"
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/ca/app.po b/locale/ca/app.po
index c3dd04463..9937760da 100644
--- a/locale/ca/app.po
+++ b/locale/ca/app.po
@@ -11,10 +11,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/alaveteli/language/ca/)\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
@@ -878,15 +878,24 @@ msgstr ""
msgid "Follow this request"
msgstr "Seguir esta solicitud"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Seguimiento"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Respuesta enviada por el creador de la solicitud"
msgid "Follow up messages to existing requests are sent to "
msgstr "Las respuestas a solicitudes existentes se envían a "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Se han bloqueado nuevas respuestas a esta solicitud para prevenir spam. Por favor <a href=\"{{url}}\">contáctanos</a> si tú eres {{user_link}} y necesitas responder."
@@ -1918,6 +1927,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2905,18 +2917,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "User|Email"
@@ -3662,9 +3668,6 @@ msgstr "Sólo {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "solicitud {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "solicitud {{law_used_full}} - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/cs/app.po b/locale/cs/app.po
index 0a6ea3e99..404a4b07f 100644
--- a/locale/cs/app.po
+++ b/locale/cs/app.po
@@ -18,10 +18,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/alaveteli/language/cs/)\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
@@ -881,15 +881,24 @@ msgstr "Sledovat tohoto uživatele"
msgid "Follow this request"
msgstr "Sledovat tyto dotazy"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Odpověď"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Odpověď zaslána uživatelem"
msgid "Follow up messages to existing requests are sent to "
msgstr "Zasílat aktualizace zpráv u tohoto dotazu na"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Přidávání odpovědí a komentářů u tohoto dotazu bylo ukončeno kvůli spamu. Prosíme <a href=\"{{url}}\">kontaktujte nás</a> pokud jste {{user_link}} a chcete přidat komentář."
@@ -1899,6 +1908,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody | Naposled aktualizovaný komentář"
@@ -2876,18 +2888,12 @@ msgstr "UserInfoRequestSentAlert| Typ upozornění"
msgid "User|About me"
msgstr "User | O mně"
-msgid "User|Address"
-msgstr "User | Adresa"
-
msgid "User|Admin level"
msgstr "User | Úroveň admin"
msgid "User|Ban text"
msgstr "User | Zakázat text"
-msgid "User|Dob"
-msgstr "User | Datum narození"
-
msgid "User|Email"
msgstr "User | E-mail"
@@ -3630,9 +3636,6 @@ msgstr "Pouze {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "Žádost o informace podle {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} žádejte GQ - {{title}} ??"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} dotazy vznesené na instituci {{public_body}}"
diff --git a/locale/cy/app.po b/locale/cy/app.po
index 3b2267d93..fe51e253d 100644
--- a/locale/cy/app.po
+++ b/locale/cy/app.po
@@ -7,15 +7,21 @@
# baragouiner <graham.craig@gmail.com>, 2013
# baragouiner <graham.craig@gmail.com>, 2013
# baragouiner <graham.craig@gmail.com>, 2013
+# huwwaters <huwwaters@gmail.com>, 2013
+# huwwaters <huwwaters@gmail.com>, 2013
+# Hywel <hywelm.jones@talk21.com>, 2013
+# Hywel <hywelm.jones@talk21.com>, 2013
+# louisecrow <louise@mysociety.org>, 2013
+# louisecrow <louise@mysociety.org>, 2013
# PerryX <wyeboy@gmail.com>, 2013
# PerryX <wyeboy@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-13 23:56+0000\n"
+"Last-Translator: Hywel <hywelm.jones@talk21.com>\n"
"Language-Team: Welsh (http://www.transifex.com/projects/p/alaveteli/language/cy/)\n"
"Language: cy\n"
"MIME-Version: 1.0\n"
@@ -24,13 +30,13 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
msgid " This will appear on your {{site_name}} profile, to make it\\n easier for others to get involved with what you're doing."
-msgstr ""
+msgstr " Bydd hyn yn ymddangos ar eich proffil {{site_name}}, i'w wneud yn haws i bobl eraill i gymryd rhan yn yr hyn yr ydych yn ei wneud."
msgid " (<strong>no ranty</strong> politics, read our <a href=\"{{url}}\">moderation policy</a>)"
-msgstr ""
+msgstr " (<strong>Dim</strong> gwleidyddiaeth ymfflamychol, darllenwch ein <a href=\"{{url}}\">polisi safoni</a>)"
msgid " (<strong>patience</strong>, especially for large files, it may take a while!)"
-msgstr ""
+msgstr " (<strong>Amynedd</strong>, yn enwedig ar gyfer ffeiliau mawr: gall gymryd peth amser!)"
msgid " (you)"
msgstr "(chi)"
@@ -39,40 +45,40 @@ msgid " - view and make Freedom of Information requests"
msgstr "gweld a gwneud ceisiadau Rhyddid Gwybodaeth"
msgid " - wall"
-msgstr ""
+msgstr " - Wal"
msgid " <strong>Note:</strong>\\n We will send you an email. Follow the instructions in it to change\\n your password."
-msgstr " <strong>Sylwer:</strong>\\n Byddwn yn anfon e-bost atoch. Dilynwch y cyfarwyddiadau ynddo i newid eich cyfrinair."
+msgstr " <strong>Sylwer:</strong> Byddwn yn anfon e-bost atoch. Dilynwch y cyfarwyddiadau ynddo i newid eich cyfrinair."
msgid " <strong>Privacy note:</strong> Your email address will be given to"
-msgstr ""
+msgstr " <strong>Nodyn Preifatrwydd:</strong> Bydd eich cyfeiriad e-bost yn cael ei roi i"
msgid " <strong>Summarise</strong> the content of any information returned. "
-msgstr ""
+msgstr " <strong>Crynhoi</strong> cynnwys unrhyw wybodaeth a gafwyd. "
msgid " Advise on how to <strong>best clarify</strong> the request."
-msgstr ""
+msgstr " Rhoi cyngor ar sut <strong>orau i egluro</strong> y cais."
msgid " Ideas on what <strong>other documents to request</strong> which the authority may hold. "
-msgstr ""
+msgstr " Syniadau ar ba <strong>ddogfennau eraill i ofyn amdanynt</strong> y gall yr awdurdod fod yn eu cadw. "
msgid " If you know the address to use, then please <a href=\"{{url}}\">send it to us</a>.\\n You may be able to find the address on their website, or by phoning them up and asking."
-msgstr ""
+msgstr " Os ydych yn gwybod pa gyfeiriad i'w ddefnyddio, yna os gwelwch yn dda <a href=\"{{url}}\">anfonwch ef atom</a>. Efallai y byddwch yn gallu dod o hyd i'r cyfeiriad ar eu gwefan, neu drwy eu ffonio nhw a gofyn."
msgid " Include relevant links, such as to a campaign page, your blog or a\\n twitter account. They will be made clickable. \\n e.g."
-msgstr ""
+msgstr " Cynhwyswch gysylltiadau perthnasol, megis i dudalen yr ymgyrch, eich blog neu gyfrif Twitter. Byddant yn cael eu gwneud cliciadwy. ee"
msgid " Link to the information requested, if it is <strong>already available</strong> on the Internet. "
-msgstr ""
+msgstr " Rhowch ddolen at yr wybodaeth y gofynnwyd amdani, <strong>os yw ar gael yn barod</strong> ar y Rhyngrwyd. "
msgid " Offer better ways of <strong>wording the request</strong> to get the information. "
-msgstr ""
+msgstr " Cynigiwch ffyrdd gwell o <strong>eirio'r cais</strong> i gael y wybodaeth. "
msgid " Say how you've <strong>used the information</strong>, with links if possible."
msgstr "Dwedwch sut rydych chi wedi <strong>defnyddio'r wybodaeth</strong>, gyda dolenni os yn bosibl."
msgid " Suggest <strong>where else</strong> the requester might find the information. "
-msgstr ""
+msgstr " Awgrymwch <strong>ble arall</strong> y gallai'r ceisydd ddod o hyd i'r wybodaeth. "
msgid " What are you investigating using Freedom of Information? "
msgstr "Beth ydych chi'n ei ymchwilio gan ddefnyddio Rhyddid Gwybodaeth?"
@@ -84,37 +90,37 @@ msgid " You will also be emailed updates about the request."
msgstr "Byddwch chi'n derbyn diweddariadau am y cais drwy ebost hefyd."
msgid " made by "
-msgstr "a wnaethpwyd gan"
+msgstr " a wnaed gan "
msgid " or "
-msgstr "neu"
+msgstr " neu "
msgid " when you send this message."
-msgstr "pan chi'n anfon y neges hon"
+msgstr " pan fyddwch chi'n anfon y neges hon"
msgid "\"Hello! We have an <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">important message</a> for visitors outside {{country_name}}\""
-msgstr ""
+msgstr "\"Helo! Mae gennym <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">neges bwysig</a> i ymwelwyr y tu allan i {{country_name}}\""
msgid "'Crime statistics by ward level for Wales'"
-msgstr "'Ystadegau troseddu yn ôl lefel ward ar gyfer Cymru'"
+msgstr "'Ystadegau troseddu yn ôl lefel ardal etholiadol ar gyfer Cymru'"
msgid "'Pollution levels over time for the River Tyne'"
-msgstr ""
+msgstr "'Lefelau llygredd dros amser ar gyfer Afon Tyne'"
msgid "'{{link_to_authority}}', a public authority"
msgstr "'{{link_to_authority}}', awdurdod cyhoeddus"
msgid "'{{link_to_request}}', a request"
-msgstr ""
+msgstr "'{{link_to_request}}', cais"
msgid "'{{link_to_user}}', a person"
-msgstr ""
+msgstr "'{{link_to_user}}', person"
msgid "*unknown*"
-msgstr ""
+msgstr "* Anhysbys *"
msgid ",\\n\\n\\n\\nYours,\\n\\n{{user_name}}"
-msgstr ""
+msgstr ",\\n\\n\\n\\nYr eiddoch,\\n\\n{{user_name}}"
msgid "- or -"
msgstr "- neu -"
@@ -126,103 +132,103 @@ msgid "2. Ask for Information"
msgstr "2. Gofyn am wybodaeth"
msgid "3. Now check your request"
-msgstr "3. Gwiriwch eich cais rwan"
+msgstr "3. Gwiriwch eich cais nawr"
msgid "<a href=\"{{browse_url}}\">Browse all</a> or <a href=\"{{add_url}}\">ask us to add one</a>."
-msgstr ""
+msgstr "<a href=\"{{browse_url}}\">Porwch y cyfan</a> neu <a href=\"{{add_url}}\">ofyn i ni ychwanegu un</a>."
msgid "<a href=\"{{url}}\">Add an annotation</a> (to help the requester or others)"
-msgstr ""
+msgstr "<a href=\"{{url}}\">Ychwanegwch anodiad</a> (i helpu'r sawl sy'n gwneud y cais neu eraill)"
msgid "<a href=\"{{url}}\">Sign in</a> to change password, subscriptions and more ({{user_name}} only)"
-msgstr ""
+msgstr "<a href=\"{{url}}\">Mewngofnodi</a> i newid cyfrinair, tanysgrifiadau a mwy ({{user_name}} yn unig)"
msgid "<p>All done! Thank you very much for your help.</p><p>There are <a href=\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>"
-msgstr "<p>Wedi gorffen! Diolch yn fawr am eich help.</p><p>Mae <a href=\"{{helpus_url}}\">mwy o bethau i'w wneud</a>er mwyn helpu {{site_name}}.</p>"
+msgstr "<p>Wedi gorffen! Diolch yn fawr am eich help.</p><p>Mae <a href=\"{{helpus_url}}\">rhagor o bethau i'w wneud</a> er mwyn helpu {{site_name}}.</p>"
msgid "<p>Thank you! Here are some ideas on what to do next:</p>\\n <ul>\\n <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\\n <li>If you would like to contest the authority's claim that they do not hold the information, here is\\n <a href=\"{{complain_url}}\">how to complain</a>.\\n </li>\\n <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\\n on other means to answer your question.\\n </li>\\n </ul>"
-msgstr ""
+msgstr "<p>Diolch yn fawr! Dyma rai syniadau ar beth i'w wneud nesaf:</p><ul><li>I anfon eich cais i awdurdod arall, yn gyntaf copiwch destun eich cais isod, yna <a href=\"{{find_authority_url}}\">dewch o hyd i'r awdurdod arall</a>.</li><li>Os hoffech herio honiad yr awdurdod nad ydynt yn dal y wybodaeth, dyma <a href=\"{{complain_url}}\">sut i gwyno</a>.</li><li>Mae gennym <a href=\"{{other_means_url}}\">awgrymiadau</a> ar ddulliau eraill i ateb eich cwestiwn.</li></ul>"
msgid "<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you should have got a response promptly, and normally before the end of <strong>{{date_response_required_by}}</strong>.</p>"
-msgstr ""
+msgstr "<p>Diolch yn fawr! Gobeithio na fydd yn rhaid i chi aros lawer yn hwy.</p> <p>Yn ôl y gyfraith, dylech fod wedi cael ymateb yn ddi-oed, ac fel arfer cyn diwedd <strong>{{date_response_required_by}}</strong>.</p>"
msgid "<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\\n{{date_response_required_by}}</strong>.</p>"
-msgstr ""
+msgstr "<p>Diolch yn fawr! Gobeithio na fydd rhaid i chi aros yn rhy hir. Yn ôl y gyfraith, dylech gael ymateb yn brydlon, ac fel arfer cyn diwedd <strong>{{date_response_required_by}}</strong>.</p>"
msgid "<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a response within {{late_number_of_days}} days, or be told if it will take longer (<a href=\"{{review_url}}\">details</a>).</p>"
-msgstr ""
+msgstr "<p>Diolch yn fawr! Gobeithio na fydd yn rhaid i chi aros yn rhy hir.</p><p>Dylech gael ymateb o fewn {{late_number_of_days}} diwrnod, neu yn cael gwybod os bydd yn cymryd mwy o amser (<a href=\"{{review_url}}\">manylion</a>).</p>"
msgid "<p>Thank you! Your request is long overdue, by more than {{very_late_number_of_days}} working days. Most requests should be answered within {{late_number_of_days}} working days. You might like to complain about this, see below.</p>"
-msgstr ""
+msgstr "<p>Diolch yn fawr! Mae eich cais yn ddyledus ers tro, gan ei fod fwy na {{very_late_number_of_days}} diwrnod gwaith yn hwyr. Dylai'r rhan fwyaf o geisiadau gael eu hateb o fewn {{late_number_of_days}} diwrnod gwaith. Efallai yr hoffech chi gwyno am hyn, gweler isod.</p>"
msgid "<p>Thanks for changing the text about you on your profile.</p>\\n <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
-msgstr ""
+msgstr "<p>Diolch am newid y testun amdanoch chi ar eich proffil.</p><strong>Nesaf ...</strong> Gallwch lwytho llun proffil hefyd.</p>"
msgid "<p>Thanks for updating your profile photo.</p>\\n <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
-msgstr ""
+msgstr "<p>Diolch ar gyfer diweddaru eich proffil llun.</p><strong>Nesaf ...</strong> Gallwch roi rhywfaint o destun amdanoch chi a'ch ymchwil ar eich proffil.</p>"
msgid "<p>We recommend that you edit your request and remove the email address.\\n If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
-msgstr ""
+msgstr "<p>Rydym yn argymell eich bod yn golygu eich cais ac yn cael gwared ar y cyfeiriad e-bost. Os byddwch yn ei adael, bydd y cyfeiriad e-bost yn cael ei anfon at yr awdurdod, ond ni fydd yn cael ei arddangos ar y wefan.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p>"
-msgstr ""
+msgstr "<p>Rydym yn falch i chi cael yr holl wybodaeth oedd arnoch ei heisiau. Os ydych yn ysgrifennu amdani neu'n gwneud defnydd o'r wybodaeth,dewch yn ôl ac ychwanegwch nodyn isod i ddweud beth wnaethoch.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p><p>If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p>"
-msgstr ""
+msgstr "<p>Rydym yn falch i chi cael yr holl wybodaeth oedd arnoch ei heisiau. Os ydych yn ysgrifennu amdani neu'n gwneud defnydd o'r wybodaeth,dewch yn ôl ac ychwanegwch nodyn isod i ddweud beth wnaethoch.</p><p>Os cawsoch {{site_name}} yn ddefnyddiol, <a href=\"{{donation_url}}\">gwnewch gyfraniad</a> i'r elusen sy'n gyfrifol amdani.</p>"
msgid "<p>We're glad you got some of the information that you wanted. If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
-msgstr ""
+msgstr "<p>Rydym yn falch i chi gael rhywfaint o'r wybodaeth oedd arnoch ei heisiau. Os cawsoch {{site_name}} yn ddefnyddiol, <a href=\"{{donation_url}}\">gwnewch gyfraniad</a> i'r elusen sy'n gyfrifol amdani.</p> <p>Os ydych am geisio cael gweddill y wybodaeth, dyma beth i'w wneud yn awr.</p>"
msgid "<p>We're glad you got some of the information that you wanted.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
-msgstr ""
+msgstr "<p>Rydym yn falch i chi gael rhywfaint o'r wybodaeth oedd arnoch ei heisiau.</p> <p>Os ydych am geisio cael gweddill y wybodaeth, dyma beth i'w wneud yn awr.</p>"
msgid "<p>You do not need to include your email in the request in order to get a reply (<a href=\"{{url}}\">details</a>).</p>"
-msgstr ""
+msgstr "<p>Nid oes angen i chi gynnwys eich e-bost yn y cais er mwyn cael ateb (<a href=\"{{url}}\">fanylion</a>).</p>"
msgid "<p>You do not need to include your email in the request in order to get a reply, as we will ask for it on the next screen (<a href=\"{{url}}\">details</a>).</p>"
-msgstr "<p>Does dim rhaid i chi roi'ich cyfeiriad yn y cais er mwyn cael ymateb, gan ofynnwn ni amdano ar y sgrîn nesaf (<aa href=\"{{url}}\">manylion</a>).</p>"
+msgstr "<p>Does dim rhaid i chi roi'ich cyfeiriad yn y cais er mwyn cael ymateb, gan y byddwn yn gofyn amdano ar y sgrîn nesaf (<a href=\"{{url}}\">manylion</a>).</p>"
msgid "<p>Your request contains a <strong>postcode</strong>. Unless it directly relates to the subject of your request, please remove any address as it will <strong>appear publicly on the Internet</strong>.</p>"
-msgstr "<p>Mae'ch cais yn cynnwys <strong>cod post</strong>. Oni bai ei fod o'n ymwneud yn uniongyrchol â'r cais, dilewch unrhyw cyfeiriadau os gwelwch yn dda, oherwydd y bydd o'n <strong>ymddangos yn cyhoeddus ar y Rhyngrwyd</strong>.</p>"
+msgstr "<p>Mae'ch cais yn cynnwys <strong>cod post</strong>. Oni bai ei fod o'n ymwneud yn uniongyrchol â'r cais, dilewch unrhyw gyfeiriad os gwelwch yn dda, oherwydd y bydd yn <strong>ymddangos yn gyhoeddus ar y Rhyngrwyd</strong>.</p>"
msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\\n <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\\n replied by then.</p>\\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an\\n annotation below telling people about your writing.</p>"
-msgstr ""
+msgstr "<p>Mae eich cais {{law_used_full}} wedi cael ei <strong>anfon</strong>!</p> <strong><p>Byddwn yn eich e-bostio</strong> pan fydd ymateb , neu ar ôl {{late_number_of_days}} diwrnod gwaith os yw'r awdurdod yn dal heb ateb erbyn hynny.</p> <p>Os ydych yn ysgrifennu am y cais hwn (er enghraifft, mewn fforwm neu flog) rhowch ddolen at y dudalen hon, ac ychwanegwch anodiad isod i ddweud wrth bobl am eich ysgrifennu.</p>"
msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
-msgstr ""
+msgstr "<p>Mae {{site_name}} ar hyn o bryd yn cael ei chynnal a chadw. Gweld y ceisiadau presennol yn unig y gallwch. Ni allwch wneud rhai newydd, ychwanegu straenon dilynol neu anodiadau, neu newid y gronfa ddata mewn ffordd arall.</p> <p>{{read_only}}</p>"
msgid "<small>If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way.</small>\\n</p>"
-msgstr ""
+msgstr "<small>Os ydych yn defnyddio e-bost ar y we neu hidlwyr \"post sothach\", edrychwch hefyd yn edrych ar eich ffolderi e-post swmp/spam. Weithiau, caiff ein negeseuon eu marcio felly.</small></p>"
msgid "<strong> Can I request information about myself?</strong>\\n\t\t\t<a href=\"{{url}}\">No! (Click here for details)</a>"
-msgstr "<strong> A gaf i wneud cais am wybodaeth amdanaf fi fy hun?</strong>\\n\t\t\t<a href=\"{{url}}\">Na chewch! (Cliciwch yma am fanylion)</a>"
+msgstr "<strong>A gaf i wneud cais am wybodaeth amdanaf fi fy hun?</strong> <a href=\"{{url}}\">Na chewch! (Cliciwch yma am fanylion)</a>"
msgid "<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL."
-msgstr ""
+msgstr "<strong><code>commented_by:tony_bowden</code></strong> i chwilio anodiadau a wnaed gan Tony Bowden, teipiwch yr enw fel yn yr URL."
msgid "<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
-msgstr ""
+msgstr "<strong><code>filetype:pdf</code></strong> i ddod o hyd i holl ymatebion gydag atodiadau PDF. Neu roi cynnig ar hyn: <code>{{list_of_file_extensions}}</code>"
msgid "<strong><code>request:</code></strong> to restrict to a specific request, typing the title as in the URL."
-msgstr ""
+msgstr "<strong><code>cais:</code></strong> i gyfyngu i gais penodol, teipiwch y teitl fel yn yr URL."
msgid "<strong><code>requested_by:julian_todd</code></strong> to search requests made by Julian Todd, typing the name as in the URL."
-msgstr ""
+msgstr "<strong><code>requested_by: julian_todd</code></strong> i chwilio ceisiadau a wnaed gan Julian Todd, deipio yr enw fel yn yr URL."
msgid "<strong><code>requested_from:home_office</code></strong> to search requests from the Home Office, typing the name as in the URL."
-msgstr ""
+msgstr "<strong><code>requested_from: home_office</code></strong> i chwilio ceisiadau gan y Swyddfa Gartref, teipiwch yr enw fel yn yr URL."
msgid "<strong><code>status:</code></strong> to select based on the status or historical status of the request, see the <a href=\"{{statuses_url}}\">table of statuses</a> below."
-msgstr ""
+msgstr "<strong><code>status:</code></strong> i ddewis yn seiliedig ar statws neu statws hanesyddol y cais, gweler y tabl <a href=\"{{statuses_url}}\">tabl o statws</a> isod."
msgid "<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \\n and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\\n can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
-msgstr ""
+msgstr "<strong><code>tag:charity</code></strong> i ddod o hyd i bob awdurdod cyhoeddus neu geisiadau gyda tag penodol. Gallwch gynnwys tagiau lluosog, a gwerthoedd tag, ee <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Sylwer y gall bod unrhyw un o'r tagiau fod yn bresennol yn ddiofyn. Rhaid i chi rhoi <code>AND</code> yn benodol os ydych ond eisiau gweld canlyniadau â'r cyfan yn bresennol."
msgid "<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
-msgstr ""
+msgstr "<strong><code>variety:</code></strong> i ddewis y math o beth i chwilio amdano, gweler y tabl <a href=\"{{varieties_url}}\">tabl o fathau</a> isod."
msgid "<strong>Advice</strong> on how to get a response that will satisfy the requester. </li>"
-msgstr ""
+msgstr "<strong>Cyngor</strong> ar sut i gael ymateb a fydd yn bodloni'r ceisydd.</li>"
msgid "<strong>All the information</strong> has been sent"
msgstr "Mae'r <strong>holl wybodaeth</strong> wedi cael ei hanfon."
@@ -231,184 +237,184 @@ msgid "<strong>Anything else</strong>, such as clarifying, prompting, thanking"
msgstr "<strong>Unrhywbeth arall</strong>, megis egluro, annog, diolch"
msgid "<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \\na good internal knowledge of user behaviour on {{site_name}}. How, \\nwhy and by whom requests are categorised is not straightforward, and there will\\nbe user error and ambiguity. You will also need to understand FOI law, and the\\nway authorities use it. Plus you'll need to be an elite statistician. Please\\n<a href=\"{{contact_path}}\">contact us</a> with questions."
-msgstr ""
+msgstr "<strong>Caveat Emptor!</strong> Er mwyn defnyddio'r data hwn mewn ffordd anrhydeddus, bydd angen i chi \\ n gwybodaeth fewnol dda o ymddygiad defnyddwyr ar {{site_name}}. Nid yw sut, pam a chan bwy y bydd ceisiadau yn cael eu categoreiddio yn syml, a bydd gwall defnyddiwr ac amwysedd. Bydd angen i chi hefyd ddeall cyfraith Rhyddid Gwybodaeth, a sut y mae awdurdodau yn ei defnyddio. Yn ogystal bydd angen i chi fod yn ystadegydd prin. <a href=\"{{contact_path}}\">Cysylltwch â ni</a> gyda chwestiynau."
msgid "<strong>Clarification</strong> has been requested"
msgstr "Ceisiwyd <strong>eglurhad</strong>"
msgid "<strong>No response</strong> has been received\\n <small>(maybe there's just an acknowledgement)</small>"
-msgstr ""
+msgstr "<strong>Does dim ymateb</strong> wedi cael ei dderbyn <small>(efallai nad oes dim ond cydnabyddiaeth)</small>"
msgid "<strong>Note:</strong> Because we're testing, requests are being sent to {{email}} rather than to the actual authority."
-msgstr ""
+msgstr "<strong>Nodyn:</strong> Oherwydd ein bod yn profi, mae ceisiadau yn cael eu hanfon at {{email}} yn hytrach nag at yr awdurdod ei hun."
msgid "<strong>Note:</strong> You're sending a message to yourself, presumably\\n to try out how it works."
-msgstr ""
+msgstr "<strong>Nodyn:</strong> Rydych yn anfon neges i chi eich hun, yn ôl pob tebyg i roi cynnig ar sut mae'n gweithio."
msgid "<strong>Note:</strong>\\n We will send an email to your new email address. Follow the\\n instructions in it to confirm changing your email."
-msgstr ""
+msgstr "<strong>Nodyn:</strong> Byddwn yn anfon e-bost at eich cyfeiriad e-bost newydd. Dilynwch y cyfarwyddiadau ynddo i gadarnhau newid eich e-bost."
msgid "<strong>Privacy note:</strong> If you want to request private information about\\n yourself then <a href=\"{{url}}\">click here</a>."
-msgstr ""
+msgstr "<strong>Nodyn Preifatrwydd:</strong> Os ydych am wneud cais am wybodaeth breifat amdanoch eich hun, yna <a href=\"{{url}}\">cliciwch yma</a>."
msgid "<strong>Privacy note:</strong> Your photo will be shown in public on the Internet,\\n wherever you do something on {{site_name}}."
-msgstr ""
+msgstr "<strong>Nodyn Preifatrwydd:</strong> Bydd eich llun yn cael ei ddangos yn gyhoeddus ar y Rhyngrwyd, lle bynnag y byddwch yn gwneud rhywbeth ar {{site_name}}."
msgid "<strong>Privacy warning:</strong> Your message, and any response\\n to it, will be displayed publicly on this website."
-msgstr ""
+msgstr "<strong>Rhybudd preifatrwydd:</strong> Bydd eich neges, ac unrhyw ymateb iddo, yn cael ei harddangos yn gyhoeddus ar y wefan hon."
msgid "<strong>Some of the information</strong> has been sent "
-msgstr "Anfonwyd <strong>rhan o'r wybodaeth</strong>"
+msgstr "<strong>Anfonwyd rhan o'r wybodaeth</strong>"
msgid "<strong>Thank</strong> the public authority or "
-msgstr "<strong>Diolch</strong> yr awdurdod gyhoeddus"
+msgstr "<strong>Diolch</strong> i'r awdurdod cyhoeddus neu"
msgid "<strong>did not have</strong> the information requested."
-msgstr ""
+msgstr "Nid oedd gan y wybodaeth y gofynnwyd amdani."
msgid "A <a href=\"{{request_url}}\">follow up</a> to <em>{{request_title}}</em> was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "Mae <a href=\"{{request_url}}\">cais dilynol</a> i <em>{{request_title}}</em> wedi ei anfon i {{public_body_name}} gan {{info_request_user}} ar {{date}}."
msgid "A <a href=\"{{request_url}}\">response</a> to <em>{{request_title}}</em> was sent by {{public_body_name}} to {{info_request_user}} on {{date}}. The request status is: {{request_status}}"
-msgstr ""
+msgstr "A <a href=\"{{request_url}}\">ymateb</a> i <em>{{request_title}}</em> ei anfon gan {{public_body_name}} i {{info_request_user}} ar {{date}}. Mae statws cais yw: {{request_status}}"
msgid "A <strong>summary</strong> of the response if you have received it by post. "
-msgstr ""
+msgstr "<strong>Crynodeb</strong> o'r ymateb os ydych wedi ei dderbyn drwy'r post. "
msgid "A Freedom of Information request"
-msgstr ""
+msgstr "Cais Rhyddid Gwybodaeth"
msgid "A full history of my FOI request and all correspondence is available on the Internet at this address: {{url}}"
-msgstr ""
+msgstr "Mae hanes llawn fy nghais Rhyddid Gwybodaeth a'r holl ohebiaeth ar gael ar y Rhyngrwyd yn y cyfeiriad hwn: {{url}}"
msgid "A new request, <em><a href=\"{{request_url}}\">{{request_title}}</a></em>, was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "Anfonwyd cais newydd, <em><a href=\"{{request_url}}\">{{request_title}}</a></em>, anfon i {{public_body_name}} gan {{info_request_user}} ar {{date}}."
msgid "A public authority"
msgstr "Awdurdod cyhoeddus"
msgid "A response will be sent <strong>by post</strong>"
-msgstr ""
+msgstr "Bydd ymateb yn cael ei anfon <strong>drwy'r post</strong>"
msgid "A strange reponse, required attention by the {{site_name}} team"
-msgstr ""
+msgstr "Ymateb rhyfedd, yr oedd angen sylw arno gan dîm {{site_name}} "
msgid "A vexatious request"
-msgstr ""
+msgstr "Cais blinderus"
msgid "A {{site_name}} user"
-msgstr ""
+msgstr "Defnyddiwr {{site_name}}"
msgid "About you:"
-msgstr ""
+msgstr "Amdanoch chi:"
msgid "Act on what you've learnt"
-msgstr ""
+msgstr "Gweithredu ar yr hyn rydych wedi ei ddysgu"
msgid "Acts as xapian/acts as xapian job"
-msgstr ""
+msgstr "Yn gweithredu fel xapian / yn gweithredu fel swydd xapian"
msgid "ActsAsXapian::ActsAsXapianJob|Action"
-msgstr ""
+msgstr "ActsAsXapian :: ActsAsXapianJob | Gweithredu"
msgid "ActsAsXapian::ActsAsXapianJob|Model"
-msgstr ""
+msgstr "ActsAsXapian :: ActsAsXapianJob | Model"
msgid "Add an annotation"
-msgstr ""
+msgstr "Ychwanegu anodiad"
msgid "Add an annotation to your request with choice quotes, or\\n a <strong>summary of the response</strong>."
-msgstr ""
+msgstr "Ychwanegu nodyn at eich cais gyda dyfyniadau dewis, neu <strong>crynodeb o'r ymateb</strong>."
msgid "Added on {{date}}"
-msgstr ""
+msgstr "Ychwanegwyd ar {{date}}"
msgid "Admin level is not included in list"
-msgstr ""
+msgstr "Nid yw lefel admin wedi ei gynnwys yn rhestr"
msgid "Administration URL:"
-msgstr ""
+msgstr "URL Gweinyddu :"
msgid "Advanced search"
-msgstr ""
+msgstr "Chwilio manwl"
msgid "Advanced search tips"
-msgstr ""
+msgstr "Cynghorion chwilio manwl"
msgid "Advise on whether the <strong>refusal is legal</strong>, and how to complain about it if not."
-msgstr ""
+msgstr "Cynghori ar p'un a yw'r <strong>gwrthodiad yn gyfreithiol</strong>, a sut i gwyno am y peth os nad ydyw."
msgid "Air, water, soil, land, flora and fauna (including how these effect\\n human beings)"
-msgstr ""
+msgstr "Aer, dŵr, pridd, tir, fflora a ffawna (gan gynnwys sut y mae'r rhain yn effeithio bodau dynol)"
msgid "All of the information requested has been received"
-msgstr "Derbynnir yr holl wybodaeth."
+msgstr "Mae'r holl wybodaeth y gwnaed cais amdani wedi ei derbyn."
msgid "All the options below can use <strong>status</strong> or <strong>latest_status</strong> before the colon. For example, <strong>status:not_held</strong> will match requests which have <em>ever</em> been marked as not held; <strong>latest_status:not_held</strong> will match only requests that are <em>currently</em> marked as not held."
-msgstr ""
+msgstr "Gall yr holl opsiynau isod defnyddio <strong>status</strong> neu <strong>latest_status</strong> cyn y colon. Er enghraifft, bydd <strong>status:not_held</strong> yn matsio ceisiadau sydd wedi wedi'u marcio <em>erioed</em> nad ydynt yn cael eu cadw; bydd <strong>latest_status:not_held</strong> yn matsio ceisiadau yn unig sydd <em > ar hyn o bryd</em>wedi eu marcio fel heb ei gadw."
msgid "All the options below can use <strong>variety</strong> or <strong>latest_variety</strong> before the colon. For example, <strong>variety:sent</strong> will match requests which have <em>ever</em> been sent; <strong>latest_variety:sent</strong> will match only requests that are <em>currently</em> marked as sent."
-msgstr ""
+msgstr "Gall yr holl opsiynau isod defnyddio <strong>variety</strong> neu <strong>latest_variety</strong> cyn y colon. Er enghraifft, bydd <strong>variety:sent</strong> yn matsio ceisiadau sydd <em>erioed</em> wedi eu hanfon; bydd <strong>latest_variety:sent</strong> yn matsio ceisiadau yn unig sydd <em>ar hyn o bryd < /em> wedi eu marcio eu bod wedi eu hanfon."
msgid "Also called {{other_name}}."
-msgstr ""
+msgstr "Gelwir hefyd {{other_name}}."
msgid "Also send me alerts by email"
-msgstr ""
+msgstr "Hefyd anfonwch rybuddion ataf drwy e-bost"
msgid "Alter your subscription"
msgstr "Newid eich tanysgrifiad"
msgid "Although all responses are automatically published, we depend on\\nyou, the original requester, to evaluate them."
-msgstr ""
+msgstr "Er bod yr holl ymatebion yn cael eu cyhoeddi yn awtomatig, rydym yn dibynnu arnoch chi, y sawl a wnaeth y cais gwreiddiol, i'w gwerthuso."
msgid "An <a href=\"{{request_url}}\">annotation</a> to <em>{{request_title}}</em> was made by {{event_comment_user}} on {{date}}"
-msgstr ""
+msgstr "Gwnaed <a href=\"{{request_url}}\">anodiad</a> i <em>{{request_title}}</em> gan {{event_comment_user}} ar {{date}}"
msgid "An <strong>error message</strong> has been received"
-msgstr ""
+msgstr "Derbyniwyd <strong>gwall-neges</strong>"
msgid "An Environmental Information Regulations request"
msgstr "Cais dan Reoliadau Gwybodaeth Amgylcheddol "
msgid "An anonymous user"
-msgstr ""
+msgstr "Defnyddiwr dienw"
msgid "Annotation added to request"
-msgstr ""
+msgstr "Ychwanegwyd anodiad i'r cais"
msgid "Annotations"
-msgstr ""
+msgstr "Anodiadau"
msgid "Annotations are so anyone, including you, can help the requester with their request. For example:"
-msgstr ""
+msgstr "Mae anodiadau fel y gall unrhywun, gan eich cynnwys chi, helpu i'r ceisydd â'u cais. Er enghraifft:"
msgid "Annotations will be posted publicly here, and are\\n <strong>not</strong> sent to {{public_body_name}}."
-msgstr ""
+msgstr "Bydd anodiadau yn cael eu postio yn gyhoeddus yma, ac <strong>nid ydynt</strong>yn cael eu hanfon i {{public_body_name}}."
msgid "Anonymous user"
-msgstr ""
+msgstr "Defnyddiwr dienw"
msgid "Anyone:"
msgstr "Unrhywun:"
msgid "Applies to"
-msgstr ""
+msgstr "Yn berthnasol i"
msgid "Are we missing a public authority?"
-msgstr ""
+msgstr "A oes awdurdod cyhoeddus ar goll gennym?"
msgid "Are you the owner of any commercial copyright on this page?"
-msgstr ""
+msgstr "Ai chi yw perchennog unrhyw hawlfraint masnachol ar y dudalen hon?"
msgid "Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries."
msgstr "Gofynnwch am ddogfennau neu wybodaeth <strong>benodol</strong>. Nid yw'r wefan hon yn addas ar gyfer ymholiadau cyffredinol."
msgid "At the bottom of this page, write a reply to them trying to persuade them to scan it in\\n (<a href=\"{{url}}\">more details</a>)."
-msgstr ""
+msgstr "Ar waelod y dudalen hon, ysgrifennwch ateb iddynt i geisio eu perswadio i'w sganio (<a href=\"{{url}}\">mwy o fanylion</a>)."
msgid "Attachment (optional):"
-msgstr ""
+msgstr "Atodiad (dewisol)"
msgid "Attachment:"
msgstr "Atodiad:"
@@ -426,10 +432,10 @@ msgid "Beginning with"
msgstr "Yn dechrau gyda"
msgid "Browse <a href='{{url}}'>other requests</a> for examples of how to word your request."
-msgstr ""
+msgstr "Porwch<a href='{{url}}'>geisiadau eraill</a> am enghreifftiau o sut i eirio'ch cais."
msgid "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request."
-msgstr ""
+msgstr "Porwch <a href='{{url}}'>geisiadau eraill</a> i '{{public_body_name}}' am enghreifftiau o sut i eirio'ch cais."
msgid "Browse all authorities..."
msgstr "Mwy o awdurdodau..."
@@ -438,40 +444,40 @@ msgid "By law, under all circumstances, {{public_body_link}} should have respond
msgstr "Yn ôl y gyfraith, ym mhob amgylchiad, dylai {{public_body_link}} fod wedi ymateb erbyn hyn."
msgid "By law, {{public_body_link}} should normally have responded <strong>promptly</strong> and"
-msgstr ""
+msgstr "Yn ôl y gyfraith, dylai {{public_body_link}} fel arfer wedi ymateb <strong>yn brydlon</strong> a"
msgid "Calculated home page"
-msgstr ""
+msgstr "Hafan wedi ei chyfrifo"
msgid "Can't find the one you want?"
-msgstr ""
+msgstr "Methu dod o hyd i'r un sy eisiau arnoch?"
msgid "Cancel a {{site_name}} alert"
-msgstr ""
+msgstr "Canslo rhybudd {{site_name}}"
msgid "Cancel some {{site_name}} alerts"
-msgstr ""
+msgstr "Diddymu rhai rhybuddion {{site_name}} "
msgid "Cancel, return to your profile page"
-msgstr ""
+msgstr "Diddymu, dychwelwch i dudalen eich proffil"
msgid "Censor rule"
-msgstr ""
+msgstr "Rheol sensro "
msgid "CensorRule|Last edit comment"
-msgstr ""
+msgstr "CensorRule | Sylw ar y golygu diwethaf"
msgid "CensorRule|Last edit editor"
-msgstr ""
+msgstr "CensorRule | golygydd y golygu diwethaf"
msgid "CensorRule|Regexp"
-msgstr ""
+msgstr "CensorRule | regexp"
msgid "CensorRule|Replacement"
-msgstr ""
+msgstr "CensorRule | Newid"
msgid "CensorRule|Text"
-msgstr ""
+msgstr "CensorRule | Testun"
msgid "Change email on {{site_name}}"
msgstr "Newid cyfeiriad ebost ar {{site_name}}"
@@ -480,7 +486,7 @@ msgid "Change password on {{site_name}}"
msgstr "Newid cyfrinair ar {{site_name}}"
msgid "Change profile photo"
-msgstr "Newidiwch llun broffil"
+msgstr "Newidiwch lun broffil"
msgid "Change the text about you on your profile at {{site_name}}"
msgstr "Newidiwch y testun amdanoch chi ar eich proffil ar {{site_name}}"
@@ -504,163 +510,163 @@ msgid "Charity registration"
msgstr "Elusen gofrestredig"
msgid "Check for mistakes if you typed or copied the address."
-msgstr ""
+msgstr "Gwiriwch am gamgymeriadau os ydych wedi teipio neu wedi copïo y cyfeiriad."
msgid "Check you haven't included any <strong>personal information</strong>."
msgstr "Gwiriwch nad ydych chi wedi cynnyws unrhyw <strong>wybodaeth bersonol</strong>."
msgid "Choose your profile photo"
-msgstr "Dewisich eich llun broffil"
+msgstr "Dewiswch eich llun proffil"
msgid "Clarification"
msgstr "Eglurhad"
msgid "Clarify your FOI request - "
-msgstr ""
+msgstr "Eglurwch eich cais Rhyddid Gwybodaeth - "
msgid "Classify an FOI response from "
msgstr "Dosbarthwch ymateb Rh.G. oddiwrth"
msgid "Clear photo"
-msgstr ""
+msgstr "Gwaredwch y ffoto"
msgid "Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\\nreview, asking them to find out why response to the request has been so slow."
-msgstr ""
+msgstr "Cliciwch ar y ddolen isod i anfon neges at {{public_body_name}} i ddweud wrthynt i ymateb i'ch cais. Efallai yr hoffech chi ofyn am adolygiad mewnol, gan ofyn iddynt i gael gwybod pam ymateb i'r cais wedi bod mor araf."
msgid "Click on the link below to send a message to {{public_body}} reminding them to reply to your request."
-msgstr ""
+msgstr "Cliciwch ar y ddolen isod i anfon neges at {{public_body}} i'w atgoffa i ymateb i'ch cais."
msgid "Close"
-msgstr ""
+msgstr "Cau"
msgid "Comment"
-msgstr ""
+msgstr "Sylw"
msgid "Comment|Body"
-msgstr ""
+msgstr "Sylw|Corff"
msgid "Comment|Comment type"
-msgstr ""
+msgstr "Sylw|Math o sylw"
msgid "Comment|Locale"
-msgstr ""
+msgstr "Sylw|Locale"
msgid "Comment|Visible"
-msgstr ""
+msgstr "Sylw|Gweladwy"
msgid "Confirm you want to follow all successful FOI requests"
-msgstr ""
+msgstr "Cadarnhewch eich bod am ddilyn yr holl geisiadau Rhyddid Gwybodaeth llwyddiannus"
msgid "Confirm you want to follow new requests"
-msgstr ""
+msgstr "Cadarnhewch eich bod am ddilyn ceisiadau newydd"
msgid "Confirm you want to follow new requests or responses matching your search"
-msgstr ""
+msgstr "Cadarnhewch eich bod am ddilyn ceisiadau newydd neu ymatebion sy'n matsio eich chwiliad"
msgid "Confirm you want to follow requests by '{{user_name}}'"
-msgstr ""
+msgstr "Cadarnhewch eich bod am ddilyn ceisiadau gan '{{user_name}}'"
msgid "Confirm you want to follow requests to '{{public_body_name}}'"
-msgstr ""
+msgstr "Cadarnhewch eich bod am ddilyn ceisiadau i '{{public_body_name}}'"
msgid "Confirm you want to follow the request '{{request_title}}'"
-msgstr ""
+msgstr "Cadarnhewch eich bod am ddilyn y cais '{{request_title}}'"
msgid "Confirm your FOI request to "
-msgstr "Cadarnhewch eich cais Rh.G. at"
+msgstr "Cadarnhewch eich cais Rh.G. i"
msgid "Confirm your account on {{site_name}}"
msgstr "Cadarnhewch eich cyfrif ar {{site_name}}"
msgid "Confirm your annotation to {{info_request_title}}"
-msgstr ""
+msgstr "Cadarnhau eich anodiad i {{info_request_title}} "
msgid "Confirm your email address"
-msgstr "Cadarnhewch eich cyfeiriad ebost"
+msgstr "Cadarnhewch eich cyfeiriad e-bost"
msgid "Confirm your new email address on {{site_name}}"
-msgstr "Cadarnhewch eich cyfeiriad ebost newydd ar {{site_name}}"
+msgstr "Cadarnhewch eich cyfeiriad e-bost newydd ar {{site_name}}"
msgid "Considered by administrators as not an FOI request and hidden from site."
-msgstr ""
+msgstr "Barnwyd gan weinyddwyr nad yw'n gais Rhyddid Gwybodaeth a cuddiwyd o'r wefan."
msgid "Considered by administrators as vexatious and hidden from site."
-msgstr ""
+msgstr "Barnwyd gan weinyddwyr ei fod yn flinderus a cuddiwyd o'r wefan."
msgid "Contact {{recipient}}"
-msgstr ""
+msgstr "Cysylltwch â {{recipient}}"
msgid "Contact {{site_name}}"
msgstr "Cysylltwch â {{site_name}}"
msgid "Could not identify the request from the email address"
-msgstr "Methiant adnabod y cais o'r cyfeiriad ebost"
+msgstr "Methwyd ag adnabod y cais o'r cyfeiriad e-bost"
msgid "Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and many other common image file formats are supported."
-msgstr ""
+msgstr "Methwyd â deall y ffeil ddelwedd yr ydych yn llwytho i fyny. Cefnogir PNG, JPEG, GIF a llawer o fformatau ffeil delwedd cyffredin eraill."
msgid "Crop your profile photo"
-msgstr "Torrwch eich llun broffil"
+msgstr "Tociwch lun eich proffil"
msgid "Cultural sites and built structures (as they may be affected by the\\n environmental factors listed above)"
-msgstr ""
+msgstr "Safleoedd diwylliannol a strwythurau adeiledig (gan y gallant gael eu heffeithio gan y ffactorau amgylcheddol a restrir uchod)"
msgid "Currently <strong>waiting for a response</strong> from {{public_body_link}}, they must respond promptly and"
-msgstr ""
+msgstr "Ar hyn o bryd <strong>yn aros am ymateb</strong> gan {{public_body_link}} , rhaid iddynt ymateb yn brydlon ac"
msgid "Date:"
msgstr "Dyddiad"
msgid "Dear {{name}},"
-msgstr ""
+msgstr "Annwyl {{name}},"
msgid "Dear {{public_body_name}},"
msgstr "Annwyl {{public_body_name}},"
msgid "Default locale"
-msgstr ""
+msgstr "Locale diofyn"
msgid "Defunct."
-msgstr ""
+msgstr "Wedi darfod."
msgid "Delayed response to your FOI request - "
-msgstr "Ymateb i'ch cais Rh.G. a oedwyd -"
+msgstr "Ymateb hwyr i'ch cais Rh.G. -"
msgid "Delayed."
-msgstr "Oededig."
+msgstr "Hwyr."
msgid "Delivery error"
msgstr "Methiant cyflwyno"
msgid "Destroy {{name}}"
-msgstr ""
+msgstr "Dinistrio {{name}}"
msgid "Details of request '"
-msgstr ""
+msgstr "Manylion y cais"
msgid "Did you mean: {{correction}}"
-msgstr ""
+msgstr "A oeddech yn meddwl: {{correction}}"
msgid "Disclaimer: This message and any reply that you make will be published on the internet. Our privacy and copyright policies:"
-msgstr ""
+msgstr "Ymwadiad: Caiff y neges hon ac unrhyw ateb a roddwch eu cyhoeddi ar y rhyngrwyd. Ein polisïau preifatrwydd a hawlfraint:"
msgid "Disclosure log"
-msgstr ""
+msgstr "Log datgelu"
msgid "Disclosure log URL"
-msgstr ""
+msgstr "URL log datgelu"
msgid "Don't want to address your message to {{person_or_body}}? You can also write to:"
-msgstr ""
+msgstr "Ddim eisiau cyfeirio'ch neges i {{person_or_body}}? Gallwch hefyd ysgrifennu at:"
msgid "Done"
-msgstr ""
+msgstr "Wedi'i wneud"
msgid "Done &gt;&gt;"
-msgstr ""
+msgstr "Done >>"
msgid "Download a zip file of all correspondence"
-msgstr ""
+msgstr "Lawrlwytho ffeil zip o bob gohebiaeth"
msgid "Download original attachment"
msgstr "Lawrlwytho'r atodiad gwreiddiol"
@@ -669,67 +675,67 @@ msgid "EIR"
msgstr "Rheoliadau Gwybodaeth Amgylcheddol"
msgid "Edit"
-msgstr ""
+msgstr "Golygu"
msgid "Edit and add <strong>more details</strong> to the message above,\\n explaining why you are dissatisfied with their response."
-msgstr ""
+msgstr "Golygu ac ychwanegu <strong>mwy o fanylion</strong> at y neges uchod, yn esbonio pam eich bod yn anfodlon ar eu hymateb."
msgid "Edit text about you"
-msgstr ""
+msgstr "Golygu testun amdanoch chi"
msgid "Edit this request"
msgstr "Golygu'r cais hwn"
msgid "Either the email or password was not recognised, please try again."
-msgstr ""
+msgstr "Nid yw naill ai'r e-bost neu'r cyfrinair wedi ei adnabod, ceisiwch eto os gwelwch yn dda."
msgid "Either the email or password was not recognised, please try again. Or create a new account using the form on the right."
-msgstr ""
+msgstr "Nid yw naill ai'r e-bost neu'r cyfrinair wedi ei adnabod, ceisiwch eto, os gwelwch yn dda . Neu crewch gyfrif newydd gan ddefnyddio'r ffurflen ar y dde."
msgid "Email doesn't look like a valid address"
msgstr "Dydy'r cyfeiriad ebost ddim yn edrych yn ddilys"
msgid "Email me future updates to this request"
-msgstr ""
+msgstr "E-bostiwch diweddariadau i'r cais hwn yn y dyfodol ataf"
msgid "Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>"
-msgstr ""
+msgstr "Rhowch eiriau yr ydych am ddod o hyd iddynt, wedi eu gwahanu gan fylchau, ee <strong>lôn ddringo</strong>"
msgid "Enter your response below. You may attach one file (use email, or\\n <a href=\"{{url}}\">contact us</a> if you need more)."
-msgstr ""
+msgstr "Rhowch eich ymateb isod. Gallwch atodi un ffeil (defnyddiwch e-bost, neu <a href=\"{{url}}\">cysylltwch â ni</a> os oes angen mwy)."
msgid "Environmental Information Regulations"
msgstr "Rheoliadau Gwybodaeth Amgylcheddol"
msgid "Environmental Information Regulations requests made"
-msgstr ""
+msgstr "Ceisiadau Amgylcheddol Rheoliadau Gwybodaeth a wnaed"
msgid "Environmental Information Regulations requests made using this site"
-msgstr ""
+msgstr "Ceisiadau Rheoliadau Amgylcheddol Gwybodaeth a wnaed gan ddefnyddio'r wefan hon"
msgid "Event history"
msgstr "Hanes y digwyddiad"
msgid "Event history details"
-msgstr "Hanes y digwyddiad: Manylion"
+msgstr "Hanes y digwyddiad: manylion"
msgid "Event {{id}}"
-msgstr ""
+msgstr "Digwyddiad {{id}}"
msgid "Everything that you enter on this page, including <strong>your name</strong>,\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
-msgstr ""
+msgstr "Dangosir popeth yr ydych yn rhoi i mewn ar y dudalen hon, gan gynnwys <strong>eich enw</strong>, <strong>yn gyhoeddus</strong> ar y wefan hon am byth (<a href =\"{{url}}\">pam?</a>)."
msgid "Everything that you enter on this page\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
-msgstr ""
+msgstr "Dangosir popeth yr ydych yn rhoi i mewn ar y dudalen hon <strong>yn gyhoeddus</strong> ar y wefan hon am byth (<a href=\"{{url}}\">pam?</a>) ."
msgid "FOI"
msgstr "Rhyddid Gwybodaeth"
msgid "FOI email address for {{public_body}}"
-msgstr ""
+msgstr "Cyfeiriad e-bost Rhyddid Gwybodaeth ar gyfer {{public_body}} "
msgid "FOI request – {{title}}"
-msgstr ""
+msgstr "Cais Rhyddid Gwybodaeth - {{title}}"
msgid "FOI requests"
msgstr "Ceisiadau Rhyddid Gwybodaeth"
@@ -738,67 +744,67 @@ msgid "FOI requests by '{{user_name}}'"
msgstr "Ceisiadau Rhyddid Gwybodaeth gan '{{user_name}}'"
msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr "Ceisiadau Rhyddid Gwybodaeth {{start_count}} i {{end_count}} o{{total_count}}"
+msgstr "Ceisiadau Rhyddid Gwybodaeth {{start_count}} i {{end_count}} o {{total_count}}"
msgid "FOI response requires admin ({{reason}}) - {{title}}"
-msgstr ""
+msgstr "Mae ar Ymateb Rhyddid Gwybodaeth angen gweinyddu ({{reason}}) - {{title}}"
msgid "Failed to convert image to a PNG"
-msgstr ""
+msgstr "Methu trosi delwedd i PNG"
msgid "Failed to convert image to the correct size: at {{cols}}x{{rows}}, need {{width}}x{{height}}"
-msgstr ""
+msgstr "Methwyd trosi delwedd i'r maint cywir: yn {{cols}} x {{rows}}, angen {{width}}x{{height}}"
msgid "Filter"
-msgstr ""
+msgstr "Hidlo"
msgid "First, did your other requests succeed?"
-msgstr ""
+msgstr "Yn gyntaf, a lwyddodd eich ceisiadau eraill?"
msgid "First, type in the <strong>name of the UK public authority</strong> you'd\\n like information from. <strong>By law, they have to respond</strong>\\n (<a href=\"{{url}}\">why?</a>)."
msgstr "Yn gyntaf, teipiwch <strong>enw awdurdod cyhoeddus yn y DU</strong> yr hoffech gael gwybodaeth ganddo. <strong>Yn ôl y gyfraith, mae'n rhaid iddynt ymateb</strong> (<a href=\"{{url}}\">pam?</a>)."
msgid "Foi attachment"
-msgstr ""
+msgstr "Atodiad FoI"
msgid "FoiAttachment|Charset"
-msgstr ""
+msgstr "FoiAttachment | Set Nodau"
msgid "FoiAttachment|Content type"
-msgstr ""
+msgstr "FoiAttachment| Math o gynnwys"
msgid "FoiAttachment|Display size"
-msgstr ""
+msgstr "FoiAttachment | Maint Arddangos"
msgid "FoiAttachment|Filename"
-msgstr ""
+msgstr "FoiAttachment | Enw Ffeil"
msgid "FoiAttachment|Hexdigest"
-msgstr ""
+msgstr "FoiAttachment | Hexdigest"
msgid "FoiAttachment|Url part number"
-msgstr ""
+msgstr "FoiAttachment | Rhif rhan Url"
msgid "FoiAttachment|Within rfc822 subject"
-msgstr ""
+msgstr "FoiAttachment | O fewn pwnc rfc822 "
msgid "Follow"
-msgstr ""
+msgstr "Dilynwch"
msgid "Follow all new requests"
-msgstr ""
+msgstr "Dilynwch yr holl geisiadau newydd"
msgid "Follow new successful responses"
-msgstr ""
+msgstr "Dilynwch ymatebion llwyddiannus newydd"
msgid "Follow requests to {{public_body_name}}"
-msgstr ""
+msgstr "Dilyn ceisiadau i {{public_body_name}} "
msgid "Follow these requests"
msgstr "Dilynwch y ceisiadau hyn"
msgid "Follow things matching this search"
-msgstr ""
+msgstr "Dilynwch bethau sy'n matsio'r chwiliad hwn"
msgid "Follow this authority"
msgstr "Dilynwch yr awdurdod hwn"
@@ -807,41 +813,50 @@ msgid "Follow this link to see the request:"
msgstr "Dilynwch y ddolen hon i weld y cais:"
msgid "Follow this person"
-msgstr ""
+msgstr "Dilynwch y person hwn"
msgid "Follow this request"
msgstr "Dilynwch y cais hwn"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
-msgstr ""
+msgstr "Dilyniant"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
-msgstr ""
+msgstr "Neges ddilynol a anfonwyd gan y ceisydd"
msgid "Follow up messages to existing requests are sent to "
-msgstr ""
+msgstr "Anfonir negeseuon dilynol i geisiadau presennol at "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
-msgstr ""
+msgstr "Rhwystrwyd dilyniannau ac ymatebion newydd i'r cais hwn i atal spam. <a href=\"{{url}}\">Cysylltwch â ni</a> os ydych yn {{user_link}} ac mae angen anfon neges ddilynol."
msgid "Follow us on twitter"
msgstr "Dilynwch ni ar Twitter"
msgid "Followups cannot be sent for this request, as it was made externally, and published here by {{public_body_name}} on the requester's behalf."
-msgstr ""
+msgstr "Ni ellir anfon Dilyniannau amy cais hwn, gan ei fod wedi cael ei wneud yn allanol, ac fe gafodd ei gyhoeddi yma gan {{public_body_name}} ar ran y ceisydd."
msgid "For an unknown reason, it is not possible to make a request to this authority."
-msgstr ""
+msgstr "Am reswm anhysbys, nid yw'n bosibl gwneud cais i'r awdurdod hwn."
msgid "Forgotten your password?"
msgstr "Wedi anghofio eich cyfrinair?"
msgid "Found {{count}} public authority {{description}}"
msgid_plural "Found {{count}} public authorities {{description}}"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Wedi dod o hyd i {{count}} awdurdod cyhoeddus {{description}}"
+msgstr[1] "Wedi dod o hyd i {{count}} awdurdod cyhoeddus {{description}}"
+msgstr[2] "Wedi dod o hyd i {{count}} awdurdod cyhoeddus {{description}}"
+msgstr[3] "Wedi dod o hyd i {{count}} awdurdod cyhoeddus {{description}}"
msgid "Freedom of Information"
msgstr "Rhyddid Gwybodaeth"
@@ -850,13 +865,13 @@ msgid "Freedom of Information Act"
msgstr "Deddf Rhyddid Gwybodaeth"
msgid "Freedom of Information law does not apply to this authority, so you cannot make\\n a request to it."
-msgstr ""
+msgstr "Nid yw cyfraith Rhyddid Gwybodaeth yn berthnasol i'r awdurdod hwn, felly ni allwch wneud cais iddo."
msgid "Freedom of Information law no longer applies to"
-msgstr "Nid yw cyfraith Rhyddid Gwybodaeth bellach yn berthnasol i"
+msgstr "Nid yw cyfraith Rhyddid Gwybodaeth bellach yn gymwys i"
msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
-msgstr ""
+msgstr "Nid yw cyfraith Rhyddid Gwybodaeth bellach yn gymwys i'r awdurdod hwn. Anfonir negeseuon dilynol i geisiadau presennol i "
msgid "Freedom of Information requests made"
msgstr "Ceisiadiau Rhyddid Gwybodaeth a wnaethpwyd"
@@ -874,34 +889,34 @@ msgid "Freedom of information requests to"
msgstr "Ceisiadiau Rhyddid Gwybodaeth at"
msgid "From"
-msgstr ""
+msgstr "Oddi wrth"
msgid "From the request page, try replying to a particular message, rather than sending\\n a general followup. If you need to make a general followup, and know\\n an email which will go to the right place, please <a href=\"{{url}}\">send it to us</a>."
-msgstr ""
+msgstr "O'r dudalen gwneud cais, ceisiwch ateb i neges benodol, yn hytrach nag anfon neges ddilynol gyffredinol. Os oes angen i chi wneud neges gyffredinol, ac yn gwybod e-bost a fydd yn mynd i'r lle iawn, <a href=\"{{url}}\">anfon atom</a> os gwelwch yn dda."
msgid "From:"
msgstr "Oddi wrth:"
msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
-msgstr "RHOWCH MANYLION EICH CWYN YMA"
+msgstr "RHOWCH FANYLION AM EICH CWYN YMA"
msgid "Handled by post."
-msgstr ""
+msgstr "Wedi ei drin gan bost."
msgid "Has tag string/has tag string tag"
-msgstr ""
+msgstr "Â llinyn tag / Â thag llinyn tag"
msgid "HasTagString::HasTagStringTag|Model"
-msgstr ""
+msgstr "HasTagString :: HasTagStringTag | Model"
msgid "HasTagString::HasTagStringTag|Name"
-msgstr ""
+msgstr "HasTagString :: HasTagStringTag|Enw"
msgid "HasTagString::HasTagStringTag|Value"
-msgstr ""
+msgstr "HasTagString :: HasTagStringTag|Gwerth"
msgid "Hello! You can make Freedom of Information requests within {{country_name}} at {{link_to_website}}"
-msgstr "Shwmae! Rydych chi'n gallu gwneud ceisiadau Rhyddid Gwybodaeth yn {{country_name}} yma:{{link_to_website}}"
+msgstr "Helo! Rydych chi'n gallu gwneud ceisiadau Rhyddid Gwybodaeth o fewn {{country_name}} yma:{{link_to_website}}"
msgid "Hello, {{username}}!"
msgstr "Helo, {{username}}!"
@@ -910,109 +925,109 @@ msgid "Help"
msgstr "Help"
msgid "Here <strong>described</strong> means when a user selected a status for the request, and\\nthe most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\\n{{site_name}} for intermediate events, which weren't given an explicit\\ndescription by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
-msgstr ""
+msgstr "Yma mae <strong>wedi ei ddisgrifio</strong> yn golygu pan fydd defnyddiwr yn dewis statws ar gyfer y cais, a statws y digwyddiad mwyaf diweddar wedi ei diweddaru statws i'r gwerth hwnnw. Wedyn mae <strong>wedi'i gyfrifo</strong> yn cael ei dybio gan {{site_name}} ar gyfer digwyddiadau canolradd, na chawsant ddisgrifiad penodol gan ddefnyddiwr. Gweler <a href=\"{{search_path}}\">awgrymiadau chwilio</a> am ddisgrifiad o'r cyflyrau."
msgid "Here is the message you wrote, in case you would like to copy the text and save it for later."
-msgstr ""
+msgstr "Dyma'r neges ysgrifennoch, rhag ofn yr hoffech gopïo'r testun a'i gadw ar gyfer yn ddiweddarach."
msgid "Hi! We need your help. The person who made the following request\\n hasn't told us whether or not it was successful. Would you mind taking\\n a moment to read it and help us keep the place tidy for everyone?\\n Thanks."
-msgstr ""
+msgstr "Hiya! Rydym angen eich help. Dydy]r person a wnaeth y cais canlynol sydd ddim wedi dweud wrthym ai oedd yn llwyddiannus. A fyddech chi'n meddwl cymryd eiliad i'w ddarllen a'n helpu ni i gadw'r lle'n daclus i bawb? Diolch."
msgid "Hide request"
-msgstr ""
+msgstr "Cuddio cais"
msgid "Holiday"
-msgstr ""
+msgstr "Gwyliau"
msgid "Holiday|Day"
-msgstr "Gwyliau | Diwrnod"
+msgstr "Holiday|Diwrnod"
msgid "Holiday|Description"
-msgstr "Gwyliau | Disgrifiad"
+msgstr "Holiday|Disgrifiad"
msgid "Home"
msgstr "Hafan"
msgid "Home page"
-msgstr ""
+msgstr "Tudalen hafan"
msgid "Home page of authority"
msgstr "Tudalen hafan yr awdurdod"
msgid "However, you have the right to request environmental\\n information under a different law"
-msgstr ""
+msgstr "Fodd bynnag, mae gennych yr hawl i ofyn am wybodaeth amgylcheddol dan gyfraith wahanol"
msgid "Human health and safety"
-msgstr "Iechyd a diogelwch dynol"
+msgstr "Iechyd dynol a diogelwch"
msgid "I am asking for <strong>new information</strong>"
-msgstr "Rydw i'n gofyn am <strong>gwybodaeth newydd</strong>"
+msgstr "Rwyf yn gofyn am <strong>wybodaeth newydd</strong>"
msgid "I am requesting an <strong>internal review</strong>"
-msgstr "Yr wyf yn gofyn am <strong>adolygiad mewnol</strong>"
+msgstr "Rwyf yn gofyn am <strong>adolygiad mewnol</strong>"
msgid "I am writing to request an internal review of {{public_body_name}}'s handling of my FOI request '{{info_request_title}}'."
-msgstr ""
+msgstr "Rwyf yn ysgrifennu i ofyn am adolygiad mewnol o'r ffordd driniodd {{public_body_name}} fy nghais Rhyddid Gwybodaeth '{{info_request_title}}'."
msgid "I don't like these ones &mdash; give me some more!"
-msgstr ""
+msgstr "Dydw i ddim yn hoffi'r rhain - rhowch ragor i mi!"
msgid "I don't want to do any more tidying now!"
-msgstr ""
+msgstr "Nid wyf am wneud rhagor o dacluso nawr!"
msgid "I like this request"
-msgstr ""
+msgstr "Rwy'n hoffi'r cais hwn"
msgid "I would like to <strong>withdraw this request</strong>"
-msgstr "Hoffwn i atal y cais hwn"
+msgstr "Hoffwn <strong<dynnu</strong>'r cais hwn"
msgid "I'm still <strong>waiting</strong> for my information\\n <small>(maybe you got an acknowledgement)</small>"
-msgstr ""
+msgstr "Rwy'n <strong>disgwyl o hyd</strong> am fy ngwybodaeth <small>(efallai i chi dderbyn cydnabyddiaeth)</small>"
msgid "I'm still <strong>waiting</strong> for the internal review"
-msgstr "Rydw i dal yn <strong>aros</strong> am yr adolygiad mewnol"
+msgstr "Rwy'n <strong>disgwyl o hyd</strong> am yr adolygiad mewnol"
msgid "I'm waiting for an <strong>internal review</strong> response"
-msgstr ""
+msgstr "Rwy'n disgwyl am ymateb <strong>yr adolygiad mewnol</strong>"
msgid "I've been asked to <strong>clarify</strong> my request"
msgstr "Gofynnwyd i mi <strong>egluro</strong> fy nghais"
msgid "I've received <strong>all the information"
-msgstr "Yr wyf wedi derbyn <strong>yr holl wybodaeth"
+msgstr "Rwyf wedi derbyn <strong>yr holl wybodaeth</strong>"
msgid "I've received <strong>some of the information</strong>"
-msgstr "Yr wyf wedi derbyn <strong>rhan o'r wybodaeth</strong>"
+msgstr "Rwyf wedi derbyn <strong>rhan o'r wybodaeth</strong>"
msgid "I've received an <strong>error message</strong>"
-msgstr "Rydw i wedi cael <strong>neges gwall</strong>"
+msgstr "Rwyf wedi derbyn <strong>neges gwall</strong>"
msgid "I've received an error message"
-msgstr ""
+msgstr "Rwyf wedi derbyn neges gwall"
msgid "Id"
-msgstr ""
+msgstr "Id"
msgid "If the address is wrong, or you know a better address, please <a href=\"{{url}}\">contact us</a>."
-msgstr ""
+msgstr "Os yw'r cyfeiriad yn anghywir, neu os ydych yn gwybod am gyfeiriad gwell, <a href=\"{{url}}\">cysylltwch â ni</a> os gwelwch yn dda."
msgid "If the error was a delivery failure, and you can find an up to date FOI email address for the authority, please tell us using the form below."
-msgstr ""
+msgstr "Os methiant dosbarthu oedd y gwall, ac rydych chi'n gallu dod o hyd i cyfeiriad e-bost Rhyddid Gwybodaeth cyfoes ar gyfer yr awdurdod, rhowch wybod i ni gan ddefnyddio'r ffurflen isod."
msgid "If this is incorrect, or you would like to send a late response to the request\\nor an email on another subject to {{user}}, then please\\nemail {{contact_email}} for help."
-msgstr ""
+msgstr "Os yw hyn yn anghywir, neu os hoffech anfon ymateb hwyr i'r cais neu e-bost ar bwnc arall i {{user}}, yna e-bostiwch {{contact_email}} am gymorth."
msgid "If you are dissatisfied by the response you got from\\n the public authority, you have the right to\\n complain (<a href=\"{{url}}\">details</a>)."
-msgstr ""
+msgstr "Os ydych yn anfodlon â'r ymateb a gawsoch gan yr awdurdod cyhoeddus, mae gennych yr hawl i gwyno (<a href=\"{{url}}\">manylion</a>)"
msgid "If you are still having trouble, please <a href=\"{{url}}\">contact us</a>."
-msgstr ""
+msgstr "Os ydych yn dal i gael trafferth, <a href=\"{{url}}\">cysylltwch â ni</a>."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the message."
-msgstr ""
+msgstr "Os chi sy'n gwneud y cais, gallwch <a href=\"{{url}}\">fewngofnodi</a> i weld y neges."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the request."
-msgstr "Os chi yw'r ceisydd, rydych chi'n gallu <a href=\"{{url}}\">mewngofnodi</a> i weld y cais;."
+msgstr "Os chi sy'n gwneud y cais, gallwch <a href=\"{{url}}\">fewngofnodi</a> i weld y cais."
msgid "If you are thinking of using a pseudonym,\\n please <a href=\"{{url}}\">read this first</a>."
msgstr "Os ydych yn ystyried defnyddio ffugenw, <a href=\"{{url}}\">darllenwch hwn yn gyntaf</a> os gwelwch yn dda."
@@ -1021,31 +1036,31 @@ msgid "If you are {{user_link}}, please"
msgstr "Os {{user_link}} ydych chi, os gwelwch yn dda, "
msgid "If you believe this request is not suitable, you can report it for attention by the site administrators"
-msgstr ""
+msgstr "Os ydych yn credu nad yw'r cais hwn yn addas, gallwch roi gwybod i weinyddwyr y safle at eu sylw"
msgid "If you can't click on it in the email, you'll have to <strong>select and copy\\nit</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\\nyou would type the address of any other webpage."
-msgstr ""
+msgstr "Os nad ydych yn gallu ei glicio yn yr ebost bydd rhaid <strong>ei ddewis a'i gopïo</strong> o'r e-bost. Yna, <strong>gludwch e i mewn i'ch porwr</strong>, i'r lle y byddech yn teipio cyfeiriad unrhyw dudalen we arall."
msgid "If you can, scan in or photograph the response, and <strong>send us\\n a copy to upload</strong>."
-msgstr ""
+msgstr "Os gallwch chi, sganiwch neu dynnwch lun yr ymateb, ac <strong>anfon copi i ni</strong> lwytho i fyny."
msgid "If you find this service useful as an FOI officer, please ask your web manager to link to us from your organisation's FOI page."
-msgstr ""
+msgstr "Os byddwch fel swyddog Rhyddid Gwybodaeth yn cael y gwasanaeth hwn yn ddefnyddiol, gofynnwch i'ch rheolwr gwe i gysylltu â ni o dudalen Rhyddid Gwybodaeth eich sefydliad."
msgid "If you got the email <strong>more than six months ago</strong>, then this login link won't work any\\nmore. Please try doing what you were doing from the beginning."
-msgstr ""
+msgstr "Os cawsoch yr e-bost <strong>dros chwe mis yn ôl</strong>, yna ni fydd y ddolen fewngofnodi hon yn gweithio bellach. Ceisiwch wneud yr hyn yr oeddech yn ei wneud o'r dechrau."
msgid "If you have not done so already, please write a message below telling the authority that you have withdrawn your request. Otherwise they will not know it has been withdrawn."
-msgstr ""
+msgstr "Os nad ydych wedi gwneud hynny'n barod, ysgrifennwch neges isod gan ddweud wrth yr awdurdod eich bod wedi tynnu eich cais yn ôl. Fel arall, ni fyddant yn gwybod ei fod wedi cael ei dynnu'n ôl."
msgid "If you reply to this message it will go directly to {{user_name}}, who will\\nlearn your email address. Only reply if that is okay."
-msgstr ""
+msgstr "Os byddwch yn ymateb i'r neges hon, bydd yn mynd yn uniongyrchol i {{user_name}}, a fydd yn dysgu eich cyfeiriad e-bost. Dim ond os yw hynny'n iawn y dylech ymateb."
msgid "If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way."
-msgstr ""
+msgstr "Os ydych yn defnyddio e-bost ar y we neu hidlwyr \"post sothach\", edrychwch hefyd yn edrych ar eich ffolderi e-post swmp/spam. Weithiau, caiff ein negeseuon eu marcio felly."
msgid "If you would like us to lift this ban, then you may politely\\n<a href=\"/help/contact\">contact us</a> giving reasons.\\n"
-msgstr ""
+msgstr "Os hoffech i ni i godi'r gwaharddiad hwn, cewch <a href=\"/help/contact\">ofyn i ni</a> yn gwrtais ni gan roi rhesymau."
msgid "If you're new to {{site_name}}"
msgstr "Os ydych yn newydd i {{site_name}}"
@@ -1054,139 +1069,139 @@ msgid "If you've used {{site_name}} before"
msgstr "Os ydych chi wedi defnyddio {{site_name}} o'r blaen "
msgid "If your browser is set to accept cookies and you are seeing this message,\\nthen there is probably a fault with our server."
-msgstr ""
+msgstr "Os yw eich porwr wedi ei osod i dderbyn cwcis ac rydych yn gweld y neges hon, yna mae'n debyg fod nam ar ein gweinydd."
msgid "Incoming email address"
-msgstr ""
+msgstr "Cyfeiriad e-bost sy'n dod i mewn"
msgid "Incoming message"
-msgstr ""
+msgstr "Neges sy'n dod i mewn"
msgid "IncomingMessage|Cached attachment text clipped"
-msgstr ""
+msgstr "IncomingMessage|Testun atodiad yn y storfa wedi ei docio"
msgid "IncomingMessage|Cached main body text folded"
-msgstr ""
+msgstr "IncomingMessage|Testun y prif gorff o'r storfa wedi ei blygu"
msgid "IncomingMessage|Cached main body text unfolded"
-msgstr ""
+msgstr "IncomingMessage|Testun y prif gorff o'r storfa wedi ei ddad-blygu"
msgid "IncomingMessage|Last parsed"
-msgstr ""
+msgstr "IncomingMessage|Wedi ei ddosrannu ddiwethaf"
msgid "IncomingMessage|Mail from"
-msgstr ""
+msgstr "IncomingMessage| Post gan"
msgid "IncomingMessage|Mail from domain"
-msgstr ""
+msgstr "IncomingMessage| Post oddi wrth barth"
msgid "IncomingMessage|Prominence"
-msgstr ""
+msgstr "IncomingMessage|Amlygrwydd"
msgid "IncomingMessage|Prominence reason"
-msgstr ""
+msgstr "IncomingMessage|Rheswm amlygrwydd"
msgid "IncomingMessage|Sent at"
-msgstr ""
+msgstr "IncomingMessage|Anfonwyd am"
msgid "IncomingMessage|Subject"
-msgstr ""
+msgstr "IncomingMessage|Pwnc"
msgid "IncomingMessage|Valid to reply to"
-msgstr ""
+msgstr "IncomingMessage|Yn ddilys i ymateb i"
msgid "Individual requests"
-msgstr ""
+msgstr "Ceisiadau unigol"
msgid "Info request"
-msgstr ""
+msgstr "Cais Gwybodaeth"
msgid "Info request event"
-msgstr ""
+msgstr "Digwyddiad Cais Gwybodaeth"
msgid "InfoRequestEvent|Calculated state"
-msgstr ""
+msgstr "InfoRequestEvent|Cyflwr a gyfrifwyd"
msgid "InfoRequestEvent|Described state"
-msgstr ""
+msgstr "InfoRequestEvent|Cyflwr a ddisgrifiwyd"
msgid "InfoRequestEvent|Event type"
-msgstr ""
+msgstr "InfoRequestEvent|Math o ddigwyddiad"
msgid "InfoRequestEvent|Last described at"
-msgstr ""
+msgstr "InfoRequestEvent|Disgrifiwyd ddiwethaf am"
msgid "InfoRequestEvent|Params yaml"
-msgstr ""
+msgstr "InfoRequestEvent|Params yaml"
msgid "InfoRequest|Allow new responses from"
-msgstr ""
+msgstr "InfoRequest|Caniatáu ymatebion newydd gan"
msgid "InfoRequest|Attention requested"
-msgstr ""
+msgstr "InfoRequest|Sylw wedi'i geisio"
msgid "InfoRequest|Awaiting description"
-msgstr ""
+msgstr "InfoRequest|Yn disgwyl ei ddisgrifio"
msgid "InfoRequest|Comments allowed"
-msgstr ""
+msgstr "InfoRequest|Caniateir sylwadau "
msgid "InfoRequest|Described state"
-msgstr ""
+msgstr "InfoRequest|Cyflwr disgrifiedig"
msgid "InfoRequest|External url"
-msgstr ""
+msgstr "InfoRequest|url allanol"
msgid "InfoRequest|External user name"
-msgstr ""
+msgstr "InfoRequest|Enw defnyddiwr allanol"
msgid "InfoRequest|Handle rejected responses"
-msgstr ""
+msgstr "InfoRequest|Trin ymatebion a wrthodwyd"
msgid "InfoRequest|Idhash"
-msgstr ""
+msgstr "InfoRequest|Idhash"
msgid "InfoRequest|Law used"
-msgstr ""
+msgstr "InfoRequest|Y gyfraith a ddefnyddiwyd "
msgid "InfoRequest|Prominence"
-msgstr ""
+msgstr "InfoRequest|Amlygrwydd"
msgid "InfoRequest|Title"
-msgstr ""
+msgstr "InfoRequest|Teitl"
msgid "InfoRequest|Url title"
-msgstr ""
+msgstr "InfoRequest|Teitl url"
msgid "Information not held."
-msgstr ""
+msgstr "Gwybodaeth heb ei gadw."
msgid "Information on emissions and discharges (e.g. noise, energy,\\n radiation, waste materials)"
-msgstr ""
+msgstr "Gwybodaeth am allyriadau a gollyngiadau (ee sŵn, ynni, ymbelydredd, deunyddiau gwastraff)"
msgid "Internal review request"
-msgstr ""
+msgstr "Cais am adolygiad mewnol"
msgid "Is {{email_address}} the wrong address for {{type_of_request}} requests to {{public_body_name}}? If so, please contact us using this form:"
-msgstr ""
+msgstr "A yw {{email_address}} y cyfeiriad anghywir ar gyfer ceisiadau {{type_of_request}} i {{public_body_name}}? Os felly, cysylltwch â ni gan ddefnyddio'r ffurflen hon:"
msgid "It may be that your browser is not set to accept a thing called \"cookies\",\\nor cannot do so. If you can, please enable cookies, or try using a different\\nbrowser. Then press refresh to have another go."
-msgstr ""
+msgstr "Efallai nad yw eich porwr wedi ei osod i dderbyn peth a elwir yn \"gwcis\", neu'n methu gwneud hynny. Os gallwch chi, galluogwch gwcis, neu rhowch gynnig ar ddefnyddio porwr gwahanol. Yna pwyswch 'adnewyddu' i roi cynnig arall arno."
msgid "Items matching the following conditions are currently displayed on your wall."
-msgstr ""
+msgstr "Mae eitemau sy'n cyfateb i'r amodau canlynol yn cael eu harddangos ar hyn o bryd ar eich wal."
msgid "Items sent in last month"
-msgstr ""
+msgstr "Eitemau a anfonwyd yn y mis diwethaf"
msgid "Joined in"
-msgstr ""
+msgstr "Ymunodd yn"
msgid "Joined {{site_name}} in"
-msgstr ""
+msgstr "Ymunodd â {{site_name}} yn"
msgid "Just one more thing"
-msgstr ""
+msgstr "Dim ond un peth arall"
msgid "Keep it <strong>focused</strong>, you'll be more likely to get what you want (<a href=\"{{url}}\">why?</a>)."
msgstr "Cadwch at <strong>y prif bwynt</strong>. Byddwch yn fwy tebygol o gael beth rydych yn chwilio amdano (<a href=\"{{url}}\">pam?</a>)."
@@ -1195,115 +1210,115 @@ msgid "Keywords"
msgstr "Allweddeiriau"
msgid "Last authority viewed: "
-msgstr ""
+msgstr "Yr awdurdod diwethaf edrychwyd arno: "
msgid "Last request viewed: "
-msgstr ""
+msgstr "Y cais diwethaf edrychwyd arno: "
msgid "Let us know what you were doing when this message\\nappeared and your browser and operating system type and version."
-msgstr ""
+msgstr "Gadewch i ni wybod beth oeddech yn ei wneud pan ymddangosodd y neges hon, a manylion eich porwr, eich system weithredu a'i fersiwn."
msgid "Link to this"
-msgstr ""
+msgstr "Cysylltwch â hwn"
msgid "List all"
-msgstr ""
+msgstr "Rhestrwch y cyfan"
msgid "List of all authorities (CSV)"
-msgstr ""
+msgstr "Rhestr o'r holl awdurdodau (CSV)"
msgid "Listing FOI requests"
-msgstr ""
+msgstr "Yn rhestru ceisiadau Rhyddid Gwybodaeth"
msgid "Listing public authorities"
-msgstr ""
+msgstr "Yn rhestru awdurdodau cyhoeddus"
msgid "Listing public authorities matching '{{query}}'"
-msgstr ""
+msgstr "Yn rhestru awdurdodau cyhoeddus sy'n cyfateb i '{{query}}'"
msgid "Listing tracks"
-msgstr ""
+msgstr "Yn rhestru traciau "
msgid "Listing users"
-msgstr ""
+msgstr "Yn rhestru defnyddwyr"
msgid "Log in to download a zip file of {{info_request_title}}"
-msgstr ""
+msgstr "Mewngofnodi i lawrlwytho ffeil zip o {{info_request_title}} "
msgid "Log into the admin interface"
-msgstr ""
+msgstr "Logio i mewn i'r rhyngwyneb gweinyddu"
msgid "Long overdue."
-msgstr ""
+msgstr "Yn hwyr iawn"
msgid "Made between"
-msgstr ""
+msgstr "A wnaed rhwng"
msgid "Mail server log"
-msgstr ""
+msgstr "Log gweinydd post"
msgid "Mail server log done"
-msgstr ""
+msgstr "Log gweinydd post wedi'i wneud"
msgid "MailServerLogDone|Filename"
-msgstr ""
+msgstr "MailServerLogDone|EnwFfeil"
msgid "MailServerLogDone|Last stat"
-msgstr ""
+msgstr "MailServerLogDone|Ystaedegyn diwethaf"
msgid "MailServerLog|Line"
-msgstr ""
+msgstr "MailServerLog|Llinell"
msgid "MailServerLog|Order"
-msgstr ""
+msgstr "MailServerLog|Archeb"
msgid "Make a new<br/>\\n <strong>Freedom <span>of</span><br/>\\n Information<br/>\\n request</strong>"
-msgstr ""
+msgstr "Gwnewch <strong>Cais Rhyddid Gwybodaeth</strong> newydd"
msgid "Make a request"
msgstr "Gwneud cais"
msgid "Make a request to this authority"
-msgstr ""
+msgstr "Gwnewch cais i'r awdurdod hwn"
msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
-msgstr ""
+msgstr "Gwnewch gais {{law_used_short}} i '{{public_body_name}}'"
msgid "Make and browse Freedom of Information (FOI) requests"
msgstr "Gwneud a phori ceisiadau Rhyddid Gwybodaeth"
msgid "Make your own request"
-msgstr ""
+msgstr "Gwnewch eich cais eich hun"
msgid "Many requests"
-msgstr ""
+msgstr "Llawer o geisiadau"
msgid "Message"
-msgstr ""
+msgstr "Neges"
msgid "Message has been removed"
-msgstr ""
+msgstr "Neges wedi cael ei dileu"
msgid "Message sent using {{site_name}} contact form, "
-msgstr ""
+msgstr "Neges a anfonwyd gan ddefnyddio ffurflen gysylltu {{site_name}}, "
msgid "Missing contact details for '"
-msgstr ""
+msgstr "Manylion cyswllt ar goll ar gyfer '"
msgid "More about this authority"
msgstr "Rhagor am yr awdurdod hwn"
msgid "More requests..."
-msgstr ""
+msgstr "Rhagor o geisiadau ..."
msgid "More similar requests"
-msgstr ""
+msgstr "Rhagor o geisiadau tebyg"
msgid "More successful requests..."
-msgstr "Mwy o geisiadau llwyddiannus..."
+msgstr "Rhagor o geisiadau llwyddiannus..."
msgid "My profile"
-msgstr "Fy mhroffil fi"
+msgstr "Fy mhroffil"
msgid "My request has been <strong>refused</strong>"
msgstr "Mae fy nghais i wedi <strong>cael ei wrthod</strong>"
@@ -1312,19 +1327,19 @@ msgid "My requests"
msgstr "Fy ngheisiadau"
msgid "My wall"
-msgstr ""
+msgstr "Fy wal"
msgid "Name can't be blank"
-msgstr ""
+msgstr "Ni all yr enw fod yn wag"
msgid "Name is already taken"
-msgstr ""
+msgstr "Mae'r enw wedi'i ddefnyddio'n barod"
msgid "New Freedom of Information requests"
msgstr "Ceisiadau Rhyddid Gwybodaeth newydd"
msgid "New censor rule"
-msgstr ""
+msgstr "Rheol sensro newydd"
msgid "New e-mail:"
msgstr "Cyfeiriad ebost newydd:"
@@ -1339,151 +1354,151 @@ msgid "New password: (again)"
msgstr "Cyfrinair newydd: (eto)"
msgid "New response to '{{title}}'"
-msgstr ""
+msgstr "Ymateb newydd i '{{title}}'"
msgid "New response to your FOI request - "
-msgstr ""
+msgstr "Ymateb newydd i'ch cais Rhyddid Gwybodaeth - "
msgid "New response to your request"
-msgstr ""
+msgstr "Ymateb newydd i'ch cais"
msgid "New response to {{law_used_short}} request"
-msgstr ""
+msgstr "Ymateb newydd i'r cais {{law_used_short}} "
msgid "New updates for the request '{{request_title}}'"
-msgstr ""
+msgstr "Diweddariadau newydd i'r cais '{{request_title}}'"
msgid "Newest results first"
-msgstr ""
+msgstr "Canlyniadau diweddaraf yn gyntaf"
msgid "Next"
msgstr "Nesaf"
msgid "Next, crop your photo &gt;&gt;"
-msgstr ""
+msgstr "Nesaf, tociwch eich llun &gt;&gt;"
msgid "No requests of this sort yet."
-msgstr ""
+msgstr "Dim ceisiadau o'r math hwn eto."
msgid "No results found."
-msgstr ""
+msgstr "Heb ddod o hyd i ganlyniadau."
msgid "No similar requests found."
-msgstr ""
+msgstr "Heb ddod o hyd i geisiadau tebyg."
msgid "No tracked things found."
-msgstr ""
+msgstr "Dim wedi dod o hyd i bethau wedi eu tracio."
msgid "Nobody has made any Freedom of Information requests to {{public_body_name}} using this site yet."
-msgstr ""
+msgstr "Nid oes neb wedi gwneud unrhyw geisiadau Rhyddid Gwybodaeth i {{public_body_name}} gan ddefnyddio'r safle hwn eto."
msgid "None found."
-msgstr ""
+msgstr "Heb ganfod yr un."
msgid "None made."
-msgstr ""
+msgstr "Dim wedi eu gwneud."
msgid "Not a valid FOI request"
-msgstr ""
+msgstr "Ddim yn gais Rhyddid Gwybodaeth dilys"
msgid "Note that the requester will not be notified about your annotation, because the request was published by {{public_body_name}} on their behalf."
-msgstr ""
+msgstr "Noder na fydd y ceisydd yn cael gwybod am eich anodi, oherwydd i'r cais gael ei gyhoeddi gan {{public_body_name}} ar eu rhan."
msgid "Now check your email!"
-msgstr ""
+msgstr "Nawr sieciwch eich ebost!"
msgid "Now preview your annotation"
-msgstr ""
+msgstr "Nawr rhagolygwch eich anodi"
msgid "Now preview your follow up"
-msgstr ""
+msgstr "Nawr rhagolygwch eich neges ddilynol"
msgid "Now preview your message asking for an internal review"
-msgstr ""
+msgstr "Nawr bwrwch ragolwg ar eich neges yn gofyn am adolygiad mewnol"
msgid "Number of requests"
-msgstr ""
+msgstr "Nifer y ceisiadau"
msgid "OR remove the existing photo"
-msgstr ""
+msgstr "NEU tynnwch y llun presennol"
msgid "Offensive? Unsuitable?"
-msgstr ""
+msgstr "Sarhaus? Anaddas?"
msgid "Oh no! Sorry to hear that your request was refused. Here is what to do now."
-msgstr ""
+msgstr "O na! Mae'n ddrwg gennym glywed bod eich cais wedi cael ei wrthod. Dyma beth i'w wneud yn awr."
msgid "Old e-mail:"
-msgstr ""
+msgstr "Hen e-bost:"
msgid "Old email address isn't the same as the address of the account you are logged in with"
-msgstr ""
+msgstr "Nid yw'r hen gyfeiriad e-bost yr un fath â chyfeiriad y cyfrif yr ydych wedi logio i mewn iddo"
msgid "Old email doesn't look like a valid address"
-msgstr ""
+msgstr "Nid yw'r hen e-bost yn edrych fel cyfeiriad dilys"
msgid "On this page"
-msgstr ""
+msgstr "Ar y dudalen hon"
msgid "One FOI request found"
-msgstr ""
+msgstr "Daethwpyd o hyd i un cais Rhyddid Gwybodaeth"
msgid "One person found"
-msgstr ""
+msgstr "Daethwpyd o hyd i un person"
msgid "One public authority found"
-msgstr ""
+msgstr "Daethwpyd o hyd i un awdurdod cyhoeddus"
msgid "Only put in abbreviations which are really used, otherwise leave blank. Short or long name is used in the URL – don't worry about breaking URLs through renaming, as the history is used to redirect"
-msgstr ""
+msgstr "Peidiwch â rhoi byrfoddau heblaw am rai a ddefnyddir mewn gwirionedd, fel arall gadewch yn wag. Defnyddir enw byr neu hir yn y URL - peidiwch â phoeni am dorri URLs drwy ailenwi, gan fod yr hanes yn cael ei ddefnyddio i ailgyfeirio"
msgid "Only requests made using {{site_name}} are shown."
-msgstr ""
+msgstr "Dim ond ceisiadau a wnaed gan ddefnyddio {{site_name}} a ddangosir."
msgid "Only the authority can reply to this request, and I don't recognise the address this reply was sent from"
-msgstr ""
+msgstr "Dim ond yr awdurdod a all ymateb i'r cais hwn, ac nid wyf yn adnabod y cyfeiriad o ble yr anfonwyd yr ateb hwn."
msgid "Only the authority can reply to this request, but there is no \"From\" address to check against"
-msgstr ""
+msgstr "Dim ond yr awdurdod a all ymateb i'r cais hwn, ond nid oes cyfeiriad \"O\" i wirio yn ei erbyn"
msgid "Or search in their website for this information."
-msgstr ""
+msgstr "Neu chwilio yn eu gwefan am y wybodaeth hon."
msgid "Original request sent"
-msgstr ""
+msgstr " Anfonwyd y cais gwreiddiol"
msgid "Other:"
-msgstr ""
+msgstr "Arall:"
msgid "Outgoing message"
-msgstr ""
+msgstr "Neges sy'n mynd allan"
msgid "OutgoingMessage|Body"
-msgstr ""
+msgstr "OutgoingMessage|Corff"
msgid "OutgoingMessage|Last sent at"
-msgstr ""
+msgstr "OutgoingMessage|Anfonwyd ddiwethaf am"
msgid "OutgoingMessage|Message type"
-msgstr ""
+msgstr "OutgoingMessage|Math o neges"
msgid "OutgoingMessage|Prominence"
-msgstr ""
+msgstr "OutgoingMessage|Amlygrwydd"
msgid "OutgoingMessage|Prominence reason"
-msgstr ""
+msgstr "OutgoingMessage|Rheswm amlygrwydd"
msgid "OutgoingMessage|Status"
-msgstr ""
+msgstr "OutgoingMessage|Statws"
msgid "OutgoingMessage|What doing"
-msgstr ""
+msgstr "OutgoingMessage|Beth sy'n digwydd"
msgid "Partially successful."
-msgstr ""
+msgstr "Rhannol lwyddiannus."
msgid "Password is not correct"
-msgstr ""
+msgstr "Nid yw'r cyfrinair yn gywir"
msgid "Password:"
msgstr "Cyfrinair"
@@ -1492,496 +1507,499 @@ msgid "Password: (again)"
msgstr "Cyfrinair: (eto)"
msgid "Paste this link into emails, tweets, and anywhere else:"
-msgstr ""
+msgstr "Gludwch y ddolen hon i e-bost, trydariadau, ac unrhyw le arall:"
msgid "People"
-msgstr ""
+msgstr "Pobl"
msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr ""
+msgstr "Pobl {{start_count}} i {{end_count}} o {{total_count}} "
msgid "Percentage of requests that are overdue"
-msgstr ""
+msgstr "Canran y ceisiadau sy'n hwyr"
msgid "Percentage of total requests"
-msgstr ""
+msgstr "Canran cyfanswm y ceisiadau"
msgid "Photo of you:"
-msgstr ""
+msgstr "Llun ohonoch:"
msgid "Plans and administrative measures that affect these matters"
-msgstr ""
+msgstr "Cynlluniau a mesurau gweinyddol sy'n effeithio ar y materion hyn"
msgid "Play the request categorisation game"
-msgstr ""
+msgstr "Chwaraewch y gêm categoreiddio cais"
msgid "Play the request categorisation game!"
-msgstr ""
+msgstr "Chwaraewch y gêm categoreiddio cais!"
msgid "Please"
-msgstr ""
+msgstr "Os gwelwch yn dda"
msgid "Please <a href=\"{{url}}\">contact us</a> if you have any questions."
-msgstr ""
+msgstr "<a href=\"{{url}}\">Cysylltwch â ni</a> os oes gennych gwestiynau."
msgid "Please <a href=\"{{url}}\">get in touch</a> with us so we can fix it."
-msgstr ""
+msgstr "<a href=\"{{url}}\">Cysylltwch â ni</a> gyda ni fel y gallwn ei drwsio."
msgid "Please <strong>answer the question above</strong> so we know whether the "
-msgstr ""
+msgstr "<strong>Atebwch y cwestiwn uchod </strong> i ni gael gwybod a oedd y "
msgid "Please <strong>go to the following requests</strong>, and let us\\n know if there was information in the recent responses to them."
-msgstr ""
+msgstr "<strong>Ewch i'r ceisiadau canlynol </strong>, a gadewch i ni wybod a oedd gwybodaeth yn yr ymatebion diweddar iddynt."
msgid "Please <strong>only</strong> write messages directly relating to your request {{request_link}}. If you would like to ask for information that was not in your original request, then <a href=\"{{new_request_link}}\">file a new request</a>."
-msgstr ""
+msgstr "Ysgrifennwch negeseuon sy'n ymwneud yn uniongyrchol â'ch cais {{request_link}} <strong>yn unig</strong>. Os hoffech chi ofyn am wybodaeth nad oedd yn eich cais gwreiddiol yna <a ffeil href=\"{{new_request_link}}\">gwnewch gais newydd </a>."
msgid "Please ask for environmental information only"
-msgstr ""
+msgstr "Gofynnwch am wybodaeth amgylcheddol yn unig"
msgid "Please check the URL (i.e. the long code of letters and numbers) is copied\\ncorrectly from your email."
-msgstr ""
+msgstr "Gwiriwch fod yr URL (hy y côd hir o lythrennau a rhifau) wedi'i gopio'n gywir p'ch e-bost."
msgid "Please choose a file containing your photo."
-msgstr ""
+msgstr "Dewiswch ffeil sy'n cynnwys eich llun."
msgid "Please choose a reason"
-msgstr ""
+msgstr "Dewiswch reswm"
msgid "Please choose what sort of reply you are making."
-msgstr ""
+msgstr "Dewiswch pa fath o ateb yr ydych yn ei wneud."
msgid "Please choose whether or not you got some of the information that you wanted."
-msgstr ""
+msgstr "Dewiswch p'un a gawsoch rywfaint o'r wybodaeth a pedd arnoch ei eisiau."
msgid "Please click on the link below to cancel or alter these emails."
-msgstr ""
+msgstr "Cliciwch ar y ddolen isod i ganslo neu newid negeseuon yr e-bost hyn."
msgid "Please click on the link below to confirm that you want to \\nchange the email address that you use for {{site_name}}\\nfrom {{old_email}} to {{new_email}}"
-msgstr ""
+msgstr "Cliciwch ar y ddolen isod i gadarnhau eich bod am newid y cyfeiriad e-bost rydych yn ei ddefnyddio ar gyfer {{site_name}} o {{old_email}} i {{new_email}} "
msgid "Please click on the link below to confirm your email address."
-msgstr ""
+msgstr "Cliciwch ar y ddolen isod i gadarnhau eich cyfeiriad e-bost."
msgid "Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway."
-msgstr ""
+msgstr "Disgrifiwch y cais ymhellach yn y pwnc. Nid oes angen i ddweud ei fod yn gais Rhyddid Gwybodaeth, byddwn yn ychwanegu hynny beth bynnag."
msgid "Please don't upload offensive pictures. We will take down images\\n that we consider inappropriate."
-msgstr ""
+msgstr "Peidiwch â llwytho lluniau sarhaus os gwelwch yn dda. Byddwn yn tynnu delweddau sy yn ein barn yn amhriodol."
msgid "Please enable \"cookies\" to carry on"
-msgstr ""
+msgstr "Galluogwch 'gwcis' i barhau"
msgid "Please enter a password"
-msgstr ""
+msgstr "Rhowch gyfrinair"
msgid "Please enter a subject"
-msgstr ""
+msgstr "Rhowch bwnc"
msgid "Please enter a summary of your request"
-msgstr ""
+msgstr "Rhowch grynodeb o'ch cais"
msgid "Please enter a valid email address"
-msgstr ""
+msgstr "Rhowch gyfeiriad e-bost dilys"
msgid "Please enter the message you want to send"
-msgstr ""
+msgstr "Rhowch y neges rydych am ei hanfon"
msgid "Please enter the same password twice"
-msgstr ""
+msgstr "Rhowch yr un cyfrinair ddwywaith os gwelwch yn dda, "
msgid "Please enter your annotation"
-msgstr ""
+msgstr "Rhowch eich nodiadau"
msgid "Please enter your email address"
-msgstr ""
+msgstr "Rhowch eich cyfeiriad e-bost"
msgid "Please enter your follow up message"
-msgstr ""
+msgstr "Rhowch eich neges ddilynol"
msgid "Please enter your letter requesting information"
-msgstr ""
+msgstr "Rhowch eich llythyr yn gofyn am wybodaeth"
msgid "Please enter your name"
-msgstr ""
+msgstr "Rhowch eich enw"
msgid "Please enter your name, not your email address, in the name field."
-msgstr ""
+msgstr "Rhowch eich enw, dim yn eich cyfeiriad e-bost, ond yn y maes enw."
msgid "Please enter your new email address"
-msgstr ""
+msgstr "Rhowch eich cyfeiriad e-bost newydd"
msgid "Please enter your old email address"
-msgstr ""
+msgstr "Rhowch eich hen gyfeiriad e-bost"
msgid "Please enter your password"
-msgstr ""
+msgstr "Rhowch eich cyfrinair"
msgid "Please give details explaining why you want a review"
-msgstr ""
+msgstr "Rhowch fanylion yn esbonio pam eich bod am gael adolygiad"
msgid "Please keep it shorter than 500 characters"
-msgstr ""
+msgstr "Cadwch hi'n fyrrach na 500 o nodau"
msgid "Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence."
-msgstr ""
+msgstr "Cadwch y crynodeb yn fyr, fel pe bai'n testun e-bost. Gallwch ddefnyddio ymadrodd, yn hytrach na brawddeg lawn."
msgid "Please only request information that comes under those categories, <strong>do not waste your\\n time</strong> or the time of the public authority by requesting unrelated information."
-msgstr ""
+msgstr "Dim ond gwybodaeth sy'n dod o dan y categorïau hynny ddylech chi ofyn amdano, <strong>peidiwch â gwastraffu eich amser</strong> nac amser yr awdurdod cyhoeddus drwy ofyn am wybodaeth amherthnasol."
msgid "Please pass this on to the person who conducts Freedom of Information reviews."
-msgstr ""
+msgstr "Trosglwyddwch hwn i'r person sy'n cynnal adolygiadau Rhyddid Gwybodaeth os gwelwch yn dda."
msgid "Please select each of these requests in turn, and <strong>let everyone know</strong>\\nif they are successful yet or not."
-msgstr ""
+msgstr "Dewiswch bob un o'r ceisiadau hyn yn ei dro, a <strong>gadewch i bawb wybod </strong> a ydyn nhw wedi bod yn llwyddiannus eto, neu beidio."
msgid "Please sign at the bottom with your name, or alter the \"{{signoff}}\" signature"
-msgstr ""
+msgstr "Llofnodwch ar y gwaelod gyda'ch enw, neu newidiwch y llofnod \"{{signoff}}\""
msgid "Please sign in as "
-msgstr ""
+msgstr "Mewngofnodwch fel "
msgid "Please sign in or make a new account."
-msgstr ""
+msgstr "Mewngofnodwch neu agorwch gyfrif newydd."
msgid "Please type a message and/or choose a file containing your response."
-msgstr ""
+msgstr "Teipiwch neges a/neu ddewis ffeil sy'n cynnwys eich ymateb."
msgid "Please use this email address for all replies to this request:"
-msgstr ""
+msgstr "Defnyddiwch y cyfeiriad e-bost hwn ar gyfer yr holl atebion i'r cais hwn:"
msgid "Please write a summary with some text in it"
-msgstr ""
+msgstr "Ysgrifennwch grynodeb gyda rhywfaint o destun ynddo"
msgid "Please write the summary using a mixture of capital and lower case letters. This makes it easier for others to read."
-msgstr ""
+msgstr "Ysgrifennwch y crynodeb gan ddefnyddio cymysgedd o brif lythrennau a llythrennau bach. Mae hyn yn ei wneud yn haws i eraill ei ddarllen."
msgid "Please write your annotation using a mixture of capital and lower case letters. This makes it easier for others to read."
-msgstr ""
+msgstr "Ysgrifennwch eich anodiad gan ddefnyddio cymysgedd o brif lythrennau a llythrennau bach. Mae hyn yn ei wneud yn haws i eraill ei ddarllen."
msgid "Please write your follow up message containing the necessary clarifications below."
-msgstr ""
+msgstr "Ysgrifennwch eich neges ddilynol gan gynnwys yr esboniadau angenrheidiol isod."
msgid "Please write your message using a mixture of capital and lower case letters. This makes it easier for others to read."
-msgstr ""
+msgstr "Ysgrifennwch eich neges gan ddefnyddio cymysgedd o brif lythrennau a llythrennau bach. Mae hyn yn ei wneud yn haws i eraill ei ddarllen."
msgid "Point to <strong>related information</strong>, campaigns or forums which may be useful."
-msgstr ""
+msgstr "Pwyntiwch at <strong>wybodaeth berthnasol</strong>, ymgyrchoedd neu fforymau a all fod yn ddefnyddiol."
msgid "Possibly related requests:"
-msgstr ""
+msgstr "Ceisiadau a allai fod yn gysylltiedig:"
msgid "Post annotation"
-msgstr ""
+msgstr "Anodiad i bost"
msgid "Post redirect"
-msgstr ""
+msgstr "Post wedi'i ailgyfeirio"
msgid "PostRedirect|Circumstance"
-msgstr ""
+msgstr "PostRedirect|Amgylchiadau"
msgid "PostRedirect|Email token"
-msgstr ""
+msgstr "PostRedirect|Tocyn E-bost"
msgid "PostRedirect|Post params yaml"
-msgstr ""
+msgstr "PostRedirect|Params yaml post"
msgid "PostRedirect|Reason params yaml"
-msgstr ""
+msgstr "PostRedirect|Params rheswm yaml"
msgid "PostRedirect|Token"
-msgstr ""
+msgstr "PostRedirect|Tocyn"
msgid "PostRedirect|Uri"
-msgstr ""
+msgstr "PostRedirect|Uri"
msgid "Posted on {{date}} by {{author}}"
-msgstr ""
+msgstr "Postiwyd ar {{date}} gan {{author}}"
msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
-msgstr ""
+msgstr "Wedi ei yrru gan <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
msgid "Prev"
-msgstr ""
+msgstr "Blaenorol"
msgid "Preview follow up to '"
-msgstr ""
+msgstr "Rhagolwg dilyniant i '"
msgid "Preview new annotation on '{{info_request_title}}'"
-msgstr ""
+msgstr "Rhagolwg ar anodiad newydd ar '{{info_request_title}}'"
msgid "Preview your annotation"
-msgstr ""
+msgstr "Bwriwch ragolwg ar eich anodi"
msgid "Preview your message"
-msgstr ""
+msgstr "Bwriwch ragolwg ar eich neges"
msgid "Preview your public request"
-msgstr "Rhagolwg o'ch cais cyhoeddus"
+msgstr "Rhagolygwch eich cais cyhoeddus"
msgid "Profile photo"
-msgstr ""
+msgstr "Photo proffil"
msgid "ProfilePhoto|Data"
-msgstr ""
+msgstr "ProfilePhoto|Data"
msgid "ProfilePhoto|Draft"
-msgstr ""
+msgstr "ProfilePhoto|Drafft"
msgid "Public Bodies"
-msgstr ""
+msgstr "Cyrff Cyhoeddus"
msgid "Public Body Statistics"
-msgstr ""
+msgstr "Ystadegau Cyrff Cyhoeddus"
msgid "Public authorities"
-msgstr ""
+msgstr "Awdurdodau cyhoeddus"
msgid "Public authorities - {{description}}"
-msgstr ""
+msgstr "Awdurdodau cyhoeddus - {{description}}"
msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr ""
+msgstr "Awdurdodau cyhoeddus {{start_count}} i {{end_count}} o {{total_count}}"
msgid "Public authority – {{name}}"
-msgstr ""
+msgstr "Awdurdod cyhoeddus – {{name}}"
msgid "Public bodies that most frequently replied with \"Not Held\""
-msgstr ""
+msgstr "Cyrff cyhoeddus sy'n ateb amlaf â \"Nis cedwir\""
msgid "Public bodies with most overdue requests"
-msgstr ""
+msgstr "Cyrff cyhoeddus â'r nifer fwyaf o geisiadau hwyr"
msgid "Public bodies with the fewest successful requests"
-msgstr ""
+msgstr "Cyrff cyhoeddus gyda'r nifer leiaf o geisiadau llwyddiannus"
msgid "Public bodies with the most requests"
-msgstr ""
+msgstr "Cyrff cyhoeddus â'r nifer fwyaf o geisiadau"
msgid "Public bodies with the most successful requests"
-msgstr ""
+msgstr "Cyrff cyhoeddus â'r nifer fwyaf o geisiadau llwyddiannus"
msgid "Public body"
-msgstr ""
+msgstr "Corff cyhoeddus"
msgid "Public notes"
-msgstr ""
+msgstr "Nodiadau cyhoeddus"
msgid "Public page"
-msgstr ""
+msgstr "Tudalen gyhoeddus"
msgid "Public page not available"
-msgstr ""
+msgstr "Tudalen gyhoeddus ddim ar gael"
msgid "PublicBody|Api key"
-msgstr ""
+msgstr "PublicBody|Allwedd api"
msgid "PublicBody|Disclosure log"
-msgstr ""
+msgstr "PublicBody|Cofnod datgeliadau"
msgid "PublicBody|First letter"
-msgstr ""
+msgstr "PublicBody|Llythyr cyntaf"
msgid "PublicBody|Home page"
-msgstr ""
+msgstr "PublicBody|Hafan"
msgid "PublicBody|Info requests count"
-msgstr ""
+msgstr "PublicBody|Cyfrif ceisiadau gwybodaeth"
msgid "PublicBody|Info requests not held count"
-msgstr ""
+msgstr "PublicBody|Cyfrif ceisiadau gwybodaeth nas cedwir"
msgid "PublicBody|Info requests overdue count"
-msgstr ""
+msgstr "PublicBody|Cyfrif ceisiadau gwybodaeth hwyr"
msgid "PublicBody|Info requests successful count"
-msgstr ""
+msgstr "PublicBody|Cyfrif ceisiadau gwybodaeth llwyddiannus"
+
+msgid "PublicBody|Info requests visible classified count"
+msgstr "PublicBody|Cyfrif ceisiadau gweladwy wedi eu dosbarthu"
msgid "PublicBody|Last edit comment"
-msgstr ""
+msgstr "PublicBody|Sylw ar y golygiad diwethaf"
msgid "PublicBody|Last edit editor"
-msgstr ""
+msgstr "PublicBody|Golygydd golygiad diwethaf"
msgid "PublicBody|Name"
-msgstr ""
+msgstr "PublicBody|Enw"
msgid "PublicBody|Notes"
-msgstr ""
+msgstr "PublicBody|Nodiadau"
msgid "PublicBody|Publication scheme"
-msgstr ""
+msgstr "PublicBody|Cynllun cyhoeddi"
msgid "PublicBody|Request email"
-msgstr ""
+msgstr "PublicBody|Ceisiwch ebost"
msgid "PublicBody|Short name"
-msgstr ""
+msgstr "PublicBody|Enw byr"
msgid "PublicBody|Url name"
-msgstr ""
+msgstr "PublicBody|Enw Url"
msgid "PublicBody|Version"
-msgstr ""
+msgstr "PublicBody|Fersiwn"
msgid "Publication scheme"
-msgstr ""
+msgstr "Cynllun cyhoeddi"
msgid "Publication scheme URL"
-msgstr ""
+msgstr "URL y cynllun cyhoeddi"
msgid "Purge request"
-msgstr ""
+msgstr "Cliriwch gais"
msgid "PurgeRequest|Model"
-msgstr ""
+msgstr "PurgeRequest|Model"
msgid "PurgeRequest|Url"
-msgstr ""
+msgstr "PurgeRequest|Url"
msgid "RSS feed"
-msgstr ""
+msgstr "Porthiant RSS"
msgid "RSS feed of updates"
-msgstr ""
+msgstr "Porthiant RSS o ddiweddariadau"
msgid "Re-edit this annotation"
-msgstr ""
+msgstr "Ail-golygu yr anodiad hwn"
msgid "Re-edit this message"
-msgstr ""
+msgstr "Ail-olygu'r neges hon"
msgid "Read about <a href=\"{{advanced_search_url}}\">advanced search operators</a>, such as proximity and wildcards."
-msgstr ""
+msgstr "Darllenwch am <a href=\"{{advanced_search_url}}\">weithredwyr chwilio manwl</a>, megis agosrwydd a gwylltnodau."
msgid "Read blog"
msgstr "Darllen blog"
msgid "Received an error message, such as delivery failure."
-msgstr ""
+msgstr "Derbyniwyd neges wall, e.e. methiant cyflwyno."
msgid "Recently described results first"
-msgstr ""
+msgstr "Canlyniadau a ddisgrifiwyd yn ddiweddar yn gyntaf"
msgid "Refused."
-msgstr ""
+msgstr "Gwrthodwyd."
msgid "Remember me</label> (keeps you signed in longer;\\n do not use on a public computer) "
msgstr "Cofiwch fi</label> (yn eich cadw wedi eich mewngofnodi yn hwy; peidiwch â defnyddio hwn ar gyfrifiadur cyhoeddus)"
msgid "Report abuse"
-msgstr ""
+msgstr "Anfonwch adroddiad camddefnydd"
msgid "Report an offensive or unsuitable request"
-msgstr ""
+msgstr "Rhoi gwybod am gais tramgwyddus neu anaddas"
msgid "Report request"
-msgstr ""
+msgstr "Rhoi gwybod am gais"
msgid "Report this request"
-msgstr ""
+msgstr "Rhoi gwybod am y cais hwn"
msgid "Reported for administrator attention."
-msgstr ""
+msgstr "Adroddwyd am sylw gweinyddwr."
msgid "Request an internal review"
-msgstr ""
+msgstr "Gofyn am adolygiad mewnol"
msgid "Request an internal review from {{person_or_body}}"
-msgstr ""
+msgstr "Gofyn am adolygiad mewnol o {{person_or_body}}"
msgid "Request email"
-msgstr ""
+msgstr "Ceisiwch ebost"
msgid "Request has been removed"
-msgstr ""
+msgstr "Cais wedi cael ei dynnu"
msgid "Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "Cais wedi ei anfon i {{public_body_name}} gan {{info_request_user}} ar {{date}}."
msgid "Request to {{public_body_name}} by {{info_request_user}}. Annotated by {{event_comment_user}} on {{date}}."
-msgstr ""
+msgstr "Cais i {{public_body_name}} gan {{info_request_user}}. Wedi ei anodi gan {{event_comment_user}} ar {{date}}."
msgid "Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
-msgstr ""
+msgstr "Gofynnwyd amdani o {{public_body_name}} gan {{info_request_user}} ar {{date}}"
msgid "Requested on {{date}}"
-msgstr ""
+msgstr "Gofynnwyd amdani ar {{date}}"
msgid "Requests are considered overdue if they are in the 'Overdue' or 'Very Overdue' states."
-msgstr ""
+msgstr "Ystyrir bod ceisiadau yn hwyr os ydynt yn 'Hwyr' neu'n 'Hwyr Iawn'."
msgid "Requests are considered successful if they were classified as either 'Successful' or 'Partially Successful'."
-msgstr ""
+msgstr "Ystyrir bod ceisiadau yn llwyddiannus os ydynt yn cael eu dosbarthu fel naill ai 'llwyddiannus' neu'n 'rhannol llwyddiannus'."
msgid "Requests for personal information and vexatious requests are not considered valid for FOI purposes (<a href=\"/help/about\">read more</a>)."
-msgstr ""
+msgstr "Nid ystyrir bod ceisiadau am wybodaeth bersonol a cheisiadau blinderus yn ddilys at ddibenion Rhyddid Gwybodaeth (<a href=\"/help/about\">darllenwch ragor</a>)."
msgid "Requests or responses matching your saved search"
-msgstr ""
+msgstr "Ceisiadau neu ymatebion sy'n cyfateb i'r chwiliad a gadwyd gennych"
msgid "Requests similar to '{{request_title}}'"
-msgstr ""
+msgstr "Ceisiadau tebyg i '{{request_title}}'"
msgid "Requests similar to '{{request_title}}' (page {{page}})"
-msgstr ""
+msgstr "Ceisiadau tebyg i '{{request_title}}' (page{{page}})"
msgid "Respond by email"
-msgstr ""
+msgstr "Ymateb drwy e-bost"
msgid "Respond to request"
-msgstr ""
+msgstr "Ymateb i gais"
msgid "Respond to the FOI request"
-msgstr ""
+msgstr "Ymateb i'r cais Rhyddid Gwybodaeth"
msgid "Respond using the web"
-msgstr ""
+msgstr "Ymateb trwy ddefnyddio'r we"
msgid "Response"
-msgstr ""
+msgstr "Ymateb"
msgid "Response from a public authority"
-msgstr ""
+msgstr "Ymateb gan awdurdod cyhoeddus"
msgid "Response to '{{title}}'"
-msgstr ""
+msgstr "Ymateb i '{{title}}'"
msgid "Response to this request is <strong>delayed</strong>."
-msgstr ""
+msgstr "Mae'r ymateb i'r cais hwn <strong>wedi cael ei oedi</strong>."
msgid "Response to this request is <strong>long overdue</strong>."
-msgstr ""
+msgstr "Mae'r ymateb i'r cais hwn yn <strong>hwyr iawn</strong>."
msgid "Response to your request"
-msgstr ""
+msgstr "Ymateb i'ch cais"
msgid "Response:"
-msgstr ""
+msgstr "Ymateb:"
msgid "Restrict to"
-msgstr ""
+msgstr "Cyfyngu i"
msgid "Results page {{page_number}}"
-msgstr ""
+msgstr "Tudalen canlyniadau {{page_number}}"
msgid "Save"
-msgstr ""
+msgstr "Cadw"
msgid "Search"
msgstr "Chwilio"
msgid "Search Freedom of Information requests, public authorities and users"
-msgstr "Chwilio Rhyddid Gwybodaeth o geisiadau, awdurdodau cyhoeddus a defnyddwyr"
+msgstr "Chwilio ceisiadau Rhyddid Gwybodaeth, awdurdodau cyhoeddus a defnyddwyr"
msgid "Search contributions by this person"
-msgstr ""
+msgstr "Chwilio cyfraniadau gan y person hwn"
msgid "Search for words in:"
-msgstr ""
+msgstr "Chwilio am eiriau yn:"
msgid "Search in"
-msgstr ""
+msgstr "Chwilio mewn"
msgid "Search over<br/>\\n <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\\n <strong>{{number_of_authorities}} authorities</strong>"
msgstr ""
@@ -2030,13 +2048,13 @@ msgid "Send follow up to '{{title}}'"
msgstr ""
msgid "Send message"
-msgstr ""
+msgstr "Anfon neges"
msgid "Send message to "
-msgstr ""
+msgstr "Anfon neges at"
msgid "Send request"
-msgstr ""
+msgstr "Anfon cais"
msgid "Set your profile photo"
msgstr ""
@@ -2288,7 +2306,7 @@ msgid "The search index is currently offline, so we can't show the Freedom of In
msgstr ""
msgid "The {{site_name}} team."
-msgstr ""
+msgstr "Tîm {{site_name}}."
msgid "Then you can cancel the alert."
msgstr ""
@@ -2734,18 +2752,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3203,7 +3215,7 @@ msgid "at"
msgstr ""
msgid "authorities"
-msgstr ""
+msgstr "awdurdodau"
msgid "awaiting a response"
msgstr ""
@@ -3370,7 +3382,7 @@ msgid "the requester"
msgstr ""
msgid "the {{site_name}} team"
-msgstr ""
+msgstr "tîm {{site_name}}"
msgid "to read"
msgstr ""
@@ -3449,10 +3461,7 @@ msgid "{{info_request_user_name}} only:"
msgstr ""
msgid "{{law_used_full}} request - {{title}}"
-msgstr ""
-
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
+msgstr "Cais {{law_used_full}} - {{title}}"
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
@@ -3473,7 +3482,7 @@ msgid "{{public_body_link}} was sent a request about"
msgstr ""
msgid "{{public_body_name}} only:"
-msgstr ""
+msgstr "{{public_body_name}} yn unig:"
msgid "{{public_body}} has asked you to explain part of your {{law_used}} request."
msgstr ""
diff --git a/locale/de/app.po b/locale/de/app.po
index e311585e9..c090a066f 100644
--- a/locale/de/app.po
+++ b/locale/de/app.po
@@ -11,10 +11,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/alaveteli/language/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -849,15 +849,24 @@ msgstr ""
msgid "Follow this request"
msgstr "Dieser Anfrage folgen"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Follow-up"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Nachfrage durch Anfragensteller gesendet"
msgid "Follow up messages to existing requests are sent to "
msgstr "Nachfragen bzgl. bestehender anfragen werden weitergeleitet an:"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Nachfragen und Antworten auf diese Anfrage wurden gestoppt, um Spam vorzubeugen. Bitte <a href=\"{{url}}\">kontaktieren Sie uns</a> falls Sie {{user_link}} sind und eine Nachfrage senden müssen."
@@ -1847,6 +1856,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2794,18 +2806,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "BenutzerIÜber mich"
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "BenutzerIEmail"
@@ -3515,9 +3521,6 @@ msgstr "Nur {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/en/app.po b/locale/en/app.po
index 8527db557..43e01727a 100644
--- a/locale/en/app.po
+++ b/locale/en/app.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
"PO-Revision-Date: 2011-02-24 07:11-0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -806,15 +806,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1789,6 +1798,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2718,18 +2730,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3419,9 +3425,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/en_IE/app.po b/locale/en_IE/app.po
index 8309c3be3..28ec39424 100644
--- a/locale/en_IE/app.po
+++ b/locale/en_IE/app.po
@@ -10,10 +10,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: English (Ireland) (http://www.transifex.com/projects/p/alaveteli/language/en_IE/)\n"
"Language: en_IE\n"
"MIME-Version: 1.0\n"
@@ -810,15 +810,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1793,6 +1802,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2722,18 +2734,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3423,9 +3429,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/es/app.po b/locale/es/app.po
index 37ac7e389..88140765b 100644
--- a/locale/es/app.po
+++ b/locale/es/app.po
@@ -14,10 +14,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/alaveteli/language/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
@@ -900,15 +900,24 @@ msgstr "Seguir a esta persona"
msgid "Follow this request"
msgstr "Seguir esta solicitud"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Seguimiento"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Respuesta enviada por el creador de la solicitud"
msgid "Follow up messages to existing requests are sent to "
msgstr "Las respuestas a solicitudes existentes se envían a "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Se han bloqueado nuevas respuestas a esta solicitud para prevenir spam. Por favor <a href=\"{{url}}\">contáctanos</a> si tú eres {{user_link}} y necesitas responder."
@@ -1940,6 +1949,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2927,18 +2939,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr "User|Address"
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr "User|Dob"
-
msgid "User|Email"
msgstr "User|Email"
@@ -3686,9 +3692,6 @@ msgstr "Sólo {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "solicitud {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "solicitud {{law_used_full}} - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "Solicitudes de información a {{public_body}}"
diff --git a/locale/eu/app.po b/locale/eu/app.po
index f546085cd..7772b517a 100644
--- a/locale/eu/app.po
+++ b/locale/eu/app.po
@@ -9,10 +9,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/alaveteli/language/eu/)\n"
"Language: eu\n"
"MIME-Version: 1.0\n"
@@ -841,15 +841,24 @@ msgstr ""
msgid "Follow this request"
msgstr "Jarraitu eskabide honi"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Jarraipena"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Eskabidea sortu zuenak bidalitako erantzuna"
msgid "Follow up messages to existing requests are sent to "
msgstr "Dauden eskabideen erantzunak hona bidaltzen dira:"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Eskabide honen erantzun berriak blokeatu dira, spama saihesteko. Mesedez, jar zaitez gurekin<a href=\"{{url}}\">harremanetan</a> {{user_link}} baldin bazara eta erantzun behar baduzu."
@@ -1836,6 +1845,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2786,18 +2798,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "User|Email"
@@ -3507,9 +3513,6 @@ msgstr "{{info_request_user_name}} bakarrik:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "{{law_used_full}} eskabidea - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} eskabidea - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/fi/app.po b/locale/fi/app.po
index e57e424ff..49729aeba 100644
--- a/locale/fi/app.po
+++ b/locale/fi/app.po
@@ -10,10 +10,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/alaveteli/language/fi/)\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
@@ -810,15 +810,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1793,6 +1802,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2722,18 +2734,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3423,9 +3429,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/fr/app.po b/locale/fr/app.po
index 2c6207e36..388041060 100644
--- a/locale/fr/app.po
+++ b/locale/fr/app.po
@@ -29,10 +29,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: French (http://www.transifex.com/projects/p/alaveteli/language/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -833,15 +833,24 @@ msgstr "Suivre cette personne "
msgid "Follow this request"
msgstr "Suivre cette demande"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Suivre"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Suivre les messages envoyés par le demandeur"
msgid "Follow up messages to existing requests are sent to "
msgstr "Le suivi des demandes existantes est envoyé à"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Les suivis et les nouvelles réponses à cette demande ont été arrêtés afin de prémunir de spams. Veuillez <a href=\"{{url}}\">Nous contacter </a> si vous êtes {{user_link}} et avez besoin d'envoyer un suivi."
@@ -1816,6 +1825,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2745,18 +2757,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr "User|Address"
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr "User|Dob"
-
msgid "User|Email"
msgstr "User|Email"
@@ -3446,9 +3452,6 @@ msgstr "{{info_request_user_name}} uniquement:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "{{law_used_full}} demande - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} demande - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} demandes à {{public_body}}"
diff --git a/locale/fr_CA/app.po b/locale/fr_CA/app.po
index 573323f23..d869db194 100644
--- a/locale/fr_CA/app.po
+++ b/locale/fr_CA/app.po
@@ -17,10 +17,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: French (Canada) (http://www.transifex.com/projects/p/alaveteli/language/fr_CA/)\n"
"Language: fr_CA\n"
"MIME-Version: 1.0\n"
@@ -29,10 +29,10 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid " This will appear on your {{site_name}} profile, to make it\\n easier for others to get involved with what you're doing."
-msgstr "Ceci apparaîtra sur votre profil {{site_name}} afin que les autres utilisateurs //n puissent interagir avec vous."
+msgstr "Ceci apparaîtra sur votre profil {{site_name}} afin que les autres utilisateurs \\n puissent interagir avec vous."
msgid " (<strong>no ranty</strong> politics, read our <a href=\"{{url}}\">moderation policy</a>)"
-msgstr "(<strong>aucune garantie</strong> politique. Merci de lire notre <a href=\"{{url}}\">politique de modération</a>)"
+msgstr "(Pas de diatribe politique et autres propos agressifs. Merci de lire notre <a href=\"{{url}}\">politique sur les annotations</a>)"
msgid " (<strong>patience</strong>, especially for large files, it may take a while!)"
msgstr "(<strong>Merci de votre patience!</strong> Les fichiers volumineux peuvent prendre un certain moment à charger.)"
@@ -55,7 +55,7 @@ msgid " <strong>Privacy note:</strong> Your email address will be given to"
msgstr " <strong>Avis de confidentialité :</strong> Votre adresse courriel sera communiquée à"
msgid " <strong>Summarise</strong> the content of any information returned. "
-msgstr " <strong>Résumez</strong>le contenu de toute information transmise. "
+msgstr " <strong>Résumez</strong> le contenu de toute information transmise. "
msgid " Advise on how to <strong>best clarify</strong> the request."
msgstr "Indiquez comment rendre la demande <strong>plus claire</strong>."
@@ -67,19 +67,19 @@ msgid " If you know the address to use, then please <a href=\"{{url}}\">send it
msgstr "Si vous connaissez l'adresse à utiliser, merci de <a href=\"{{url}}\">nous la communiquer</a>.\\n Il est possible que vous trouviez l'adresse sur leur site web ou en la demandant par téléphone. "
msgid " Include relevant links, such as to a campaign page, your blog or a\\n twitter account. They will be made clickable. \\n e.g."
-msgstr "Incluez les liens pertinents, comme le site web de la campagne, votre blog ou un \\n compte twitter. Les liens seront cliquables. \\n ex:"
+msgstr "Incluez les liens pertinents, comme le site web de la campagne, votre blog ou un \\n compte twitter. Ex:"
msgid " Link to the information requested, if it is <strong>already available</strong> on the Internet. "
-msgstr "Lien vers les informations demandées, si elle sont <strong>déjà disponibles</strong> sur Internet. "
+msgstr "Pointer des informations <strong>déjà disponibles</strong> sur Internet. "
msgid " Offer better ways of <strong>wording the request</strong> to get the information. "
-msgstr " Proposez de meilleures <strong>formulations</strong> pour accéder à ces informations. "
+msgstr " Proposer de meilleures <strong>formulations</strong> pour accéder à ces informations. "
msgid " Say how you've <strong>used the information</strong>, with links if possible."
-msgstr " Dites-nous comment vous avez <strong>utilisé ces informations</strong>, à l'aide de liens si possible. "
+msgstr " Dites-nous comment vous avez <strong>utilisé ces informations</strong>, si possible à l'aide de liens. "
msgid " Suggest <strong>where else</strong> the requester might find the information. "
-msgstr " Suggérez <strong>un autre endroit</strong> où l'utilisateur pourrait trouver ces informations. "
+msgstr " Suggérer <strong>un autre endroit</strong> où l'utilisateur pourrait trouver ces informations. "
msgid " What are you investigating using Freedom of Information? "
msgstr "Que recherchez-vous en utilisant les demandes d'accès à l'information?"
@@ -103,7 +103,7 @@ msgid "\"Hello! We have an <a href=\\\"/help/alaveteli?country_name=#{CGI.escap
msgstr "*** \"Bonjour! Nous avons <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">un message important </a> pour les visiteurs à l'extérieur de {{country_name}}\""
msgid "'Crime statistics by ward level for Wales'"
-msgstr "\"Statistiques sur la criminalité par district au Pays des Merveilles'"
+msgstr "'Document statistique sur la criminalité de 2001 à 2013'"
msgid "'Pollution levels over time for the River Tyne'"
msgstr "\"Évolution des niveaux de pollution de la rivière bleue\""
@@ -133,13 +133,13 @@ msgid "2. Ask for Information"
msgstr "2. Demandez une information"
msgid "3. Now check your request"
-msgstr "3. Vérifiez maintenant votre demande"
+msgstr "3. Vérifiez votre demande"
msgid "<a href=\"{{browse_url}}\">Browse all</a> or <a href=\"{{add_url}}\">ask us to add one</a>."
-msgstr "****<a href=\"{{browse_url}}\">Voir tout</a> ou <a href=\"{{add_url}}\"> demandez nous d'ajouter une</a>."
+msgstr "<a href=\"{{browse_url}}\">Voir tous les organismes</a>."
msgid "<a href=\"{{url}}\">Add an annotation</a> (to help the requester or others)"
-msgstr ""
+msgstr "<a href=\"{{url}}\">Ajouter une annotation</a> (pour aider le demandeur ou les autres)"
msgid "<a href=\"{{url}}\">Sign in</a> to change password, subscriptions and more ({{user_name}} only)"
msgstr "<a href=\"{{url}}\">Connectez-vous</a> pour modifier votre mot de passe, vos abonnements, etc. ({{user_name}} only)"
@@ -169,22 +169,22 @@ msgid "<p>Thanks for updating your profile photo.</p>\\n <p><stro
msgstr "<p>Merci d'avoir mis à jour votre photo de profil!</p>\\n<p><strong> Prochaine étape…</strong> Rédigez un texte de présentation pour votre profil!</p>"
msgid "<p>We recommend that you edit your request and remove the email address.\\n If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
-msgstr "<p>Nous vous conseillons de modifier votre demande et de retirer l'adresse courriel. \\n Si vous ne la retirez pas, l'adresse courriel sera envoyée à l'autorité publique, mais elle ne sera pas visible sur le site web.</p>"
+msgstr "<p>Nous vous conseillons de modifier votre demande et de retirer l'adresse courriel. \\n Si vous ne la retirez pas, l'adresse courriel sera envoyée à l'organisme gouvernemental, mais elle ne sera pas visible sur le site web.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p>"
msgstr "<p>Nous sommes heureux que vous ayez obtenu toute l'information demandée. Si vous souhaitez rédiger un billet au sujet de cette information ou l'utiliser d'une toute autre façon, merci d'ajouter un commentaire ci-dessous expliquant l'usage que vous en avez fait.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p><p>If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p>"
-msgstr "<p>Nous sommes heureux que vous ayez obtenu toute l'information demandée. Si vous souhaitez rédiger un billet au sujet de cette information ou l'utiliser d'une toute autre façon, merci d'ajouter un commentaire ci-dessous expliquant l'usage que vous en avez fait.</p><p>Si vous trouvez que {{site_name}} est utile, <a href=\"{{donation_url}}\">vous pouvez faire un don</a> à l'organisme sans but lucratif qui s'en charge.</p>"
+msgstr "<p>Nous sommes heureux que vous ayez obtenu toute l'information demandée. Si vous souhaitez rédiger un billet au sujet de cette information ou l'utiliser d'une toute autre façon, merci d'ajouter un commentaire ci-dessous expliquant l'usage que vous en avez fait.</p>"
msgid "<p>We're glad you got some of the information that you wanted. If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
-msgstr "<p>Nous sommes heureux que vous ayez obtenu une partie de l'information demandée. Si vous trouvez que {{site_name}} est utile, <a href=\"{{donation_url}}\">vous pouvez faire un don</a> à l'organisme sans but lucratif qui s'en charge.</p><p>Si vous souhaitez tenter d'obtenir le reste de l'information demandée, voici ce que vous pouvez faire.</p>"
+msgstr "<p>Nous sommes heureux que vous ayez obtenu une partie de l'information demandée.</p><p>Si vous souhaitez tenter d'obtenir le reste de l'information demandée, voici ce que vous pouvez faire.</p>"
msgid "<p>We're glad you got some of the information that you wanted.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
msgstr "<p>Nous sommes heureux que vous ayez obtenu une partie de l'information demandée.</p><p>Si vous souhaitez tenter d'obtenir le reste de l'information demandée, voici ce que vous pouvez faire.</p>"
msgid "<p>You do not need to include your email in the request in order to get a reply (<a href=\"{{url}}\">details</a>).</p>"
-msgstr "<p>Vous n'avez pas à inclure votre adresse courriel à la demande afin de recevoir une réponse(<a href=\"{{url}}\">details</a>).</p>"
+msgstr "<p>Vous n'avez pas à inclure votre adresse courriel à la demande afin de recevoir une réponse(<a href=\"{{url}}\">détails</a>).</p>"
msgid "<p>You do not need to include your email in the request in order to get a reply, as we will ask for it on the next screen (<a href=\"{{url}}\">details</a>).</p>"
msgstr "<p>Vous n'avez pas à inclure votre adresse courriel à la demande afin de recevoir une réponse. Nous allons vous la demander au prochain écran (<a href=\"{{url}}\">details</a>).</p>"
@@ -193,16 +193,16 @@ msgid "<p>Your request contains a <strong>postcode</strong>. Unless it directly
msgstr "<p>Votre demande contient un <strong> code postal</strong>. À moins que cela ne soit directement relié à l'information demandée, veuillez retirer toute indication d'adresse puisque ces informations <strong>apparaîtront publiquement sur Internet</strong>.</p>"
msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\\n <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\\n replied by then.</p>\\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an\\n annotation below telling people about your writing.</p>"
-msgstr "<p>Votre {{law_used_full}} demande a été <strong>envoyée</strong>!</p>\\n<p><strong>Nous vous enverrons un courriel</strong> lorsque nous recevrons une réponse, ou lorsque le délai de {{late_number_of_days}} jours calendaires accordé aux autorités sera \\n dépassé.</p>\\nSi vous souhaitez écrire au sujet de cette demande (par exemple dans un forum ou un blog), veuillez ajouter un lien vers cette page et ajouter un \\n commentaire ci-dessous pour en informer les autres utilisateurs. </p>"
+msgstr "<p>Votre demande a été <strong>envoyée</strong>!</p>\\n<p><strong>Nous vous enverrons un courriel</strong> lorsque nous recevrons une réponse ou lorsque le délai de {{late_number_of_days}} jours calendriers sera \\n écoulé.</p>\\nSi vous souhaitez écrire au sujet de cette demande (par exemple dans un forum ou un blog), veuillez ajouter un lien vers cette page et ajouter une \\n annotation (voir ci-dessous) pour en informer les autres utilisateurs.</p>"
msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
-msgstr "<p> {{site_name}} est présentement en maintenance. Vous pouvez seulement voir les demandes existantes. Vous ne pouvez en formuler de nouvelles, ajouter un suivi, des commentaires, ou changer de toute autre façon la base de données.</p> <p>{{read_only}}</p>"
+msgstr "<p> {{site_name}} est en maintenance pour le moment. Vous pouvez seulement voir les demandes existantes. Vous ne pouvez en formuler de nouvelles, ajouter un suivi, des commentaires, ou changer de toute autre façon la base de données.</p> <p>{{read_only}}</p>"
msgid "<small>If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way.</small>\\n</p>"
-msgstr "<small> Si vous utilisez un service de courriel sur le web ou des filtres de \"courrier indésirable\", veuillez aussi vérifier vos dossiers de courrier indésirable. Parfois, nos messages sont marqués de cette façon.</small> /n</p>"
+msgstr "<small> Si vous utilisez un service de courriel sur le web ou des filtres de \"courrier indésirable\", veuillez aussi vérifier vos dossiers de courrier indésirable. Parfois, nos messages sont marqués de cette façon.</small></p>"
msgid "<strong> Can I request information about myself?</strong>\\n\t\t\t<a href=\"{{url}}\">No! (Click here for details)</a>"
-msgstr "<strong>Puis-je demander des informations sur moi ?</strong>\\n\t\t\t<a href=\"{{url}}\">Non! (cliquez ici pour plus de détails)</a>"
+msgstr "<strong>Puis-je demander des informations sur moi-même?</strong>\\n\t\t\t<a href=\"{{url}}\">Non! (cliquez ici pour plus de détails)</a>"
msgid "<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL."
msgstr "<strong><code>commented_by:tony_bowden</code></strong> pour rechercher des annotations rédigées par Tony Bowden, tapez son nom comme si c'était un URL."
@@ -223,10 +223,10 @@ msgid "<strong><code>status:</code></strong> to select based on the status or hi
msgstr "<strong><code>statut :</code></strong>pour sélectionner une demande en fonction de son statut ou de l'historique de ses statuts, voir le <a href=\"{{statuses_url}}\">tableau des statuts</a> ci-dessous."
msgid "<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \\n and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\\n can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
-msgstr "<strong><code>tag:charity</code></strong> pour trouver toutes les autorités ou les demandes comprenant la même étiquette. Vous pouvez inclure plusieurs étiquettes,\\n ou plusieurs tag values, par exemple <code>tag:openlylocal ET tag:financial_transaction:335633</code>. Veuillez noter que, par défaut, tous les tags sont présents. Vous devez ajouter <code>ET</code> si vous voulez seulement les résultats dans lesquels elles sont toutes présentes."
+msgstr "<strong><code>tag:charity</code></strong> pour trouver tous les organismes publics ou les demandes comprenant le même tag. Vous pouvez inclure plusieurs tags \\n ou plusieurs tag values, par exemple <code>tag:openlylocal ET tag:financial_transaction:335633</code>. Veuillez noter que, par défaut, tous les tags sont présents. Vous devez ajouter <code>ET</code> si vous voulez seulement les résultats dans lesquels ils sont tous présents."
msgid "<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
-msgstr "<strong> <code> variety: </ code> </ strong> pour sélectionner le type de demandes à rechercher, consulter le <a href=\"{{varieties_url}}\">tableau des variétés</a> ci-dessous."
+msgstr "<strong> <code> variety: </code> </strong> pour sélectionner le type de demandes à rechercher, consulter le <a href=\"{{varieties_url}}\">tableau des variétés</a> ci-dessous."
msgid "<strong>Advice</strong> on how to get a response that will satisfy the requester. </li>"
msgstr "<strong>Conseils</strong> sur la façon d'obtenir une réponse qui satisfera le demandeur. </li>"
@@ -238,7 +238,7 @@ msgid "<strong>Anything else</strong>, such as clarifying, prompting, thanking"
msgstr "<strong>Autre chose</strong>, comme clarifier, inciter et remercier"
msgid "<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \\na good internal knowledge of user behaviour on {{site_name}}. How, \\nwhy and by whom requests are categorised is not straightforward, and there will\\nbe user error and ambiguity. You will also need to understand FOI law, and the\\nway authorities use it. Plus you'll need to be an elite statistician. Please\\n<a href=\"{{contact_path}}\">contact us</a> with questions."
-msgstr "<strong>Caveat emptor!</strong> Pour utiliser ces données de façon honnête, vous devrez \\n avoir une bonne connaissance du comportement des utilisateurs sur {{site_name}}. Comment, \\n pourquoi et par qui les demandes sont categorisées n'est pas explicite.Vous aurez également besoin de comprendre la loi sur les demandes d'accès à l'information et la \\n façon dont les autorités l'utilisent. De plus, vous aurez besoin d'être un statisticien de niveau élite. Veuillez \\n<a href=\"{{contact_path}}\">nous contacter </a> si vous avez des questions."
+msgstr "<strong>Soyez attentifs!</strong> Pour utiliser ces données de façon responsable, vous devez \\n avoir une bonne connaissance du comportement des utilisateurs de {{site_name}}. Comment, \\n pourquoi et par qui les demandes sont catégorisées n'est pas explicité. Vous aurez également besoin de comprendre la loi relative aux demandes d'accès aux documents et la \\n façon dont les organismes publics la suivent. Veuillez \\n<a href=\"{{contact_path}}\">nous contacter </a> si vous avez des questions."
msgid "<strong>Clarification</strong> has been requested"
msgstr "<strong>Des précisions</strong> ont été demandées"
@@ -250,7 +250,7 @@ msgid "<strong>Note:</strong> Because we're testing, requests are being sent to
msgstr "<strong>Note:</strong> Puisque nous faisons des tests, les demandes sont envoyées à {{email}} plutôt qu'à l'organisme."
msgid "<strong>Note:</strong> You're sending a message to yourself, presumably\\n to try out how it works."
-msgstr "<strong>Remarque:</strong> Vous envoyez un message à vous-même, sans doute \\n pour faire un essai."
+msgstr "<strong>Remarque:</strong> Vous vous envoyez un message, sans doute \\n pour faire un essai."
msgid "<strong>Note:</strong>\\n We will send an email to your new email address. Follow the\\n instructions in it to confirm changing your email."
msgstr "<strong>Remarque:</strong> Nous allons vous envoyer un courriel à votre nouvelle adresse. Suivez les instructions qui s'y trouveront pour confirmer le changement de votre adresse courriel."
@@ -268,7 +268,7 @@ msgid "<strong>Some of the information</strong> has been sent "
msgstr "<strong>Certaines informations</strong> ont été envoyées "
msgid "<strong>Thank</strong> the public authority or "
-msgstr "<strong>Remerciez</strong> l'organisme ou"
+msgstr "<strong>Remerciez</strong> l'organisme ou "
msgid "<strong>did not have</strong> the information requested."
msgstr "<strong>n'avait pas </strong> les informations demandées."
@@ -310,7 +310,7 @@ msgid "About you:"
msgstr "À propos de vous:"
msgid "Act on what you've learnt"
-msgstr "Agissez en fonction de ce que vous avez appris."
+msgstr "Partagez ce que vous avez appris!"
msgid "Acts as xapian/acts as xapian job"
msgstr "Acts as xapian/acts as xapian job"
@@ -322,7 +322,7 @@ msgid "ActsAsXapian::ActsAsXapianJob|Model"
msgstr "ActsAsXapian::ActsAsXapianJob|Model"
msgid "Add an annotation"
-msgstr "Ajouter une remarque"
+msgstr "Ajouter une annotation"
msgid "Add an annotation to your request with choice quotes, or\\n a <strong>summary of the response</strong>."
msgstr "Ajouter une annotation à votre demande avec des citations ou \\n un <strong> résumé de la réponse</strong>."
@@ -352,10 +352,10 @@ msgid "All of the information requested has been received"
msgstr "Tous les renseignements demandés ont été reçus"
msgid "All the options below can use <strong>status</strong> or <strong>latest_status</strong> before the colon. For example, <strong>status:not_held</strong> will match requests which have <em>ever</em> been marked as not held; <strong>latest_status:not_held</strong> will match only requests that are <em>currently</em> marked as not held."
-msgstr "Toutes les options ci-dessous peuvent utiliser <strong>status</strong> ou <strong>latest_status</strong> avant le deux-points. Par exemple, <strong>status:not_held</strong> correspondra aux demandes qui ont <em>déjà</em> été marquées comme non disponibles auprès de l'autorité; <strong>latest_status:not_held</strong> correspondra uniquement aux demandes sont <em>actuellement</em> marquées comme non disponibles auprès de l'autorité."
+msgstr "Toutes les options ci-dessous peuvent utiliser <strong>status</strong> ou <strong>latest_status</strong> avant le deux-points. Par exemple, <strong>status:not_held</strong> correspondra aux demandes qui ont <em>déjà</em> été marquées comme non disponibles auprès de l'organisme public; <strong>latest_status:not_held</strong> correspondra uniquement aux demandes sont <em>actuellement</em> marquées comme non disponibles auprès de l'autorité."
msgid "All the options below can use <strong>variety</strong> or <strong>latest_variety</strong> before the colon. For example, <strong>variety:sent</strong> will match requests which have <em>ever</em> been sent; <strong>latest_variety:sent</strong> will match only requests that are <em>currently</em> marked as sent."
-msgstr "Toutes les options ci-dessous peuvent utiliser <strong>variety</strong> ou <strong>latest_variety</strong> avant le deux-points. Par exemple, <strong>variety:sent</strong> correspondra aux demandes qui ont <em>déjà</em> été envoyées; <strong>latest_variety:sent</strong> correspondra seulement aux demandes qui sont <em>présentement</em> marquées comme envoyées."
+msgstr "Toutes les options ci-dessous peuvent utiliser <strong>variety</strong> ou <strong>latest_variety</strong> avant le deux-points. Par exemple, <strong>variety:sent</strong> correspondra aux demandes qui ont <em>déjà</em> été envoyées; <strong>latest_variety:sent</strong> correspondra seulement aux demandes qui sont <em>actuellement</em> marquées comme envoyées."
msgid "Also called {{other_name}}."
msgstr "Également appelé {{other_name}}."
@@ -388,16 +388,16 @@ msgid "Annotations"
msgstr "Annotations"
msgid "Annotations are so anyone, including you, can help the requester with their request. For example:"
-msgstr "Les annotations sont là afin que toute personne, y compris vous, puisse aider le demandeur avec sa demande. Par exemple:"
+msgstr "Les annotations permettent à n'importe quel utilisateur d'aider le demandeur dans sa démarche. Par exemple:"
msgid "Annotations will be posted publicly here, and are\\n <strong>not</strong> sent to {{public_body_name}}."
-msgstr "Les annotations seront publiées ici et ne seront <strong>pas</strong> envoyées à {{public_body_name}}."
+msgstr "Les annotations seront uniquement publiées sur ce site et ne seront <strong>pas</strong> envoyées à {{public_body_name}}."
msgid "Anonymous user"
msgstr "Utilisateur anonyme"
msgid "Anyone:"
-msgstr "Personne:"
+msgstr "N'importe quel utilisateur:"
msgid "Applies to"
msgstr "S'applique à"
@@ -406,7 +406,7 @@ msgid "Are we missing a public authority?"
msgstr "Vous ne trouvez pas l'organisme que vous cherchez?"
msgid "Are you the owner of any commercial copyright on this page?"
-msgstr "Êtes-vous le propriétaire d'un droit d'auteur commercial sur cette page?"
+msgstr "Des questions sur la propriété intellectuelle et le droit d'auteur relatifs aux demandes?"
msgid "Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries."
msgstr "Demandez des documents ou des <strong>informations spécifiques</strong>, ce site ne convient pas pour des demandes de renseignements d'ordre général."
@@ -427,19 +427,19 @@ msgid "Awaiting internal review."
msgstr "En attente de révision interne."
msgid "Awaiting response."
-msgstr "Réponse en attente."
+msgstr "En attente d'une réponse."
msgid "Beginning with"
msgstr "Commence avec"
msgid "Browse <a href='{{url}}'>other requests</a> for examples of how to word your request."
-msgstr "Parcourir <a href='{{url}}'>les autres demandes</a> pour des exemples sur la façon dont vous pouvez formuler votre demande."
+msgstr "Prenez connaissance <a href='{{url}}'>des autres demandes</a> pour des exemples sur la façon dont vous pouvez formuler votre demande. Vérifiez également que votre demande n'a pas déjà été faite (et répondue!) par un autre utilisateur."
msgid "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request."
-msgstr "Parcourir <a href='{{url}}'>les autres demandes</a> à '{{public_body_name}}' pour des exemples sur la façon dont vous pouvez formuler votre demande."
+msgstr "Prenez connaissance <a href='{{url}}'>des autres demandes</a> faites au '{{public_body_name}}' pour des exemples sur la façon dont vous pouvez formuler votre demande. Vérifiez également que votre demande n'a pas déjà été faite (et répondue!) par un autre utilisateur."
msgid "Browse all authorities..."
-msgstr "Parcourir tous les organismes gouvernementaux..."
+msgstr "Parcourir tous les organismes gouvernementaux…"
msgid "By law, under all circumstances, {{public_body_link}} should have responded by now"
msgstr "Selon la loi, en toutes circonstances, {{public_body_link}} devrait avoir déjà répondu"
@@ -451,7 +451,7 @@ msgid "Calculated home page"
msgstr "Page d'accueil calculée"
msgid "Can't find the one you want?"
-msgstr "Vous ne trouvez pas celui que vous cherchez?"
+msgstr "Vous ne trouvez pas ce que vous cherchez?"
msgid "Cancel a {{site_name}} alert"
msgstr "Annuler une alerte de {{site_name}}"
@@ -514,7 +514,7 @@ msgid "Check for mistakes if you typed or copied the address."
msgstr "Vérifiez s'il y a des erreurs si vous avez tapé ou copié l'adresse."
msgid "Check you haven't included any <strong>personal information</strong>."
-msgstr "Vérifiez que vous n'avez pas inclus des <strong> informations personnelles </strong>."
+msgstr "Vérifiez que vous n'avez pas inclus d'<strong>informations personnelles</strong>."
msgid "Choose your profile photo"
msgstr "Choisissez votre photo de profil"
@@ -526,7 +526,7 @@ msgid "Clarify your FOI request - "
msgstr "Clarifier votre demande -"
msgid "Classify an FOI response from "
-msgstr "Classer une réponse de demande d'accès à l'information de"
+msgstr "Classer une réponse de demande d'accès aux documents de"
msgid "Clear photo"
msgstr "Supprimer la photo"
@@ -613,7 +613,7 @@ msgid "Cultural sites and built structures (as they may be affected by the\\n
msgstr "Les sites culturels et les bâtiments (puisqu'ils peuvent être affectés par \\n les facteurs environnementaux ci-dessus) "
msgid "Currently <strong>waiting for a response</strong> from {{public_body_link}}, they must respond promptly and"
-msgstr "Présentement <strong>en attente d'une réponse</strong> de {{public_body_link}}, qui doit répondre rapidement et"
+msgstr "<strong>Demande en attente d'une réponse</strong> de {{public_body_link}}. L'organisme doit répondre rapidement et"
msgid "Date:"
msgstr "Date:"
@@ -628,7 +628,7 @@ msgid "Default locale"
msgstr "Localisation par défaut"
msgid "Defunct."
-msgstr ""
+msgstr "Disparu"
msgid "Delayed response to your FOI request - "
msgstr "Réponse différée à votre demande d'accès aux documents - "
@@ -643,7 +643,7 @@ msgid "Destroy {{name}}"
msgstr "Détruire {{name}}"
msgid "Details of request '"
-msgstr "Détails de la demande"
+msgstr "Détails de la demande '"
msgid "Did you mean: {{correction}}"
msgstr "Vouliez-vous dire {{correction}} ?"
@@ -658,7 +658,7 @@ msgid "Disclosure log URL"
msgstr "Disclosure log URL"
msgid "Don't want to address your message to {{person_or_body}}? You can also write to:"
-msgstr "Vous ne voulez pas envoyer votre message à {{person_or_body}}? Vous pouvez aussi écrire à: "
+msgstr "Vous ne voulez pas envoyer votre message au {{person_or_body}}? Vous pouvez aussi écrire à: "
msgid "Done"
msgstr "Fait"
@@ -688,10 +688,10 @@ msgid "Edit this request"
msgstr "Modifier cette demande"
msgid "Either the email or password was not recognised, please try again."
-msgstr "Le courriel ou le mot de passe n'ont pas été reconnus, veuillez essayer de nouveau."
+msgstr "Le courriel ou le mot de passe n'a pas été reconnu: veuillez essayer de nouveau."
msgid "Either the email or password was not recognised, please try again. Or create a new account using the form on the right."
-msgstr "Le courriel ou le mot de passe n'ont pas été reconnus, veuillez essayer de nouveau. Ou, créer un nouveau compte en utilisant le formulaire à droite."
+msgstr "Le courriel ou le mot de passe n'a pas été reconnu: veuillez essayer de nouveau ou créer un nouveau compte en utilisant le formulaire à droite."
msgid "Email doesn't look like a valid address"
msgstr "Le courriel ne ressemble pas à une adresse valide"
@@ -718,16 +718,16 @@ msgid "Event history"
msgstr "Historique des événements"
msgid "Event history details"
-msgstr "Détails de l'historique des événements"
+msgstr "Historique technique de cette demande"
msgid "Event {{id}}"
-msgstr "Evènement {{id}}"
+msgstr "Événement {{id}}"
msgid "Everything that you enter on this page, including <strong>your name</strong>,\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
msgstr "Tout ce que vous indiquez sur cette page, y compris <strong>votre nom </strong>,\\nsera désormais <strong>public </strong> sur \\n ce site. (<a href=\"{{url}}\">Pourquoi?</a>)."
msgid "Everything that you enter on this page\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
-msgstr "Tout ce que vous écrivez sur cette page \\nsera désormais <strong>public</strong> sur \\n ce site. (<a href=\"{{url}}\">Pourquoi?</a>)."
+msgstr "Une fois envoyé, le contenu de ce message sera <strong>public</strong> sur \\n ce site et accessible à tous. (<a href=\"{{url}}\">Pourquoi?</a>)."
msgid "FOI"
msgstr "Demande d'accès aux documents"
@@ -763,7 +763,7 @@ msgid "First, did your other requests succeed?"
msgstr "Premièrement, est-ce que vos autres demandes ont réussi?"
msgid "First, type in the <strong>name of the UK public authority</strong> you'd\\n like information from. <strong>By law, they have to respond</strong>\\n (<a href=\"{{url}}\">why?</a>)."
-msgstr "Commencer par écrire le <strong>nom de l'organisme</strong> à \\n solliciter. <strong>Légalement, elle est obligée de répondre </strong>.\\n (<a href=\"{{url}}\">Pourquoi?</a>)."
+msgstr "Commencez par écrire le <strong>nom de l'organisme</strong> à \\n solliciter ou consultez la <a href=\"/body/list/all\">liste exhaustive</a> des organismes. <strong>Légalement, celui-ci est tenu de répondre</strong>.\\n (<a href=\"{{url}}\">Pourquoi?</a>)."
msgid "Foi attachment"
msgstr "Foi attachment"
@@ -819,15 +819,24 @@ msgstr "Suivre cette personne "
msgid "Follow this request"
msgstr "Suivre cette demande"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
-msgstr "Suivre"
+msgstr "Message de suivi"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Suivre les messages envoyés par le demandeur"
msgid "Follow up messages to existing requests are sent to "
msgstr "Les messages de suivi des demandes existantes sont envoyés "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Les messages de suivi et les nouvelles réponses à cette demande ont été arrêtés afin de prévenir le pourriel. Veuillez <a href=\"{{url}}\">nous contacter </a> si vous êtes {{user_link}} et que vous avez besoin d'envoyer un message de suivi."
@@ -855,13 +864,13 @@ msgid "Freedom of Information Act"
msgstr "Loi portant sur le droit d'accès aux documents"
msgid "Freedom of Information law does not apply to this authority, so you cannot make\\n a request to it."
-msgstr "Le droit d'accès aux documents ne s'applique pas à cette autorité. Vous ne pouvez donc pas \\n lui adresser de demandes."
+msgstr "Le droit d'accès aux documents ne s'applique pas à cet organisme. Vous ne pouvez donc pas \\n lui adresser de demandes."
msgid "Freedom of Information law no longer applies to"
msgstr "Le droit d'accès aux documents ne s'applique plus à"
msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
-msgstr "Le droit d'accès aux documents ne s'applique plus à cette autorité. Les messages de suivi pour les demandes existantes sont envoyés à"
+msgstr "Le droit d'accès aux documents ne s'applique plus à cet organisme. Les messages de suivi pour les demandes existantes sont envoyés à"
msgid "Freedom of Information requests made"
msgstr "Les demandes d'accès aux documents faites"
@@ -876,7 +885,7 @@ msgid "Freedom of Information requests made using this site"
msgstr "Les demandes d'accès aux documents envoyées via ce site web"
msgid "Freedom of information requests to"
-msgstr "Les demandes d'accès aux documents faites à"
+msgstr "Les demandes d'accès aux documents faites"
msgid "From"
msgstr "De"
@@ -915,13 +924,13 @@ msgid "Help"
msgstr "Aide"
msgid "Here <strong>described</strong> means when a user selected a status for the request, and\\nthe most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\\n{{site_name}} for intermediate events, which weren't given an explicit\\ndescription by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
-msgstr "Ici, <strong>described</strong> fait référence au moment où un utilisateur sélectionne un statut pour la requête et \\n l'événement le plus récent a mis à jour son statut à cette valeur. <strong>calculated</strong> est alors inféré par \\n{{site_name}} pour les événements intermédiaires, qui n'ont pas reçu de description explicite\\npar un utilisateur. Voir les <a href=\"{{search_path}}\">conseils de recherche</a> pour une description des statuts."
+msgstr "Ici, <strong>described_state</strong> fait référence au moment où un utilisateur a sélectionné un statut pour la demande et \\n où l'événement le plus récent a été mis à jour à cette valeur. <strong>calculated_state</strong> est une valeur inférée par \\n{{site_name}} pour les événements intermédiaires qui n'ont pas reçu de description explicite\\npar un utilisateur. Voir les <a href=\"{{search_path}}\">conseils de recherche</a> pour une description des statuts."
msgid "Here is the message you wrote, in case you would like to copy the text and save it for later."
msgstr "Voici le message que vous avez écrit, au cas où vous souhaiteriez copier le texte et l'enregistrer pour plus tard."
msgid "Hi! We need your help. The person who made the following request\\n hasn't told us whether or not it was successful. Would you mind taking\\n a moment to read it and help us keep the place tidy for everyone?\\n Thanks."
-msgstr "Bonjour! Nous avons besoin de votre aide. La personne qui a effectué cette demande \\n ne nous a pas dit si elle avait reçu une réponse . Veuillez prendre quelques minutes pour lire et nous aider à classer la demande . \\n Merci."
+msgstr "Bonjour! Nous avons besoin de votre aide. La personne qui a effectué cette demande \\n ne nous a pas dit si elle avait reçu une réponse. Veuillez prendre quelques minutes pour lire et nous aider à classer la demande . \\n Merci."
msgid "Hide request"
msgstr "Masquer la demande"
@@ -942,7 +951,7 @@ msgid "Home page"
msgstr "Page d'accueil"
msgid "Home page of authority"
-msgstr "Page web de l'autorité"
+msgstr "Page web de l'organisme public"
msgid "However, you have the right to request environmental\\n information under a different law"
msgstr "Cependant, vous avez le droit de demander des \\n informations environnementales en vertu d'une loi différente."
@@ -966,13 +975,13 @@ msgid "I don't want to do any more tidying now!"
msgstr "J'ai assez fait de classification pour le moment!"
msgid "I like this request"
-msgstr "J'aime cette demande "
+msgstr "Suivre"
msgid "I would like to <strong>withdraw this request</strong>"
msgstr "Je voudrais <strong>retirer cette demande</strong>."
msgid "I'm still <strong>waiting</strong> for my information\\n <small>(maybe you got an acknowledgement)</small>"
-msgstr "Je suis encore <strong>en attente </strong>d'une réponse \\n <small>(peut-être avez-vous reçu un accusé de reception )</small>"
+msgstr "Je suis encore <strong>en attente </strong>d'une réponse \\n <small>(peut-être avez-vous reçu un accusé de réception)</small>"
msgid "I'm still <strong>waiting</strong> for the internal review"
msgstr "Je suis toujours en <strong>attente</strong> d'une révision interne."
@@ -987,7 +996,7 @@ msgid "I've received <strong>all the information"
msgstr "J'ai reçu <strong>toute les informations"
msgid "I've received <strong>some of the information</strong>"
-msgstr "J'air reçu <strong>une partie des informations</strong>"
+msgstr "J'ai reçu <strong>une partie des informations</strong>"
msgid "I've received an <strong>error message</strong>"
msgstr "J'ai reçu un <strong>message d'erreur</strong>."
@@ -999,28 +1008,28 @@ msgid "Id"
msgstr "Id"
msgid "If the address is wrong, or you know a better address, please <a href=\"{{url}}\">contact us</a>."
-msgstr "Si l'adresse est erronée ou si vous connaissez une meilleure adresse, veuillez <a href=\"{{url}}\">nous contactez</a>."
+msgstr "Si l'adresse est erronée ou si vous connaissez une meilleure adresse, veuillez <a href=\"{{url}}\">nous contacter</a>."
msgid "If the error was a delivery failure, and you can find an up to date FOI email address for the authority, please tell us using the form below."
-msgstr "Si l'erreur consiste en un échec de livraison et que vous pouvez trouver l'actuelle adresse courriel de l'organisme pour les demandes d'accès aux documents, veuillez nous en informer en utilisant le formulaire ci-dessous."
+msgstr "Si l'erreur consiste en un échec de livraison ou tout autre message d'erreur reçu en réponse à votre demande, veuillez nous en informer en utilisant le formulaire ci-dessous."
msgid "If this is incorrect, or you would like to send a late response to the request\\nor an email on another subject to {{user}}, then please\\nemail {{contact_email}} for help."
msgstr "Si cela est incorrect ou si vous souhaitez envoyer une réponse tardive à la demande \\n ou encore un courriel à un autre sujet à {{user}}, veuillez écrire à {{contact_email}} ."
msgid "If you are dissatisfied by the response you got from\\n the public authority, you have the right to\\n complain (<a href=\"{{url}}\">details</a>)."
-msgstr "Si vous n'êtes pas satisfait de la réponse fournie par l'autorité, vous avez le droit de porter plainte (<a href=\"{{url}}\">détails</a>)."
+msgstr "Si vous n'êtes pas satisfait de la réponse fournie par l'organisme public, vous avez un droit de révision (<a href=\"{{url}}\">détails</a>)."
msgid "If you are still having trouble, please <a href=\"{{url}}\">contact us</a>."
msgstr "Si vous rencontrez toujours des problèmes, veuillez <a href=\"{{url}}\">nous contacter</a>."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the message."
-msgstr ""
+msgstr "Si vous êtes le demandeur, vous pouvez vous <a href=\"{{url}}\">connecter</a> pour voir le message."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the request."
-msgstr "Si vous êtes le demandeur, vous pouvez <a href=\"{{url}}\">vous connecter</a> pour voir la demande."
+msgstr "Si vous êtes le demandeur, vous pouvez vous <a href=\"{{url}}\">connecter</a> pour voir la demande."
msgid "If you are thinking of using a pseudonym,\\n please <a href=\"{{url}}\">read this first</a>."
-msgstr "Si vous envisagez d'utiliser un pseudonyme, \\\\ veuillez <a href=\"{{url}}\">lire ceci</a>."
+msgstr "Si vous envisagez d'utiliser un pseudonyme, \\n veuillez <a href=\"{{url}}\">lire ceci</a>."
msgid "If you are {{user_link}}, please"
msgstr "Si vous êtes {{user_link}}, merci de "
@@ -1059,7 +1068,7 @@ msgid "If you've used {{site_name}} before"
msgstr "Si vous avez utilisé {{site_name}} avant"
msgid "If your browser is set to accept cookies and you are seeing this message,\\nthen there is probably a fault with our server."
-msgstr "Si votre navigateur accepte les coockies et que ce message affiché , \\n l'erreur est probablement liée à notre serveur"
+msgstr "Si votre navigateur accepte les coockies et que ce message est affiché, \\n l'erreur est probablement liée à notre serveur"
msgid "Incoming email address"
msgstr "Adresse du courrier entrant"
@@ -1086,10 +1095,10 @@ msgid "IncomingMessage|Mail from domain"
msgstr "IncomingMessage|Mail from domain"
msgid "IncomingMessage|Prominence"
-msgstr ""
+msgstr "MessageEntrant|Proéminence"
msgid "IncomingMessage|Prominence reason"
-msgstr ""
+msgstr "MessageEntrant|Raison proéminente"
msgid "IncomingMessage|Sent at"
msgstr "IncomingMessage|Sent at"
@@ -1194,7 +1203,7 @@ msgid "Just one more thing"
msgstr "Une dernière chose"
msgid "Keep it <strong>focused</strong>, you'll be more likely to get what you want (<a href=\"{{url}}\">why?</a>)."
-msgstr "Soyez <strong> précis </strong>, vous aurez plus de chances d'obtenir ce que vous voulez (<a href=\"{{url}}\">pourquoi?</a>)."
+msgstr "Soyez <strong>précis</strong>, vous aurez plus de chance d'obtenir ce que vous voulez (<a href=\"{{url}}\">pourquoi?</a>)."
msgid "Keywords"
msgstr "Mots-clés"
@@ -1266,7 +1275,7 @@ msgid "Make a new<br/>\\n <strong>Freedom <span>of</span><br/>\\n Information<
msgstr "Faire une nouvelle<br/>\\n <strong>demande <span>d'accès</span><br/>\\n aux documents<br/>\\n</strong>"
msgid "Make a request"
-msgstr "Demander un document"
+msgstr "Faire une demande"
msgid "Make a request to this authority"
msgstr "Faire une demande à cet organisme"
@@ -1278,7 +1287,7 @@ msgid "Make and browse Freedom of Information (FOI) requests"
msgstr "Envoyer et rechercher des demandes d'accès aux documents"
msgid "Make your own request"
-msgstr "Créer votre propre demande"
+msgstr "Faites votre propre demande"
msgid "Many requests"
msgstr "Beaucoup de demandes"
@@ -1287,7 +1296,7 @@ msgid "Message"
msgstr "Message"
msgid "Message has been removed"
-msgstr ""
+msgstr "Ce message a été supprimé"
msgid "Message sent using {{site_name}} contact form, "
msgstr "Message envoyé en utilisant le formulaire {{site_name}}"
@@ -1347,7 +1356,7 @@ msgid "New response to '{{title}}'"
msgstr "Nouvelle réponse à '{{title}}'"
msgid "New response to your FOI request - "
-msgstr "Nouvelle réponse à votre demande d'accès aux documents"
+msgstr "Nouvelle réponse à votre demande d'accès aux documents - "
msgid "New response to your request"
msgstr "Nouvelle réponse à votre demande"
@@ -1386,7 +1395,7 @@ msgid "None found."
msgstr "Aucun résultat trouvé."
msgid "None made."
-msgstr "Aucune demande."
+msgstr "Aucun."
msgid "Not a valid FOI request"
msgstr "Pas une demande valide d'accès aux documents"
@@ -1398,22 +1407,22 @@ msgid "Now check your email!"
msgstr "Maintenant, vérifiez votre courriel!"
msgid "Now preview your annotation"
-msgstr "Maintenant, prévisualisez votre annotation"
+msgstr "Vous pouvez maintenant relire votre annotation"
msgid "Now preview your follow up"
-msgstr "Maintenant, prévisualisez votre suivi"
+msgstr "Vous pouvez maintenant relire votre message"
msgid "Now preview your message asking for an internal review"
-msgstr "Maintenant, prévisualisez votre message demandant un examen interne"
+msgstr "Maintenant, visualisez votre message demandant un examen interne"
msgid "Number of requests"
-msgstr ""
+msgstr "Nombre de demandes"
msgid "OR remove the existing photo"
msgstr "OU effacer la photo existante"
msgid "Offensive? Unsuitable?"
-msgstr "Offensif? Inapproprié?"
+msgstr "Contenu inapproprié?"
msgid "Oh no! Sorry to hear that your request was refused. Here is what to do now."
msgstr "Oh non! Nous sommes désolés d'apprendre que votre demande a été refusée. Voici ce qu'il faut faire maintenant."
@@ -1473,10 +1482,10 @@ msgid "OutgoingMessage|Message type"
msgstr "OutgoingMessage|Message type"
msgid "OutgoingMessage|Prominence"
-msgstr ""
+msgstr "MessageSortant|Proéminence"
msgid "OutgoingMessage|Prominence reason"
-msgstr ""
+msgstr "MessageSortant|Raison proéminente"
msgid "OutgoingMessage|Status"
msgstr "OutgoingMessage|Status"
@@ -1503,16 +1512,16 @@ msgid "People"
msgstr "Citoyens"
msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr "Les gens {{start_count}} à {{end_count}} de {{total_count}}"
+msgstr "Les gens {{start_count}} à {{end_count}} de {{total_count}}"
msgid "Percentage of requests that are overdue"
-msgstr ""
+msgstr "Pourcentage de demandes en retard"
msgid "Percentage of total requests"
-msgstr ""
+msgstr "Pourcentage total"
msgid "Photo of you:"
-msgstr "Votre photo :"
+msgstr "Votre photo:"
msgid "Plans and administrative measures that affect these matters"
msgstr "Les plans et les mesures administratives qui touchent ces questions"
@@ -1527,7 +1536,7 @@ msgid "Please"
msgstr "Veuillez"
msgid "Please <a href=\"{{url}}\">contact us</a> if you have any questions."
-msgstr ""
+msgstr "N'hésitez pas à nous <a href=\"{{url}}\">contacter</a> si vous avez des questions."
msgid "Please <a href=\"{{url}}\">get in touch</a> with us so we can fix it."
msgstr "Veuillez <a href=\"{{url}}\">nous contacter </a> afin que nous puissions le corriger."
@@ -1539,7 +1548,7 @@ msgid "Please <strong>go to the following requests</strong>, and let us\\n
msgstr "Veuillez <strong> aller aux demandes suivantes </strong> et dites-\\nnous si les réponses contiennent l'information demandée."
msgid "Please <strong>only</strong> write messages directly relating to your request {{request_link}}. If you would like to ask for information that was not in your original request, then <a href=\"{{new_request_link}}\">file a new request</a>."
-msgstr "Veuillez écrire des messages <strong>uniquement</strong>reliés à votre demande {{request_link}}. Si vous souhaitez demander des informations qui n'étaient pas dans votre demande initiale, alors <a href=\"{{new_request_link}}\"> veuillez déposer une nouvelle demande</a>."
+msgstr "Ce message doit <strong>seulement</strong> concerner votre demande {{request_link}}. Si vous souhaitez demander des informations qui n'étaient pas dans votre demande initiale, alors <a href=\"{{new_request_link}}\">veuillez envoyer une nouvelle demande</a>."
msgid "Please ask for environmental information only"
msgstr "Veuillez demander uniquement des informations liées à l'environnement"
@@ -1569,10 +1578,10 @@ msgid "Please click on the link below to confirm your email address."
msgstr "Veuillez cliquer sur le lien ci-dessous pour confirmer votre adresse courriel."
msgid "Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway."
-msgstr "Merci d'indiquer le thème de votre requête dans le champ du sujet. Il n'est pas nécessaire d'indiquer qu'il s'agit d'une demande d'accès aux documents, nous le précisons par défaut."
+msgstr "Merci d'indiquer le thème de votre demande dans le champ du sujet. Il n'est pas nécessaire d'indiquer qu'il s'agit d'une demande d'accès aux documents, nous le précisons par défaut."
msgid "Please don't upload offensive pictures. We will take down images\\n that we consider inappropriate."
-msgstr "Veuillez ne pas mettre en ligne des images offensantes. Nous supprimerons les images qui nous semblent inappropriées."
+msgstr "Veuillez ne pas mettre en ligne des images inappropriées. Nous supprimerons les images le cas échéant."
msgid "Please enable \"cookies\" to carry on"
msgstr "Veuillez autoriser les \"cookies\" pour poursuivre"
@@ -1671,13 +1680,13 @@ msgid "Please write your message using a mixture of capital and lower case lette
msgstr "Veuillez écrire un résumé en utilisant un mélange de lettres majuscules et minuscules. Cela rend la lecture plus facile."
msgid "Point to <strong>related information</strong>, campaigns or forums which may be useful."
-msgstr "Indiquez <strong>les informations</strong>, les campagnes ou les forums qui peuvent être utiles."
+msgstr "Indiquez <strong>les informations</strong>, les campagnes ou les forums qui peuvent être utiles."
msgid "Possibly related requests:"
msgstr "Demandes similaires:"
msgid "Post annotation"
-msgstr "Publier une annotation:"
+msgstr "Publier cette annotation"
msgid "Post redirect"
msgstr "Post redirect"
@@ -1704,7 +1713,7 @@ msgid "Posted on {{date}} by {{author}}"
msgstr "Publié le {{date}} par {{author}}"
msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
-msgstr "Optimisé par <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
+msgstr "Propulsé par <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
msgid "Prev"
msgstr "Prev"
@@ -1716,7 +1725,7 @@ msgid "Preview new annotation on '{{info_request_title}}'"
msgstr "Prévisualiser la nouvelle annotation sur '{{info_request_title}}'"
msgid "Preview your annotation"
-msgstr "Prévisualiser votre remarque"
+msgstr "Prévisualiser votre annotation"
msgid "Preview your message"
msgstr "Prévisualiser votre message"
@@ -1734,37 +1743,37 @@ msgid "ProfilePhoto|Draft"
msgstr "ProfilePhoto|Draft"
msgid "Public Bodies"
-msgstr ""
+msgstr "Organismes publics"
msgid "Public Body Statistics"
-msgstr ""
+msgstr "Statistiques de l'organisme"
msgid "Public authorities"
-msgstr "Public authorities"
+msgstr "Organismes publics"
msgid "Public authorities - {{description}}"
-msgstr "Public authorities - {{description}}"
+msgstr "Organismes publics - {{description}}"
msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr "Organismes gouvernementaux {{start_count}} à {{end_count}} de {{total_count}}"
+msgstr "Organismes publics {{start_count}} à {{end_count}} de {{total_count}}"
msgid "Public authority – {{name}}"
-msgstr "Public authority – {{name}}"
+msgstr "Organisme public – {{name}}"
msgid "Public bodies that most frequently replied with \"Not Held\""
-msgstr ""
+msgstr "Organismes publics qui affirment le plus souvent ne pas avoir le document demandé"
msgid "Public bodies with most overdue requests"
-msgstr ""
+msgstr "Organismes publics avec le plus de demandes en retard"
msgid "Public bodies with the fewest successful requests"
-msgstr ""
+msgstr "Organismes publics avec le plus de réponses négatives"
msgid "Public bodies with the most requests"
-msgstr ""
+msgstr "Organismes publics avec le plus de demandes"
msgid "Public bodies with the most successful requests"
-msgstr ""
+msgstr "Organismes publics avec les plus de réponses positives"
msgid "Public body"
msgstr "Public body"
@@ -1794,12 +1803,15 @@ msgid "PublicBody|Info requests count"
msgstr "PublicBody|Info requests count"
msgid "PublicBody|Info requests not held count"
-msgstr ""
+msgstr "OrganismePublic|Info comptage des documents \"non détenus\""
msgid "PublicBody|Info requests overdue count"
-msgstr ""
+msgstr "OrganismePublic|Info comptage des demandes en retard"
msgid "PublicBody|Info requests successful count"
+msgstr "OrganismePublic|Info comptage des demandes réussies"
+
+msgid "PublicBody|Info requests visible classified count"
msgstr ""
msgid "PublicBody|Last edit comment"
@@ -1872,7 +1884,7 @@ msgid "Refused."
msgstr "Refusé."
msgid "Remember me</label> (keeps you signed in longer;\\n do not use on a public computer) "
-msgstr "Se rappeler du mot de passe </label> (vous permet de rester connecté ;\\n à ne pas utiliser sur un ordinateur public) "
+msgstr "Se rappeler du mot de passe </label> (vous permet de rester connecté;\\n à ne pas utiliser sur un ordinateur public) "
msgid "Report abuse"
msgstr "Signaler un abus"
@@ -1914,22 +1926,22 @@ msgid "Requested on {{date}}"
msgstr "Demandé le {{date}}"
msgid "Requests are considered overdue if they are in the 'Overdue' or 'Very Overdue' states."
-msgstr ""
+msgstr "Une demande est considéré en retard si son statut est \"en retard\" ou \"très en retard\"."
msgid "Requests are considered successful if they were classified as either 'Successful' or 'Partially Successful'."
-msgstr ""
+msgstr "Un demande est considérée réussie si elle a été classifiée comme \"Réussie\" ou \"Partielle réussie\""
msgid "Requests for personal information and vexatious requests are not considered valid for FOI purposes (<a href=\"/help/about\">read more</a>)."
-msgstr "Les demandes de renseignements personnels et les demandes abusives ne sont pas considérées comme des demandes valides (<a href=\"/help/about\">Davantage de détails</a>)."
+msgstr "En cas de contenu inapproprié (langage violent, diffamatoire, etc.), nous nous réservons le droit de retirer une demande (<a href=\"/help/about\">Davantage de détails</a>)."
msgid "Requests or responses matching your saved search"
msgstr "Les demandes ou les réponses correspondant à votre recherche sauvegardée"
msgid "Requests similar to '{{request_title}}'"
-msgstr ""
+msgstr "Autre demandes similaires à '{{request_title}}'"
msgid "Requests similar to '{{request_title}}' (page {{page}})"
-msgstr ""
+msgstr "Demandes similaires à '{{request_title}}' (page {{page}})"
msgid "Respond by email"
msgstr "Répondre par courriel"
@@ -2006,25 +2018,25 @@ msgstr[0] "Cherchez parmi la {{count}} demande faite à {{public_body_name}}"
msgstr[1] "Cherchez parmi les {{count}} demandes faites à {{public_body_name}}"
msgid "Search your contributions"
-msgstr "Chercher vos contributions"
+msgstr "Chercher dans vos demandes"
msgid "See bounce message"
msgstr "Voir le message de rebond"
msgid "Select one to see more information about the authority."
-msgstr "Sélectionnez l'une pour voir plus d'informations sur l'organisme."
+msgstr "Cliquez sur un des organismes pour obtenir plus de détails."
msgid "Select the authority to write to"
msgstr "Sélectionner un organisme pour lui écrire "
msgid "Send a followup"
-msgstr "Envoyer un suivi"
+msgstr "Envoyer un message de suivi"
msgid "Send a message to "
-msgstr "Envoyer un message à"
+msgstr "Envoyer un message à "
msgid "Send a public follow up message to {{person_or_body}}"
-msgstr "Envoyer un message de suivi à {{person_or_body}}"
+msgstr "Envoyer un message de suivi au {{person_or_body}}"
msgid "Send a public reply to {{person_or_body}}"
msgstr "Envoyer une réponse publique à {{person_or_body}}"
@@ -2036,7 +2048,7 @@ msgid "Send message"
msgstr "Envoyer un message"
msgid "Send message to "
-msgstr "Envoyer un message à"
+msgstr "Envoyer un message à "
msgid "Send request"
msgstr "Envoyer une demande "
@@ -2057,7 +2069,7 @@ msgid "Show only..."
msgstr "Afficher uniquement…"
msgid "Showing"
-msgstr "Il y a"
+msgstr "Montrer: "
msgid "Sign in"
msgstr "Connexion"
@@ -2102,10 +2114,10 @@ msgid "Sorry - you cannot respond to this request via {{site_name}}, because thi
msgstr "Vous ne pouvez pas répondre à cette demande via {{site_name}} parce que c'est une copie de la demande originale ici {{link_to_original_request}}."
msgid "Sorry, but only {{user_name}} is allowed to do that."
-msgstr "Désolés, mais seulement {{user_name}} est autorisé à faire cela."
+msgstr "Désolé, mais seulement {{user_name}} est autorisé à faire cela."
msgid "Sorry, there was a problem processing this page"
-msgstr "Désolés, il y a eu un problème durant le traitement de la page"
+msgstr "Désolé, il y a eu un problème durant le traitement de la page"
msgid "Sorry, we couldn't find that page"
msgstr "Page introuvable."
@@ -2114,7 +2126,7 @@ msgid "Special note for this authority!"
msgstr "Remarque spéciale pour cet organisme!"
msgid "Start now &raquo;"
-msgstr "Commencez dès maintenant &raquo;"
+msgstr "C'est ici! &raquo;"
msgid "Start your own blog"
msgstr "Commencez votre blog"
@@ -2138,7 +2150,7 @@ msgid "Submit status"
msgstr "Soumettre un statut"
msgid "Submit status and send message"
-msgstr "Soumettre un statut et envoyer un message"
+msgstr "Envoyer le message"
msgid "Subscribe to blog"
msgstr "S'abonner au blog"
@@ -2150,7 +2162,7 @@ msgid "Successful."
msgstr "Réussi."
msgid "Suggest how the requester can find the <strong>rest of the information</strong>."
-msgstr "Indiquer comment le demandeur peut trouver le <strong>reste de l'information</strong>."
+msgstr "Indiquez comment le demandeur peut trouver le <strong>reste de l'information</strong>."
msgid "Summary:"
msgstr "Résumé:"
@@ -2183,7 +2195,7 @@ msgid "Thank you for responding to this FOI request! Your response has been publ
msgstr "Merci d'avoir répondu à cette demande d'accès aux documents! Votre réponse a été publiée ci-dessous et un lien vers votre réponse a été envoyé par courriel à "
msgid "Thank you for updating the status of the request '<a href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests below for you to classify."
-msgstr "Merci d'avoir mis à jour le staut de la demande '<a href=\"{{url}}\">{{info_request_title}}</a>'. Il y a encore quelques demandes ci-dessous à classer."
+msgstr "Merci d'avoir mis à jour le statut de la demande '<a href=\"{{url}}\">{{info_request_title}}</a>'. Il y a encore quelques demandes ci-dessous à classer."
msgid "Thank you for updating this request!"
msgstr "Merci d'avoir mis à jour cette demande!"
@@ -2192,7 +2204,7 @@ msgid "Thank you for updating your profile photo"
msgstr "Merci d'avoir mis à jour votre photo de profil"
msgid "Thank you! We'll look into what happened and try and fix it up."
-msgstr "Merci! Nous allons examiner ce qui s'est passé et essayer de le corriger."
+msgstr "Merci! Nous allons examiner ce qui s'est passé et essayer de corriger le problème."
msgid "Thanks for helping - your work will make it easier for everyone to find successful\\nresponses, and maybe even let us make league tables..."
msgstr "Merci de nous aider! Grâce à votre travail, il sera plus facile pour tout le monde de trouver avec succès \\ n des réponses à leurs questions."
@@ -2216,7 +2228,7 @@ msgid "The accounts have been left as they previously were."
msgstr "Les comptes ont été laissés tels quels."
msgid "The authority do <strong>not have</strong> the information <small>(maybe they say who does)"
-msgstr "L'organisme <strong>ne détient pas </strong> l'information <small>(peut-être précise-t-elle qui la détient)</small>"
+msgstr "L'organisme <strong>ne détient pas </strong> l'information <small>(peut-être précise-t-il qui la détient)</small>"
msgid "The authority only has a <strong>paper copy</strong> of the information."
msgstr "L'organisme a uniquement <strong>la version papier </strong> de ce document."
@@ -2228,19 +2240,19 @@ msgid "The authority would like to / has <strong>responded by post</strong> to t
msgstr "L'organisme aimerait répondre ou a répondu <strong> par la poste </strong> à cette demande."
msgid "The classification of requests (e.g. to say whether they were successful or not) is done manually by users and administrators of the site, which means that they are subject to error."
-msgstr ""
+msgstr "La classification des demandes (c'est-à-dore si un demande a été répondue positivement ou non) est faite manuellement par les utilisateurs et les administrateurs du site. En d'autres termes, il se peut que des erreurs se glissent dans cette classification."
msgid "The email that you, on behalf of {{public_body}}, sent to\\n{{user}} to reply to an {{law_used_short}}\\nrequest has not been delivered."
msgstr "Le message que vous avez envoyé au nom de {{public_body}} à \\n{{user}} en réponse à la demande {{law_used_short}}\\n n'a pas été livré."
msgid "The error bars shown are 95% confidence intervals for the hypothesized underlying proportion (i.e. that which you would obtain by making an infinite number of requests through this site to that authority). In other words, the population being sampled is all the current and future requests to the authority through this site, rather than, say, all requests that have been made to the public body by any means."
-msgstr ""
+msgstr " "
msgid "The page doesn't exist. Things you can try now:"
msgstr "La page n'existe pas. Vous pouvez essayer de :"
msgid "The percentages are calculated with respect to the total number of requests, which includes invalid requests; this is a known problem that will be fixed in a later release."
-msgstr ""
+msgstr "Ces pourcentages sont calculés en fonction du nombre total de demandes, incluant les demandes invalides. C'est un problème connu qui sera corrigé dans une prochaine version."
msgid "The public authority does not have the information requested"
msgstr "L'organisme n'a pas les informations demandées"
@@ -2279,13 +2291,13 @@ msgid "The requester has abandoned this request for some reason"
msgstr "Le demandeur a renoncé à cette demande pour une raison quelconque"
msgid "The response to your request has been <strong>delayed</strong>. You can say that,\\n by law, the authority should normally have responded\\n <strong>promptly</strong> and"
-msgstr "La réponse à votre demande a été <strong> retardée </strong>. Vous pouvez dire que, \\n selon la loi, l'organisme aurait normalement dû répondre \\n <strong>rapidement</strong> et "
+msgstr "La réponse à votre demande a été <strong> retardée </strong>. Selon la loi, l'organisme aurait normalement dû répondre \\n <strong>rapidement</strong> et "
msgid "The response to your request is <strong>long overdue</strong>. You can say that, by\\n law, under all circumstances, the authority should have responded\\n by now"
msgstr "La réponse à votre demande est <strong>très en retard </strong>. Selon la loi, en toutes circonstances, l'organisme aurait dû déjà répondre \\n"
msgid "The search index is currently offline, so we can't show the Freedom of Information requests that have been made to this authority."
-msgstr "Les fonctionnalités de recherche sont temporairement indisponibles. C'est pour cette raison que nous ne pouvons afficher les demandes d'information relative à cet organisme."
+msgstr "Les fonctionnalités de recherche sont temporairement indisponibles. C'est pour cette raison que nous ne pouvons afficher les demandes d'information relatives à cet organisme."
msgid "The search index is currently offline, so we can't show the Freedom of Information requests this person has made."
msgstr "Les fonctionnalités de recherche sont temporairement indisponibles. Nous ne pouvons donc pas afficher les demandes d'accès aux documents que cette personne a effectuées."
@@ -2380,13 +2392,13 @@ msgstr[0] "Il y a {{count}} personne qui suit cette demande "
msgstr[1] "Il y a {{count}} personnes qui suivent cette demande "
msgid "There was a <strong>delivery error</strong> or similar, which needs fixing by the {{site_name}} team."
-msgstr "Il y a eu <strong> une erreur de transmission </strong> ou autre, qui doit être corrigée par l'équipe de {{site_name}}."
+msgstr "Il y a eu <strong> une erreur de transmission </strong> ou autre qui doit être corrigée par l'équipe de {{site_name}}."
msgid "There was an error with the words you entered, please try again."
msgstr "Il y a une erreur liée aux mots saisis. Veuillez réessayer. "
msgid "There was no data calculated for this graph yet."
-msgstr ""
+msgstr "Aucune donnée n'a encore été calculée pour ce graph."
msgid "There were no requests matching your query."
msgstr "Aucune demande d'information ne correspond à votre recherche."
@@ -2395,19 +2407,19 @@ msgid "There were no results matching your query."
msgstr "Aucun résultat ne correspond à votre recherche."
msgid "These graphs were partly inspired by <a href=\"http://mark.goodge.co.uk/2011/08/number-crunching-whatdotheyknow/\">some statistics that Mark Goodge produced for WhatDoTheyKnow</a>, so thanks are due to him."
-msgstr ""
+msgstr "Ces graphiques sont en partie inspirés du <a href=\"http://mark.goodge.co.uk/2011/08/number-crunching-whatdotheyknow/\">travail</a> réalisé par Mark Goodge pour WhatDoTheyKnow. Nous tenons à l'en remercier!"
msgid "They are going to reply <strong>by post</strong>"
msgstr "Ils vont répondre <strong>par la poste</strong>"
msgid "They do <strong>not have</strong> the information <small>(maybe they say who does)</small>"
-msgstr "Ils <strong>ne détiennent pas </strong> l'information <small> (peut-être précise-t-il qui la détient)</small>"
+msgstr "Ils <strong>ne détiennent pas </strong> l'information"
msgid "They have been given the following explanation:"
msgstr "Ils ont reçu l'explication suivante:"
msgid "They have not replied to your {{law_used_short}} request {{title}} promptly, as normally required by law"
-msgstr "Ils n'ont pas répondu à votre {{law_used_short}} demande {{title}} rapidement, comme la loi l'oblige"
+msgstr "Ils n'ont pas répondu à votre {{law_used_short}} demande {{title}} rapidement, comme la loi l'oblige"
msgid "They have not replied to your {{law_used_short}} request {{title}}, \\nas required by law"
msgstr "Ils n'ont pas répondu à votre {{law_used_short}} demande {{title}}, \\n comme la loi l'oblige "
@@ -2440,28 +2452,28 @@ msgid "This is the first version."
msgstr "Ceci est la première version."
msgid "This is your own request, so you will be automatically emailed when new responses arrive."
-msgstr "Ceci est votre demande, alors vous recevrez un courriel lorsque de nouvelles réponses seront soumises."
+msgstr "Ceci est votre demande, vous recevrez donc un courriel à la réception de nouvelles communications."
msgid "This message has been hidden."
-msgstr ""
+msgstr "Ce message a été caché."
msgid "This message has been hidden. There are various reasons why we might have done this, sorry we can't be more specific here."
-msgstr ""
+msgstr "Ce message a été caché. Plusieurs raisons expliquent une telle décision. Désolé, nous ne pouvons pas être plus précis."
msgid "This message has prominence 'hidden'. You can only see it because you are logged in as a super user."
-msgstr ""
+msgstr "Ce message est \"caché\". Vous pouvez le voir car vous avec le statut de super utilisateur."
msgid "This message has prominence 'hidden'. {{reason}} You can only see it because you are logged in as a super user."
-msgstr ""
+msgstr "Ce message est \"caché\". {{reason}} Vous pouvez le voir car vous avez le statut de super utilisateur."
msgid "This message is hidden, so that only you, the requester, can see it. Please <a href=\"{{url}}\">contact us</a> if you are not sure why."
-msgstr ""
+msgstr "Ce message est caché. Seul vous, le demandeur, pouvez le voir. N'hésitez pas à nous <a href=\"{{url}}\">contacter</a> si vous ne comprenez pas pourquoi."
msgid "This message is hidden, so that only you, the requester, can see it. {{reason}}"
-msgstr ""
+msgstr "Ce message est caché. Seul vous, le demandeur, pouvez le voir. {{reason}}"
msgid "This page of public body statistics is currently experimental, so there are some caveats that should be borne in mind:"
-msgstr ""
+msgstr "Cette page de statistique est expérimentale. Voici quelques limitations connues:"
msgid "This particular request is finished:"
msgstr "Cette demande particulière est achevée:"
@@ -2531,7 +2543,7 @@ msgid "This request was not made via {{site_name}}"
msgstr "Cette demande n'a pas été faite à travers {{site_name}}"
msgid "This table shows the technical details of the internal events that happened\\nto this request on {{site_name}}. This could be used to generate information about\\nthe speed with which authorities respond to requests, the number of requests\\nwhich require a postal response and much more."
-msgstr "Ce tableau montre les détails techniques de cet événement interne survenu \\n dans le cadre de cette requête sur {{site_name}}. Cela pourrait être utilisé dans le but de générer de l'information au sujet \\n de la rapidité à laquelle les autorités répondent aux demandes, du nombre de demandes \\n exigeant une réponse par la poste, et bien plus encore."
+msgstr "Ce tableau détaille les événements techniques liés à cette demande. Cette information peut vous aider à retracer la suite des événements et, par exemple, à voir avec précision quand ont été échangés les différents messages."
msgid "This user has been banned from {{site_name}} "
msgstr "Cet utilisateur a été banni de {{site_name}}"
@@ -2552,10 +2564,10 @@ msgid "To change your email address used on {{site_name}}"
msgstr "Pour changer l'adresse courriel utilisée sur {{site_name}}"
msgid "To classify the response to this FOI request"
-msgstr "Pour classer la réponse à cette demande d'accès àaux documents"
+msgstr "Pour classer la réponse à cette demande d'accès aux documents"
msgid "To do that please send a private email to "
-msgstr "Pour ce faire, veuillez envoyer un courriel privé à"
+msgstr "Pour ce faire, veuillez envoyer un courriel privé à "
msgid "To do this, first click on the link below."
msgstr "Pour ce faire, cliquez d'abord sur le lien ci-dessous."
@@ -2582,7 +2594,7 @@ msgid "To follow the request '{{request_title}}'"
msgstr "Pour suivre la demande '{{request_title}}'"
msgid "To help us keep the site tidy, someone else has updated the status of the \\n{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
-msgstr "Pour nous aider à maintenir ce site, une personne a mis à jour l'état de la \\n{{law_used_full}} demande {{title}} que vous avez adressée à {{public_body}} à \"{{display_status}}\". Si vous êtes en désaccord avec leur catégorisation, veuillez ajuster le statut à ce que vous croyez juste."
+msgstr "Pour nous aider à maintenir ce site, une personne a mis à jour l'état de la \\n demande d'accès aux document {{title}} que vous avez adressée à {{public_body}} à \"{{display_status}}\". Si vous êtes en désaccord avec ce choix, veuillez en modifier le statut."
msgid "To let everyone know, follow this link and then select the appropriate box."
msgstr "Pour le faire savoir à tous, suivez ce lien et sélectionnez ensuite la case appropriée."
@@ -2618,7 +2630,7 @@ msgid "To upload a response, you must be logged in using an email address from "
msgstr "Pour mettre en ligne une réponse, vous devez être connecté en utilisant une adresse courriel de"
msgid "To use the advanced search, combine phrases and labels as described in the search tips below."
-msgstr "Pour utiliser la recherche avancée, associez les termes et les étiquettes comme indiqué ci-dessous."
+msgstr "Pour utiliser la recherche avancée, associez les termes et les tags comme indiqué ci-dessous."
msgid "To view the email address that we use to send FOI requests to {{public_body_name}}, please enter these words."
msgstr "Pour afficher l'adresse courriel que nous utilisons pour envoyer des demandes d'accès aux documents à {{public_body_name}}, veuillez saisir ces mots."
@@ -2630,7 +2642,7 @@ msgid "To {{public_body_link_absolute}}"
msgstr "À {{public_body_link_absolute}}"
msgid "To:"
-msgstr "à:"
+msgstr "Destinataire:"
msgid "Today"
msgstr "Aujourd'hui"
@@ -2731,18 +2743,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr "User|Address"
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr "User|Dob"
-
msgid "User|Email"
msgstr "User|Email"
@@ -2795,7 +2801,7 @@ msgid "View Freedom of Information requests made by {{user_name}}:"
msgstr "Voir les demandes faites par {{user_name}}:"
msgid "View and search requests"
-msgstr "Visualiser et parcourir les demandes d'information"
+msgstr "Parcourir les demandes passées"
msgid "View authorities"
msgstr "Voir les organismes"
@@ -2804,7 +2810,7 @@ msgid "View email"
msgstr "Voir le courriel"
msgid "View requests"
-msgstr "Voir les requêtes"
+msgstr "Voir les demandes"
msgid "Waiting clarification."
msgstr "En attente de clarification"
@@ -2813,10 +2819,10 @@ msgid "Waiting for an <strong>internal review</strong> by {{public_body_link}} o
msgstr "En attente <strong>d'une révision interne</strong> par {{public_body_link}} à propos de leur gestion de la demande."
msgid "Waiting for the public authority to complete an internal review of their handling of the request"
-msgstr "En attente que l'autorité administrative complète une révision interne de leur gestion de la demande"
+msgstr "En attente que l'organisme public complète une révision interne de leur gestion de la demande"
msgid "Waiting for the public authority to reply"
-msgstr "En attente de la réponse de l'autorité administrative"
+msgstr "En attente de la réponse de l'organisme public"
msgid "Was the response you got to your FOI request any good?"
msgstr "Êtes-vous satisfait de la réponse obtenue?"
@@ -2831,7 +2837,7 @@ msgid "We do not have a working request email address for this authority."
msgstr "Nous n'avons pas d'adresse courriel valide pour cet organisme."
msgid "We do not have a working {{law_used_full}} address for {{public_body_name}}."
-msgstr "Nous ne disposons pas d'adresse {{law_used_full}} pour {{public_body_name}}."
+msgstr "Nous ne disposons pas d'adresse pour les demandes d'accès aux documents pour {{public_body_name}}."
msgid "We don't know whether the most recent response to this request contains\\n information or not\\n &ndash;\\n\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
msgstr "Nous ne savons pas si la réponse la plus récente à cette demande contient l'information \\n ou non \\n &ndash;\\n\tSi vous êtes {{user_link}}, veuillez <a href=\"{{url}}\">vous connecter</a> et nous le laisser savoir."
@@ -2870,19 +2876,19 @@ msgid "What information has been released?"
msgstr "Quelles informations ont été rendues publiques?"
msgid "What information has been requested?"
-msgstr "Quelles sont les informations ayant été demandées?"
+msgstr "Demandes envoyées"
msgid "When you get there, please update the status to say if the response \\ncontains any useful information."
msgstr "Quand vous y arriverez, veuillez mettre à jour le statut et mentionnez si la réponse \\n contient une information utile."
msgid "When you receive the paper response, please help\\n others find out what it says:"
-msgstr "Lorsque vous recevez la réponse sur papier, veuillez \\ntenir les autres au courant sur son contenu:"
+msgstr "Lorsque vous recevez la réponse sur papier, veuillez \\ntenir les autres au courant de son contenu:"
msgid "When you're done, <strong>come back here</strong>, <a href=\"{{url}}\">reload this page</a> and file your new request."
msgstr "Lorsque vous aurez terminé, <strong> revenez ici </ strong>, <a href=\"{{url}}\"> actualisez cette page </a> et déposez votre nouvelle demande."
msgid "Which of these is happening?"
-msgstr "Lequel se produit?"
+msgstr "Dans quelle situation êtes-vous?"
msgid "Who can I request information from?"
msgstr "À qui puis-je faire une demande d'information ?"
@@ -2951,10 +2957,10 @@ msgid "You can get this page in computer-readable format as part of the main JSO
msgstr "Vous pouvez obtenir cette page dans un format lisible électroniquement en tant que partie du fichier JSON principal. Voir <a href=\"{{api_path}}\">la documentation API </a>."
msgid "You can only request information about the environment from this authority."
-msgstr "Vous ne pouvez demander des informations concernant l'environnement de la part de cette autorité."
+msgstr "Vous ne pouvez demander des informations concernant l'environnement de la part de cet organisme."
msgid "You have a new response to the {{law_used_full}} request "
-msgstr "Vous avez une nouvelle réponse à la demande {{law_used_full}} "
+msgstr "Vous avez une nouvelle réponse concernant votre demande d'accès aux documents "
msgid "You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to tell us about the problem"
msgstr "Vous avez identifié un bogue. Merci de <a href=\"{{contact_url}}\">nous contacter</a> pour nous signaler ce problème"
@@ -2972,7 +2978,7 @@ msgid "You have now changed your email address used on {{site_name}}"
msgstr "Vous avez changé votre adresse courriel utilisée sur {{site_name}}"
msgid "You just tried to sign up to {{site_name}}, when you\\nalready have an account. Your name and password have been\\nleft as they previously were.\\n\\nPlease click on the link below."
-msgstr "Vous avez essayé de vous inscrire sur {{site_name}}, alors que vous avez \\n déjà un compte. Votre nom et mot de passe ont été \\n laissés comme ils étaient auparavant. \\n\\nVeuillez cliquer sur le lien ci-dessous."
+msgstr "Vous avez essayé de vous inscrire sur {{site_name}}, alors que vous avez \\n déjà un compte. Votre nom et mot de passe ont été \\n laissés tels quels. \\n\\nVeuillez cliquer sur le lien ci-dessous."
msgid "You know what caused the error, and can <strong>suggest a solution</strong>, such as a working email address."
msgstr "Vous savez ce qui a causé l'erreur et pouvez <strong>conseiller une solution </strong>, comme une adresse courriel valide."
@@ -3020,7 +3026,7 @@ msgid "You will now be emailed updates about {{track_description}}. <a href=\"{{
msgstr "Vous allez recevoir des courriels de mise à jour concernant {{track_description}}. <a href=\"{{change_email_alerts_url}}\"> Vous préférez ne pas recevoir de courriels?</a>"
msgid "You will only get an answer to your request if you follow up\\nwith the clarification."
-msgstr "Vous ne pourrez obtenir une réponse à votre demande que si vous envoyer une \\n clarification."
+msgstr "Vous ne pourrez obtenir une réponse à votre demande que si vous envoyez une \\n clarification."
msgid "You will still be able to view it while logged in to the site. Please reply to this email if you would like to discuss this decision further."
msgstr "Vous pourrez toujours le voir lorsque vous serez connecté au site. Veuillez répondre à ce courriel si vous souhaitez discuter davantage de cette décision."
@@ -3038,7 +3044,7 @@ msgid "You've now cleared your profile photo"
msgstr "Vous avez supprimé votre photo de profil"
msgid "Your <strong>name will appear publicly</strong>\\n (<a href=\"{{why_url}}\">why?</a>)\\n on this website and in search engines. If you\\n are thinking of using a pseudonym, please\\n <a href=\"{{help_url}}\">read this first</a>."
-msgstr "Votre <strong>nom apparaîtra publiquement</strong>\\n (<a href=\"{{why_url}}\">why?</a>)\\n sur ce site et sur les moteurs de recherche. Si vous \\n pensez utiliser un pseudonyme, veuillez \\n <a href=\"{{help_url}}\"> lire ceci </a>."
+msgstr "Votre <strong>nom apparaîtra publiquement</strong>\\n (<a href=\"{{why_url}}\">pourquoi?</a>)\\n sur ce site et sur les moteurs de recherche. Si vous \\n pensez utiliser un pseudonyme, veuillez \\n <a href=\"{{help_url}}\"> lire ceci </a>."
msgid "Your annotations"
msgstr "Vos commentaires "
@@ -3053,7 +3059,7 @@ msgid "Your follow up has not been sent because this request has been stopped to
msgstr "Votre message de suivi n'a pas été envoyé parce que cette demande a été interrompue afin de prévenir le spam. Veuillez <a href=\"{{url}}\">nous contacter</a>si vous voulez vraiment envoyer un message de suivi."
msgid "Your follow up message has been sent on its way."
-msgstr "Votre message de suivi a été envoyé ."
+msgstr "Votre message de suivi a été envoyé."
msgid "Your internal review request has been sent on its way."
msgstr "Votre demande de révision interne a été envoyée."
@@ -3062,7 +3068,7 @@ msgid "Your message has been sent. Thank you for getting in touch! We'll get bac
msgstr "Votre message a été envoyé. Merci de nous avoir écrit! Vous aurez des nouvelles très bientôt."
msgid "Your message to {{recipient_user_name}} has been sent"
-msgstr "Votre message à {{recipient_user_name}} a été envoyé"
+msgstr "Votre message à {{recipient_user_name}} a été envoyé"
msgid "Your message to {{recipient_user_name}} has been sent!"
msgstr "Votre message à {{recipient_user_name}} a été envoyé!"
@@ -3119,17 +3125,20 @@ msgstr[1] "Vos {{count}} demandes d'accès aux documents"
msgid "Your {{count}} annotation"
msgid_plural "Your {{count}} annotations"
-msgstr[0] "Votre {{count}} remarque"
-msgstr[1] "Vos {{count}} remarques"
+msgstr[0] "Votre {{count}} annotation"
+msgstr[1] "Vos {{count}} annotations"
msgid "Your {{site_name}} email alert"
msgstr "Votre alerte courriel de {{site_name}}"
msgid "Yours faithfully,"
-msgstr "Je vous prie de croire, Monsieur/Madame, à l'assurance de mes salutations distinguées,Sincèrement,"
+msgstr ""
+"Je vous prie de croire en l'assurance de mes salutations distinguées,\n"
+"\n"
+"Sincèrement,"
msgid "Yours sincerely,"
-msgstr "Sincèrement,"
+msgstr "Cordialement,"
msgid "Yours,"
msgstr "Sincèrement,"
@@ -3147,7 +3156,7 @@ msgid "\\n\\n[ {{site_name}} note: The above text was badly encoded, and has had
msgstr "\\n\\n[ {{site_name}} Remarque: Le texte ci-dessus a été mal codé, et les caractères étranges ont été supprimés ]"
msgid "a one line summary of the information you are requesting, \\n\t\t\te.g."
-msgstr "un court résumé de l'information que vous demandez, \\n\t\t\te.g."
+msgstr "un court résumé du document ou de l'information que vous demandez, \\n\t\t\tpar exemple"
msgid "admin"
msgstr "admin"
@@ -3246,7 +3255,7 @@ msgid "external"
msgstr "externe"
msgid "has reported an"
-msgstr "à reporté un "
+msgstr "a reporté un "
msgid "have delayed."
msgstr "ont été retardées"
@@ -3342,10 +3351,10 @@ msgid "successful requests"
msgstr "demandes qui ont abouti"
msgid "that you made to"
-msgstr "que vous avez faite à "
+msgstr "que vous avez faite auprès de "
msgid "the main FOI contact address for {{public_body}}"
-msgstr "l'adresse principale du responsable de l'accès aux documents du {{public_body}}"
+msgstr "l'adresse principale du responsable de l'accès aux documents de l'organisme public"
#. This phrase completes the following sentences:
#. Request an internal review from...
@@ -3353,7 +3362,7 @@ msgstr "l'adresse principale du responsable de l'accès aux documents du {{publi
#. Send a public reply to...
#. Don't want to address your message to... ?
msgid "the main FOI contact at {{public_body}}"
-msgstr "le responsable de l'accès aux documents du {{public_body}}"
+msgstr "responsable de l'accès aux documents du {{public_body}}"
msgid "the requester"
msgstr "Le demandeur"
@@ -3410,8 +3419,8 @@ msgstr[1] "{{count}} demandes d'accès aux documents à {{public_body_name}}"
msgid "{{count}} person is following this authority"
msgid_plural "{{count}} people are following this authority"
-msgstr[0] "{{count}} personne suit cette autorité"
-msgstr[1] "{{count}} personnes suivent cette autorité "
+msgstr[0] "{{count}} personne suit cet organisme public"
+msgstr[1] "{{count}} personnes suivent cet organisme public "
msgid "{{count}} request"
msgid_plural "{{count}} requests"
@@ -3430,13 +3439,10 @@ msgid "{{info_request_user_name}} only:"
msgstr "{{info_request_user_name}} uniquement:"
msgid "{{law_used_full}} request - {{title}}"
-msgstr "{{law_used_full}} demande - {{title}}"
-
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} demande - {{title}}"
+msgstr "{{law_used_full}} - {{title}}"
msgid "{{law_used}} requests at {{public_body}}"
-msgstr "{{law_used}} demandes à {{public_body}}"
+msgstr "{{law_used}} pour {{public_body}}"
msgid "{{length_of_time}} ago"
msgstr "depuis {{length_of_time}}"
@@ -3475,7 +3481,7 @@ msgid "{{site_name}} covers requests to {{number_of_authorities}} authorities, i
msgstr "{{site_name}} gère les demandes adressées à {{number_of_authorities}} institutions, dont celles-ci:"
msgid "{{site_name}} sends new requests to <strong>{{request_email}}</strong> for this authority."
-msgstr "{{site_name}} envoie de nouvelles demandes <strong>{{request_email}}</strong> à cette autorité."
+msgstr "{{site_name}} envoie les nouvelles demandes d'accès aux documents pour cet organisme public à l'adresse suivante: <strong>{{request_email}}</strong>."
msgid "{{site_name}} users have made {{number_of_requests}} requests, including:"
msgstr "Les utilisateurs de {{site_name}} ont envoyé {{number_of_requests}} demandes, dont celles-ci:"
@@ -3487,7 +3493,7 @@ msgid "{{title}} - a Freedom of Information request to {{public_body}}"
msgstr "{{title}} - Une demande d'accès à l'information à {{public_body}}"
msgid "{{user_name}} (Account suspended)"
-msgstr "{{user_name}} (Compte suspendu)"
+msgstr "{{user_name}} (Compte suspend)"
msgid "{{user_name}} - Freedom of Information requests"
msgstr "{{user_name}} - Demandes d'accès à l'information"
@@ -3514,7 +3520,7 @@ msgid "{{username}} left an annotation:"
msgstr "{{username}} a laissé une remarque:"
msgid "{{user}} ({{user_admin_link}}) made this {{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
-msgstr "{{user}} ({{user_admin_link}}) a fait cette {{law_used_full}} demande (<a href=\"{{request_admin_url}}\">admin</a>) à {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
+msgstr "{{user}} ({{user_admin_link}}) a fait cette demande (<a href=\"{{request_admin_url}}\">admin</a>) à {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
msgid "{{user}} made this {{law_used_full}} request"
-msgstr "{{user}} a fait cette {{law_used_full}} demande"
+msgstr "Cette demande a été faite par {{user}} "
diff --git a/locale/gl/app.po b/locale/gl/app.po
index f3e110f8d..ac360f29d 100644
--- a/locale/gl/app.po
+++ b/locale/gl/app.po
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/alaveteli/language/gl/)\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
@@ -878,15 +878,24 @@ msgstr ""
msgid "Follow this request"
msgstr "Seguir esta solicitud"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Seguimiento"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Respuesta enviada por el creador de la solicitud"
msgid "Follow up messages to existing requests are sent to "
msgstr "Las respuestas a solicitudes existentes se envían a "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Se han bloqueado nuevas respuestas a esta solicitud para prevenir spam. Por favor <a href=\"{{url}}\">contáctanos</a> si tú eres {{user_link}} y necesitas responder."
@@ -1918,6 +1927,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2905,18 +2917,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "User|Email"
@@ -3662,9 +3668,6 @@ msgstr "Sólo {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "solicitud {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "solicitud {{law_used_full}} - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/he_IL/app.po b/locale/he_IL/app.po
index 1c810ccca..fa3cf388b 100644
--- a/locale/he_IL/app.po
+++ b/locale/he_IL/app.po
@@ -19,10 +19,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Hebrew (Israel) (http://www.transifex.com/projects/p/alaveteli/language/he_IL/)\n"
"Language: he_IL\n"
"MIME-Version: 1.0\n"
@@ -821,15 +821,24 @@ msgstr "עקוב אחר האדם הזה"
msgid "Follow this request"
msgstr "עקבו אחר הבקשה"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "הודעת עדכון"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "הודעת עדכון נשלחה על ידי המבקש"
msgid "Follow up messages to existing requests are sent to "
msgstr "הודעות מעקב לבקשות קיימות נשלחות ל- "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "הודעות תגובה והודעות חדשות לבקשה זו נחסמו מחשש לדואר זבל. נא <a href=\"{{url}}\">צרו קשר</a> אם את/ה {{user_link}} וצריך לשלוח הודעת המשך."
@@ -1804,6 +1813,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last ערכו הערה"
@@ -2233,7 +2245,7 @@ msgid "The classification of requests (e.g. to say whether they were successful
msgstr ""
msgid "The email that you, on behalf of {{public_body}}, sent to\\n{{user}} to reply to an {{law_used_short}}\\nrequest has not been delivered."
-msgstr "הדוא\"ל ששלחתם בשם {{public_body}}, ל- \\n{{user}} כדי להגיב על בקשת {{law_used_short}}\\nלא נמסר."
+msgstr "הדוא\"ל ששלחתם בשם {{public_body}}, ל-{{user}} כדי להגיב על בקשת {{law_used_short}} לא נשלח."
msgid "The error bars shown are 95% confidence intervals for the hypothesized underlying proportion (i.e. that which you would obtain by making an infinite number of requests through this site to that authority). In other words, the population being sampled is all the current and future requests to the authority through this site, rather than, say, all requests that have been made to the public body by any means."
msgstr ""
@@ -2409,10 +2421,10 @@ msgid "They have been given the following explanation:"
msgstr "ניתן להם ההסבר הבא:"
msgid "They have not replied to your {{law_used_short}} request {{title}} promptly, as normally required by law"
-msgstr "הם לא השיבו {{law_used_short}} לבקשתכם {{title}} מייד, כפי שקבוע בחוק"
+msgstr "לא התקבלה תגובה לבקשת {{law_used_short}} \"{{title}}\", כפי שקבוע בתקנות."
msgid "They have not replied to your {{law_used_short}} request {{title}}, \\nas required by law"
-msgstr "לא התקבלה תגובה לבקשת {{title}} לפי חוק {{law_used_short}, \\nפי שקבוע בחוק."
+msgstr "לא התקבלה תגובה לבקשת {{law_used_short}} \"{{title}}\", כפי שקבוע בתקנות."
msgid "Things to do with this request"
msgstr "דברים שניתן לעשות עם הבקשה"
@@ -2733,18 +2745,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr "משתמש|כתובת"
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr "משתמש|תאריך לידה"
-
msgid "User|Email"
msgstr "User|Email"
@@ -3436,9 +3442,6 @@ msgstr "רק {{info_request_user_name}} –"
msgid "{{law_used_full}} request - {{title}}"
msgstr "בקשת {{law_used_full}} - {{title}} "
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} בקשת GQ - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} בקשות ב{{public_body}}"
diff --git a/locale/hr/app.po b/locale/hr/app.po
index b5a0a98fe..d18f11f98 100644
--- a/locale/hr/app.po
+++ b/locale/hr/app.po
@@ -10,10 +10,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/alaveteli/language/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
@@ -862,15 +862,24 @@ msgstr ""
msgid "Follow this request"
msgstr "Prati ovaj zahtjev"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Prateća poruka poslana od strane podnosioca zahtjeva"
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1897,6 +1906,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "Javno tijelo|Zadnji uređeni komentar"
@@ -2874,18 +2886,12 @@ msgstr ""
msgid "User|About me"
msgstr "Korisnik|O meni"
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr "Korisnik|Administratorski nivo"
msgid "User|Ban text"
msgstr "Korisnik|tekst isključenja"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "Korisnik|E-mail"
@@ -3614,9 +3620,6 @@ msgstr "{{info_request_user_name}} samo:"
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/hr_HR/app.po b/locale/hr_HR/app.po
index 397db45fb..3375c93dd 100644
--- a/locale/hr_HR/app.po
+++ b/locale/hr_HR/app.po
@@ -10,10 +10,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Croatian (Croatia) (http://www.transifex.com/projects/p/alaveteli/language/hr_HR/)\n"
"Language: hr_HR\n"
"MIME-Version: 1.0\n"
@@ -810,15 +810,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1794,6 +1803,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2727,18 +2739,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3434,9 +3440,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/hu_HU/app.po b/locale/hu_HU/app.po
index 3d67f6e4e..43e0f6418 100644
--- a/locale/hu_HU/app.po
+++ b/locale/hu_HU/app.po
@@ -10,10 +10,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/alaveteli/language/hu_HU/)\n"
"Language: hu_HU\n"
"MIME-Version: 1.0\n"
@@ -873,15 +873,24 @@ msgstr "Ezen felhasználó követése"
msgid "Follow this request"
msgstr "Értesítő igénylése az adatigényléssel kapcsolatos fejlemények vonatkozásában."
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Követés"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Nyomon követési üzenetet az igénylő elküldte "
msgid "Follow up messages to existing requests are sent to "
msgstr "Meglevő igénylésekre vonatkozóan nyomon követési üzeneteket küldtek a következőnek: "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "A levélszemét kiszűrése érdekében erre az igénylésre vonatkozóan nyomon követési üzenet és új válasz nem küldhető. <a href=\"{{url}}\">Lépjen velünk kapcsolatba</a>, ha ön {{user_link}} és nyomon követésre van szüksége. "
@@ -1919,6 +1928,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2908,18 +2920,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr "User|Address"
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr "User|Dob"
-
msgid "User|Email"
msgstr "User|Email"
@@ -3659,9 +3665,6 @@ msgstr "Csak az adatigénylést beküldő {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "{{law_used_full}} igénylés - {{title}} "
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} igénylés GQ - {{title}} "
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} igénylések {{public_body}} adatgazdánál"
diff --git a/locale/id/app.po b/locale/id/app.po
index 758a7c9a4..33d7ef797 100644
--- a/locale/id/app.po
+++ b/locale/id/app.po
@@ -13,10 +13,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/alaveteli/language/id/)\n"
"Language: id\n"
"MIME-Version: 1.0\n"
@@ -901,15 +901,24 @@ msgstr "Ikuti orang ini"
msgid "Follow this request"
msgstr "Ikuti permintaan ini"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Tindak lanjuti"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Tindak lanjuti pesan yang dikirimkan oleh pemohon"
msgid "Follow up messages to existing requests are sent to "
msgstr "Pesan tindak lanjut terhadap permintaan yang ada dikirimkan ke "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Tindak lanjut dan respon baru terhadap permintaan ini telah dihentikan untuk mencegah spam. Silakan<a href=\"{{url}}\">hubungi kami</a> jika Anda {{user_link}} dan perlu mengirimkan tindak lanjut."
@@ -1942,6 +1951,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody|Last edit comment"
@@ -2927,18 +2939,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr "User | Address"
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr "User | Dob"
-
msgid "User|Email"
msgstr "User|Email"
@@ -3678,9 +3684,6 @@ msgstr "hanya {{info_request_user_name}} :"
msgid "{{law_used_full}} request - {{title}}"
msgstr "{{law_used_full}} permintaan - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} permintaan GQ - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} permintaan di {{public_body}}"
diff --git a/locale/it/app.po b/locale/it/app.po
index c65e7c819..fdbce2732 100644
--- a/locale/it/app.po
+++ b/locale/it/app.po
@@ -8,10 +8,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/alaveteli/language/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
@@ -496,28 +496,28 @@ msgid "Change your password on {{site_name}}"
msgstr "Cambia la tua password"
msgid "Change your password {{site_name}}"
-msgstr ""
+msgstr "Cambia la tua password su {{site_name}}"
msgid "Charity registration"
-msgstr ""
+msgstr "Registrazione NoProfit"
msgid "Check for mistakes if you typed or copied the address."
-msgstr ""
+msgstr "Verifica gli errori se hai digitato o copiato l'indirizzo."
msgid "Check you haven't included any <strong>personal information</strong>."
-msgstr ""
+msgstr "Verifica di non aver incluso nessuna <strong>informazione personale</strong>."
msgid "Choose your profile photo"
msgstr "Scegli una foto"
msgid "Clarification"
-msgstr ""
+msgstr "Chiarificazione"
msgid "Clarify your FOI request - "
msgstr ""
msgid "Classify an FOI response from "
-msgstr ""
+msgstr "Classifica una risposta da"
msgid "Clear photo"
msgstr ""
@@ -526,7 +526,7 @@ msgid "Click on the link below to send a message to {{public_body_name}} telling
msgstr ""
msgid "Click on the link below to send a message to {{public_body}} reminding them to reply to your request."
-msgstr ""
+msgstr "Clicca sul link qui sotto per inviare un messaggio all'autorità pubblica {{public_body}} e ricordargli di rispondere alla tua richiesta."
msgid "Close"
msgstr ""
@@ -535,16 +535,16 @@ msgid "Comment"
msgstr ""
msgid "Comment|Body"
-msgstr ""
+msgstr "Comment|Corpo"
msgid "Comment|Comment type"
-msgstr ""
+msgstr "Comment|Tipo Commento"
msgid "Comment|Locale"
-msgstr ""
+msgstr "Comment|Ora locale"
msgid "Comment|Visible"
-msgstr ""
+msgstr "Comment|Visibile"
msgid "Confirm you want to follow all successful FOI requests"
msgstr ""
@@ -565,19 +565,19 @@ msgid "Confirm you want to follow the request '{{request_title}}'"
msgstr ""
msgid "Confirm your FOI request to "
-msgstr ""
+msgstr "Conferma la tua richiesta a"
msgid "Confirm your account on {{site_name}}"
-msgstr ""
+msgstr "Conferma il tuo account su {{site_name}}"
msgid "Confirm your annotation to {{info_request_title}}"
-msgstr ""
+msgstr "Conferma la tua annotazione su {{info_request_title}}"
msgid "Confirm your email address"
-msgstr ""
+msgstr "Conferma il tuo indirizzo email"
msgid "Confirm your new email address on {{site_name}}"
-msgstr ""
+msgstr "Conferma il tuo nuovo indirizzo email su {{site_name}}"
msgid "Considered by administrators as not an FOI request and hidden from site."
msgstr ""
@@ -589,10 +589,10 @@ msgid "Contact {{recipient}}"
msgstr ""
msgid "Contact {{site_name}}"
-msgstr ""
+msgstr "Contatta {{site_name}}"
msgid "Could not identify the request from the email address"
-msgstr ""
+msgstr "Potresti non identificare la richiesta dall'indirizzo email"
msgid "Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and many other common image file formats are supported."
msgstr "Il formato del file uploadato non è stato riconosciuto. Sono supportati i formati PNG, JPEG, GIF ed altri comuni formati."
@@ -604,10 +604,10 @@ msgid "Cultural sites and built structures (as they may be affected by the\\n
msgstr ""
msgid "Currently <strong>waiting for a response</strong> from {{public_body_link}}, they must respond promptly and"
-msgstr ""
+msgstr "Attualmente stiamo <strong>attendendo una risposta</strong> da {{public_body_link}}, essi dovranno rispondere velocemente e"
msgid "Date:"
-msgstr ""
+msgstr "Data:"
msgid "Dear {{name}},"
msgstr "Salve {{name}},"
@@ -622,25 +622,25 @@ msgid "Defunct."
msgstr ""
msgid "Delayed response to your FOI request - "
-msgstr ""
+msgstr "Risposta in attesa per la tua richiesta - "
msgid "Delayed."
-msgstr ""
+msgstr "In attesa"
msgid "Delivery error"
-msgstr ""
+msgstr "Errore di invio"
msgid "Destroy {{name}}"
msgstr ""
msgid "Details of request '"
-msgstr ""
+msgstr "Dettagli della richiesta '"
msgid "Did you mean: {{correction}}"
-msgstr ""
+msgstr "Volevi forse dire: {{correction}}"
msgid "Disclaimer: This message and any reply that you make will be published on the internet. Our privacy and copyright policies:"
-msgstr ""
+msgstr "Disclaimer: Questo messaggio e le eventuali risposte che pubblicherai saranno pubblicate su internet. Queste sono le nostre policies in materia di privacy e copyright:"
msgid "Disclosure log"
msgstr ""
@@ -649,22 +649,22 @@ msgid "Disclosure log URL"
msgstr ""
msgid "Don't want to address your message to {{person_or_body}}? You can also write to:"
-msgstr ""
+msgstr "Non vuoi inviare il tuo messaggio a {{person_or_body}}? Puoi anche scrivere a:"
msgid "Done"
-msgstr ""
+msgstr "Fatto"
msgid "Done &gt;&gt;"
msgstr ""
msgid "Download a zip file of all correspondence"
-msgstr ""
+msgstr "Scarica un file compresso .zip di tutta la corrispondenza"
msgid "Download original attachment"
-msgstr ""
+msgstr "Scarica l'allegato originale"
msgid "EIR"
-msgstr ""
+msgstr "EIR"
msgid "Edit"
msgstr ""
@@ -682,34 +682,34 @@ msgid "Either the email or password was not recognised, please try again."
msgstr "L'indirizzo email e/o la password non sono stati riconosciuti, prova di nuovo."
msgid "Either the email or password was not recognised, please try again. Or create a new account using the form on the right."
-msgstr ""
+msgstr "La email e/o la password non sono state riconosciute, prova di nuovo. Oppure crea un nuovo account usando il formulario sulla destra."
msgid "Email doesn't look like a valid address"
-msgstr ""
+msgstr "L'indirizzo email inserito non ha un formato valido"
msgid "Email me future updates to this request"
-msgstr ""
+msgstr "Inviami per email futuri aggiornamenti su questa richiesta"
msgid "Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>"
-msgstr ""
+msgstr "Inserisci le parole che vuoi cercare separate da spazi, per es. <strong>via nazionale</strong>"
msgid "Enter your response below. You may attach one file (use email, or\\n <a href=\"{{url}}\">contact us</a> if you need more)."
msgstr ""
msgid "Environmental Information Regulations"
-msgstr ""
+msgstr "Environmental Information Regulations"
msgid "Environmental Information Regulations requests made"
-msgstr ""
+msgstr "Fatta una richiesta su Environmental Information Regulations "
msgid "Environmental Information Regulations requests made using this site"
-msgstr ""
+msgstr "Fatte richieste su Environmental Information Regulations usando questo sito"
msgid "Event history"
-msgstr ""
+msgstr "Storia dell'evento"
msgid "Event history details"
-msgstr ""
+msgstr "Dettagli della storia dell'evento"
msgid "Event {{id}}"
msgstr ""
@@ -721,34 +721,34 @@ msgid "Everything that you enter on this page\\n will be <strong>
msgstr "Tutte le cose che scrivi in questa pagina,\\n saranno <strong>rese pubbliche</strong> on\\n su questo sito per sempre (<a href=\"{{url}}\">perchè?</a>)."
msgid "FOI"
-msgstr ""
+msgstr "FOI"
msgid "FOI email address for {{public_body}}"
-msgstr ""
+msgstr "Indirizzo email dell'autorità pubblica {{public_body}}"
msgid "FOI request – {{title}}"
msgstr ""
msgid "FOI requests"
-msgstr ""
+msgstr "Richieste"
msgid "FOI requests by '{{user_name}}'"
-msgstr ""
+msgstr "Richieste fatte da '{{user_name}}'"
msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr ""
+msgstr "Richieste da {{start_count}} a {{end_count}} per un totale di {{total_count}}"
msgid "FOI response requires admin ({{reason}}) - {{title}}"
msgstr ""
msgid "Failed to convert image to a PNG"
-msgstr ""
+msgstr "Errore di conversione dell'immagine a PNG"
msgid "Failed to convert image to the correct size: at {{cols}}x{{rows}}, need {{width}}x{{height}}"
msgstr ""
msgid "Filter"
-msgstr ""
+msgstr "Filtro"
msgid "First, did your other requests succeed?"
msgstr ""
@@ -760,25 +760,25 @@ msgid "Foi attachment"
msgstr ""
msgid "FoiAttachment|Charset"
-msgstr ""
+msgstr "FoiAttachment|Set caratteri"
msgid "FoiAttachment|Content type"
-msgstr ""
+msgstr "FoiAttachment|Tipo contenuto"
msgid "FoiAttachment|Display size"
-msgstr ""
+msgstr "FoiAttachment|Dimensioni visualizzazione"
msgid "FoiAttachment|Filename"
-msgstr ""
+msgstr "FoiAttachment|Nome file"
msgid "FoiAttachment|Hexdigest"
-msgstr ""
+msgstr "FoiAttachment|Hexdigest"
msgid "FoiAttachment|Url part number"
-msgstr ""
+msgstr "FoiAttachment|Url part number"
msgid "FoiAttachment|Within rfc822 subject"
-msgstr ""
+msgstr "FoiAttachment|Within rfc822 subject"
msgid "Follow"
msgstr "Segui"
@@ -799,28 +799,37 @@ msgid "Follow things matching this search"
msgstr ""
msgid "Follow this authority"
-msgstr ""
+msgstr "Segui questa autorità"
msgid "Follow this link to see the request:"
-msgstr ""
+msgstr "Vai a questo link per vedere la richiesta:"
msgid "Follow this person"
msgstr ""
msgid "Follow this request"
-msgstr ""
+msgstr "Segui questa richiesta"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
-msgstr ""
+msgstr "Risposta"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
-msgstr ""
+msgstr "Messaggio di risposta inviato dal richiedente"
msgid "Follow up messages to existing requests are sent to "
-msgstr ""
+msgstr "Messaggi di risposta a richieste esistenti sono inviati a "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
-msgstr ""
+msgstr "Messaggi di risposta e nuove ulteriori risposte a questa richiesta sono stati fermati per prevenire lo spam. <a href=\"{{url}}\">Contattaci</a> se sei l'utente {{user_link}} e necessiti di inviare un messaggio di risposta."
msgid "Follow us on twitter"
msgstr "Seguici su Twitter"
@@ -829,7 +838,7 @@ msgid "Followups cannot be sent for this request, as it was made externally, and
msgstr ""
msgid "For an unknown reason, it is not possible to make a request to this authority."
-msgstr ""
+msgstr "Per una ragione sconosciuta, non è possibile inviare una richiesta a questa autorità."
msgid "Forgotten your password?"
msgstr "Persa la password?"
@@ -840,31 +849,31 @@ msgstr[0] "Trovata {{count}} autorità pubblica {{description}}"
msgstr[1] "Trovate {{count}} autorità pubbliche {{description}}"
msgid "Freedom of Information"
-msgstr ""
+msgstr "Freedom of Information"
msgid "Freedom of Information Act"
-msgstr ""
+msgstr "Freedom of Information Act"
msgid "Freedom of Information law does not apply to this authority, so you cannot make\\n a request to it."
msgstr ""
msgid "Freedom of Information law no longer applies to"
-msgstr ""
+msgstr "La legge sulla Freedom of Information non si applica più a"
msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
-msgstr ""
+msgstr "La legge sulla Freedom of Information non si applica più a questa autorità. I messaggi di risposta a richieste esistenti vengono inviati a "
msgid "Freedom of Information requests made"
-msgstr ""
+msgstr "Le richieste fatte"
msgid "Freedom of Information requests made by this person"
-msgstr ""
+msgstr "Le richieste fatte da questa persona"
msgid "Freedom of Information requests made by you"
msgstr "Le tue richieste"
msgid "Freedom of Information requests made using this site"
-msgstr ""
+msgstr "Le richieste fatte usando questo sito"
msgid "Freedom of information requests to"
msgstr "Richieste di informazioni a"
@@ -879,10 +888,10 @@ msgid "From:"
msgstr "Da:"
msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
-msgstr ""
+msgstr "FORNISCI DETTAGLI SUL TUO RECLAMO QUI"
msgid "Handled by post."
-msgstr ""
+msgstr "Gestito via posta."
msgid "Has tag string/has tag string tag"
msgstr ""
@@ -897,7 +906,7 @@ msgid "HasTagString::HasTagStringTag|Value"
msgstr ""
msgid "Hello! You can make Freedom of Information requests within {{country_name}} at {{link_to_website}}"
-msgstr ""
+msgstr "Ciao! Puoi fare richieste in {{country_name}} attraverso {{link_to_website}}"
msgid "Hello, {{username}}!"
msgstr "Ciao, {{username}}!"
@@ -909,7 +918,7 @@ msgid "Here <strong>described</strong> means when a user selected a status for t
msgstr ""
msgid "Here is the message you wrote, in case you would like to copy the text and save it for later."
-msgstr ""
+msgstr "Questo è il messaggio che hai scritto. Copialo e salvalo se ti serve il testo in seguito."
msgid "Hi! We need your help. The person who made the following request\\n hasn't told us whether or not it was successful. Would you mind taking\\n a moment to read it and help us keep the place tidy for everyone?\\n Thanks."
msgstr ""
@@ -921,52 +930,52 @@ msgid "Holiday"
msgstr ""
msgid "Holiday|Day"
-msgstr ""
+msgstr "Holiday|Giorno"
msgid "Holiday|Description"
-msgstr ""
+msgstr "Holiday|Descrizione"
msgid "Home"
-msgstr ""
+msgstr "Home"
msgid "Home page"
msgstr ""
msgid "Home page of authority"
-msgstr ""
+msgstr "Home page dell'autorità"
msgid "However, you have the right to request environmental\\n information under a different law"
msgstr ""
msgid "Human health and safety"
-msgstr ""
+msgstr "Salute umana e sicurezza"
msgid "I am asking for <strong>new information</strong>"
-msgstr ""
+msgstr "Sto richiedendo una <strong>nuova informazione</strong>"
msgid "I am requesting an <strong>internal review</strong>"
-msgstr ""
+msgstr "Sto richiedendo una <strong>recensione interna</strong>"
msgid "I am writing to request an internal review of {{public_body_name}}'s handling of my FOI request '{{info_request_title}}'."
msgstr ""
msgid "I don't like these ones &mdash; give me some more!"
-msgstr ""
+msgstr "Non mi piacciono queste &mdash; dammene altre!"
msgid "I don't want to do any more tidying now!"
-msgstr ""
+msgstr "Non voglio fare nessun ordinamento ora!"
msgid "I like this request"
msgstr ""
msgid "I would like to <strong>withdraw this request</strong>"
-msgstr ""
+msgstr "Voglio <strong>ritirare questa richiesta</strong>"
msgid "I'm still <strong>waiting</strong> for my information\\n <small>(maybe you got an acknowledgement)</small>"
msgstr ""
msgid "I'm still <strong>waiting</strong> for the internal review"
-msgstr ""
+msgstr "Sto ancora <strong>aspettando</strong> la recensione interna"
msgid "I'm waiting for an <strong>internal review</strong> response"
msgstr ""
@@ -1793,6 +1802,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -1980,7 +1992,7 @@ msgid "Search in"
msgstr ""
msgid "Search over<br/>\\n <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\\n <strong>{{number_of_authorities}} authorities</strong>"
-msgstr "Cerca tra le<br/>\\n <strong>{{number_of_requests}} richieste</strong> <span>e le</span><br/>\\n <strong>{{number_of_authorities}} autorità pubbliche</strong>"
+msgstr "Cerca tra<br/>\\n <strong>{{number_of_requests}} richieste</strong> <span>e</span><br/>\\n <strong>{{number_of_authorities}} autorità pubbliche</strong>"
msgid "Search queries"
msgstr ""
@@ -2722,18 +2734,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3423,9 +3429,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/model_attributes.rb b/locale/model_attributes.rb
index 9f7da5e62..fc7bfd7d0 100644
--- a/locale/model_attributes.rb
+++ b/locale/model_attributes.rb
@@ -93,6 +93,7 @@ _('PublicBody|Info requests count')
_('PublicBody|Info requests not held count')
_('PublicBody|Info requests overdue count')
_('PublicBody|Info requests successful count')
+_('PublicBody|Info requests visible classified count')
_('PublicBody|Last edit comment')
_('PublicBody|Last edit editor')
_('PublicBody|Name')
@@ -111,10 +112,8 @@ _('TrackThing|Track query')
_('TrackThing|Track type')
_('User')
_('User|About me')
-_('User|Address')
_('User|Admin level')
_('User|Ban text')
-_('User|Dob')
_('User|Email')
_('User|Email bounce message')
_('User|Email bounced at')
diff --git a/locale/nb_NO/app.po b/locale/nb_NO/app.po
index 570290c95..f3cf8417e 100644
--- a/locale/nb_NO/app.po
+++ b/locale/nb_NO/app.po
@@ -3,15 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# gorm <gormer@gmail.com>, 2013
+# gorm <gormer@gmail.com>, 2013
# pere <pere-transifex@hungry.com>, 2013
# pere <pere-transifex@hungry.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/alaveteli/language/nb_NO/)\n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
@@ -67,7 +69,7 @@ msgid " Offer better ways of <strong>wording the request</strong> to get the inf
msgstr "Tilby bedre måter å <strong>ordlegge forespørselen</strong> for å få informasjonen."
msgid " Say how you've <strong>used the information</strong>, with links if possible."
-msgstr ""
+msgstr "Fortell hvordan du <strong>brukte informasjonen</strong>, gjerne med lenker hvis det er mulig."
msgid " Suggest <strong>where else</strong> the requester might find the information. "
msgstr "Foreslå <strong>hvor ellers</strong> innsenderen kan finne informasjonen."
@@ -112,7 +114,7 @@ msgid "*unknown*"
msgstr "*ukjent*"
msgid ",\\n\\n\\n\\nYours,\\n\\n{{user_name}}"
-msgstr ""
+msgstr ",\\n\\n\\n\\nMed vennlig hilsen,\\n\\n{{user_name}}"
msgid "- or -"
msgstr "- eller -"
@@ -136,7 +138,7 @@ msgid "<a href=\"{{url}}\">Sign in</a> to change password, subscriptions and mor
msgstr ""
msgid "<p>All done! Thank you very much for your help.</p><p>There are <a href=\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>"
-msgstr ""
+msgstr "<p>Alt er ferdig! Tusen takk for hjelpen.</p><p>Det er <a href=\"{{helpus_url}}\">flere ting du kan gjøre</a> for å hjelpe {{site_name}}.</p>"
msgid "<p>Thank you! Here are some ideas on what to do next:</p>\\n <ul>\\n <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\\n <li>If you would like to contest the authority's claim that they do not hold the information, here is\\n <a href=\"{{complain_url}}\">how to complain</a>.\\n </li>\\n <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\\n on other means to answer your question.\\n </li>\\n </ul>"
msgstr ""
@@ -186,8 +188,8 @@ msgstr "<p>Din henvendelse inneholder et <strong>postnummer</strong>. Med mindr
msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\\n <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\\n replied by then.</p>\\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an\\n annotation below telling people about your writing.</p>"
msgstr ""
"<p>Din {{law_used_full}}-forespørsel har blitt <strong>sendt avgårde</strong>!</p>\\n\n"
-"<p><strong>Vi vil sende deg en epost</strong> når det kommer et svar, eller etter {{late_number_of_days}} arbeidsdager, hvis øvrigheten ikke har svart innen da.</p>\\n\n"
-"<p>Hvis du skriver om denne forespørselen (for eksempel i et forum eller en blogg), så er det fint om du lenker til denne siden og eller til en kommentar under som forteller folk om det du har skrevet."
+"<p><strong>Vi vil kontakte deg med e-post</strong> når det kommer et svar, eller etter {{late_number_of_days}} arbeidsdager, om myndigheten ikke har svart innen da.</p>\\n\n"
+"<p>Hvis du skriver om denne forespørselen (for eksempel i et forum eller en blogg), så er det fint om du lenker til denne siden, og legger til en kommentar under som forteller folk om det du har skrevet."
msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
msgstr ""
@@ -813,15 +815,24 @@ msgstr ""
msgid "Follow this request"
msgstr "Følg denne henvendelsen"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Følg opp"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1020,7 +1031,7 @@ msgid "If you are {{user_link}}, please"
msgstr ""
msgid "If you believe this request is not suitable, you can report it for attention by the site administrators"
-msgstr "Hvis du syntes denne henvendelsen ikke er passende, kan du gjøre en admininstrator oppmerksom på den ved å rapportere henvendelsen"
+msgstr "Hvis du syntes denne henvendelsen er upassende, kan du rapportere den slik at en admininstrator vil sjekke"
msgid "If you can't click on it in the email, you'll have to <strong>select and copy\\nit</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\\nyou would type the address of any other webpage."
msgstr ""
@@ -1035,7 +1046,7 @@ msgid "If you got the email <strong>more than six months ago</strong>, then this
msgstr ""
msgid "If you have not done so already, please write a message below telling the authority that you have withdrawn your request. Otherwise they will not know it has been withdrawn."
-msgstr "Hvis du ikke allerede har gjort det, vær så snill å skriv en melding under som forteller øvrigheten at du har trukket tilbake din forespørsel. Ellers vil de ikke vite at den er trukket tilbake."
+msgstr "Hvis du ikke allerede har gjort det, vær så snill å skriv en melding under som forteller myndigheten at du har trukket tilbake din forespørsel. Ellers vil de ikke vite at den er trukket tilbake."
msgid "If you reply to this message it will go directly to {{user_name}}, who will\\nlearn your email address. Only reply if that is okay."
msgstr ""
@@ -1230,7 +1241,7 @@ msgid "Log in to download a zip file of {{info_request_title}}"
msgstr ""
msgid "Log into the admin interface"
-msgstr ""
+msgstr "Logg inn i administratorgrensesnittet"
msgid "Long overdue."
msgstr ""
@@ -1275,7 +1286,7 @@ msgid "Make your own request"
msgstr "Lag din egen forespørsel"
msgid "Many requests"
-msgstr ""
+msgstr "Mange forespørsler"
msgid "Message"
msgstr ""
@@ -1494,7 +1505,7 @@ msgid "Paste this link into emails, tweets, and anywhere else:"
msgstr "Lim denne lenken inn i eposter, tweets og andre steder:"
msgid "People"
-msgstr ""
+msgstr "Folk"
msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
msgstr ""
@@ -1796,6 +1807,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2725,18 +2739,12 @@ msgstr ""
msgid "User|About me"
msgstr "Bruker|Om meg"
-msgid "User|Address"
-msgstr "Bruker|Adresse"
-
msgid "User|Admin level"
msgstr "Bruker|Admin nivå"
msgid "User|Ban text"
msgstr "Bruker|Ban tekst"
-msgid "User|Dob"
-msgstr "Bruker|Dob"
-
msgid "User|Email"
msgstr "Bruker|E-post"
@@ -2870,7 +2878,7 @@ msgid "What information has been requested?"
msgstr "Hva slags informasjon er forespurt?"
msgid "When you get there, please update the status to say if the response \\ncontains any useful information."
-msgstr ""
+msgstr "Når du kommer dit, vær så snill å oppdatere statusen til å fortelle om svaret inneholdt noe nyttig informasjon."
msgid "When you receive the paper response, please help\\n others find out what it says:"
msgstr ""
@@ -3429,9 +3437,6 @@ msgstr "Bare {{info_request_user_name}} (henvender):"
msgid "{{law_used_full}} request - {{title}}"
msgstr "{{law_used_full}} henvendelse - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "{{law_used_full}} henvendelse GQ - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} henvendelse til {{public_body}}"
@@ -3475,7 +3480,7 @@ msgid "{{site_name}} sends new requests to <strong>{{request_email}}</strong> fo
msgstr "{site_name}} sender nye henvendelser til <strong>{{request_email}}</strong> for denne myndigheten."
msgid "{{site_name}} users have made {{number_of_requests}} requests, including:"
-msgstr "{{site_name}} brukere har skrevet {{number_of_requests}} henvendelser, inkludert:"
+msgstr "{{site_name}}-brukere har skrevet {{number_of_requests}} henvendelser, inkludert:"
msgid "{{thing_changed}} was changed from <code>{{from_value}}</code> to <code>{{to_value}}</code>"
msgstr "{{thing_changed}} ble forandret fra <code>{{from_value}}</code> til <code>{{to_value}}</code>"
diff --git a/locale/nl/app.po b/locale/nl/app.po
index 3b8f8d10a..a310b4a47 100644
--- a/locale/nl/app.po
+++ b/locale/nl/app.po
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/alaveteli/language/nl/)\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
@@ -807,15 +807,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1790,6 +1799,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2719,18 +2731,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3420,9 +3426,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/pl/app.po b/locale/pl/app.po
index 9efa0e398..ba6c4ec10 100644
--- a/locale/pl/app.po
+++ b/locale/pl/app.po
@@ -8,10 +8,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/alaveteli/language/pl/)\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
@@ -808,15 +808,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1792,6 +1801,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2725,18 +2737,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3432,9 +3438,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/pt_BR/app.po b/locale/pt_BR/app.po
index 6545b7edb..0dde37721 100644
--- a/locale/pt_BR/app.po
+++ b/locale/pt_BR/app.po
@@ -41,10 +41,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/alaveteli/language/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
@@ -861,15 +861,24 @@ msgstr "Seguir esta pessoa"
msgid "Follow this request"
msgstr "Acompanhar este pedido"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Acompanhar"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Mensagem de acompanhamento enviada pelo solicitante"
msgid "Follow up messages to existing requests are sent to "
msgstr "Mensagens de acompanhamento para solicitações existentes são enviadas para"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Acompanhamento e novas respostas ao pedido foram interrompidos para evitar spam. Por favor, <a href=\"{{url}}\">nos contate</a> se você for {{user_link}} e precisar enviar um acompanhamento."
@@ -1853,6 +1862,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody | Última edição"
@@ -2792,18 +2804,12 @@ msgstr "UserInfoRequestSentAlert | Tipo de alerta"
msgid "User|About me"
msgstr "Usuário | Sobre mim"
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr "Usuário | Nível de administrador"
msgid "User|Ban text"
msgstr "Usuário | Banir texto"
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "Usuário | E-mail"
@@ -3503,9 +3509,6 @@ msgstr "{{info_request_user_name}} apenas:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "Pedido de {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "Pedidos de Informação a(o) {{public_body}}"
diff --git a/locale/pt_PT/app.po b/locale/pt_PT/app.po
new file mode 100644
index 000000000..e30271443
--- /dev/null
+++ b/locale/pt_PT/app.po
@@ -0,0 +1,3514 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# helenaromao <helenaromao@gmail.com>, 2013
+# helenaromao <helenaromao@gmail.com>, 2013
+# luispaisbernardo <luispaisbernardo@gmail.com>, 2013
+# luispaisbernardo <luispaisbernardo@gmail.com>, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: alaveteli\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-09 16:17+0000\n"
+"Last-Translator: luispaisbernardo <luispaisbernardo@gmail.com>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/alaveteli/language/pt_PT/)\n"
+"Language: pt_PT\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid " This will appear on your {{site_name}} profile, to make it\\n easier for others to get involved with what you're doing."
+msgstr ""
+
+msgid " (<strong>no ranty</strong> politics, read our <a href=\"{{url}}\">moderation policy</a>)"
+msgstr ""
+
+msgid " (<strong>patience</strong>, especially for large files, it may take a while!)"
+msgstr ""
+
+msgid " (you)"
+msgstr "(você)"
+
+msgid " - view and make Freedom of Information requests"
+msgstr "- veja e faça pedidos de acesso à informação"
+
+msgid " - wall"
+msgstr ""
+
+msgid " <strong>Note:</strong>\\n We will send you an email. Follow the instructions in it to change\\n your password."
+msgstr ""
+
+msgid " <strong>Privacy note:</strong> Your email address will be given to"
+msgstr ""
+
+msgid " <strong>Summarise</strong> the content of any information returned. "
+msgstr ""
+
+msgid " Advise on how to <strong>best clarify</strong> the request."
+msgstr ""
+
+msgid " Ideas on what <strong>other documents to request</strong> which the authority may hold. "
+msgstr ""
+
+msgid " If you know the address to use, then please <a href=\"{{url}}\">send it to us</a>.\\n You may be able to find the address on their website, or by phoning them up and asking."
+msgstr ""
+
+msgid " Include relevant links, such as to a campaign page, your blog or a\\n twitter account. They will be made clickable. \\n e.g."
+msgstr ""
+
+msgid " Link to the information requested, if it is <strong>already available</strong> on the Internet. "
+msgstr ""
+
+msgid " Offer better ways of <strong>wording the request</strong> to get the information. "
+msgstr ""
+
+msgid " Say how you've <strong>used the information</strong>, with links if possible."
+msgstr ""
+
+msgid " Suggest <strong>where else</strong> the requester might find the information. "
+msgstr ""
+
+msgid " What are you investigating using Freedom of Information? "
+msgstr ""
+
+msgid " You are already being emailed updates about the request."
+msgstr "Já está a receber actualizações acerca deste email."
+
+msgid " You will also be emailed updates about the request."
+msgstr "Ser-lhe-ão enviadas actualizações acerca deste pedido via email."
+
+msgid " made by "
+msgstr "criado por"
+
+msgid " or "
+msgstr "ou"
+
+msgid " when you send this message."
+msgstr "quando enviar esta mensagem."
+
+msgid "\"Hello! We have an <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">important message</a> for visitors outside {{country_name}}\""
+msgstr ""
+
+msgid "'Crime statistics by ward level for Wales'"
+msgstr ""
+
+msgid "'Pollution levels over time for the River Tyne'"
+msgstr ""
+
+msgid "'{{link_to_authority}}', a public authority"
+msgstr "'{{link_to_authority}}', uma autoridade pública"
+
+msgid "'{{link_to_request}}', a request"
+msgstr ""
+
+msgid "'{{link_to_user}}', a person"
+msgstr ""
+
+msgid "*unknown*"
+msgstr ""
+
+msgid ",\\n\\n\\n\\nYours,\\n\\n{{user_name}}"
+msgstr ""
+
+msgid "- or -"
+msgstr "- ou -"
+
+msgid "1. Select an authority"
+msgstr "1. Seleccione uma entidade"
+
+msgid "2. Ask for Information"
+msgstr "2. Peça informação"
+
+msgid "3. Now check your request"
+msgstr "3. Agora, verifique o seu pedido"
+
+msgid "<a href=\"{{browse_url}}\">Browse all</a> or <a href=\"{{add_url}}\">ask us to add one</a>."
+msgstr ""
+
+msgid "<a href=\"{{url}}\">Add an annotation</a> (to help the requester or others)"
+msgstr ""
+
+msgid "<a href=\"{{url}}\">Sign in</a> to change password, subscriptions and more ({{user_name}} only)"
+msgstr ""
+
+msgid "<p>All done! Thank you very much for your help.</p><p>There are <a href=\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>"
+msgstr ""
+
+msgid "<p>Thank you! Here are some ideas on what to do next:</p>\\n <ul>\\n <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\\n <li>If you would like to contest the authority's claim that they do not hold the information, here is\\n <a href=\"{{complain_url}}\">how to complain</a>.\\n </li>\\n <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\\n on other means to answer your question.\\n </li>\\n </ul>"
+msgstr ""
+
+msgid "<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you should have got a response promptly, and normally before the end of <strong>{{date_response_required_by}}</strong>.</p>"
+msgstr ""
+
+msgid "<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\\n{{date_response_required_by}}</strong>.</p>"
+msgstr ""
+
+msgid "<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a response within {{late_number_of_days}} days, or be told if it will take longer (<a href=\"{{review_url}}\">details</a>).</p>"
+msgstr ""
+
+msgid "<p>Thank you! Your request is long overdue, by more than {{very_late_number_of_days}} working days. Most requests should be answered within {{late_number_of_days}} working days. You might like to complain about this, see below.</p>"
+msgstr "<p>Thank you! Your request is long overdue, by more than {{very_late_number_of_days}} working days. Most requests should be answered within {{late_number_of_days}} working days. You might like to complain about this, see below.</p>"
+
+msgid "<p>Thanks for changing the text about you on your profile.</p>\\n <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
+msgstr ""
+
+msgid "<p>Thanks for updating your profile photo.</p>\\n <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
+msgstr ""
+
+msgid "<p>We recommend that you edit your request and remove the email address.\\n If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
+msgstr ""
+
+msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p>"
+msgstr ""
+
+msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p><p>If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p>"
+msgstr ""
+
+msgid "<p>We're glad you got some of the information that you wanted. If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
+msgstr ""
+
+msgid "<p>We're glad you got some of the information that you wanted.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
+msgstr ""
+
+msgid "<p>You do not need to include your email in the request in order to get a reply (<a href=\"{{url}}\">details</a>).</p>"
+msgstr ""
+
+msgid "<p>You do not need to include your email in the request in order to get a reply, as we will ask for it on the next screen (<a href=\"{{url}}\">details</a>).</p>"
+msgstr ""
+
+msgid "<p>Your request contains a <strong>postcode</strong>. Unless it directly relates to the subject of your request, please remove any address as it will <strong>appear publicly on the Internet</strong>.</p>"
+msgstr ""
+
+msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\\n <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\\n replied by then.</p>\\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an\\n annotation below telling people about your writing.</p>"
+msgstr ""
+
+msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
+msgstr ""
+
+msgid "<small>If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way.</small>\\n</p>"
+msgstr ""
+
+msgid "<strong> Can I request information about myself?</strong>\\n\t\t\t<a href=\"{{url}}\">No! (Click here for details)</a>"
+msgstr ""
+
+msgid "<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL."
+msgstr ""
+
+msgid "<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
+msgstr ""
+
+msgid "<strong><code>request:</code></strong> to restrict to a specific request, typing the title as in the URL."
+msgstr ""
+
+msgid "<strong><code>requested_by:julian_todd</code></strong> to search requests made by Julian Todd, typing the name as in the URL."
+msgstr ""
+
+msgid "<strong><code>requested_from:home_office</code></strong> to search requests from the Home Office, typing the name as in the URL."
+msgstr ""
+
+msgid "<strong><code>status:</code></strong> to select based on the status or historical status of the request, see the <a href=\"{{statuses_url}}\">table of statuses</a> below."
+msgstr ""
+
+msgid "<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \\n and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\\n can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
+msgstr ""
+
+msgid "<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
+msgstr ""
+
+msgid "<strong>Advice</strong> on how to get a response that will satisfy the requester. </li>"
+msgstr ""
+
+msgid "<strong>All the information</strong> has been sent"
+msgstr ""
+
+msgid "<strong>Anything else</strong>, such as clarifying, prompting, thanking"
+msgstr ""
+
+msgid "<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \\na good internal knowledge of user behaviour on {{site_name}}. How, \\nwhy and by whom requests are categorised is not straightforward, and there will\\nbe user error and ambiguity. You will also need to understand FOI law, and the\\nway authorities use it. Plus you'll need to be an elite statistician. Please\\n<a href=\"{{contact_path}}\">contact us</a> with questions."
+msgstr ""
+
+msgid "<strong>Clarification</strong> has been requested"
+msgstr ""
+
+msgid "<strong>No response</strong> has been received\\n <small>(maybe there's just an acknowledgement)</small>"
+msgstr ""
+
+msgid "<strong>Note:</strong> Because we're testing, requests are being sent to {{email}} rather than to the actual authority."
+msgstr ""
+
+msgid "<strong>Note:</strong> You're sending a message to yourself, presumably\\n to try out how it works."
+msgstr ""
+
+msgid "<strong>Note:</strong>\\n We will send an email to your new email address. Follow the\\n instructions in it to confirm changing your email."
+msgstr ""
+
+msgid "<strong>Privacy note:</strong> If you want to request private information about\\n yourself then <a href=\"{{url}}\">click here</a>."
+msgstr ""
+
+msgid "<strong>Privacy note:</strong> Your photo will be shown in public on the Internet,\\n wherever you do something on {{site_name}}."
+msgstr ""
+
+msgid "<strong>Privacy warning:</strong> Your message, and any response\\n to it, will be displayed publicly on this website."
+msgstr ""
+
+msgid "<strong>Some of the information</strong> has been sent "
+msgstr ""
+
+msgid "<strong>Thank</strong> the public authority or "
+msgstr ""
+
+msgid "<strong>did not have</strong> the information requested."
+msgstr ""
+
+msgid "A <a href=\"{{request_url}}\">follow up</a> to <em>{{request_title}}</em> was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+msgstr ""
+
+msgid "A <a href=\"{{request_url}}\">response</a> to <em>{{request_title}}</em> was sent by {{public_body_name}} to {{info_request_user}} on {{date}}. The request status is: {{request_status}}"
+msgstr ""
+
+msgid "A <strong>summary</strong> of the response if you have received it by post. "
+msgstr ""
+
+msgid "A Freedom of Information request"
+msgstr ""
+
+msgid "A full history of my FOI request and all correspondence is available on the Internet at this address: {{url}}"
+msgstr ""
+
+msgid "A new request, <em><a href=\"{{request_url}}\">{{request_title}}</a></em>, was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+msgstr ""
+
+msgid "A public authority"
+msgstr "uma entidade pública"
+
+msgid "A response will be sent <strong>by post</strong>"
+msgstr ""
+
+msgid "A strange reponse, required attention by the {{site_name}} team"
+msgstr ""
+
+msgid "A vexatious request"
+msgstr ""
+
+msgid "A {{site_name}} user"
+msgstr ""
+
+msgid "About you:"
+msgstr ""
+
+msgid "Act on what you've learnt"
+msgstr ""
+
+msgid "Acts as xapian/acts as xapian job"
+msgstr ""
+
+msgid "ActsAsXapian::ActsAsXapianJob|Action"
+msgstr ""
+
+msgid "ActsAsXapian::ActsAsXapianJob|Model"
+msgstr ""
+
+msgid "Add an annotation"
+msgstr "Adicione uma nota"
+
+msgid "Add an annotation to your request with choice quotes, or\\n a <strong>summary of the response</strong>."
+msgstr ""
+
+msgid "Added on {{date}}"
+msgstr ""
+
+msgid "Admin level is not included in list"
+msgstr ""
+
+msgid "Administration URL:"
+msgstr ""
+
+msgid "Advanced search"
+msgstr "Pesquisa avançada"
+
+msgid "Advanced search tips"
+msgstr "Dicas sobre pesquisa avançada"
+
+msgid "Advise on whether the <strong>refusal is legal</strong>, and how to complain about it if not."
+msgstr ""
+
+msgid "Air, water, soil, land, flora and fauna (including how these effect\\n human beings)"
+msgstr ""
+
+msgid "All of the information requested has been received"
+msgstr "Toda a informação pedida foi recebida"
+
+msgid "All the options below can use <strong>status</strong> or <strong>latest_status</strong> before the colon. For example, <strong>status:not_held</strong> will match requests which have <em>ever</em> been marked as not held; <strong>latest_status:not_held</strong> will match only requests that are <em>currently</em> marked as not held."
+msgstr ""
+
+msgid "All the options below can use <strong>variety</strong> or <strong>latest_variety</strong> before the colon. For example, <strong>variety:sent</strong> will match requests which have <em>ever</em> been sent; <strong>latest_variety:sent</strong> will match only requests that are <em>currently</em> marked as sent."
+msgstr ""
+
+msgid "Also called {{other_name}}."
+msgstr ""
+
+msgid "Also send me alerts by email"
+msgstr ""
+
+msgid "Alter your subscription"
+msgstr "Modifique a sua subscrição"
+
+msgid "Although all responses are automatically published, we depend on\\nyou, the original requester, to evaluate them."
+msgstr ""
+
+msgid "An <a href=\"{{request_url}}\">annotation</a> to <em>{{request_title}}</em> was made by {{event_comment_user}} on {{date}}"
+msgstr ""
+
+msgid "An <strong>error message</strong> has been received"
+msgstr ""
+
+msgid "An Environmental Information Regulations request"
+msgstr "Um pedido de acesso a Regulamentos de Informação Ambiental"
+
+msgid "An anonymous user"
+msgstr ""
+
+msgid "Annotation added to request"
+msgstr "Nota adicionada ao pedido"
+
+msgid "Annotations"
+msgstr "Notas"
+
+msgid "Annotations are so anyone, including you, can help the requester with their request. For example:"
+msgstr "As notas servem para que qualquer pessoa, incluindo você, possa apoiar o requerente com o seu pedido. Por exemplo:"
+
+msgid "Annotations will be posted publicly here, and are\\n <strong>not</strong> sent to {{public_body_name}}."
+msgstr ""
+
+msgid "Anonymous user"
+msgstr "Utilizador anónimo"
+
+msgid "Anyone:"
+msgstr "Qualquer pessoa:"
+
+msgid "Applies to"
+msgstr ""
+
+msgid "Are we missing a public authority?"
+msgstr ""
+
+msgid "Are you the owner of any commercial copyright on this page?"
+msgstr ""
+
+msgid "Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries."
+msgstr ""
+
+msgid "At the bottom of this page, write a reply to them trying to persuade them to scan it in\\n (<a href=\"{{url}}\">more details</a>)."
+msgstr ""
+
+msgid "Attachment (optional):"
+msgstr "Anexo (opcional)"
+
+msgid "Attachment:"
+msgstr "Anexo"
+
+msgid "Awaiting classification."
+msgstr "Classificação pendente"
+
+msgid "Awaiting internal review."
+msgstr "Revisão interna pendente"
+
+msgid "Awaiting response."
+msgstr "Resposta pendente"
+
+msgid "Beginning with"
+msgstr ""
+
+msgid "Browse <a href='{{url}}'>other requests</a> for examples of how to word your request."
+msgstr ""
+
+msgid "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request."
+msgstr ""
+
+msgid "Browse all authorities..."
+msgstr "Pesquise todas as autoridades..."
+
+msgid "By law, under all circumstances, {{public_body_link}} should have responded by now"
+msgstr ""
+
+msgid "By law, {{public_body_link}} should normally have responded <strong>promptly</strong> and"
+msgstr ""
+
+msgid "Calculated home page"
+msgstr ""
+
+msgid "Can't find the one you want?"
+msgstr "Não encontra o que pretende?"
+
+msgid "Cancel a {{site_name}} alert"
+msgstr ""
+
+msgid "Cancel some {{site_name}} alerts"
+msgstr ""
+
+msgid "Cancel, return to your profile page"
+msgstr "Cancelar, regresse à sua página de perfil"
+
+msgid "Censor rule"
+msgstr ""
+
+msgid "CensorRule|Last edit comment"
+msgstr ""
+
+msgid "CensorRule|Last edit editor"
+msgstr ""
+
+msgid "CensorRule|Regexp"
+msgstr ""
+
+msgid "CensorRule|Replacement"
+msgstr ""
+
+msgid "CensorRule|Text"
+msgstr ""
+
+msgid "Change email on {{site_name}}"
+msgstr ""
+
+msgid "Change password on {{site_name}}"
+msgstr ""
+
+msgid "Change profile photo"
+msgstr ""
+
+msgid "Change the text about you on your profile at {{site_name}}"
+msgstr ""
+
+msgid "Change your email"
+msgstr ""
+
+msgid "Change your email address used on {{site_name}}"
+msgstr ""
+
+msgid "Change your password"
+msgstr ""
+
+msgid "Change your password on {{site_name}}"
+msgstr ""
+
+msgid "Change your password {{site_name}}"
+msgstr ""
+
+msgid "Charity registration"
+msgstr ""
+
+msgid "Check for mistakes if you typed or copied the address."
+msgstr ""
+
+msgid "Check you haven't included any <strong>personal information</strong>."
+msgstr ""
+
+msgid "Choose your profile photo"
+msgstr ""
+
+msgid "Clarification"
+msgstr ""
+
+msgid "Clarify your FOI request - "
+msgstr ""
+
+msgid "Classify an FOI response from "
+msgstr ""
+
+msgid "Clear photo"
+msgstr ""
+
+msgid "Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\\nreview, asking them to find out why response to the request has been so slow."
+msgstr ""
+
+msgid "Click on the link below to send a message to {{public_body}} reminding them to reply to your request."
+msgstr ""
+
+msgid "Close"
+msgstr "Fechar"
+
+msgid "Comment"
+msgstr "Comentário"
+
+msgid "Comment|Body"
+msgstr ""
+
+msgid "Comment|Comment type"
+msgstr ""
+
+msgid "Comment|Locale"
+msgstr ""
+
+msgid "Comment|Visible"
+msgstr ""
+
+msgid "Confirm you want to follow all successful FOI requests"
+msgstr ""
+
+msgid "Confirm you want to follow new requests"
+msgstr ""
+
+msgid "Confirm you want to follow new requests or responses matching your search"
+msgstr ""
+
+msgid "Confirm you want to follow requests by '{{user_name}}'"
+msgstr ""
+
+msgid "Confirm you want to follow requests to '{{public_body_name}}'"
+msgstr ""
+
+msgid "Confirm you want to follow the request '{{request_title}}'"
+msgstr ""
+
+msgid "Confirm your FOI request to "
+msgstr ""
+
+msgid "Confirm your account on {{site_name}}"
+msgstr ""
+
+msgid "Confirm your annotation to {{info_request_title}}"
+msgstr ""
+
+msgid "Confirm your email address"
+msgstr ""
+
+msgid "Confirm your new email address on {{site_name}}"
+msgstr ""
+
+msgid "Considered by administrators as not an FOI request and hidden from site."
+msgstr ""
+
+msgid "Considered by administrators as vexatious and hidden from site."
+msgstr ""
+
+msgid "Contact {{recipient}}"
+msgstr ""
+
+msgid "Contact {{site_name}}"
+msgstr ""
+
+msgid "Could not identify the request from the email address"
+msgstr ""
+
+msgid "Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and many other common image file formats are supported."
+msgstr ""
+
+msgid "Crop your profile photo"
+msgstr ""
+
+msgid "Cultural sites and built structures (as they may be affected by the\\n environmental factors listed above)"
+msgstr ""
+
+msgid "Currently <strong>waiting for a response</strong> from {{public_body_link}}, they must respond promptly and"
+msgstr ""
+
+msgid "Date:"
+msgstr "Data:"
+
+msgid "Dear {{name}},"
+msgstr ""
+
+msgid "Dear {{public_body_name}},"
+msgstr ""
+
+msgid "Default locale"
+msgstr ""
+
+msgid "Defunct."
+msgstr ""
+
+msgid "Delayed response to your FOI request - "
+msgstr ""
+
+msgid "Delayed."
+msgstr ""
+
+msgid "Delivery error"
+msgstr ""
+
+msgid "Destroy {{name}}"
+msgstr ""
+
+msgid "Details of request '"
+msgstr ""
+
+msgid "Did you mean: {{correction}}"
+msgstr ""
+
+msgid "Disclaimer: This message and any reply that you make will be published on the internet. Our privacy and copyright policies:"
+msgstr ""
+
+msgid "Disclosure log"
+msgstr ""
+
+msgid "Disclosure log URL"
+msgstr ""
+
+msgid "Don't want to address your message to {{person_or_body}}? You can also write to:"
+msgstr ""
+
+msgid "Done"
+msgstr "Terminado."
+
+msgid "Done &gt;&gt;"
+msgstr ""
+
+msgid "Download a zip file of all correspondence"
+msgstr ""
+
+msgid "Download original attachment"
+msgstr ""
+
+msgid "EIR"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit and add <strong>more details</strong> to the message above,\\n explaining why you are dissatisfied with their response."
+msgstr ""
+
+msgid "Edit text about you"
+msgstr ""
+
+msgid "Edit this request"
+msgstr ""
+
+msgid "Either the email or password was not recognised, please try again."
+msgstr ""
+
+msgid "Either the email or password was not recognised, please try again. Or create a new account using the form on the right."
+msgstr ""
+
+msgid "Email doesn't look like a valid address"
+msgstr ""
+
+msgid "Email me future updates to this request"
+msgstr ""
+
+msgid "Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>"
+msgstr ""
+
+msgid "Enter your response below. You may attach one file (use email, or\\n <a href=\"{{url}}\">contact us</a> if you need more)."
+msgstr ""
+
+msgid "Environmental Information Regulations"
+msgstr ""
+
+msgid "Environmental Information Regulations requests made"
+msgstr ""
+
+msgid "Environmental Information Regulations requests made using this site"
+msgstr ""
+
+msgid "Event history"
+msgstr ""
+
+msgid "Event history details"
+msgstr ""
+
+msgid "Event {{id}}"
+msgstr ""
+
+msgid "Everything that you enter on this page, including <strong>your name</strong>,\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
+msgstr ""
+
+msgid "Everything that you enter on this page\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
+msgstr ""
+
+msgid "FOI"
+msgstr ""
+
+msgid "FOI email address for {{public_body}}"
+msgstr ""
+
+msgid "FOI request – {{title}}"
+msgstr ""
+
+msgid "FOI requests"
+msgstr ""
+
+msgid "FOI requests by '{{user_name}}'"
+msgstr ""
+
+msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr ""
+
+msgid "FOI response requires admin ({{reason}}) - {{title}}"
+msgstr ""
+
+msgid "Failed to convert image to a PNG"
+msgstr ""
+
+msgid "Failed to convert image to the correct size: at {{cols}}x{{rows}}, need {{width}}x{{height}}"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "First, did your other requests succeed?"
+msgstr ""
+
+msgid "First, type in the <strong>name of the UK public authority</strong> you'd\\n like information from. <strong>By law, they have to respond</strong>\\n (<a href=\"{{url}}\">why?</a>)."
+msgstr ""
+
+msgid "Foi attachment"
+msgstr ""
+
+msgid "FoiAttachment|Charset"
+msgstr ""
+
+msgid "FoiAttachment|Content type"
+msgstr ""
+
+msgid "FoiAttachment|Display size"
+msgstr ""
+
+msgid "FoiAttachment|Filename"
+msgstr ""
+
+msgid "FoiAttachment|Hexdigest"
+msgstr ""
+
+msgid "FoiAttachment|Url part number"
+msgstr ""
+
+msgid "FoiAttachment|Within rfc822 subject"
+msgstr ""
+
+msgid "Follow"
+msgstr ""
+
+msgid "Follow all new requests"
+msgstr ""
+
+msgid "Follow new successful responses"
+msgstr ""
+
+msgid "Follow requests to {{public_body_name}}"
+msgstr ""
+
+msgid "Follow these requests"
+msgstr ""
+
+msgid "Follow things matching this search"
+msgstr ""
+
+msgid "Follow this authority"
+msgstr ""
+
+msgid "Follow this link to see the request:"
+msgstr ""
+
+msgid "Follow this person"
+msgstr ""
+
+msgid "Follow this request"
+msgstr ""
+
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
+msgid "Follow up"
+msgstr ""
+
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
+msgid "Follow up message sent by requester"
+msgstr ""
+
+msgid "Follow up messages to existing requests are sent to "
+msgstr ""
+
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
+msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
+msgstr ""
+
+msgid "Follow us on twitter"
+msgstr ""
+
+msgid "Followups cannot be sent for this request, as it was made externally, and published here by {{public_body_name}} on the requester's behalf."
+msgstr ""
+
+msgid "For an unknown reason, it is not possible to make a request to this authority."
+msgstr ""
+
+msgid "Forgotten your password?"
+msgstr ""
+
+msgid "Found {{count}} public authority {{description}}"
+msgid_plural "Found {{count}} public authorities {{description}}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Freedom of Information"
+msgstr ""
+
+msgid "Freedom of Information Act"
+msgstr ""
+
+msgid "Freedom of Information law does not apply to this authority, so you cannot make\\n a request to it."
+msgstr ""
+
+msgid "Freedom of Information law no longer applies to"
+msgstr ""
+
+msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
+msgstr ""
+
+msgid "Freedom of Information requests made"
+msgstr ""
+
+msgid "Freedom of Information requests made by this person"
+msgstr ""
+
+msgid "Freedom of Information requests made by you"
+msgstr ""
+
+msgid "Freedom of Information requests made using this site"
+msgstr ""
+
+msgid "Freedom of information requests to"
+msgstr ""
+
+msgid "From"
+msgstr "De"
+
+msgid "From the request page, try replying to a particular message, rather than sending\\n a general followup. If you need to make a general followup, and know\\n an email which will go to the right place, please <a href=\"{{url}}\">send it to us</a>."
+msgstr ""
+
+msgid "From:"
+msgstr ""
+
+msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
+msgstr ""
+
+msgid "Handled by post."
+msgstr ""
+
+msgid "Has tag string/has tag string tag"
+msgstr ""
+
+msgid "HasTagString::HasTagStringTag|Model"
+msgstr ""
+
+msgid "HasTagString::HasTagStringTag|Name"
+msgstr ""
+
+msgid "HasTagString::HasTagStringTag|Value"
+msgstr ""
+
+msgid "Hello! You can make Freedom of Information requests within {{country_name}} at {{link_to_website}}"
+msgstr ""
+
+msgid "Hello, {{username}}!"
+msgstr ""
+
+msgid "Help"
+msgstr "Ajuda"
+
+msgid "Here <strong>described</strong> means when a user selected a status for the request, and\\nthe most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\\n{{site_name}} for intermediate events, which weren't given an explicit\\ndescription by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
+msgstr ""
+
+msgid "Here is the message you wrote, in case you would like to copy the text and save it for later."
+msgstr ""
+
+msgid "Hi! We need your help. The person who made the following request\\n hasn't told us whether or not it was successful. Would you mind taking\\n a moment to read it and help us keep the place tidy for everyone?\\n Thanks."
+msgstr ""
+
+msgid "Hide request"
+msgstr ""
+
+msgid "Holiday"
+msgstr ""
+
+msgid "Holiday|Day"
+msgstr ""
+
+msgid "Holiday|Description"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "Home page"
+msgstr ""
+
+msgid "Home page of authority"
+msgstr ""
+
+msgid "However, you have the right to request environmental\\n information under a different law"
+msgstr ""
+
+msgid "Human health and safety"
+msgstr ""
+
+msgid "I am asking for <strong>new information</strong>"
+msgstr ""
+
+msgid "I am requesting an <strong>internal review</strong>"
+msgstr ""
+
+msgid "I am writing to request an internal review of {{public_body_name}}'s handling of my FOI request '{{info_request_title}}'."
+msgstr ""
+
+msgid "I don't like these ones &mdash; give me some more!"
+msgstr ""
+
+msgid "I don't want to do any more tidying now!"
+msgstr ""
+
+msgid "I like this request"
+msgstr ""
+
+msgid "I would like to <strong>withdraw this request</strong>"
+msgstr ""
+
+msgid "I'm still <strong>waiting</strong> for my information\\n <small>(maybe you got an acknowledgement)</small>"
+msgstr ""
+
+msgid "I'm still <strong>waiting</strong> for the internal review"
+msgstr ""
+
+msgid "I'm waiting for an <strong>internal review</strong> response"
+msgstr ""
+
+msgid "I've been asked to <strong>clarify</strong> my request"
+msgstr ""
+
+msgid "I've received <strong>all the information"
+msgstr ""
+
+msgid "I've received <strong>some of the information</strong>"
+msgstr ""
+
+msgid "I've received an <strong>error message</strong>"
+msgstr ""
+
+msgid "I've received an error message"
+msgstr ""
+
+msgid "Id"
+msgstr ""
+
+msgid "If the address is wrong, or you know a better address, please <a href=\"{{url}}\">contact us</a>."
+msgstr ""
+
+msgid "If the error was a delivery failure, and you can find an up to date FOI email address for the authority, please tell us using the form below."
+msgstr ""
+
+msgid "If this is incorrect, or you would like to send a late response to the request\\nor an email on another subject to {{user}}, then please\\nemail {{contact_email}} for help."
+msgstr ""
+
+msgid "If you are dissatisfied by the response you got from\\n the public authority, you have the right to\\n complain (<a href=\"{{url}}\">details</a>)."
+msgstr ""
+
+msgid "If you are still having trouble, please <a href=\"{{url}}\">contact us</a>."
+msgstr ""
+
+msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the message."
+msgstr ""
+
+msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the request."
+msgstr ""
+
+msgid "If you are thinking of using a pseudonym,\\n please <a href=\"{{url}}\">read this first</a>."
+msgstr ""
+
+msgid "If you are {{user_link}}, please"
+msgstr ""
+
+msgid "If you believe this request is not suitable, you can report it for attention by the site administrators"
+msgstr ""
+
+msgid "If you can't click on it in the email, you'll have to <strong>select and copy\\nit</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\\nyou would type the address of any other webpage."
+msgstr ""
+
+msgid "If you can, scan in or photograph the response, and <strong>send us\\n a copy to upload</strong>."
+msgstr ""
+
+msgid "If you find this service useful as an FOI officer, please ask your web manager to link to us from your organisation's FOI page."
+msgstr ""
+
+msgid "If you got the email <strong>more than six months ago</strong>, then this login link won't work any\\nmore. Please try doing what you were doing from the beginning."
+msgstr ""
+
+msgid "If you have not done so already, please write a message below telling the authority that you have withdrawn your request. Otherwise they will not know it has been withdrawn."
+msgstr ""
+
+msgid "If you reply to this message it will go directly to {{user_name}}, who will\\nlearn your email address. Only reply if that is okay."
+msgstr ""
+
+msgid "If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way."
+msgstr ""
+
+msgid "If you would like us to lift this ban, then you may politely\\n<a href=\"/help/contact\">contact us</a> giving reasons.\\n"
+msgstr ""
+
+msgid "If you're new to {{site_name}}"
+msgstr ""
+
+msgid "If you've used {{site_name}} before"
+msgstr ""
+
+msgid "If your browser is set to accept cookies and you are seeing this message,\\nthen there is probably a fault with our server."
+msgstr ""
+
+msgid "Incoming email address"
+msgstr ""
+
+msgid "Incoming message"
+msgstr ""
+
+msgid "IncomingMessage|Cached attachment text clipped"
+msgstr ""
+
+msgid "IncomingMessage|Cached main body text folded"
+msgstr ""
+
+msgid "IncomingMessage|Cached main body text unfolded"
+msgstr ""
+
+msgid "IncomingMessage|Last parsed"
+msgstr ""
+
+msgid "IncomingMessage|Mail from"
+msgstr ""
+
+msgid "IncomingMessage|Mail from domain"
+msgstr ""
+
+msgid "IncomingMessage|Prominence"
+msgstr ""
+
+msgid "IncomingMessage|Prominence reason"
+msgstr ""
+
+msgid "IncomingMessage|Sent at"
+msgstr ""
+
+msgid "IncomingMessage|Subject"
+msgstr ""
+
+msgid "IncomingMessage|Valid to reply to"
+msgstr ""
+
+msgid "Individual requests"
+msgstr ""
+
+msgid "Info request"
+msgstr ""
+
+msgid "Info request event"
+msgstr ""
+
+msgid "InfoRequestEvent|Calculated state"
+msgstr ""
+
+msgid "InfoRequestEvent|Described state"
+msgstr ""
+
+msgid "InfoRequestEvent|Event type"
+msgstr ""
+
+msgid "InfoRequestEvent|Last described at"
+msgstr ""
+
+msgid "InfoRequestEvent|Params yaml"
+msgstr ""
+
+msgid "InfoRequest|Allow new responses from"
+msgstr ""
+
+msgid "InfoRequest|Attention requested"
+msgstr ""
+
+msgid "InfoRequest|Awaiting description"
+msgstr ""
+
+msgid "InfoRequest|Comments allowed"
+msgstr ""
+
+msgid "InfoRequest|Described state"
+msgstr ""
+
+msgid "InfoRequest|External url"
+msgstr ""
+
+msgid "InfoRequest|External user name"
+msgstr ""
+
+msgid "InfoRequest|Handle rejected responses"
+msgstr ""
+
+msgid "InfoRequest|Idhash"
+msgstr ""
+
+msgid "InfoRequest|Law used"
+msgstr ""
+
+msgid "InfoRequest|Prominence"
+msgstr ""
+
+msgid "InfoRequest|Title"
+msgstr ""
+
+msgid "InfoRequest|Url title"
+msgstr ""
+
+msgid "Information not held."
+msgstr ""
+
+msgid "Information on emissions and discharges (e.g. noise, energy,\\n radiation, waste materials)"
+msgstr ""
+
+msgid "Internal review request"
+msgstr ""
+
+msgid "Is {{email_address}} the wrong address for {{type_of_request}} requests to {{public_body_name}}? If so, please contact us using this form:"
+msgstr ""
+
+msgid "It may be that your browser is not set to accept a thing called \"cookies\",\\nor cannot do so. If you can, please enable cookies, or try using a different\\nbrowser. Then press refresh to have another go."
+msgstr ""
+
+msgid "Items matching the following conditions are currently displayed on your wall."
+msgstr ""
+
+msgid "Items sent in last month"
+msgstr ""
+
+msgid "Joined in"
+msgstr ""
+
+msgid "Joined {{site_name}} in"
+msgstr ""
+
+msgid "Just one more thing"
+msgstr ""
+
+msgid "Keep it <strong>focused</strong>, you'll be more likely to get what you want (<a href=\"{{url}}\">why?</a>)."
+msgstr ""
+
+msgid "Keywords"
+msgstr ""
+
+msgid "Last authority viewed: "
+msgstr ""
+
+msgid "Last request viewed: "
+msgstr ""
+
+msgid "Let us know what you were doing when this message\\nappeared and your browser and operating system type and version."
+msgstr ""
+
+msgid "Link to this"
+msgstr ""
+
+msgid "List all"
+msgstr ""
+
+msgid "List of all authorities (CSV)"
+msgstr ""
+
+msgid "Listing FOI requests"
+msgstr ""
+
+msgid "Listing public authorities"
+msgstr ""
+
+msgid "Listing public authorities matching '{{query}}'"
+msgstr ""
+
+msgid "Listing tracks"
+msgstr ""
+
+msgid "Listing users"
+msgstr ""
+
+msgid "Log in to download a zip file of {{info_request_title}}"
+msgstr ""
+
+msgid "Log into the admin interface"
+msgstr ""
+
+msgid "Long overdue."
+msgstr ""
+
+msgid "Made between"
+msgstr ""
+
+msgid "Mail server log"
+msgstr ""
+
+msgid "Mail server log done"
+msgstr ""
+
+msgid "MailServerLogDone|Filename"
+msgstr ""
+
+msgid "MailServerLogDone|Last stat"
+msgstr ""
+
+msgid "MailServerLog|Line"
+msgstr ""
+
+msgid "MailServerLog|Order"
+msgstr ""
+
+msgid "Make a new<br/>\\n <strong>Freedom <span>of</span><br/>\\n Information<br/>\\n request</strong>"
+msgstr ""
+
+msgid "Make a request"
+msgstr ""
+
+msgid "Make a request to this authority"
+msgstr ""
+
+msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
+msgstr ""
+
+msgid "Make and browse Freedom of Information (FOI) requests"
+msgstr ""
+
+msgid "Make your own request"
+msgstr ""
+
+msgid "Many requests"
+msgstr ""
+
+msgid "Message"
+msgstr "Mensagem"
+
+msgid "Message has been removed"
+msgstr ""
+
+msgid "Message sent using {{site_name}} contact form, "
+msgstr ""
+
+msgid "Missing contact details for '"
+msgstr ""
+
+msgid "More about this authority"
+msgstr ""
+
+msgid "More requests..."
+msgstr "Mais pedidos…"
+
+msgid "More similar requests"
+msgstr ""
+
+msgid "More successful requests..."
+msgstr ""
+
+msgid "My profile"
+msgstr ""
+
+msgid "My request has been <strong>refused</strong>"
+msgstr ""
+
+msgid "My requests"
+msgstr ""
+
+msgid "My wall"
+msgstr ""
+
+msgid "Name can't be blank"
+msgstr ""
+
+msgid "Name is already taken"
+msgstr ""
+
+msgid "New Freedom of Information requests"
+msgstr ""
+
+msgid "New censor rule"
+msgstr ""
+
+msgid "New e-mail:"
+msgstr ""
+
+msgid "New email doesn't look like a valid address"
+msgstr ""
+
+msgid "New password:"
+msgstr ""
+
+msgid "New password: (again)"
+msgstr ""
+
+msgid "New response to '{{title}}'"
+msgstr ""
+
+msgid "New response to your FOI request - "
+msgstr ""
+
+msgid "New response to your request"
+msgstr ""
+
+msgid "New response to {{law_used_short}} request"
+msgstr ""
+
+msgid "New updates for the request '{{request_title}}'"
+msgstr ""
+
+msgid "Newest results first"
+msgstr ""
+
+msgid "Next"
+msgstr ""
+
+msgid "Next, crop your photo &gt;&gt;"
+msgstr ""
+
+msgid "No requests of this sort yet."
+msgstr ""
+
+msgid "No results found."
+msgstr ""
+
+msgid "No similar requests found."
+msgstr ""
+
+msgid "No tracked things found."
+msgstr ""
+
+msgid "Nobody has made any Freedom of Information requests to {{public_body_name}} using this site yet."
+msgstr ""
+
+msgid "None found."
+msgstr ""
+
+msgid "None made."
+msgstr ""
+
+msgid "Not a valid FOI request"
+msgstr ""
+
+msgid "Note that the requester will not be notified about your annotation, because the request was published by {{public_body_name}} on their behalf."
+msgstr ""
+
+msgid "Now check your email!"
+msgstr ""
+
+msgid "Now preview your annotation"
+msgstr ""
+
+msgid "Now preview your follow up"
+msgstr ""
+
+msgid "Now preview your message asking for an internal review"
+msgstr ""
+
+msgid "Number of requests"
+msgstr ""
+
+msgid "OR remove the existing photo"
+msgstr ""
+
+msgid "Offensive? Unsuitable?"
+msgstr ""
+
+msgid "Oh no! Sorry to hear that your request was refused. Here is what to do now."
+msgstr ""
+
+msgid "Old e-mail:"
+msgstr ""
+
+msgid "Old email address isn't the same as the address of the account you are logged in with"
+msgstr ""
+
+msgid "Old email doesn't look like a valid address"
+msgstr ""
+
+msgid "On this page"
+msgstr ""
+
+msgid "One FOI request found"
+msgstr ""
+
+msgid "One person found"
+msgstr ""
+
+msgid "One public authority found"
+msgstr ""
+
+msgid "Only put in abbreviations which are really used, otherwise leave blank. Short or long name is used in the URL – don't worry about breaking URLs through renaming, as the history is used to redirect"
+msgstr ""
+
+msgid "Only requests made using {{site_name}} are shown."
+msgstr ""
+
+msgid "Only the authority can reply to this request, and I don't recognise the address this reply was sent from"
+msgstr ""
+
+msgid "Only the authority can reply to this request, but there is no \"From\" address to check against"
+msgstr ""
+
+msgid "Or search in their website for this information."
+msgstr ""
+
+msgid "Original request sent"
+msgstr ""
+
+msgid "Other:"
+msgstr ""
+
+msgid "Outgoing message"
+msgstr ""
+
+msgid "OutgoingMessage|Body"
+msgstr ""
+
+msgid "OutgoingMessage|Last sent at"
+msgstr ""
+
+msgid "OutgoingMessage|Message type"
+msgstr ""
+
+msgid "OutgoingMessage|Prominence"
+msgstr ""
+
+msgid "OutgoingMessage|Prominence reason"
+msgstr ""
+
+msgid "OutgoingMessage|Status"
+msgstr ""
+
+msgid "OutgoingMessage|What doing"
+msgstr ""
+
+msgid "Partially successful."
+msgstr ""
+
+msgid "Password is not correct"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Password: (again)"
+msgstr ""
+
+msgid "Paste this link into emails, tweets, and anywhere else:"
+msgstr ""
+
+msgid "People"
+msgstr ""
+
+msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr ""
+
+msgid "Percentage of requests that are overdue"
+msgstr ""
+
+msgid "Percentage of total requests"
+msgstr ""
+
+msgid "Photo of you:"
+msgstr ""
+
+msgid "Plans and administrative measures that affect these matters"
+msgstr ""
+
+msgid "Play the request categorisation game"
+msgstr ""
+
+msgid "Play the request categorisation game!"
+msgstr ""
+
+msgid "Please"
+msgstr "Por favor"
+
+msgid "Please <a href=\"{{url}}\">contact us</a> if you have any questions."
+msgstr ""
+
+msgid "Please <a href=\"{{url}}\">get in touch</a> with us so we can fix it."
+msgstr ""
+
+msgid "Please <strong>answer the question above</strong> so we know whether the "
+msgstr ""
+
+msgid "Please <strong>go to the following requests</strong>, and let us\\n know if there was information in the recent responses to them."
+msgstr ""
+
+msgid "Please <strong>only</strong> write messages directly relating to your request {{request_link}}. If you would like to ask for information that was not in your original request, then <a href=\"{{new_request_link}}\">file a new request</a>."
+msgstr ""
+
+msgid "Please ask for environmental information only"
+msgstr ""
+
+msgid "Please check the URL (i.e. the long code of letters and numbers) is copied\\ncorrectly from your email."
+msgstr ""
+
+msgid "Please choose a file containing your photo."
+msgstr ""
+
+msgid "Please choose a reason"
+msgstr "Por favor, escolha uma razão"
+
+msgid "Please choose what sort of reply you are making."
+msgstr ""
+
+msgid "Please choose whether or not you got some of the information that you wanted."
+msgstr ""
+
+msgid "Please click on the link below to cancel or alter these emails."
+msgstr ""
+
+msgid "Please click on the link below to confirm that you want to \\nchange the email address that you use for {{site_name}}\\nfrom {{old_email}} to {{new_email}}"
+msgstr ""
+
+msgid "Please click on the link below to confirm your email address."
+msgstr ""
+
+msgid "Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway."
+msgstr ""
+
+msgid "Please don't upload offensive pictures. We will take down images\\n that we consider inappropriate."
+msgstr ""
+
+msgid "Please enable \"cookies\" to carry on"
+msgstr ""
+
+msgid "Please enter a password"
+msgstr ""
+
+msgid "Please enter a subject"
+msgstr ""
+
+msgid "Please enter a summary of your request"
+msgstr ""
+
+msgid "Please enter a valid email address"
+msgstr ""
+
+msgid "Please enter the message you want to send"
+msgstr ""
+
+msgid "Please enter the same password twice"
+msgstr ""
+
+msgid "Please enter your annotation"
+msgstr ""
+
+msgid "Please enter your email address"
+msgstr ""
+
+msgid "Please enter your follow up message"
+msgstr ""
+
+msgid "Please enter your letter requesting information"
+msgstr ""
+
+msgid "Please enter your name"
+msgstr "Introduza o seu nome"
+
+msgid "Please enter your name, not your email address, in the name field."
+msgstr ""
+
+msgid "Please enter your new email address"
+msgstr "Introduza o seu novo e-mail"
+
+msgid "Please enter your old email address"
+msgstr "Introduza o seu antigo e-mail"
+
+msgid "Please enter your password"
+msgstr "Introduza a sua palavra-chave"
+
+msgid "Please give details explaining why you want a review"
+msgstr ""
+
+msgid "Please keep it shorter than 500 characters"
+msgstr ""
+
+msgid "Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence."
+msgstr ""
+
+msgid "Please only request information that comes under those categories, <strong>do not waste your\\n time</strong> or the time of the public authority by requesting unrelated information."
+msgstr ""
+
+msgid "Please pass this on to the person who conducts Freedom of Information reviews."
+msgstr ""
+
+msgid "Please select each of these requests in turn, and <strong>let everyone know</strong>\\nif they are successful yet or not."
+msgstr ""
+
+msgid "Please sign at the bottom with your name, or alter the \"{{signoff}}\" signature"
+msgstr ""
+
+msgid "Please sign in as "
+msgstr ""
+
+msgid "Please sign in or make a new account."
+msgstr ""
+
+msgid "Please type a message and/or choose a file containing your response."
+msgstr ""
+
+msgid "Please use this email address for all replies to this request:"
+msgstr ""
+
+msgid "Please write a summary with some text in it"
+msgstr ""
+
+msgid "Please write the summary using a mixture of capital and lower case letters. This makes it easier for others to read."
+msgstr ""
+
+msgid "Please write your annotation using a mixture of capital and lower case letters. This makes it easier for others to read."
+msgstr ""
+
+msgid "Please write your follow up message containing the necessary clarifications below."
+msgstr ""
+
+msgid "Please write your message using a mixture of capital and lower case letters. This makes it easier for others to read."
+msgstr ""
+
+msgid "Point to <strong>related information</strong>, campaigns or forums which may be useful."
+msgstr ""
+
+msgid "Possibly related requests:"
+msgstr ""
+
+msgid "Post annotation"
+msgstr ""
+
+msgid "Post redirect"
+msgstr ""
+
+msgid "PostRedirect|Circumstance"
+msgstr ""
+
+msgid "PostRedirect|Email token"
+msgstr ""
+
+msgid "PostRedirect|Post params yaml"
+msgstr ""
+
+msgid "PostRedirect|Reason params yaml"
+msgstr ""
+
+msgid "PostRedirect|Token"
+msgstr ""
+
+msgid "PostRedirect|Uri"
+msgstr ""
+
+msgid "Posted on {{date}} by {{author}}"
+msgstr ""
+
+msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
+msgstr ""
+
+msgid "Prev"
+msgstr ""
+
+msgid "Preview follow up to '"
+msgstr ""
+
+msgid "Preview new annotation on '{{info_request_title}}'"
+msgstr ""
+
+msgid "Preview your annotation"
+msgstr ""
+
+msgid "Preview your message"
+msgstr ""
+
+msgid "Preview your public request"
+msgstr ""
+
+msgid "Profile photo"
+msgstr ""
+
+msgid "ProfilePhoto|Data"
+msgstr ""
+
+msgid "ProfilePhoto|Draft"
+msgstr ""
+
+msgid "Public Bodies"
+msgstr ""
+
+msgid "Public Body Statistics"
+msgstr ""
+
+msgid "Public authorities"
+msgstr ""
+
+msgid "Public authorities - {{description}}"
+msgstr ""
+
+msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr ""
+
+msgid "Public authority – {{name}}"
+msgstr ""
+
+msgid "Public bodies that most frequently replied with \"Not Held\""
+msgstr ""
+
+msgid "Public bodies with most overdue requests"
+msgstr ""
+
+msgid "Public bodies with the fewest successful requests"
+msgstr ""
+
+msgid "Public bodies with the most requests"
+msgstr ""
+
+msgid "Public bodies with the most successful requests"
+msgstr ""
+
+msgid "Public body"
+msgstr ""
+
+msgid "Public notes"
+msgstr ""
+
+msgid "Public page"
+msgstr ""
+
+msgid "Public page not available"
+msgstr ""
+
+msgid "PublicBody|Api key"
+msgstr ""
+
+msgid "PublicBody|Disclosure log"
+msgstr ""
+
+msgid "PublicBody|First letter"
+msgstr ""
+
+msgid "PublicBody|Home page"
+msgstr ""
+
+msgid "PublicBody|Info requests count"
+msgstr ""
+
+msgid "PublicBody|Info requests not held count"
+msgstr ""
+
+msgid "PublicBody|Info requests overdue count"
+msgstr ""
+
+msgid "PublicBody|Info requests successful count"
+msgstr ""
+
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
+msgid "PublicBody|Last edit comment"
+msgstr ""
+
+msgid "PublicBody|Last edit editor"
+msgstr ""
+
+msgid "PublicBody|Name"
+msgstr ""
+
+msgid "PublicBody|Notes"
+msgstr ""
+
+msgid "PublicBody|Publication scheme"
+msgstr ""
+
+msgid "PublicBody|Request email"
+msgstr ""
+
+msgid "PublicBody|Short name"
+msgstr ""
+
+msgid "PublicBody|Url name"
+msgstr ""
+
+msgid "PublicBody|Version"
+msgstr ""
+
+msgid "Publication scheme"
+msgstr ""
+
+msgid "Publication scheme URL"
+msgstr ""
+
+msgid "Purge request"
+msgstr ""
+
+msgid "PurgeRequest|Model"
+msgstr ""
+
+msgid "PurgeRequest|Url"
+msgstr ""
+
+msgid "RSS feed"
+msgstr ""
+
+msgid "RSS feed of updates"
+msgstr ""
+
+msgid "Re-edit this annotation"
+msgstr ""
+
+msgid "Re-edit this message"
+msgstr ""
+
+msgid "Read about <a href=\"{{advanced_search_url}}\">advanced search operators</a>, such as proximity and wildcards."
+msgstr ""
+
+msgid "Read blog"
+msgstr ""
+
+msgid "Received an error message, such as delivery failure."
+msgstr ""
+
+msgid "Recently described results first"
+msgstr ""
+
+msgid "Refused."
+msgstr ""
+
+msgid "Remember me</label> (keeps you signed in longer;\\n do not use on a public computer) "
+msgstr ""
+
+msgid "Report abuse"
+msgstr ""
+
+msgid "Report an offensive or unsuitable request"
+msgstr ""
+
+msgid "Report request"
+msgstr ""
+
+msgid "Report this request"
+msgstr ""
+
+msgid "Reported for administrator attention."
+msgstr ""
+
+msgid "Request an internal review"
+msgstr ""
+
+msgid "Request an internal review from {{person_or_body}}"
+msgstr ""
+
+msgid "Request email"
+msgstr ""
+
+msgid "Request has been removed"
+msgstr ""
+
+msgid "Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+msgstr ""
+
+msgid "Request to {{public_body_name}} by {{info_request_user}}. Annotated by {{event_comment_user}} on {{date}}."
+msgstr ""
+
+msgid "Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
+msgstr ""
+
+msgid "Requested on {{date}}"
+msgstr ""
+
+msgid "Requests are considered overdue if they are in the 'Overdue' or 'Very Overdue' states."
+msgstr ""
+
+msgid "Requests are considered successful if they were classified as either 'Successful' or 'Partially Successful'."
+msgstr ""
+
+msgid "Requests for personal information and vexatious requests are not considered valid for FOI purposes (<a href=\"/help/about\">read more</a>)."
+msgstr ""
+
+msgid "Requests or responses matching your saved search"
+msgstr ""
+
+msgid "Requests similar to '{{request_title}}'"
+msgstr ""
+
+msgid "Requests similar to '{{request_title}}' (page {{page}})"
+msgstr ""
+
+msgid "Respond by email"
+msgstr ""
+
+msgid "Respond to request"
+msgstr ""
+
+msgid "Respond to the FOI request"
+msgstr ""
+
+msgid "Respond using the web"
+msgstr ""
+
+msgid "Response"
+msgstr ""
+
+msgid "Response from a public authority"
+msgstr ""
+
+msgid "Response to '{{title}}'"
+msgstr ""
+
+msgid "Response to this request is <strong>delayed</strong>."
+msgstr ""
+
+msgid "Response to this request is <strong>long overdue</strong>."
+msgstr ""
+
+msgid "Response to your request"
+msgstr ""
+
+msgid "Response:"
+msgstr ""
+
+msgid "Restrict to"
+msgstr ""
+
+msgid "Results page {{page_number}}"
+msgstr ""
+
+msgid "Save"
+msgstr "Guardar"
+
+msgid "Search"
+msgstr ""
+
+msgid "Search Freedom of Information requests, public authorities and users"
+msgstr ""
+
+msgid "Search contributions by this person"
+msgstr ""
+
+msgid "Search for words in:"
+msgstr ""
+
+msgid "Search in"
+msgstr ""
+
+msgid "Search over<br/>\\n <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\\n <strong>{{number_of_authorities}} authorities</strong>"
+msgstr ""
+
+msgid "Search queries"
+msgstr ""
+
+msgid "Search results"
+msgstr ""
+
+msgid "Search the site to find what you were looking for."
+msgstr ""
+
+msgid "Search within the {{count}} Freedom of Information requests to {{public_body_name}}"
+msgid_plural "Search within the {{count}} Freedom of Information requests made to {{public_body_name}}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Search your contributions"
+msgstr ""
+
+msgid "See bounce message"
+msgstr ""
+
+msgid "Select one to see more information about the authority."
+msgstr ""
+
+msgid "Select the authority to write to"
+msgstr ""
+
+msgid "Send a followup"
+msgstr ""
+
+msgid "Send a message to "
+msgstr ""
+
+msgid "Send a public follow up message to {{person_or_body}}"
+msgstr ""
+
+msgid "Send a public reply to {{person_or_body}}"
+msgstr ""
+
+msgid "Send follow up to '{{title}}'"
+msgstr ""
+
+msgid "Send message"
+msgstr ""
+
+msgid "Send message to "
+msgstr ""
+
+msgid "Send request"
+msgstr ""
+
+msgid "Set your profile photo"
+msgstr ""
+
+msgid "Short name"
+msgstr ""
+
+msgid "Short name is already taken"
+msgstr ""
+
+msgid "Show most relevant results first"
+msgstr ""
+
+msgid "Show only..."
+msgstr ""
+
+msgid "Showing"
+msgstr ""
+
+msgid "Sign in"
+msgstr ""
+
+msgid "Sign in or make a new account"
+msgstr ""
+
+msgid "Sign in or sign up"
+msgstr ""
+
+msgid "Sign out"
+msgstr ""
+
+msgid "Sign up"
+msgstr ""
+
+msgid "Similar requests"
+msgstr ""
+
+msgid "Simple search"
+msgstr "Pesquisa simples"
+
+msgid "Some notes have been added to your FOI request - "
+msgstr ""
+
+msgid "Some of the information requested has been received"
+msgstr ""
+
+msgid "Some people who've made requests haven't let us know whether they were\\nsuccessful or not. We need <strong>your</strong> help &ndash;\\nchoose one of these requests, read it, and let everyone know whether or not the\\ninformation has been provided. Everyone'll be exceedingly grateful."
+msgstr ""
+
+msgid "Somebody added a note to your FOI request - "
+msgstr ""
+
+msgid "Someone has updated the status of your request"
+msgstr ""
+
+msgid "Someone, perhaps you, just tried to change their email address on\\n{{site_name}} from {{old_email}} to {{new_email}}."
+msgstr ""
+
+msgid "Sorry - you cannot respond to this request via {{site_name}}, because this is a copy of the request originally at {{link_to_original_request}}."
+msgstr ""
+
+msgid "Sorry, but only {{user_name}} is allowed to do that."
+msgstr ""
+
+msgid "Sorry, there was a problem processing this page"
+msgstr ""
+
+msgid "Sorry, we couldn't find that page"
+msgstr ""
+
+msgid "Special note for this authority!"
+msgstr ""
+
+msgid "Start now &raquo;"
+msgstr ""
+
+msgid "Start your own blog"
+msgstr ""
+
+msgid "Stay up to date"
+msgstr ""
+
+msgid "Still awaiting an <strong>internal review</strong>"
+msgstr ""
+
+msgid "Subject"
+msgstr "Assunto"
+
+msgid "Subject:"
+msgstr "Assunto:"
+
+msgid "Submit"
+msgstr ""
+
+msgid "Submit status"
+msgstr ""
+
+msgid "Submit status and send message"
+msgstr ""
+
+msgid "Subscribe to blog"
+msgstr ""
+
+msgid "Successful Freedom of Information requests"
+msgstr ""
+
+msgid "Successful."
+msgstr ""
+
+msgid "Suggest how the requester can find the <strong>rest of the information</strong>."
+msgstr ""
+
+msgid "Summary:"
+msgstr ""
+
+msgid "Table of statuses"
+msgstr ""
+
+msgid "Table of varieties"
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
+msgid "Tags (separated by a space):"
+msgstr ""
+
+msgid "Tags:"
+msgstr ""
+
+msgid "Technical details"
+msgstr ""
+
+msgid "Thank you for helping us keep the site tidy!"
+msgstr ""
+
+msgid "Thank you for making an annotation!"
+msgstr ""
+
+msgid "Thank you for responding to this FOI request! Your response has been published below, and a link to your response has been emailed to "
+msgstr ""
+
+msgid "Thank you for updating the status of the request '<a href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests below for you to classify."
+msgstr ""
+
+msgid "Thank you for updating this request!"
+msgstr ""
+
+msgid "Thank you for updating your profile photo"
+msgstr ""
+
+msgid "Thank you! We'll look into what happened and try and fix it up."
+msgstr ""
+
+msgid "Thanks for helping - your work will make it easier for everyone to find successful\\nresponses, and maybe even let us make league tables..."
+msgstr ""
+
+msgid "Thanks very much - this will help others find useful stuff. We'll\\n also, if you need it, give advice on what to do next about your\\n requests."
+msgstr ""
+
+msgid "Thanks very much for helping keep everything <strong>neat and organised</strong>.\\n We'll also, if you need it, give you advice on what to do next about each of your\\n requests."
+msgstr ""
+
+msgid "That doesn't look like a valid email address. Please check you have typed it correctly."
+msgstr ""
+
+msgid "The <strong>review has finished</strong> and overall:"
+msgstr ""
+
+msgid "The Freedom of Information Act <strong>does not apply</strong> to"
+msgstr ""
+
+msgid "The accounts have been left as they previously were."
+msgstr ""
+
+msgid "The authority do <strong>not have</strong> the information <small>(maybe they say who does)"
+msgstr ""
+
+msgid "The authority only has a <strong>paper copy</strong> of the information."
+msgstr ""
+
+msgid "The authority say that they <strong>need a postal\\n address</strong>, not just an email, for it to be a valid FOI request"
+msgstr ""
+
+msgid "The authority would like to / has <strong>responded by post</strong> to this request."
+msgstr ""
+
+msgid "The classification of requests (e.g. to say whether they were successful or not) is done manually by users and administrators of the site, which means that they are subject to error."
+msgstr ""
+
+msgid "The email that you, on behalf of {{public_body}}, sent to\\n{{user}} to reply to an {{law_used_short}}\\nrequest has not been delivered."
+msgstr ""
+
+msgid "The error bars shown are 95% confidence intervals for the hypothesized underlying proportion (i.e. that which you would obtain by making an infinite number of requests through this site to that authority). In other words, the population being sampled is all the current and future requests to the authority through this site, rather than, say, all requests that have been made to the public body by any means."
+msgstr ""
+
+msgid "The page doesn't exist. Things you can try now:"
+msgstr ""
+
+msgid "The percentages are calculated with respect to the total number of requests, which includes invalid requests; this is a known problem that will be fixed in a later release."
+msgstr ""
+
+msgid "The public authority does not have the information requested"
+msgstr ""
+
+msgid "The public authority would like part of the request explained"
+msgstr ""
+
+msgid "The public authority would like to / has responded by post"
+msgstr ""
+
+msgid "The request has been <strong>refused</strong>"
+msgstr ""
+
+msgid "The request has been updated since you originally loaded this page. Please check for any new incoming messages below, and try again."
+msgstr ""
+
+msgid "The request is <strong>waiting for clarification</strong>."
+msgstr ""
+
+msgid "The request was <strong>partially successful</strong>."
+msgstr ""
+
+msgid "The request was <strong>refused</strong> by"
+msgstr ""
+
+msgid "The request was <strong>successful</strong>."
+msgstr ""
+
+msgid "The request was refused by the public authority"
+msgstr ""
+
+msgid "The request you have tried to view has been removed. There are\\nvarious reasons why we might have done this, sorry we can't be more specific here. Please <a\\n href=\"{{url}}\">contact us</a> if you have any questions."
+msgstr ""
+
+msgid "The requester has abandoned this request for some reason"
+msgstr ""
+
+msgid "The response to your request has been <strong>delayed</strong>. You can say that,\\n by law, the authority should normally have responded\\n <strong>promptly</strong> and"
+msgstr ""
+
+msgid "The response to your request is <strong>long overdue</strong>. You can say that, by\\n law, under all circumstances, the authority should have responded\\n by now"
+msgstr ""
+
+msgid "The search index is currently offline, so we can't show the Freedom of Information requests that have been made to this authority."
+msgstr ""
+
+msgid "The search index is currently offline, so we can't show the Freedom of Information requests this person has made."
+msgstr ""
+
+msgid "The {{site_name}} team."
+msgstr ""
+
+msgid "Then you can cancel the alert."
+msgstr ""
+
+msgid "Then you can cancel the alerts."
+msgstr ""
+
+msgid "Then you can change your email address used on {{site_name}}"
+msgstr ""
+
+msgid "Then you can change your password on {{site_name}}"
+msgstr ""
+
+msgid "Then you can classify the FOI response you have got from "
+msgstr ""
+
+msgid "Then you can download a zip file of {{info_request_title}}."
+msgstr ""
+
+msgid "Then you can log into the administrative interface"
+msgstr ""
+
+msgid "Then you can play the request categorisation game."
+msgstr ""
+
+msgid "Then you can report the request '{{title}}'"
+msgstr ""
+
+msgid "Then you can send a message to "
+msgstr ""
+
+msgid "Then you can sign in to {{site_name}}"
+msgstr ""
+
+msgid "Then you can update the status of your request to "
+msgstr ""
+
+msgid "Then you can upload an FOI response. "
+msgstr ""
+
+msgid "Then you can write follow up message to "
+msgstr ""
+
+msgid "Then you can write your reply to "
+msgstr ""
+
+msgid "Then you will be following all new FOI requests."
+msgstr ""
+
+msgid "Then you will be notified whenever '{{user_name}}' requests something or gets a response."
+msgstr ""
+
+msgid "Then you will be notified whenever a new request or response matches your search."
+msgstr ""
+
+msgid "Then you will be notified whenever an FOI request succeeds."
+msgstr ""
+
+msgid "Then you will be notified whenever someone requests something or gets a response from '{{public_body_name}}'."
+msgstr ""
+
+msgid "Then you will be updated whenever the request '{{request_title}}' is updated."
+msgstr ""
+
+msgid "Then you'll be allowed to send FOI requests."
+msgstr ""
+
+msgid "Then your FOI request to {{public_body_name}} will be sent."
+msgstr ""
+
+msgid "Then your annotation to {{info_request_title}} will be posted."
+msgstr ""
+
+msgid "There are {{count}} new annotations on your {{info_request}} request. Follow this link to see what they wrote."
+msgstr ""
+
+msgid "There is <strong>more than one person</strong> who uses this site and has this name.\\n One of them is shown below, you may mean a different one:"
+msgstr ""
+
+msgid "There is a limit on the number of requests you can make in a day, because we don’t want public authorities to be bombarded with large numbers of inappropriate requests. If you feel you have a good reason to ask for the limit to be lifted in your case, please <a href='{{help_contact_path}}'>get in touch</a>."
+msgstr ""
+
+msgid "There is {{count}} person following this request"
+msgid_plural "There are {{count}} people following this request"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "There was a <strong>delivery error</strong> or similar, which needs fixing by the {{site_name}} team."
+msgstr ""
+
+msgid "There was an error with the words you entered, please try again."
+msgstr ""
+
+msgid "There was no data calculated for this graph yet."
+msgstr ""
+
+msgid "There were no requests matching your query."
+msgstr ""
+
+msgid "There were no results matching your query."
+msgstr ""
+
+msgid "These graphs were partly inspired by <a href=\"http://mark.goodge.co.uk/2011/08/number-crunching-whatdotheyknow/\">some statistics that Mark Goodge produced for WhatDoTheyKnow</a>, so thanks are due to him."
+msgstr ""
+
+msgid "They are going to reply <strong>by post</strong>"
+msgstr ""
+
+msgid "They do <strong>not have</strong> the information <small>(maybe they say who does)</small>"
+msgstr ""
+
+msgid "They have been given the following explanation:"
+msgstr ""
+
+msgid "They have not replied to your {{law_used_short}} request {{title}} promptly, as normally required by law"
+msgstr ""
+
+msgid "They have not replied to your {{law_used_short}} request {{title}}, \\nas required by law"
+msgstr ""
+
+msgid "Things to do with this request"
+msgstr ""
+
+msgid "Things you're following"
+msgstr ""
+
+msgid "This authority no longer exists, so you cannot make a request to it."
+msgstr ""
+
+msgid "This covers a very wide spectrum of information about the state of\\n the <strong>natural and built environment</strong>, such as:"
+msgstr ""
+
+msgid "This external request has been hidden"
+msgstr ""
+
+msgid "This is a plain-text version of the Freedom of Information request \"{{request_title}}\". The latest, full version is available online at {{full_url}}"
+msgstr ""
+
+msgid "This is an HTML version of an attachment to the Freedom of Information request"
+msgstr ""
+
+msgid "This is because {{title}} is an old request that has been\\nmarked to no longer receive responses."
+msgstr ""
+
+msgid "This is the first version."
+msgstr ""
+
+msgid "This is your own request, so you will be automatically emailed when new responses arrive."
+msgstr ""
+
+msgid "This message has been hidden."
+msgstr ""
+
+msgid "This message has been hidden. There are various reasons why we might have done this, sorry we can't be more specific here."
+msgstr ""
+
+msgid "This message has prominence 'hidden'. You can only see it because you are logged in as a super user."
+msgstr ""
+
+msgid "This message has prominence 'hidden'. {{reason}} You can only see it because you are logged in as a super user."
+msgstr ""
+
+msgid "This message is hidden, so that only you, the requester, can see it. Please <a href=\"{{url}}\">contact us</a> if you are not sure why."
+msgstr ""
+
+msgid "This message is hidden, so that only you, the requester, can see it. {{reason}}"
+msgstr ""
+
+msgid "This page of public body statistics is currently experimental, so there are some caveats that should be borne in mind:"
+msgstr ""
+
+msgid "This particular request is finished:"
+msgstr ""
+
+msgid "This person has made no Freedom of Information requests using this site."
+msgstr ""
+
+msgid "This person's annotations"
+msgstr ""
+
+msgid "This person's {{count}} Freedom of Information request"
+msgid_plural "This person's {{count}} Freedom of Information requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This person's {{count}} annotation"
+msgid_plural "This person's {{count}} annotations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This request <strong>requires administrator attention</strong>"
+msgstr ""
+
+msgid "This request has already been reported for administrator attention"
+msgstr ""
+
+msgid "This request has an <strong>unknown status</strong>."
+msgstr ""
+
+msgid "This request has been <strong>hidden</strong> from the site, because an administrator considers it not to be an FOI request"
+msgstr ""
+
+msgid "This request has been <strong>hidden</strong> from the site, because an administrator considers it vexatious"
+msgstr ""
+
+msgid "This request has been <strong>reported</strong> as needing administrator attention (perhaps because it is vexatious, or a request for personal information)"
+msgstr ""
+
+msgid "This request has been <strong>withdrawn</strong> by the person who made it.\\n There may be an explanation in the correspondence below."
+msgstr ""
+
+msgid "This request has been marked for review by the site administrators, who have not hidden it at this time. If you believe it should be hidden, please <a href=\"{{url}}\">contact us</a>."
+msgstr ""
+
+msgid "This request has been reported for administrator attention"
+msgstr ""
+
+msgid "This request has been set by an administrator to \"allow new responses from nobody\""
+msgstr ""
+
+msgid "This request has had an unusual response, and <strong>requires attention</strong> from the {{site_name}} team."
+msgstr ""
+
+msgid "This request has prominence 'hidden'. You can only see it because you are logged\\n in as a super user."
+msgstr ""
+
+msgid "This request is hidden, so that only you the requester can see it. Please\\n <a href=\"{{url}}\">contact us</a> if you are not sure why."
+msgstr ""
+
+msgid "This request is still in progress:"
+msgstr ""
+
+msgid "This request requires administrator attention"
+msgstr ""
+
+msgid "This request was not made via {{site_name}}"
+msgstr ""
+
+msgid "This table shows the technical details of the internal events that happened\\nto this request on {{site_name}}. This could be used to generate information about\\nthe speed with which authorities respond to requests, the number of requests\\nwhich require a postal response and much more."
+msgstr ""
+
+msgid "This user has been banned from {{site_name}} "
+msgstr ""
+
+msgid "This was not possible because there is already an account using \\nthe email address {{email}}."
+msgstr ""
+
+msgid "To cancel these alerts"
+msgstr ""
+
+msgid "To cancel this alert"
+msgstr ""
+
+msgid "To carry on, you need to sign in or make an account. Unfortunately, there\\nwas a technical problem trying to do this."
+msgstr ""
+
+msgid "To change your email address used on {{site_name}}"
+msgstr ""
+
+msgid "To classify the response to this FOI request"
+msgstr ""
+
+msgid "To do that please send a private email to "
+msgstr ""
+
+msgid "To do this, first click on the link below."
+msgstr ""
+
+msgid "To download the zip file"
+msgstr ""
+
+msgid "To follow all successful requests"
+msgstr ""
+
+msgid "To follow new requests"
+msgstr ""
+
+msgid "To follow requests and responses matching your search"
+msgstr ""
+
+msgid "To follow requests by '{{user_name}}'"
+msgstr ""
+
+msgid "To follow requests made using {{site_name}} to the public authority '{{public_body_name}}'"
+msgstr ""
+
+msgid "To follow the request '{{request_title}}'"
+msgstr ""
+
+msgid "To help us keep the site tidy, someone else has updated the status of the \\n{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
+msgstr ""
+
+msgid "To let everyone know, follow this link and then select the appropriate box."
+msgstr ""
+
+msgid "To log into the administrative interface"
+msgstr ""
+
+msgid "To play the request categorisation game"
+msgstr ""
+
+msgid "To post your annotation"
+msgstr ""
+
+msgid "To reply to "
+msgstr ""
+
+msgid "To report this request"
+msgstr ""
+
+msgid "To send a follow up message to "
+msgstr ""
+
+msgid "To send a message to "
+msgstr ""
+
+msgid "To send your FOI request"
+msgstr ""
+
+msgid "To update the status of this FOI request"
+msgstr ""
+
+msgid "To upload a response, you must be logged in using an email address from "
+msgstr ""
+
+msgid "To use the advanced search, combine phrases and labels as described in the search tips below."
+msgstr ""
+
+msgid "To view the email address that we use to send FOI requests to {{public_body_name}}, please enter these words."
+msgstr ""
+
+msgid "To view the response, click on the link below."
+msgstr ""
+
+msgid "To {{public_body_link_absolute}}"
+msgstr ""
+
+msgid "To:"
+msgstr "Para:"
+
+msgid "Today"
+msgstr "Hoje"
+
+msgid "Too many requests"
+msgstr ""
+
+msgid "Top search results:"
+msgstr ""
+
+msgid "Track thing"
+msgstr ""
+
+msgid "Track this person"
+msgstr ""
+
+msgid "Track this search"
+msgstr ""
+
+msgid "TrackThing|Track medium"
+msgstr ""
+
+msgid "TrackThing|Track query"
+msgstr ""
+
+msgid "TrackThing|Track type"
+msgstr ""
+
+msgid "Turn off email alerts"
+msgstr ""
+
+msgid "Tweet this request"
+msgstr ""
+
+msgid "Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show things that happened in the first two weeks of January."
+msgstr ""
+
+msgid "URL name can't be blank"
+msgstr ""
+
+msgid "Unable to change email address on {{site_name}}"
+msgstr ""
+
+msgid "Unable to send a reply to {{username}}"
+msgstr ""
+
+msgid "Unable to send follow up message to {{username}}"
+msgstr ""
+
+msgid "Unexpected search result type"
+msgstr ""
+
+msgid "Unexpected search result type "
+msgstr ""
+
+msgid "Unfortunately we don't know the FOI\\nemail address for that authority, so we can't validate this.\\nPlease <a href=\"{{url}}\">contact us</a> to sort it out."
+msgstr ""
+
+msgid "Unfortunately, we do not have a working {{info_request_law_used_full}}\\naddress for"
+msgstr ""
+
+msgid "Unknown"
+msgstr "Desconhecido"
+
+msgid "Unsubscribe"
+msgstr ""
+
+msgid "Unusual response."
+msgstr ""
+
+msgid "Update the status of this request"
+msgstr ""
+
+msgid "Update the status of your request to "
+msgstr ""
+
+msgid "Upload FOI response"
+msgstr ""
+
+msgid "Use OR (in capital letters) where you don't mind which word, e.g. <strong><code>commons OR lords</code></strong>"
+msgstr ""
+
+msgid "Use quotes when you want to find an exact phrase, e.g. <strong><code>\"Liverpool City Council\"</code></strong>"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "User info request sent alert"
+msgstr ""
+
+msgid "User – {{name}}"
+msgstr ""
+
+msgid "UserInfoRequestSentAlert|Alert type"
+msgstr ""
+
+msgid "User|About me"
+msgstr ""
+
+msgid "User|Admin level"
+msgstr ""
+
+msgid "User|Ban text"
+msgstr ""
+
+msgid "User|Email"
+msgstr ""
+
+msgid "User|Email bounce message"
+msgstr ""
+
+msgid "User|Email bounced at"
+msgstr ""
+
+msgid "User|Email confirmed"
+msgstr ""
+
+msgid "User|Hashed password"
+msgstr ""
+
+msgid "User|Last daily track email"
+msgstr ""
+
+msgid "User|Locale"
+msgstr ""
+
+msgid "User|Name"
+msgstr ""
+
+msgid "User|No limit"
+msgstr ""
+
+msgid "User|Receive email alerts"
+msgstr ""
+
+msgid "User|Salt"
+msgstr ""
+
+msgid "User|Url name"
+msgstr ""
+
+msgid "Version {{version}}"
+msgstr ""
+
+msgid "View FOI email address"
+msgstr ""
+
+msgid "View FOI email address for '{{public_body_name}}'"
+msgstr ""
+
+msgid "View FOI email address for {{public_body_name}}"
+msgstr ""
+
+msgid "View Freedom of Information requests made by {{user_name}}:"
+msgstr ""
+
+msgid "View and search requests"
+msgstr ""
+
+msgid "View authorities"
+msgstr ""
+
+msgid "View email"
+msgstr ""
+
+msgid "View requests"
+msgstr ""
+
+msgid "Waiting clarification."
+msgstr ""
+
+msgid "Waiting for an <strong>internal review</strong> by {{public_body_link}} of their handling of this request."
+msgstr ""
+
+msgid "Waiting for the public authority to complete an internal review of their handling of the request"
+msgstr ""
+
+msgid "Waiting for the public authority to reply"
+msgstr ""
+
+msgid "Was the response you got to your FOI request any good?"
+msgstr ""
+
+msgid "We consider it is not a valid FOI request, and have therefore hidden it from other users."
+msgstr ""
+
+msgid "We consider it to be vexatious, and have therefore hidden it from other users."
+msgstr ""
+
+msgid "We do not have a working request email address for this authority."
+msgstr ""
+
+msgid "We do not have a working {{law_used_full}} address for {{public_body_name}}."
+msgstr ""
+
+msgid "We don't know whether the most recent response to this request contains\\n information or not\\n &ndash;\\n\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
+msgstr ""
+
+msgid "We will not reveal your email address to anybody unless you or\\n the law tell us to (<a href=\"{{url}}\">details</a>). "
+msgstr ""
+
+msgid "We will not reveal your email address to anybody unless you\\nor the law tell us to."
+msgstr ""
+
+msgid "We will not reveal your email addresses to anybody unless you\\nor the law tell us to."
+msgstr ""
+
+msgid "We're waiting for"
+msgstr ""
+
+msgid "We're waiting for someone to read"
+msgstr ""
+
+msgid "We've sent an email to your new email address. You'll need to click the link in\\nit before your email address will be changed."
+msgstr ""
+
+msgid "We've sent you an email, and you'll need to click the link in it before you can\\ncontinue."
+msgstr ""
+
+msgid "We've sent you an email, click the link in it, then you can change your password."
+msgstr ""
+
+msgid "What are you doing?"
+msgstr ""
+
+msgid "What best describes the status of this request now?"
+msgstr ""
+
+msgid "What information has been released?"
+msgstr ""
+
+msgid "What information has been requested?"
+msgstr ""
+
+msgid "When you get there, please update the status to say if the response \\ncontains any useful information."
+msgstr ""
+
+msgid "When you receive the paper response, please help\\n others find out what it says:"
+msgstr ""
+
+msgid "When you're done, <strong>come back here</strong>, <a href=\"{{url}}\">reload this page</a> and file your new request."
+msgstr ""
+
+msgid "Which of these is happening?"
+msgstr ""
+
+msgid "Who can I request information from?"
+msgstr ""
+
+msgid "Withdrawn by the requester."
+msgstr ""
+
+msgid "Wk"
+msgstr ""
+
+msgid "Would you like to see a website like this in your country?"
+msgstr ""
+
+msgid "Write a reply"
+msgstr ""
+
+msgid "Write a reply to "
+msgstr ""
+
+msgid "Write your FOI follow up message to "
+msgstr ""
+
+msgid "Write your request in <strong>simple, precise language</strong>."
+msgstr ""
+
+msgid "You"
+msgstr ""
+
+msgid "You are already following new requests"
+msgstr ""
+
+msgid "You are already following requests to {{public_body_name}}"
+msgstr ""
+
+msgid "You are already following things matching this search"
+msgstr ""
+
+msgid "You are already following this person"
+msgstr ""
+
+msgid "You are already following this request"
+msgstr ""
+
+msgid "You are already following updates about {{track_description}}"
+msgstr ""
+
+msgid "You are currently receiving notification of new activity on your wall by email."
+msgstr ""
+
+msgid "You are following all new successful responses"
+msgstr ""
+
+msgid "You are no longer following {{track_description}}."
+msgstr ""
+
+msgid "You are now <a href=\"{{wall_url_user}}\">following</a> updates about {{track_description}}"
+msgstr ""
+
+msgid "You can <strong>complain</strong> by"
+msgstr ""
+
+msgid "You can change the requests and users you are following on <a href=\"{{profile_url}}\">your profile page</a>."
+msgstr ""
+
+msgid "You can get this page in computer-readable format as part of the main JSON\\npage for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
+msgstr ""
+
+msgid "You can only request information about the environment from this authority."
+msgstr ""
+
+msgid "You have a new response to the {{law_used_full}} request "
+msgstr ""
+
+msgid "You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to tell us about the problem"
+msgstr ""
+
+msgid "You have hit the rate limit on new requests. Users are ordinarily limited to {{max_requests_per_user_per_day}} requests in any rolling 24-hour period. You will be able to make another request in {{can_make_another_request}}."
+msgstr ""
+
+msgid "You have made no Freedom of Information requests using this site."
+msgstr ""
+
+msgid "You have now changed the text about you on your profile."
+msgstr ""
+
+msgid "You have now changed your email address used on {{site_name}}"
+msgstr ""
+
+msgid "You just tried to sign up to {{site_name}}, when you\\nalready have an account. Your name and password have been\\nleft as they previously were.\\n\\nPlease click on the link below."
+msgstr ""
+
+msgid "You know what caused the error, and can <strong>suggest a solution</strong>, such as a working email address."
+msgstr ""
+
+msgid "You may <strong>include attachments</strong>. If you would like to attach a\\n file too large for email, use the form below."
+msgstr ""
+
+msgid "You may be able to find\\n one on their website, or by phoning them up and asking. If you manage\\n to find one, then please <a href=\"{{url}}\">send it to us</a>."
+msgstr ""
+
+msgid "You may be able to find\\none on their website, or by phoning them up and asking. If you manage\\nto find one, then please <a href=\"{{help_url}}\">send it to us</a>."
+msgstr ""
+
+msgid "You need to be logged in to change the text about you on your profile."
+msgstr ""
+
+msgid "You need to be logged in to change your profile photo."
+msgstr ""
+
+msgid "You need to be logged in to clear your profile photo."
+msgstr ""
+
+msgid "You need to be logged in to edit your profile."
+msgstr ""
+
+msgid "You need to be logged in to report a request for administrator attention"
+msgstr ""
+
+msgid "You previously submitted that exact follow up message for this request."
+msgstr ""
+
+msgid "You should have received a copy of the request by email, and you can respond\\n by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
+msgstr ""
+
+msgid "You want to <strong>give your postal address</strong> to the authority in private."
+msgstr ""
+
+msgid "You will be unable to make new requests, send follow ups, add annotations or\\nsend messages to other users. You may continue to view other requests, and set\\nup\\nemail alerts."
+msgstr ""
+
+msgid "You will no longer be emailed updates for those alerts"
+msgstr ""
+
+msgid "You will now be emailed updates about {{track_description}}. <a href=\"{{change_email_alerts_url}}\">Prefer not to receive emails?</a>"
+msgstr ""
+
+msgid "You will only get an answer to your request if you follow up\\nwith the clarification."
+msgstr ""
+
+msgid "You will still be able to view it while logged in to the site. Please reply to this email if you would like to discuss this decision further."
+msgstr ""
+
+msgid "You're in. <a href=\"#\" id=\"send-request\">Continue sending your request</a>"
+msgstr ""
+
+msgid "You're long overdue a response to your FOI request - "
+msgstr ""
+
+msgid "You're not following anything."
+msgstr ""
+
+msgid "You've now cleared your profile photo"
+msgstr ""
+
+msgid "Your <strong>name will appear publicly</strong>\\n (<a href=\"{{why_url}}\">why?</a>)\\n on this website and in search engines. If you\\n are thinking of using a pseudonym, please\\n <a href=\"{{help_url}}\">read this first</a>."
+msgstr ""
+
+msgid "Your annotations"
+msgstr ""
+
+msgid "Your details, including your email address, have not been given to anyone."
+msgstr ""
+
+msgid "Your e-mail:"
+msgstr "E-mail:"
+
+msgid "Your follow up has not been sent because this request has been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you really want to send a follow up message."
+msgstr ""
+
+msgid "Your follow up message has been sent on its way."
+msgstr ""
+
+msgid "Your internal review request has been sent on its way."
+msgstr ""
+
+msgid "Your message has been sent. Thank you for getting in touch! We'll get back to you soon."
+msgstr ""
+
+msgid "Your message to {{recipient_user_name}} has been sent"
+msgstr ""
+
+msgid "Your message to {{recipient_user_name}} has been sent!"
+msgstr ""
+
+msgid "Your message will appear in <strong>search engines</strong>"
+msgstr ""
+
+msgid "Your name and annotation will appear in <strong>search engines</strong>."
+msgstr ""
+
+msgid "Your name, request and any responses will appear in <strong>search engines</strong>\\n (<a href=\"{{url}}\">details</a>)."
+msgstr ""
+
+msgid "Your name:"
+msgstr "Nome:"
+
+msgid "Your original message is attached."
+msgstr ""
+
+msgid "Your password has been changed."
+msgstr "A sua palavra-chave foi alterada."
+
+msgid "Your password:"
+msgstr "Palavra-chave:"
+
+msgid "Your photo will be shown in public <strong>on the Internet</strong>,\\n wherever you do something on {{site_name}}."
+msgstr ""
+
+msgid "Your request '{{request}}' at {{url}} has been reviewed by moderators."
+msgstr ""
+
+msgid "Your request on {{site_name}} hidden"
+msgstr ""
+
+msgid "Your request was called {{info_request}}. Letting everyone know whether you got the information will help us keep tabs on"
+msgstr ""
+
+msgid "Your request:"
+msgstr "Pedido:"
+
+msgid "Your response to an FOI request was not delivered"
+msgstr ""
+
+msgid "Your response will <strong>appear on the Internet</strong>, <a href=\"{{url}}\">read why</a> and answers to other questions."
+msgstr ""
+
+msgid "Your thoughts on what the {{site_name}} <strong>administrators</strong> should do about the request."
+msgstr ""
+
+msgid "Your {{count}} Freedom of Information request"
+msgid_plural "Your {{count}} Freedom of Information requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Your {{count}} annotation"
+msgid_plural "Your {{count}} annotations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Your {{site_name}} email alert"
+msgstr ""
+
+msgid "Yours faithfully,"
+msgstr "Com os melhores cumprimentos,"
+
+msgid "Yours sincerely,"
+msgstr "Com os melhores cumprimentos,"
+
+msgid "Yours,"
+msgstr ""
+
+msgid "[FOI #{{request}} email]"
+msgstr ""
+
+msgid "[{{public_body}} request email]"
+msgstr ""
+
+msgid "[{{site_name}} contact email]"
+msgstr ""
+
+msgid "\\n\\n[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
+msgstr ""
+
+msgid "a one line summary of the information you are requesting, \\n\t\t\te.g."
+msgstr ""
+
+msgid "admin"
+msgstr ""
+
+msgid "alaveteli_foi:The software that runs {{site_name}}"
+msgstr ""
+
+msgid "all requests"
+msgstr ""
+
+msgid "also called {{public_body_short_name}}"
+msgstr ""
+
+msgid "an anonymous user"
+msgstr "utilizador anónimo"
+
+msgid "and"
+msgstr ""
+
+msgid "and update the status accordingly. Perhaps <strong>you</strong> might like to help out by doing that?"
+msgstr ""
+
+msgid "and update the status."
+msgstr ""
+
+msgid "and we'll suggest <strong>what to do next</strong>"
+msgstr ""
+
+msgid "any <a href=\"/list\">new requests</a>"
+msgstr ""
+
+msgid "any <a href=\"/list/successful\">successful requests</a>"
+msgstr ""
+
+msgid "anything"
+msgstr ""
+
+msgid "are long overdue."
+msgstr ""
+
+msgid "at"
+msgstr ""
+
+msgid "authorities"
+msgstr ""
+
+msgid "awaiting a response"
+msgstr ""
+
+msgid "beginning with ‘{{first_letter}}’"
+msgstr ""
+
+msgid "between two dates"
+msgstr ""
+
+msgid "but followupable"
+msgstr ""
+
+msgid "by"
+msgstr ""
+
+msgid "by <strong>{{date}}</strong>"
+msgstr ""
+
+msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
+msgstr ""
+
+msgid "by {{user_link_absolute}}"
+msgstr ""
+
+msgid "comments"
+msgstr ""
+
+msgid "containing your postal address, and asking them to reply to this request.\\n Or you could phone them."
+msgstr ""
+
+msgid "details"
+msgstr "detalhes"
+
+msgid "display_status only works for incoming and outgoing messages right now"
+msgstr ""
+
+msgid "during term time"
+msgstr ""
+
+msgid "edit text about you"
+msgstr ""
+
+msgid "even during holidays"
+msgstr ""
+
+msgid "everything"
+msgstr ""
+
+msgid "external"
+msgstr ""
+
+msgid "has reported an"
+msgstr ""
+
+msgid "have delayed."
+msgstr ""
+
+msgid "hide quoted sections"
+msgstr ""
+
+msgid "in term time"
+msgstr ""
+
+msgid "in the category ‘{{category_name}}’"
+msgstr ""
+
+msgid "internal error"
+msgstr ""
+
+msgid "internal reviews"
+msgstr ""
+
+msgid "is <strong>waiting for your clarification</strong>."
+msgstr ""
+
+msgid "just to see how it works"
+msgstr ""
+
+msgid "left an annotation"
+msgstr ""
+
+msgid "made."
+msgstr ""
+
+msgid "matching the tag ‘{{tag_name}}’"
+msgstr ""
+
+msgid "messages from authorities"
+msgstr ""
+
+msgid "messages from users"
+msgstr ""
+
+msgid "move..."
+msgstr ""
+
+msgid "no later than"
+msgstr ""
+
+msgid "no longer exists. If you are trying to make\\n From the request page, try replying to a particular message, rather than sending\\n a general followup. If you need to make a general followup, and know\\n an email which will go to the right place, please <a href=\"{{url}}\">send it to us</a>."
+msgstr ""
+
+msgid "normally"
+msgstr ""
+
+msgid "not requestable due to: {{reason}}"
+msgstr ""
+
+msgid "please sign in as "
+msgstr ""
+
+msgid "requesting an internal review"
+msgstr ""
+
+msgid "requests"
+msgstr ""
+
+msgid "requests which are {{list_of_statuses}}"
+msgstr ""
+
+msgid "response as needing administrator attention. Take a look, and reply to this\\nemail to let them know what you are going to do about it."
+msgstr ""
+
+msgid "send a follow up message"
+msgstr ""
+
+msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+msgstr ""
+
+msgid "set to <strong>blank</strong> (empty string) if can't find an address; these emails are <strong>public</strong> as anyone can view with a CAPTCHA"
+msgstr ""
+
+msgid "show quoted sections"
+msgstr ""
+
+msgid "sign in"
+msgstr ""
+
+msgid "simple_date_format"
+msgstr ""
+
+msgid "successful"
+msgstr ""
+
+msgid "successful requests"
+msgstr ""
+
+msgid "that you made to"
+msgstr ""
+
+msgid "the main FOI contact address for {{public_body}}"
+msgstr ""
+
+#. This phrase completes the following sentences:
+#. Request an internal review from...
+#. Send a public follow up message to...
+#. Send a public reply to...
+#. Don't want to address your message to... ?
+msgid "the main FOI contact at {{public_body}}"
+msgstr ""
+
+msgid "the requester"
+msgstr ""
+
+msgid "the {{site_name}} team"
+msgstr ""
+
+msgid "to read"
+msgstr ""
+
+msgid "to send a follow up message."
+msgstr ""
+
+msgid "to {{public_body}}"
+msgstr ""
+
+msgid "unknown reason "
+msgstr ""
+
+msgid "unknown status "
+msgstr ""
+
+msgid "unresolved requests"
+msgstr ""
+
+msgid "unsubscribe"
+msgstr ""
+
+msgid "unsubscribe all"
+msgstr ""
+
+msgid "unsuccessful"
+msgstr ""
+
+msgid "unsuccessful requests"
+msgstr ""
+
+msgid "useful information."
+msgstr ""
+
+msgid "users"
+msgstr ""
+
+msgid "what's that?"
+msgstr ""
+
+msgid "{{count}} FOI requests found"
+msgstr ""
+
+msgid "{{count}} Freedom of Information request to {{public_body_name}}"
+msgid_plural "{{count}} Freedom of Information requests to {{public_body_name}}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{{count}} person is following this authority"
+msgid_plural "{{count}} people are following this authority"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{{count}} request"
+msgid_plural "{{count}} requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{{count}} request made."
+msgid_plural "{{count}} requests made."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{{existing_request_user}} already\\n created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\\n or edit the details below to make a new but similar request."
+msgstr ""
+
+msgid "{{info_request_user_name}} only:"
+msgstr ""
+
+msgid "{{law_used_full}} request - {{title}}"
+msgstr ""
+
+msgid "{{law_used}} requests at {{public_body}}"
+msgstr ""
+
+msgid "{{length_of_time}} ago"
+msgstr ""
+
+msgid "{{list_of_things}} matching text '{{search_query}}'"
+msgstr ""
+
+msgid "{{number_of_comments}} comments"
+msgstr ""
+
+msgid "{{public_body_link}} answered a request about"
+msgstr ""
+
+msgid "{{public_body_link}} was sent a request about"
+msgstr ""
+
+msgid "{{public_body_name}} only:"
+msgstr ""
+
+msgid "{{public_body}} has asked you to explain part of your {{law_used}} request."
+msgstr ""
+
+msgid "{{public_body}} sent a response to {{user_name}}"
+msgstr ""
+
+msgid "{{reason}}, please sign in or make a new account."
+msgstr ""
+
+msgid "{{search_results}} matching '{{query}}'"
+msgstr ""
+
+msgid "{{site_name}} blog and tweets"
+msgstr ""
+
+msgid "{{site_name}} covers requests to {{number_of_authorities}} authorities, including:"
+msgstr ""
+
+msgid "{{site_name}} sends new requests to <strong>{{request_email}}</strong> for this authority."
+msgstr ""
+
+msgid "{{site_name}} users have made {{number_of_requests}} requests, including:"
+msgstr ""
+
+msgid "{{thing_changed}} was changed from <code>{{from_value}}</code> to <code>{{to_value}}</code>"
+msgstr ""
+
+msgid "{{title}} - a Freedom of Information request to {{public_body}}"
+msgstr ""
+
+msgid "{{user_name}} (Account suspended)"
+msgstr ""
+
+msgid "{{user_name}} - Freedom of Information requests"
+msgstr ""
+
+msgid "{{user_name}} - user profile"
+msgstr ""
+
+msgid "{{user_name}} added an annotation"
+msgstr ""
+
+msgid "{{user_name}} has annotated your {{law_used_short}} \\nrequest. Follow this link to see what they wrote."
+msgstr ""
+
+msgid "{{user_name}} has used {{site_name}} to send you the message below."
+msgstr ""
+
+msgid "{{user_name}} sent a follow up message to {{public_body}}"
+msgstr ""
+
+msgid "{{user_name}} sent a request to {{public_body}}"
+msgstr ""
+
+msgid "{{username}} left an annotation:"
+msgstr ""
+
+msgid "{{user}} ({{user_admin_link}}) made this {{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
+msgstr ""
+
+msgid "{{user}} made this {{law_used_full}} request"
+msgstr ""
diff --git a/locale/ro_RO/app.po b/locale/ro_RO/app.po
index a75e1c8ca..d5dd82148 100644
--- a/locale/ro_RO/app.po
+++ b/locale/ro_RO/app.po
@@ -20,10 +20,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/alaveteli/language/ro_RO/)\n"
"Language: ro_RO\n"
"MIME-Version: 1.0\n"
@@ -820,15 +820,24 @@ msgstr "Urmăriţi această persoană"
msgid "Follow this request"
msgstr "Urmăriţi această solicitare"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Urmăriţi"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Urmăriţi mesajul trimis de solicitant"
msgid "Follow up messages to existing requests are sent to "
msgstr "Urmăriţi mesajele trimise de solicitant"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Urmăririle si noile răspunsuri la această cerere au fost stopate pentru a preveni spam-ul. Vă rugăm <a href=\"{{url}}\"> să ne contactaţi</a> dacă sunteţi {{user_link}} şi aveţi nevoie să trimiteţi follw up."
@@ -1806,6 +1815,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "Instituţie publică| Ultimul comentariu editat"
@@ -2739,18 +2751,12 @@ msgstr "UserInfoRequestSentAlert|Tip Alerta"
msgid "User|About me"
msgstr "Utilizator|Despre mine"
-msgid "User|Address"
-msgstr "Utilizator|Adresă"
-
msgid "User|Admin level"
msgstr "Utilizator|Nivel administrator"
msgid "User|Ban text"
msgstr "Utilizator|Text interzis"
-msgid "User|Dob"
-msgstr "Utilizator|Dob"
-
msgid "User|Email"
msgstr "Utilizator|Email"
@@ -3446,9 +3452,6 @@ msgstr "numai {{info_request_user_name}} :"
msgid "{{law_used_full}} request - {{title}}"
msgstr "cerere {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "cerere GQ {{law_used_full}} - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "{{law_used}} cereri către {{public_body}}"
diff --git a/locale/sl/app.po b/locale/sl/app.po
index 5401d9e55..7c586d6d7 100644
--- a/locale/sl/app.po
+++ b/locale/sl/app.po
@@ -8,10 +8,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/alaveteli/language/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
@@ -808,15 +808,24 @@ msgstr "Spremljaj to osebo"
msgid "Follow this request"
msgstr "Sledite temu zahtevku"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Odziv"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Odziv, poslan s strani prosilca"
msgid "Follow up messages to existing requests are sent to "
msgstr "Odzivi na obstoječe zahtevke so poslani k"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Odzivi in novi odgovori na ta zahtevek so bili onemogočeni, da se omejijo neželena sporočila. Prosimo, <a href=\"{{url}}\">stopite v kontakt</a>, če ste uporabnik {{user_link}} in želite poslati odziv."
@@ -1793,6 +1802,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "JavniOrgan|Zadnji urejani komentar"
@@ -2730,18 +2742,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "User|About me"
-msgid "User|Address"
-msgstr "User|Naslov"
-
msgid "User|Admin level"
msgstr "User|Admin level"
msgid "User|Ban text"
msgstr "User|Ban text"
-msgid "User|Dob"
-msgstr "User|Rojstni dan"
-
msgid "User|Email"
msgstr "User|Email"
@@ -3443,9 +3449,6 @@ msgstr "{{info_request_user_name}} le:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "zahtevek za {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr "zahtevek {{law_used_full}} GQ? - {{title}}"
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr "zahtevki {{law_used}} za {{public_body}}"
diff --git a/locale/sq/app.po b/locale/sq/app.po
index 71cad4874..8702f096b 100644
--- a/locale/sq/app.po
+++ b/locale/sq/app.po
@@ -16,10 +16,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/alaveteli/language/sq/)\n"
"Language: sq\n"
"MIME-Version: 1.0\n"
@@ -873,15 +873,24 @@ msgstr "Ndiq këtë person"
msgid "Follow this request"
msgstr "Përcjell këtë kërkesë"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Përcjell"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Mesazhi vazhdues është dërguar nga kërkuesi"
msgid "Follow up messages to existing requests are sent to "
msgstr "Mesazhet vazhduese të kërkesës ekzistuese dërgohen te "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Mesazhet vazhduese dhe përgjigjet e reja në këtë kërkesë janë stopuar për të parandaluar spam emailat. Të lutem <a href=\"{{url}}\"> na kontakto</a> nëse ti je {{user_link}} dhe ke nevojë të dërgosh mesazh vazhdues."
@@ -1894,6 +1903,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr "PublicBody | Editimi i fundit i komentit"
@@ -2850,18 +2862,12 @@ msgstr "UserInfoRequestSentAlert|Alert type"
msgid "User|About me"
msgstr "Përdoruesi|Rreth meje"
-msgid "User|Address"
-msgstr "Përdoruesi|Adresa"
-
msgid "User|Admin level"
msgstr "Përdoruesi | Niveli i Administrimit"
msgid "User|Ban text"
msgstr "Përdoruesi|Tekst i ndaluar"
-msgid "User|Dob"
-msgstr "Përdoruesi|Datëlindja"
-
msgid "User|Email"
msgstr "Përdoruesi |Email"
@@ -3593,9 +3599,6 @@ msgstr "Vetëm për {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "Kërkesë për {{law_used_full}} - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/sr@latin/app.po b/locale/sr@latin/app.po
index 4560bc482..a58936e40 100644
--- a/locale/sr@latin/app.po
+++ b/locale/sr@latin/app.po
@@ -3,18 +3,21 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Goran Rakic <grakic@devbase.net>, 2013
+# vucko <vucko@acm.org>, 2013
# krledmno1 <krledmno1@gmail.com>, 2013
# krledmno1 <krledmno1@gmail.com>, 2013
# Valon <vbrestovci@gmail.com>, 2011-2012
# Valon <vbrestovci@gmail.com>, 2012
# Valon <vbrestovci@gmail.com>, 2011
+# vucko <vucko@acm.org>, 2013
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:26+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/alaveteli/language/sr@latin/)\n"
"Language: sr@latin\n"
"MIME-Version: 1.0\n"
@@ -23,72 +26,68 @@ msgstr ""
"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"
msgid " This will appear on your {{site_name}} profile, to make it\\n easier for others to get involved with what you're doing."
-msgstr "<a href=\"%s\">Da li nam nedostaje javna ustanova?</a>"
+msgstr "Ovo će biti prikazano na Vašem profilu na sistem {{site_name}}, da drugima olakša\\n da prate šta radite."
msgid " (<strong>no ranty</strong> politics, read our <a href=\"{{url}}\">moderation policy</a>)"
-msgstr ""
+msgstr " (<strong>bez zanovetajuće</strong> politike, pogledajte naša <a href=\"{{url}}\">pravila moderacije</a>)"
msgid " (<strong>patience</strong>, especially for large files, it may take a while!)"
-msgstr " (<strong>budite strpljivi</strong>, posebno za velike datoteke, moglo bi potrajati!)"
+msgstr " (<strong>budite strpljivi</strong>, potrajaće posebno za velike datoteke!)"
msgid " (you)"
msgstr " (Vi)"
msgid " - view and make Freedom of Information requests"
-msgstr " - pregledaj i napravi Zahteve o slobodnom pristupu informacijama "
+msgstr " - pregledaj i podnesi Zahteve za slobodan pristup informacijama od javnog značaja"
msgid " - wall"
-msgstr ""
+msgstr "- zid"
msgid " <strong>Note:</strong>\\n We will send you an email. Follow the instructions in it to change\\n your password."
msgstr ""
-" <strong>Note:</strong>\n"
-" Poslati ćemo vam e-mail. Pratite instrukcije u njemu da biste promijenili\n"
-" Vaš password."
+" <strong>Napomena:</strong>\n"
+" Poslaćemo Vam e-mail. Pratite instrukcije u njemu da biste promenili Vašu lozinku."
msgid " <strong>Privacy note:</strong> Your email address will be given to"
-msgstr " <strong>Privacy note:</strong> Vaša e-mail adresa će biti proslijeđena"
+msgstr " <strong>Napomena o privatnosti:</strong> Biće prosleđena vaša adresa e-pošte"
msgid " <strong>Summarise</strong> the content of any information returned. "
-msgstr " <strong>Sažimati</strong> sadržaj svake vraćene informacije. "
+msgstr " <strong>Sažmi</strong> sadržaj svake vraćene informacije. "
msgid " Advise on how to <strong>best clarify</strong> the request."
-msgstr " Savetuj kako<strong>najbolje objasniti</strong> zahjev."
+msgstr " Savet kako<strong>najbolje objasniti</strong> zahtev."
msgid " Ideas on what <strong>other documents to request</strong> which the authority may hold. "
-msgstr " Ideje za <strong>zahteve drugih dokumenata</strong> koje ustanova može posjedovati. "
+msgstr "Predlozi <strong>drugih dokumenata</strong> koji mogu da se zahtevaju, a koje ista ustanova verovatno poseduje."
msgid " If you know the address to use, then please <a href=\"{{url}}\">send it to us</a>.\\n You may be able to find the address on their website, or by phoning them up and asking."
msgstr ""
" Ako znate koju adresu treba koristiti, molimo Vas <a href=\"{{url}}\">pošaljite je nama</a>.\n"
-" Moguće je da možete naći adresu na njihovoj web stranici, ili putem telefona."
+" Možda možete naći adresu na njihovoj web stranici, ili putem telefona."
msgid " Include relevant links, such as to a campaign page, your blog or a\\n twitter account. They will be made clickable. \\n e.g."
-msgstr ""
-" Uključite relevantne linkove, poput stranice kampanje, Vašeg bloga ili \n"
-" twitter account-a. Moći će se kliknuti na njih. \n"
-" npr."
+msgstr "Uključite relevantne linkove, poput linka na stranicu kampanje, Vaš blog ili\\n twitter profil. Linkovi će biti klikabilni. \\n npr."
msgid " Link to the information requested, if it is <strong>already available</strong> on the Internet. "
-msgstr ""
+msgstr " Link do tražene informacije, ako je <strong>već raspoloživa</strong> na internetu. "
msgid " Offer better ways of <strong>wording the request</strong> to get the information. "
-msgstr ""
+msgstr "Ponudi bolje načine za <strong>formulisanje zahteva</strong> za dobijanje informacije. "
msgid " Say how you've <strong>used the information</strong>, with links if possible."
msgstr " Recite nam kako ste<strong>iskoristili informaciju</strong>, sa linkovima ako je moguće."
msgid " Suggest <strong>where else</strong> the requester might find the information. "
-msgstr "Predložite <strong>gde sve</strong> podnosilac zahteva može pronaći informacije."
+msgstr "Predložite <strong>gde još</strong> podnosilac zahteva može pronaći ove informacije."
msgid " What are you investigating using Freedom of Information? "
-msgstr " Šta istražujete koristeći Zakon o slobodnom pristupu informacijama ? "
+msgstr " Šta istražujete koristeći Zakon o slobodnom pristupu informacijama od javnog značaja? "
msgid " You are already being emailed updates about the request."
-msgstr " Ažuriranja zahteva već su Vam poslana putem e-maila."
+msgstr "Već ste se prijavili da primate novosti u vezi zahteva."
msgid " You will also be emailed updates about the request."
-msgstr " Ažuriranja zahteva će Vam takođe biti poslana putem e-maila."
+msgstr "Novosti u vezi zahteva će Vam takođe biti poslate i putem e-pošte."
msgid " made by "
msgstr " načinjeno od strane "
@@ -100,16 +99,16 @@ msgid " when you send this message."
msgstr " kada pošaljete ovu poruku."
msgid "\"Hello! We have an <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">important message</a> for visitors outside {{country_name}}\""
-msgstr ""
+msgstr "\"Dobrodošli! Imamo <a href=\\\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\\\">važnu poruku</a> za posetioce koji pristupaju iz zemlje koja nije {{country_name}}\""
msgid "'Crime statistics by ward level for Wales'"
-msgstr "'Statistika krivičnih dela na opštinskom nivou'"
+msgstr "„Statistika krivičnih dela po mesnim zajednicama u Beogradu“"
msgid "'Pollution levels over time for the River Tyne'"
-msgstr "'Nivo zagađenja kroz period vremena za reku Tyne'"
+msgstr "„Nivo zagađenja u Južnoj Moravi tokom vremena“"
msgid "'{{link_to_authority}}', a public authority"
-msgstr "'{{link_to_authority}}', javna ustanova"
+msgstr "'{{link_to_authority}}', organ javne vlasti"
msgid "'{{link_to_request}}', a request"
msgstr "'{{link_to_request}}', zahtev"
@@ -118,215 +117,197 @@ msgid "'{{link_to_user}}', a person"
msgstr "'{{link_to_user}}', osoba"
msgid "*unknown*"
-msgstr ""
+msgstr "*nepoznat*"
msgid ",\\n\\n\\n\\nYours,\\n\\n{{user_name}}"
-msgstr ""
-",\n"
-"\n"
-"\n"
-"\n"
-"S poštovanjem,\n"
-"\n"
-"{{user_name}}"
+msgstr ",\\n\\n\\n\\nS poštovanjem,\\n\\n{{user_name}}"
msgid "- or -"
msgstr "- ili -"
msgid "1. Select an authority"
-msgstr "1. Odaberite ustanovu"
+msgstr "1. Odaberite organ javne vlasti"
msgid "2. Ask for Information"
msgstr "2. Tražite informacije"
msgid "3. Now check your request"
-msgstr "3. Sada provjerite Vaš zahtev"
+msgstr "3. Sada proverite Vaš zahtev"
msgid "<a href=\"{{browse_url}}\">Browse all</a> or <a href=\"{{add_url}}\">ask us to add one</a>."
-msgstr "<a href=\"{{browse_url}}\">Pretraži sve</a> ili <a href=\"{{add_url}}\"> zamolite nas da dodamo </a>."
+msgstr "<a href=\"{{browse_url}}\">Listajte sve</a> ili <a href=\"{{add_url}}\"> nas zamolite da dodamo jedan</a>."
msgid "<a href=\"{{url}}\">Add an annotation</a> (to help the requester or others)"
msgstr "<a href=\"{{url}}\">Dodaj napomenu</a> (da bi se pomoglo podnosiocu zahteva ili drugima)"
msgid "<a href=\"{{url}}\">Sign in</a> to change password, subscriptions and more ({{user_name}} only)"
-msgstr "<a href=\"{{url}}\">Prijavite se</a> da biste promijenili password, pretplatu ili drugo ({{user_name}} only)"
+msgstr "<a href=\"{{url}}\">Prijavite se</a> da biste promijenili lozinku, praćenje ili druge stvari (samo {{user_name}})"
msgid "<p>All done! Thank you very much for your help.</p><p>There are <a href=\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>"
-msgstr "<p>Završeno! Hvala Vam na pomoći.</p><p>Postoji <a href=\"{{helpus_url}}\">više stvari koje možete uradite</a> da biste pomogli {{site_name}}.</p>"
+msgstr "<p>Završeno! Hvala Vam na pomoći.</p><p>Postoje <a href=\"{{helpus_url}}\">i druge stvari koje možete da uradite</a> da biste doprineli sajtu {{site_name}}.</p>"
msgid "<p>Thank you! Here are some ideas on what to do next:</p>\\n <ul>\\n <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\\n <li>If you would like to contest the authority's claim that they do not hold the information, here is\\n <a href=\"{{complain_url}}\">how to complain</a>.\\n </li>\\n <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\\n on other means to answer your question.\\n </li>\\n </ul>"
-msgstr ""
+msgstr "<p>Hvala! Evo nekoliko ideja šta uraditi sada:</p>\\n <ul>\\n <li>Da biste poslali zahtev nekoj drugoj ustanovi, prvo kopirajte tekst Vaše zahteva ispod, a onda <a href=\"{{find_authority_url}}\">izaberete drugu ustanovu</a>.</li>\\n <li>Ako želite da protivrečite tvrdnji ustanove da ne poseduje tu informaciu, evo kako\\n <a href=\"{{complain_url}}\">da uložite žalbu</a>.\\n </li>\\n <li>Imamo <a href=\"{{other_means_url}}\">još saveta</a>\\n o drugim načinima kako da Vaše pitanje bude odgovoreno.\\n </li>\\n </ul>"
msgid "<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you should have got a response promptly, and normally before the end of <strong>{{date_response_required_by}}</strong>.</p>"
-msgstr ""
+msgstr "<p>Hvala! Nadamo se da nećete morati da čekate još puno.</p> <p>Po zakonu, trebalo je da dobijete odgovor u kratkom roku, obično do <strong>{{date_response_required_by}}</strong>.</p>"
msgid "<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\\n{{date_response_required_by}}</strong>.</p>"
-msgstr ""
+msgstr "<p>Hvala! Nadamo se da ne čekate predugo.</p> <p>Po zakonu na Vaš zahtev bi trebalo da bude odgovoreno bez odlaganja, po običaju pre <strong>\\n{{date_response_required_by}}</strong>.</p>"
msgid "<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a response within {{late_number_of_days}} days, or be told if it will take longer (<a href=\"{{review_url}}\">details</a>).</p>"
-msgstr "<p>Hvala! Nadamo se da nećete čekati predugo.</p><p>Trebali biste dobiti odgovor za {{late_number_of_days}} dana, ili obavešteni da će trajati duže. (<a href=\"{{review_url}}\">Više informacija</a>)</p>"
+msgstr "<p>Hvala! Nadamo se da nećete čekati predugo.</p><p>Trebalo bi da dobijete odgovor u roku od {{late_number_of_days}} dana, ili da budete obavešteni da će trajati duže. (<a href=\"{{review_url}}\">Više informacija</a>)</p>"
msgid "<p>Thank you! Your request is long overdue, by more than {{very_late_number_of_days}} working days. Most requests should be answered within {{late_number_of_days}} working days. You might like to complain about this, see below.</p>"
-msgstr ""
+msgstr "<p>Hvala! Rok za odgovor na Vaš zahtev je davno prekoračen, prošlo je više od {{very_late_number_of_days}} dana. Većina zahteva bi trebalo da bude odgovorena u roku od {{late_number_of_days}} dana. Na ovo možete da uložite žalbu, pogledajte ispod.</p>"
msgid "<p>Thanks for changing the text about you on your profile.</p>\\n <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
-msgstr ""
+msgstr "<p>Hvala što ste promenili tekst o Vama na Vašem profilu.</p>\\n <p><strong>Sledeće...</strong> Možete takođe postaviti i fotografiju.</p>"
msgid "<p>Thanks for updating your profile photo.</p>\\n <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
-msgstr ""
+msgstr "<p>Hvala što ste ažurirali Vašu fotografiju.</p>\\n <p><strong>Sledeće...</strong> Možete u profil upisati tekst o Vama i Vašem istraživanju.</p>"
msgid "<p>We recommend that you edit your request and remove the email address.\\n If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
-msgstr ""
-"<p>Preporučujemo da preuredite Vaš zahtev i da uklonite e-mail adresu.\n"
-" Ako je ostavite, e-mail adresa će biti poslana ustanovi, ali neće biti vidljiva na web stranici.</p>"
+msgstr "<p>Preporučujemo da izmenite Vaš zahtev i uklonite e-mail adresu.\\n Ako je ostavite, e-mail adresa će biti poslata ustanovi, ali neće biti vidljiva na sajtu.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p>"
-msgstr ""
+msgstr "<p>Drago nam je da ste dobili sve informacije koje ste tražili. Ako budete pisali o ovom zahtevu ili koristili informacije, molimo postavite komentar ispod sa opisom šta ste uradili.</p>"
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p><p>If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p>"
-msgstr "<p>Drago nam je da ste dobili sve željene informacije. Ako ih budete koristili ili pisali o njima, molimo da se vratite i dodate napomenu ispod opisujući šta ste uradili. </p><p>Ako mislite da je {{site_name}} bio koristan, <a href=\"{{donation_url}}\">donirajte</a> nevladinoj organizaciji koja ga vodi.</p>"
+msgstr "<p>Drago nam je da ste dobili sve željene informacije. Ako ih budete koristili ili pisali o njima, molili bismo Vas da dođete opet i dodate napomenu ispod, opisujući šta ste uradili. </p><p>Ako mislite da je {{site_name}} bio koristan i želeli biste da donirate novac za njegovo održavanje, moramo da Vas obavestimo da mi ne primamo direktne donacije - ali onima koji bi da pomognu i novcem preporučujemo neku od dobrotvornih organizacija - klikom na link <a href=\"{{donation_url}}\">donirajte</a> onoj kojoj trenutno usmeravamo pomoć.</p>"
msgid "<p>We're glad you got some of the information that you wanted. If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
-msgstr "<p>Drago nam je da ste dobili dio željenih informacija. Ako mislite da je {{site_name}} bio koristan, <a href=\"{{donation_url}}\">donirajte</a> nevladinoj organizaciji koja ga vodi.</p>"
+msgstr "<p>Drago nam je da ste dobili deo željenih informacija.Ako mislite da je {{site_name}} bio koristan i želeli biste da donirate novac za njegovo održavanje, moramo da Vas obavestimo da mi ne primamo direktne donacije - ali onima koji bi da pomognu i novcem preporučujemo neku od dobrotvornih organizacija - klikom na link <a href=\"{{donation_url}}\">donirajte</a> onoj kojoj trenutno usmeravamo pomoć.</p>"
msgid "<p>We're glad you got some of the information that you wanted.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
-msgstr ""
+msgstr "<p>Drago nam je da ste dobili deo informacija koje ste tražili.</p><p>Ako želite da dobijete ostatak informacija, to možete uraditi na sledeći način.</p>"
msgid "<p>You do not need to include your email in the request in order to get a reply (<a href=\"{{url}}\">details</a>).</p>"
msgstr "<p>Nije potrebno da uključite Vašu e-mail adresu u zahtev da biste dobili odgovor (<a href=\"{{url}}\">Više informacija</a>).</p>"
msgid "<p>You do not need to include your email in the request in order to get a reply, as we will ask for it on the next screen (<a href=\"{{url}}\">details</a>).</p>"
-msgstr "<p>Nije potrebno da uključite Vašu e-mail adresu u zahtev da biste dobili odgovor, pitati ćemo vas u vezi toga u sledećem koraku (<a href=\"{{url}}\">Više informacija</a>).</p>"
+msgstr "<p>Nije potrebno da uključite Vašu e-mail adresu u zahtev da biste dobili odgovor, pitaćemo Vas u vezi toga u sledećem koraku (<a href=\"{{url}}\">Više informacija</a>).</p>"
msgid "<p>Your request contains a <strong>postcode</strong>. Unless it directly relates to the subject of your request, please remove any address as it will <strong>appear publicly on the Internet</strong>.</p>"
-msgstr ""
+msgstr "<p>Vaš zahtev sadrži <strong>poštanski broj</strong>. Ako se ovaj poštanski broj ne odnosi na predmet Vašeg zahteva, molimo Vas da uzmete u obzir da će <strong>zahtev biti prikazan javno na Internetu</strong> - možda bi bilo korisno da uklonite adresu iz teksta, ako želite zaštititi privatnost ličnih podataka - Vaših ili nekog drugog lica.</p>"
msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\\n <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\\n replied by then.</p>\\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an\\n annotation below telling people about your writing.</p>"
-msgstr ""
+msgstr "<p>Vaš zahtev vezan za {{law_used_full}} je <strong>poslat</strong>!</p>\\n <p><strong>Obavestićemo Vas e-mailom</strong> kada dođe odgovor, ili nakon {{late_number_of_days}} radnih dana, ako ustanova još nije\\n odgovorila.</p>\\n <p>Ako pišete o ovom zahtevu (npr. na nekom forumu ili blogu) molimo Vas da dodate link na ovu stranicu, i \\n komentar ispod, da informišete zainteresovane o Vašem pisanju.</p>"
msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
-msgstr "<p>{{site_name}} je trenutno na održavanju. Možete samo pregledati postojeće zahteve. Ne možete odnositi nove, dodavati prateće poruke ili napomene, ili u suprotnom promijenite bazu podataka.</p> <p>{{read_only}}</p>"
+msgstr "<p>{{site_name}} je trenutno u režimu održavanja. Možete samo pregledati postojeće zahteve. Ne možete unositi nove, dodavati prateće poruke ili napomene ili na bilo koji način menjati bazu podataka.</p> <p>{{read_only}}</p>"
msgid "<small>If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way.</small>\\n</p>"
msgstr ""
-"<small>Ako koristite neke od web mail servisa ili imate filtere za \"junk mail\", provjerite u Vašim bulk/spam folderima. Ponekad su naše poruke označene tako</small>\n"
+"<small>Ako koristite neke od web mail servisa ili imate filtere za \"junk mail\", proverite u Vašim\\n bulk/spam folderima. Naše poruke ponekad budu tako klasifikovane.</small>\n"
"</p>"
msgid "<strong> Can I request information about myself?</strong>\\n\t\t\t<a href=\"{{url}}\">No! (Click here for details)</a>"
-msgstr ""
-"<strong> Da li mogu zahtijevati informacije o sebi?</strong>\n"
-"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><a href=\"{{url}}\">Ne! (Kliknite za detalje)</a>"
+msgstr "<strong>Mogu li tražiti podatke o sebi?</strong>\\n⇥⇥⇥<a href=\"{{url}}\">Ne! (Kliknite ovde za objašnjenje)</a>"
msgid "<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL."
-msgstr "<strong><code>komentar_od:tony_bowden</code></strong> da pretražujete komentare Tony Bowden-a, ime unesite kao u URL-u."
+msgstr "<strong><code>commented_by:pera_mitic</code></strong> da pretražujete komentare koje je uneo Pera Mitić, ime unesite kao u URL-u."
msgid "<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
msgstr "<strong><code>filetype:pdf</code></strong> da nađete sve odgovore sa PDF prilozima. Ili probajte ove: <code>{{list_of_file_extensions}}</code>"
msgid "<strong><code>request:</code></strong> to restrict to a specific request, typing the title as in the URL."
-msgstr "<strong><code>zahtev:</code></strong> da biste se ograničili na neki određeni zahtev, ukucati naslov kao u URL-u"
+msgstr "<strong><code>request:</code></strong> da biste se ograničili na neki određeni zahtev, ukucati naslov kao u URL-u"
msgid "<strong><code>requested_by:julian_todd</code></strong> to search requests made by Julian Todd, typing the name as in the URL."
-msgstr "<strong><code>podnesen_od strane:julian_todd</code></strong> da biste pretražili zahteve koje je podnio Julian Todd, ukucati ime kao u URL-u."
+msgstr "<strong><code>requested_by:zika_obretkovic</code></strong> da biste pretražili zahteve koje je podnio Žika Obretković, ukucati ime kao što je u URL-u."
msgid "<strong><code>requested_from:home_office</code></strong> to search requests from the Home Office, typing the name as in the URL."
-msgstr ""
+msgstr "<strong><code>requested_from:mup_srbije</code></strong> da tražite zahteve informacija od MUP-a Srbije, ukucajte ime kao što je u URL."
msgid "<strong><code>status:</code></strong> to select based on the status or historical status of the request, see the <a href=\"{{statuses_url}}\">table of statuses</a> below."
-msgstr "<strong><code>status:</code></strong> da biste birali zasnovano na statusu ili historiji statusa zahteva, pogledajte <a href=\"{{statuses_url}}\">tabelu statusa</a> below."
+msgstr "<strong><code>status:</code></strong> da biste birali na osnovu statusu ili istorije statusa zahteva, pogledajte <a href=\"{{statuses_url}}\">tabelu statusa</a> below."
msgid "<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \\n and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\\n can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
-msgstr ""
+msgstr "<strong><code>tag:charity</code></strong> da nađete sve ustanove ili zahteve sa tim priveskom. Možete uključiti više privezaka, \\n i njihovih vrednosti, npr. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Imajte u vidu da je podrazumevani smisao logičko \"ili\"\\n morate koristiti ključnu reč <code>AND</code> ako želite da postignete logičko \"i\" ."
msgid "<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
-msgstr ""
+msgstr "<strong><code>variety:</code></strong> da odaberete vrstu stvari koja se traži, pogledajte <a href=\"{{varieties_url}}\">tabelu vrsta</a> below."
msgid "<strong>Advice</strong> on how to get a response that will satisfy the requester. </li>"
msgstr "<strong>Savet</strong> o tome kako dobiti odgovor koji će zadovoljiti podnosioca zahteva. </li>"
msgid "<strong>All the information</strong> has been sent"
-msgstr "<strong>Sve informacije</strong> su poslane"
+msgstr "<strong>Sve informacije</strong> su poslate"
msgid "<strong>Anything else</strong>, such as clarifying, prompting, thanking"
msgstr "<strong>Nešto drugo</strong>, poput objašnjenja, napomena, zahvalnica"
msgid "<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \\na good internal knowledge of user behaviour on {{site_name}}. How, \\nwhy and by whom requests are categorised is not straightforward, and there will\\nbe user error and ambiguity. You will also need to understand FOI law, and the\\nway authorities use it. Plus you'll need to be an elite statistician. Please\\n<a href=\"{{contact_path}}\">contact us</a> with questions."
-msgstr ""
+msgstr "<strong>Upozorenje!</strong> Da biste koristili ove podatke na častan način, biće potrebno da\\n dobro poznajete ponašanja korisnika na sistemu {{site_name}}. Kako, \\nzašto i od strane koga su zahtevi klasifikovani nije očigledno i biće\\ngrešaka i nejasnoća. Takođe je korisno da razumete Zakon o slobodnom pristupu informacijama od javnog značaja i način\\nkako ga ustanove koriste. Osim toga će biti potrebno da budete dobar statističar. Molimo\\n<a href=\"{{contact_path}}\">kontaktirajte nas</a> ako imate pitanja."
msgid "<strong>Clarification</strong> has been requested"
msgstr "<strong>Objašnjenje</strong> je zatraženo"
msgid "<strong>No response</strong> has been received\\n <small>(maybe there's just an acknowledgement)</small>"
-msgstr ""
-"<strong>Nema odgovora</strong> je primljeno\n"
-" <small>(možda postoji samo potvrda)</small>"
+msgstr "Odgovor <strong>još nije primljen</strong>\\n<small>(možda postoji samo potvrda prijema)</small>"
msgid "<strong>Note:</strong> Because we're testing, requests are being sent to {{email}} rather than to the actual authority."
-msgstr ""
+msgstr "<strong>Napomena:</strong> Pošto smo trenutno u fazi testiranja, zahtevi se šalju na {{email}} umesto da idu odgovarajućoj ustanovi."
msgid "<strong>Note:</strong> You're sending a message to yourself, presumably\\n to try out how it works."
-msgstr ""
+msgstr "<strong>Primeba:</strong> Šaljete poruku samom/samoj sebi, verovatno\\n da probate kako ovo radi."
msgid "<strong>Note:</strong>\\n We will send an email to your new email address. Follow the\\n instructions in it to confirm changing your email."
-msgstr ""
-"<strong>Napomena:</strong>\n"
-" Poslati ćemo e-mail na Vašu novu adresu. Pratite\n"
-" upute u njemu da bi potvrdili promjenu vašeg e-maila."
+msgstr "<strong>Napomena:</strong>\\n Poslaćemo e-mail na Vašu novu adresu. Pratite\\n instrukcije u njemu da potvrdite promenu Vaše e-mail adrese."
msgid "<strong>Privacy note:</strong> If you want to request private information about\\n yourself then <a href=\"{{url}}\">click here</a>."
msgstr ""
-"<strong>Napomena o privatnosti:</strong> Ako želite da zahtevate privatne informacije o\n"
-" Vama onda <a href=\"{{url}}\">kliknite ovde</a>."
+"<strong>Napomena o privatnosti:</strong> Ako želite da tražite privatne informacije o\n"
+" sebi, <a href=\"{{url}}\">kliknite ovde</a>."
msgid "<strong>Privacy note:</strong> Your photo will be shown in public on the Internet,\\n wherever you do something on {{site_name}}."
-msgstr ""
+msgstr "<strong>Napomena o privatnosti:</strong> Vaša fotografija će biti prikazana javno na Internetu,\\n kad god uradite nešto na sistemu {{site_name}}."
msgid "<strong>Privacy warning:</strong> Your message, and any response\\n to it, will be displayed publicly on this website."
-msgstr ""
-"<strong>Upozorenje o privatnosti:</strong> Vaša poruka i bilo koji odgovor\n"
-" na nju, će biti javno prikazan na ovoj stranici."
+msgstr "<strong>Upozorenje u vezi privatnosti:</strong> Vaša poruka i odgovori\\n na nju će biti javno prikazani na sajtu."
msgid "<strong>Some of the information</strong> has been sent "
-msgstr "<strong>Dio informacija</strong> je poslan "
+msgstr "<strong>Deo informacija</strong> je poslat"
msgid "<strong>Thank</strong> the public authority or "
-msgstr ""
+msgstr "<strong>Zahvalite</strong> javnoj ustanovi ili "
msgid "<strong>did not have</strong> the information requested."
-msgstr "<strong>nije sadržavao</strong> traženu informaciju."
+msgstr "<strong>nije imao</strong> traženu informaciju."
msgid "A <a href=\"{{request_url}}\">follow up</a> to <em>{{request_title}}</em> was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "<a href=\"{{request_url}}\">Reakcija</a> na <em>{{request_title}}</em> je poslata za {{public_body_name}} od strane korisnika {{info_request_user}} na dan {{date}}."
msgid "A <a href=\"{{request_url}}\">response</a> to <em>{{request_title}}</em> was sent by {{public_body_name}} to {{info_request_user}} on {{date}}. The request status is: {{request_status}}"
-msgstr ""
+msgstr "<a href=\"{{request_url}}\">Odgovor</a> u vezi zahteva <em>{{request_title}}</em> je poslat od strane ustanove {{public_body_name}} za korisnika {{info_request_user}} na dan {{date}}. Status ovog zahteva je: {{request_status}}"
msgid "A <strong>summary</strong> of the response if you have received it by post. "
-msgstr " <strong>Sažetak</strong> odgovora ako ste ga primili poštom. "
+msgstr " <strong>Sažetak</strong> odgovora, ako ste ga primili poštom. "
msgid "A Freedom of Information request"
-msgstr ""
+msgstr "Zahtev za slobodan pristup informacijama od javnog značaja"
msgid "A full history of my FOI request and all correspondence is available on the Internet at this address: {{url}}"
-msgstr ""
+msgstr "Puna istorija mog zahteva za slobodan pristup informacijama od javnog značaja i sva prepiska je raspoloživa na Internetu na ovoj adresi: {{url}}"
msgid "A new request, <em><a href=\"{{request_url}}\">{{request_title}}</a></em>, was sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+msgstr "Novi zahtev, <em><a href=\"{{request_url}}\">{{request_title}}</a></em>, je poslat za {{public_body_name}} od strane korisnika {{info_request_user}} na dan {{date}}."
msgid "A public authority"
msgstr "Javna ustanova"
msgid "A response will be sent <strong>by post</strong>"
-msgstr "Odgovor će biti poslan <strong>poštom</strong>"
+msgstr "Odgovor će biti poslat <strong>poštom</strong>"
msgid "A strange reponse, required attention by the {{site_name}} team"
-msgstr "Neobičan odgovor, potreban pregled od strane {{site_name}} tima"
+msgstr "Neobičan odgovor, potreban pregled od strane tima {{site_name}}"
msgid "A vexatious request"
-msgstr ""
+msgstr "Zahtev koji zloupotrebljava pravo"
msgid "A {{site_name}} user"
-msgstr "Korisnik stranice {{site_name}}"
+msgstr "Korisnik sistema {{site_name}}"
msgid "About you:"
msgstr "O Vama:"
@@ -335,30 +316,28 @@ msgid "Act on what you've learnt"
msgstr "Radite na osnovu onoga što ste naučili"
msgid "Acts as xapian/acts as xapian job"
-msgstr ""
+msgstr "Ponaša se kao xapian/ponaša se kao xapian džob"
msgid "ActsAsXapian::ActsAsXapianJob|Action"
-msgstr ""
+msgstr "ActsAsXapian::ActsAsXapianJob|Akcija"
msgid "ActsAsXapian::ActsAsXapianJob|Model"
-msgstr ""
+msgstr "ActsAsXapian::ActsAsXapianJob|Model"
msgid "Add an annotation"
-msgstr "Dodati napomenu"
+msgstr "Dodaj napomenu"
msgid "Add an annotation to your request with choice quotes, or\\n a <strong>summary of the response</strong>."
-msgstr ""
-"Dodajte napomenu Vašem zahtevu sa izabranim navodima, ili\n"
-" <strong>sažetak odgovora</strong>."
+msgstr "Dodajte napomenu Vašem zahtevu sa izabranim citatima iz odgovora, ili\\n<strong>sažetak odgovora</strong>."
msgid "Added on {{date}}"
-msgstr "Dodato na datum {{date}}"
+msgstr "Dodato {{date}}"
msgid "Admin level is not included in list"
msgstr "Nivo administratora nije uključen u listu"
msgid "Administration URL:"
-msgstr "URL administracije:"
+msgstr "URL za administraciju:"
msgid "Advanced search"
msgstr "Napredna pretraga"
@@ -367,47 +346,43 @@ msgid "Advanced search tips"
msgstr "Saveti za naprednu pretragu"
msgid "Advise on whether the <strong>refusal is legal</strong>, and how to complain about it if not."
-msgstr "Savet o tome da li je <strong>odbijanje legalno</strong>, i o tome kako se žaliti ako nije."
+msgstr "Savet o tome da li je <strong>odbijanje zakonito</strong> i o tome kako se žaliti ako nije."
msgid "Air, water, soil, land, flora and fauna (including how these effect\\n human beings)"
-msgstr ""
-"Zrak, voda, tlo, kopno, flora i fauna (uključujući kako ovi utiču na\n"
-" ljudska bića)"
+msgstr "Vazduh, voda, zemljište, kopno, flora i fauna (uključujući njihov uticaj na\\n ljudska bića)"
msgid "All of the information requested has been received"
msgstr "Sve tražene informacije su primljene"
msgid "All the options below can use <strong>status</strong> or <strong>latest_status</strong> before the colon. For example, <strong>status:not_held</strong> will match requests which have <em>ever</em> been marked as not held; <strong>latest_status:not_held</strong> will match only requests that are <em>currently</em> marked as not held."
-msgstr ""
+msgstr "Sve opcije ispod mogu koristiti <strong>status</strong> ili <strong>latest_status</strong> pre dvotačke. Na primer, <strong>status:not_held</strong> odgovara zahtevima koji su <em>ikada</em> bili označeni kao \"ne raspolaže\"; <strong>latest_status:not_held</strong> odgovara zahtevima koji su <em>trenutno</em> označeni kao \"ne raspolaže\"."
msgid "All the options below can use <strong>variety</strong> or <strong>latest_variety</strong> before the colon. For example, <strong>variety:sent</strong> will match requests which have <em>ever</em> been sent; <strong>latest_variety:sent</strong> will match only requests that are <em>currently</em> marked as sent."
-msgstr ""
+msgstr "Sve opcije ispod mogu da koriste <strong>variety</strong> ili <strong>latest_variety</strong> pre dvotačke. Na primer, <strong>variety:sent</strong> odgovara zahtevima koji su <em>ikad</em> bili označeni kao poslati; <strong>latest_variety:sent</strong> odgovara zahtevima koji su <em>trenutno</em> označeni kao poslati."
msgid "Also called {{other_name}}."
-msgstr "Drugim imenom {{other_name}}."
+msgstr "Takođe poznat/a kao {{other_name}}."
msgid "Also send me alerts by email"
-msgstr ""
+msgstr "Šalji mi takođe e-mail biltene"
msgid "Alter your subscription"
-msgstr "Promjenite Vašu pretplatu"
+msgstr "Promjenite Vašu registraciju"
msgid "Although all responses are automatically published, we depend on\\nyou, the original requester, to evaluate them."
-msgstr ""
-"Iako su svi odgovori automatski objavljeni, računamo na\n"
-"vas, izvornog podnosioca zahteva, da ih ocijenite."
+msgstr "Iako se svi odgovori automatski objavljuju, mi se oslanjamo na\\nVas, podnosioca zahteva, da ih ocenite."
msgid "An <a href=\"{{request_url}}\">annotation</a> to <em>{{request_title}}</em> was made by {{event_comment_user}} on {{date}}"
-msgstr ""
+msgstr "<a href=\"{{request_url}}\">Komentar</a> na zahtev <em>{{request_title}}</em> je unet od strane korisnika {{event_comment_user}} na dan {{date}}"
msgid "An <strong>error message</strong> has been received"
-msgstr "<strong>poruka o pogrešci</strong> je primljena"
+msgstr "Primljena je <strong>poruka o grešci</strong>"
msgid "An Environmental Information Regulations request"
-msgstr ""
+msgstr "Zahtev za slobodan pristup informacijama od javnog značaja u vezi prirodne sredine"
msgid "An anonymous user"
-msgstr ""
+msgstr "Anonimni korisnik"
msgid "Annotation added to request"
msgstr "Napomena dodata na zahtev"
@@ -416,47 +391,45 @@ msgid "Annotations"
msgstr "Napomene"
msgid "Annotations are so anyone, including you, can help the requester with their request. For example:"
-msgstr "Napomene služe da bilo ko, uključujući Vas, može pomoći podnosioca zahteva sa njegovim zahtevom. Na primjer:"
+msgstr "Napomene služe da bilo ko, uključujući Vas, može da pomogne podnosiocu zahteva u vezi sa zahtevom. Na primer:"
msgid "Annotations will be posted publicly here, and are\\n <strong>not</strong> sent to {{public_body_name}}."
-msgstr ""
-"Napomene će biti postane javno ovde, i \n"
-" <strong>naće</strong> biti poslane za {{public_body_name}}."
+msgstr "Napomene će biti objavljene ovde i\\n <strong>neće</strong> biti poslate ustanovi '{{public_body_name}}'."
msgid "Anonymous user"
-msgstr ""
+msgstr "Anonimni korisnik"
msgid "Anyone:"
msgstr "Bilo ko:"
msgid "Applies to"
-msgstr ""
+msgstr "Primenjuje se na"
msgid "Are we missing a public authority?"
-msgstr ""
+msgstr "Da li nam nedostaje neka ustanova?"
msgid "Are you the owner of any commercial copyright on this page?"
-msgstr ""
+msgstr "Da li ste vlasnik autorskih prava (kopirajta) na bilo šta na ovoj stranici?"
msgid "Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries."
-msgstr "Tražite <strong>konkretne</strong> dokumente ili informacije, ova stranica nije pogodna za opće pretrage."
+msgstr "Tražite <strong>konkretne</strong> dokumente ili informacije, ovaj sistem namenjen za opšte upite."
msgid "At the bottom of this page, write a reply to them trying to persuade them to scan it in\\n (<a href=\"{{url}}\">more details</a>)."
msgstr ""
-"Na dnu ove stranice, napišite im odgovor pokušavajući da ih ubjedite da ga pregledaju\n"
+"Na dnu ove stranice napišite im odgovor da probate da ih ubedite da ga skeniraju i pošalju\n"
" (<a href=\"{{url}}\">Više informacija</a>)."
msgid "Attachment (optional):"
msgstr "Prilog (neobavezno):"
msgid "Attachment:"
-msgstr "Prilog"
+msgstr "Prilog:"
msgid "Awaiting classification."
-msgstr "Čeka klasifikaciju."
+msgstr "Čeka na klasifikaciju."
msgid "Awaiting internal review."
-msgstr "Čeka urgenciju"
+msgstr "Čeka urgenciju."
msgid "Awaiting response."
msgstr "Čeka odgovor."
@@ -465,88 +438,88 @@ msgid "Beginning with"
msgstr "Počevši sa"
msgid "Browse <a href='{{url}}'>other requests</a> for examples of how to word your request."
-msgstr "Pretražite <a href='{{url}}'>druge zahteve</a> radi primjera kako da sročite Vaš zahtev."
+msgstr "Listajte <a href='{{url}}'>druge zahteve</a> da nađete primer kako da sročite Vaš zahtev."
msgid "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request."
-msgstr "Pretražite <a href='{{url}}'>druge zahteve</a> za '{{public_body_name}}' radi primjera kako da sročite Vaš zahtev."
+msgstr "Listajte <a href='{{url}}'>druge zahteve</a> od '{{public_body_name}}' za primere kako da sročite Vaš zahtev."
msgid "Browse all authorities..."
-msgstr "Pretražite sve ustanove"
+msgstr "Listajte sve ustanove..."
msgid "By law, under all circumstances, {{public_body_link}} should have responded by now"
-msgstr "Po zakonu, pod svim uvjetima, {{public_body_link}} je trebala odgovoriti do sada"
+msgstr "Po zakonu je, u svakoj varijanti, {{public_body_link}} trebalo da odgovori do sada"
msgid "By law, {{public_body_link}} should normally have responded <strong>promptly</strong> and"
-msgstr "Po zakonu, {{public_body_link}} je trebala odgovoriti <strong>brzo</strong> i"
+msgstr "Po zakonu je {{public_body_link}} trebalo da <strong>bez odlaganja</strong> odgovori i"
msgid "Calculated home page"
-msgstr ""
+msgstr "Sračunata naslovna strana"
msgid "Can't find the one you want?"
msgstr "Ne možete naći onaj koji želite?"
msgid "Cancel a {{site_name}} alert"
-msgstr "Poništi {{site_name}} upozorenje"
+msgstr "Otkaži {{site_name}} upozorenje "
msgid "Cancel some {{site_name}} alerts"
-msgstr "Poništi neka {{site_name}} upozorenja"
+msgstr "Otkaži neka {{site_name}} upozorenja"
msgid "Cancel, return to your profile page"
-msgstr "Poništi, vratite se na stranici Vašeg profila"
+msgstr "Otkaži i vrati se na stranicu sa profilom korisnika"
msgid "Censor rule"
-msgstr ""
+msgstr "Pravilo za cenzuru"
msgid "CensorRule|Last edit comment"
-msgstr ""
+msgstr "CensorRule|Komentar poslednje promene"
msgid "CensorRule|Last edit editor"
-msgstr ""
+msgstr "CensorRule|Autor poslednjeg promene"
msgid "CensorRule|Regexp"
-msgstr ""
+msgstr "CensorRule|Regularni izraz"
msgid "CensorRule|Replacement"
-msgstr "Pravilo Cenzure|Zamjena"
+msgstr "CensorRule|Zamena"
msgid "CensorRule|Text"
-msgstr "Pravilo Cenzure|Tekst"
+msgstr "CensorRule|Tekst"
msgid "Change email on {{site_name}}"
-msgstr "Promeniti e-mail na {{site_name}}"
+msgstr "Promenite e-mail adresu na {{site_name}}"
msgid "Change password on {{site_name}}"
-msgstr "Promeniti password na {{site_name}}"
+msgstr "Promenite lozinku na {{site_name}}"
msgid "Change profile photo"
-msgstr "Promeniti sliku na profilu"
+msgstr "Promenite sliku u profilu"
msgid "Change the text about you on your profile at {{site_name}}"
msgstr "Promenite tekst o Vama na Vašem profilu na {{site_name}}"
msgid "Change your email"
-msgstr "Promeniti Vaš e-mail"
+msgstr "Promenite Vašu e-mail adresu"
msgid "Change your email address used on {{site_name}}"
-msgstr "Promijenite Vašu e-mail adresu korištenu na {{site_name}}"
+msgstr "Promenite Vašu e-mail adresu korišćenu na {{site_name}}"
msgid "Change your password"
-msgstr "Promeniti Vaš password"
+msgstr "Promenite Vašu lozinku"
msgid "Change your password on {{site_name}}"
-msgstr "Promeniti password na {{site_name}}"
+msgstr "Promenite Vašu lozinku na {{site_name}}"
msgid "Change your password {{site_name}}"
-msgstr "Promjenite Vaš password {{site_name}}"
+msgstr "Promenite Vašu lozinku {{site_name}}"
msgid "Charity registration"
-msgstr "Registracija nevladine organizacije"
+msgstr "Registracija fondacije"
msgid "Check for mistakes if you typed or copied the address."
-msgstr "Provjerite ima li grešaka ako ste ukucali ili kopirali adresu."
+msgstr "Proverite ima li grešaka ako ste ukucali ili kopirali adresu."
msgid "Check you haven't included any <strong>personal information</strong>."
-msgstr "Provjerite da niste uključili nikakve <strong>lične podatke</strong>."
+msgstr "Proverite da niste uključili nikakve <strong>lične podatke</strong>."
msgid "Choose your profile photo"
msgstr "Odaberite sliku na Vašem profilu"
@@ -555,66 +528,64 @@ msgid "Clarification"
msgstr "Objašnjenje"
msgid "Clarify your FOI request - "
-msgstr ""
+msgstr "Razjasnite Vaš Zahtev za slobodan pristup informacijama od javnog značaja - "
msgid "Classify an FOI response from "
-msgstr "Klasificirajte odgovor na Zahtev za slobodan pristup informacijama od"
+msgstr "Klasifikujte odgovor na ZOSPIOJ zahtev od"
msgid "Clear photo"
-msgstr ""
+msgstr "Ukloni fotografiju"
msgid "Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\\nreview, asking them to find out why response to the request has been so slow."
-msgstr ""
-"Kliknite na link ispod da biste poslali poruku za {{public_body_name}} u kojoj ih napomenite da odgovore. Možda želite tražiti internal\n"
-"review, tražeći da saznaju zašto odgovor na zahtev kasni."
+msgstr "Kliknite na link ispod da pošaljete poruku za {{public_body_name}}, da ih podsetite da odgovore na Vaš zahtev. Možda želite tražiti i urgenciju,\\n tj. da tražite da ispitaju zašto je slanje odgovora na Vaš zahtev ovako sporo."
msgid "Click on the link below to send a message to {{public_body}} reminding them to reply to your request."
-msgstr "Kliknite na link ispod da biste poslali poruku {{public_body}} koja će ih podsetiti da odgovore na Vaš zahtev."
+msgstr "Kliknite na link ispod da biste poslali poruku koja će podsetiti {{public_body}} da odgovori na Vaš zahtev."
msgid "Close"
-msgstr ""
+msgstr "Zatvori"
msgid "Comment"
-msgstr ""
+msgstr "Komentar"
msgid "Comment|Body"
-msgstr "Komentar|Tijelo"
+msgstr "Komentar|Telo"
msgid "Comment|Comment type"
msgstr "Komentar|Tip komentara"
msgid "Comment|Locale"
-msgstr "Komentar|Mjesto"
+msgstr "Komentar|Jezik"
msgid "Comment|Visible"
msgstr "Komentar|Vidljiv"
msgid "Confirm you want to follow all successful FOI requests"
-msgstr ""
+msgstr "Potvrdite da želite da pratite sve uspešne zahteve pomoću e-mail biltena "
msgid "Confirm you want to follow new requests"
-msgstr ""
+msgstr "Potvrdite da želite da pratite sve nove zahteve pomoću e-mail biltena "
msgid "Confirm you want to follow new requests or responses matching your search"
-msgstr ""
+msgstr "Potvrdite da želite da pratite sve nove zahteve ili odgovore koji odgovaraju vašem upitu pomoću e-mail biltena "
msgid "Confirm you want to follow requests by '{{user_name}}'"
-msgstr ""
+msgstr "Potvrdite da želite da pratite zahteve podnete od strane korisnika '{{user_name}}' pomoću e-mail biltena "
msgid "Confirm you want to follow requests to '{{public_body_name}}'"
-msgstr ""
+msgstr "Potvrdite da želite da pratite zahteve podnete za ustanovu '{{user_name}}' pomoću e-mail biltena "
msgid "Confirm you want to follow the request '{{request_title}}'"
-msgstr ""
+msgstr "Potvrdite da želite da pratite zahtev '{{request_title}}' pomoću e-mail biltena "
msgid "Confirm your FOI request to "
-msgstr "Potvrdite Vaš Zahtev za slobodan pristup informacijama za"
+msgstr "Potvrdite Vaš ZOSPIOJ zahtev za"
msgid "Confirm your account on {{site_name}}"
-msgstr "Potvrdite Vaš račun na {{site_name}}"
+msgstr "Potvrdite Vaš profil na {{site_name}}"
msgid "Confirm your annotation to {{info_request_title}}"
-msgstr "Potvrdite Vašu napomenu za {{info_request_title}}"
+msgstr "Potvrdite Vašu napomenu o zahtevu: {{info_request_title}}"
msgid "Confirm your email address"
msgstr "Potvrdite Vašu e-mail adresu"
@@ -623,58 +594,58 @@ msgid "Confirm your new email address on {{site_name}}"
msgstr "Potvrdite Vašu novu e-mail adresu na {{site_name}}"
msgid "Considered by administrators as not an FOI request and hidden from site."
-msgstr ""
+msgstr "Sakriven od javnosti, pošto ga administratori ne smatraju za Zahtev za slobodan pristup informacijama od javnog značaja."
msgid "Considered by administrators as vexatious and hidden from site."
-msgstr ""
+msgstr "Sakriven od javnosti, pošto ga administratori smatraju zloupotrebom prava na slobodan pristup informacijama od javnog značaja."
msgid "Contact {{recipient}}"
-msgstr ""
+msgstr "Kontaktiraj: {{recipient}}"
msgid "Contact {{site_name}}"
-msgstr "Kontakt {{site_name}}"
+msgstr "Kontaktirajte {{site_name}}"
msgid "Could not identify the request from the email address"
msgstr "Nismo mogli prepoznati zahtev sa e-mail adrese"
msgid "Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and many other common image file formats are supported."
-msgstr "Pogrešan format datoteke. Molimo Vas uploadirajte: PNG, JPEG, GIF, ili neke druge podržive formate."
+msgstr "Format datoteke sa slikom nije prepoznat. Podržani su PNG, JPEG, GIF i dosta drugih uobičajenih formata."
msgid "Crop your profile photo"
-msgstr "Podrezati sliku na Vašem profilu"
+msgstr "Smanjite sliku za Vaš profil - odsecite ivice"
msgid "Cultural sites and built structures (as they may be affected by the\\n environmental factors listed above)"
-msgstr ""
+msgstr "Kulturni spomenici i građevine (pošto prirodni faktori\\n sa liste ispod mogu da utiču na njih)"
msgid "Currently <strong>waiting for a response</strong> from {{public_body_link}}, they must respond promptly and"
-msgstr "Trenutno <strong>čeka odgovor</strong> od {{public_body_link}}, moraju odgovoriti brzo i"
+msgstr "Trenutno <strong>čeka odgovor</strong> od {{public_body_link}}, oni moraju odgovoriti bez odlaganja i"
msgid "Date:"
msgstr "Datum:"
msgid "Dear {{name}},"
-msgstr ""
+msgstr "Poštovani {{name}},"
msgid "Dear {{public_body_name}},"
msgstr "Poštovani {{public_body_name}},"
msgid "Default locale"
-msgstr ""
+msgstr "Podrazumevani jezik"
msgid "Defunct."
-msgstr ""
+msgstr "Neupotrebljivo."
msgid "Delayed response to your FOI request - "
-msgstr "Odgođen odgovor na Vaš Zahtev o slobodnom pristupu informacijama - "
+msgstr "Odloženi odgovor na Vaš ZOSPIOJ zahtev - "
msgid "Delayed."
-msgstr "Odgođen"
+msgstr "Odložen"
msgid "Delivery error"
msgstr "Greška u isporuci"
msgid "Destroy {{name}}"
-msgstr ""
+msgstr "Uništi {{name}}"
msgid "Details of request '"
msgstr "Detalji zahteva '"
@@ -683,39 +654,37 @@ msgid "Did you mean: {{correction}}"
msgstr "Da li ste mislili: {{correction}}"
msgid "Disclaimer: This message and any reply that you make will be published on the internet. Our privacy and copyright policies:"
-msgstr ""
+msgstr "Napomena: Ova poruka i Vaš odgovor će biti objavljeni na Internetu. Naša pravila privatnosti i kopirajta:"
msgid "Disclosure log"
-msgstr ""
+msgstr "Dnevnik objava"
msgid "Disclosure log URL"
-msgstr ""
+msgstr "URL za dnevnik objava"
msgid "Don't want to address your message to {{person_or_body}}? You can also write to:"
-msgstr ""
+msgstr "Ne želite da pošaljete Vašu poruku na {{person_or_body}}? Možete takođe pisati:"
msgid "Done"
msgstr "Završeno"
msgid "Done &gt;&gt;"
-msgstr ""
+msgstr "Urađeno &gt;&gt;"
msgid "Download a zip file of all correspondence"
msgstr "Preuzmite svu korespondenciju u zip fajlu"
msgid "Download original attachment"
-msgstr "Preuzeti originalni prilog"
+msgstr "Preuzmite originalni prilog"
msgid "EIR"
-msgstr ""
+msgstr "Zakon o zaštiti životne okoline"
msgid "Edit"
-msgstr ""
+msgstr "Izmeni"
msgid "Edit and add <strong>more details</strong> to the message above,\\n explaining why you are dissatisfied with their response."
-msgstr ""
-"Uredite i dodajte <strong>više detalja</strong> na poruku iznad,\n"
-" objašnjavajući zašto niste zadovoljni njihovim odgovorom."
+msgstr "Promenite i dodajte <strong>još detalja</strong> u poruku ispod,\\n da objasnite zašto niste zadovoljni sa njihovim odgovorom."
msgid "Edit text about you"
msgstr "Uredite tekst o Vama"
@@ -724,46 +693,46 @@ msgid "Edit this request"
msgstr "Uredi ovaj zahtev"
msgid "Either the email or password was not recognised, please try again."
-msgstr "E-mail ili password nisu prepoznati, molimo pokušajte ponovo."
+msgstr "E-mail ili lozinka nisu prepoznati, molimo pokušajte ponovo."
msgid "Either the email or password was not recognised, please try again. Or create a new account using the form on the right."
-msgstr "E-mail ili password nisu prepoznati, molimo pokušajte ponovo. Ili kreirajte novi račun koristeći formular desno."
+msgstr "E-mail ili lozinka nisu prepoznati, molimo pokušajte ponovo - ili kreirajte novi profil, koristeći formular na desnoj strani."
msgid "Email doesn't look like a valid address"
-msgstr "E-mail ne izgleda kao validna adresa"
+msgstr "E-mail ne izgleda kao ispravna adresa"
msgid "Email me future updates to this request"
-msgstr "Buduća ažuriranja šaljite na moj e-mail"
+msgstr "Šaljite mi buduće izmene ovog zahteva emailom"
msgid "Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>"
-msgstr "Sa razmacima unesite reči koje želite naći, npr. <strong>climbing lane</strong"
+msgstr "Unesite reči koje želite naći odvojene razmacima, npr. <strong>jonizujućeg zračenja</strong>"
msgid "Enter your response below. You may attach one file (use email, or\\n <a href=\"{{url}}\">contact us</a> if you need more)."
-msgstr ""
+msgstr "Unesite svoj odgovor ispod. Možete priložiti jedan fajl (koristite e-mail, ili\\n <a href=\"{{url}}\">nas kontaktirajte</a> ako želite više)."
msgid "Environmental Information Regulations"
-msgstr ""
+msgstr "Regulativa u vezi informacija o zaštiti prirodne sredine"
msgid "Environmental Information Regulations requests made"
-msgstr ""
+msgstr "Zahtevi za informacijama u vezi prirodne sredine"
msgid "Environmental Information Regulations requests made using this site"
-msgstr ""
+msgstr "Zahtevi za informacijama u vezi prirodne sredine poslati uz pomoć ovog sistema"
msgid "Event history"
-msgstr "Prikaz prošlih događanja"
+msgstr "Istorija promena"
msgid "Event history details"
-msgstr "Detalji prikaza prošlih događanja"
+msgstr "Detalji istorije promena"
msgid "Event {{id}}"
-msgstr ""
+msgstr "Događaj {{id}}"
msgid "Everything that you enter on this page, including <strong>your name</strong>,\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
msgstr ""
-"Sve što unesete na ovu stranicu, uključujući <strong>Vaše ime</strong>, \n"
-" će biti <strong>javno prikazano</strong> na\n"
-" ovoj web stranici zauvek (<a href=\"{{url}}\">Više informacija</a>)."
+"Sve što unesete na ovu stranicu, uključujući i <strong>Vaše ime</strong>, \n"
+" biće <strong>javno prikazano</strong> na\n"
+" ovoj web stranici trajno (<a href=\"{{url}}\">Više informacija</a>)."
msgid "Everything that you enter on this page\\n will be <strong>displayed publicly</strong> on\\n this website forever (<a href=\"{{url}}\">why?</a>)."
msgstr ""
@@ -772,82 +741,82 @@ msgstr ""
" ovoj web stranici trajno. (<a href=\"{{url}}\">Više informacija</a>)."
msgid "FOI"
-msgstr ""
+msgstr "ZOSPIOJ"
msgid "FOI email address for {{public_body}}"
-msgstr "ZOSPI e-mail adresa za {{public_body}}"
+msgstr "ZOSPIOJ kontakt e-mail adresa kod {{public_body}}"
msgid "FOI request – {{title}}"
-msgstr ""
+msgstr "Zahtevi za slobodan pristup informacijama od javnog značaja – {{title}}"
msgid "FOI requests"
-msgstr "Zahtevi za slobodan pristup informacijama"
+msgstr "Zahtevi po ZOSPIOJ "
msgid "FOI requests by '{{user_name}}'"
-msgstr "Zahtevi za slobodan pristup informacijama od strane '{{user_name}}'"
+msgstr "ZOSPIOJ zahtevi od strane '{{user_name}}'"
msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr ""
+msgstr "ZOSPIOJ zahtevi {{start_count}} do {{end_count}} od ukupno {{total_count}}"
msgid "FOI response requires admin ({{reason}}) - {{title}}"
-msgstr ""
+msgstr "Odgovor na Zahtev za slobodan pristup informacijama od javnog značaja zahteva administratorsku dozvolu - ({{reason}}) - {{title}}"
msgid "Failed to convert image to a PNG"
-msgstr "Nismo uspeli konvertovati sliku u PNG format"
+msgstr "Neuspela konverzija slike u PNG format"
msgid "Failed to convert image to the correct size: at {{cols}}x{{rows}}, need {{width}}x{{height}}"
-msgstr "Nismo uspeli konvertovati sliku u odgovarajuću veličinu: {{cols}}x{{rows}}, potrebno {{width}}x{{height}}"
+msgstr "Nismo uspeli da konvertujemo sliku u odgovarajuću veličinu: {{cols}}x{{rows}}, potrebno {{width}}x{{height}}"
msgid "Filter"
msgstr "Filtriraj"
msgid "First, did your other requests succeed?"
-msgstr ""
+msgstr "Prvo: da li su Vaši ostali zahtevi uspeli?"
msgid "First, type in the <strong>name of the UK public authority</strong> you'd\\n like information from. <strong>By law, they have to respond</strong>\\n (<a href=\"{{url}}\">why?</a>)."
-msgstr ""
+msgstr "Prvo unesite <strong>ime ustanove</strong> od koje\\n tražite informacije. <strong>Po zakonu oni su obavezni da odgovore</strong>\\n (<a href=\"{{url}}\">Zašto?</a>)."
msgid "Foi attachment"
-msgstr ""
+msgstr "Prilog"
msgid "FoiAttachment|Charset"
-msgstr ""
+msgstr "FoiAttachment|Kodna strana"
msgid "FoiAttachment|Content type"
-msgstr ""
+msgstr "FoiAttachment|Tip dokumenta"
msgid "FoiAttachment|Display size"
-msgstr ""
+msgstr "ZOSPIPrilog|Veličina za prikaz"
msgid "FoiAttachment|Filename"
-msgstr ""
+msgstr "FoiAttachment|Ime datoteke"
msgid "FoiAttachment|Hexdigest"
-msgstr ""
+msgstr "FoiAttachment|HeksaOtisak"
msgid "FoiAttachment|Url part number"
-msgstr ""
+msgstr "FoiAttachment|Url broj dela"
msgid "FoiAttachment|Within rfc822 subject"
-msgstr ""
+msgstr "FoiAttachment|U rfc822 predmetu"
msgid "Follow"
-msgstr ""
+msgstr "Prati"
msgid "Follow all new requests"
-msgstr ""
+msgstr "Prati sve nove zahteve"
msgid "Follow new successful responses"
-msgstr ""
+msgstr "Prati nove uspešne odgovore"
msgid "Follow requests to {{public_body_name}}"
-msgstr ""
+msgstr "Prati zahteve podnete za {{public_body_name}}"
msgid "Follow these requests"
msgstr "Prati ove zahteve"
msgid "Follow things matching this search"
-msgstr ""
+msgstr "Pratite stvari koje odgovaraju ovom upitu"
msgid "Follow this authority"
msgstr "Prati ovu ustanovu"
@@ -856,76 +825,85 @@ msgid "Follow this link to see the request:"
msgstr "Pratite ovaj link da biste videli zahtev:"
msgid "Follow this person"
-msgstr ""
+msgstr "Prati ovog korisnika"
msgid "Follow this request"
msgstr "Prati ovaj zahtev"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
-msgstr ""
+msgstr "Reakcija"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
-msgstr "Prateća poruka poslana od strane podnosioca zahteva"
+msgstr "Poruka reakcije poslata od strane podnosioca zahteva"
msgid "Follow up messages to existing requests are sent to "
-msgstr ""
+msgstr "Poruke reakcije na postojeće zahteve se šalju na"
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
-msgstr ""
+msgstr "Reakcije i novi odgovori na ovaj zahtev su blokirani da se spreči spamovanje. Molimo <a href=\"{{url}}\">da nas kontaktirate</a> ako ste Vi {{user_link}} i potrebno vam je da pošaljete reakciju."
msgid "Follow us on twitter"
msgstr "Pratite nas na twitter-u"
msgid "Followups cannot be sent for this request, as it was made externally, and published here by {{public_body_name}} on the requester's behalf."
-msgstr ""
+msgstr "Na ovaj zahtev se ne mogu slati reakcije, pošto je zahtev podnet na drugom mestu i objavljen ovde od strane ustanove '{{public_body_name}}' u ime podnosioca."
msgid "For an unknown reason, it is not possible to make a request to this authority."
-msgstr "Iz nepoznatog razloga, nije moguće podneti zahtev ovoj ustanovi."
+msgstr "Iz nepoznatog razloga nije moguće podneti zahtev ovoj ustanovi."
msgid "Forgotten your password?"
-msgstr "Zaboravili ste Vaš password?"
+msgstr "Zaboravili ste Vašu lozinku?"
msgid "Found {{count}} public authority {{description}}"
msgid_plural "Found {{count}} public authorities {{description}}"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Pronađena {{count}} ustanova {{description}}"
+msgstr[1] "Pronađene {{count}} ustanove {{description}}"
+msgstr[2] "Pronađeno {{count}} ustanova {{description}}"
msgid "Freedom of Information"
-msgstr ""
+msgstr "Slobodan pristup informacijama"
msgid "Freedom of Information Act"
-msgstr ""
+msgstr "Zakon o slobodnom pristupu informacijama od javnog značaja"
msgid "Freedom of Information law does not apply to this authority, so you cannot make\\n a request to it."
-msgstr ""
+msgstr "Zakon o slobodnom pristupu informacijama od javnog značaja ne važi za ovu ustanovu,\\n pa im zato ne možete podnositi zahteve."
msgid "Freedom of Information law no longer applies to"
-msgstr "Zakon o slobodnom pristupu informacijama više se ne primjenjuje na"
+msgstr "Zakon o slobodnom pristupu informacijama od javnog značaja više se ne primjenjuje na"
msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
-msgstr ""
+msgstr "Ova ustanova više ne podleže Zakonu o slobodnom pristupu informacijama od javnog značaja. Poruke reakcije na postojeće zahteve se šalju"
msgid "Freedom of Information requests made"
-msgstr "Zahtevi za slobodan pristup informacijama podneseni"
+msgstr "Podneti zahtevi za slobodan pristup informacijama od javnog značaja"
msgid "Freedom of Information requests made by this person"
-msgstr "Zahtevi za slobodan pristup informacijama podnešeni od strane ove osobe"
+msgstr "Zahtevi za slobodan pristup informacijama od javnog značaja podneti od strane ove osobe"
msgid "Freedom of Information requests made by you"
-msgstr "Zahtevi za slobodan pristup informacijama podnešeni od strane Vas."
+msgstr "Zahtevi za slobodan pristup informacijama od javnog značaja podneti od strane Vas."
msgid "Freedom of Information requests made using this site"
-msgstr "Zahtevi za slobodan pristup informacijama podneseni na ovoj stranici"
+msgstr "Zahtevi za slobodan pristup informacijama od javnog značaja podneti kroz ovaj sistem"
msgid "Freedom of information requests to"
-msgstr ""
+msgstr "Zahtevi za slobodan pristup informacijama od javnog značaja podneti"
msgid "From"
-msgstr ""
+msgstr "Od strane:"
msgid "From the request page, try replying to a particular message, rather than sending\\n a general followup. If you need to make a general followup, and know\\n an email which will go to the right place, please <a href=\"{{url}}\">send it to us</a>."
-msgstr ""
+msgstr "Na stranici zahteva pokušajte odgovoriti na konkretnu poruku umesto slanja\\n opšteg komentara. Ako želite da napišete reakciju, a znate\\n e-mail adresu pravog mesta, molimo <a href=\"{{url}}\">pošaljite je i nama</a>."
msgid "From:"
msgstr "Od strane:"
@@ -934,22 +912,22 @@ msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
msgstr "OVDE IZNESITE DETALJE VAŠE ŽALBE"
msgid "Handled by post."
-msgstr ""
+msgstr "Obrađeno poštom."
msgid "Has tag string/has tag string tag"
-msgstr ""
+msgstr "Sadrži privezak-string/sadrži privezak-string privezak"
msgid "HasTagString::HasTagStringTag|Model"
-msgstr ""
+msgstr "HasTagString::HasTagStringTag|Model"
msgid "HasTagString::HasTagStringTag|Name"
-msgstr ""
+msgstr "HasTagString::HasTagStringTag|Ime"
msgid "HasTagString::HasTagStringTag|Value"
-msgstr ""
+msgstr "HasTagString::HasTagStringTag|Vrednost"
msgid "Hello! You can make Freedom of Information requests within {{country_name}} at {{link_to_website}}"
-msgstr "Dobrodošli! Možete podnositi Zahteve za slobodan pristup informacijama u {{country_name}} na ovom linku: {{link_to_website}}"
+msgstr "Dobrodošli! Možete podnositi Zahteve za slobodan pristup informacijama od javnog značaja za zemlju {{country_name}} na ovom linku: {{link_to_website}}"
msgid "Hello, {{username}}!"
msgstr "Dobrodošli, {{username}}!"
@@ -958,23 +936,19 @@ msgid "Help"
msgstr "Pomoć"
msgid "Here <strong>described</strong> means when a user selected a status for the request, and\\nthe most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\\n{{site_name}} for intermediate events, which weren't given an explicit\\ndescription by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
-msgstr ""
+msgstr "Ovde termin <strong>opisano</strong> znači da je korisnik odabrao status zahteva i\\nstatus najnovijeg događaja je ažuriran na tu vrednost. Termin <strong>sračunat</strong> je pretpostavljen od strane sistema \\n{{site_name}} za događaje u toku života zahteva, kojima korisnik nije dao\\neksplicitan opis. Pogledajte <a href=\"{{search_path}}\">savete za pretragu</a> za značenje stanja."
msgid "Here is the message you wrote, in case you would like to copy the text and save it for later."
-msgstr ""
+msgstr "Evo poruke koju ste napisali, U slučaju da želite da napravite kopiju teksta i snimite ga za kasnije."
msgid "Hi! We need your help. The person who made the following request\\n hasn't told us whether or not it was successful. Would you mind taking\\n a moment to read it and help us keep the place tidy for everyone?\\n Thanks."
-msgstr ""
-"Pozdrav, trebamo Vašu pomoć. Osoba koja je podnela sledeći zahtev\n"
-" nam nije rekla da li je bio uspešan ili ne. Da li biste mogli odvojiti\n"
-" malo vremena da ga pročitate i da nam pomognete da održimo ovo mjesto urednim za sve?\n"
-" Hvala."
+msgstr "Zdravo! Potrebna nam je Vaša pomoć. Osoba koja je podnela ovaj zahtev\\n nam nije rekla da li je ili nije bio uspešan. Da li biste bili ljubazni da\\n odvojite malo vremena da pogledate zahtev i pomognete nam da održavamo ovo mesto urednim za sve?\\n Thanks."
msgid "Hide request"
-msgstr ""
+msgstr "Sakrij zahtev"
msgid "Holiday"
-msgstr ""
+msgstr "Praznik"
msgid "Holiday|Day"
msgstr "Praznik|Dan"
@@ -986,27 +960,25 @@ msgid "Home"
msgstr "Naslovna"
msgid "Home page"
-msgstr ""
+msgstr "Naslovna strana"
msgid "Home page of authority"
msgstr "Početna stranica ustanove"
msgid "However, you have the right to request environmental\\n information under a different law"
-msgstr ""
-"Ipak, imate pravo da tražite informacije o okolišu\n"
-" pozivajući se na drugi zakon"
+msgstr "Imate, ipak, pravo da tražite informacije o prirodnoj sredini\\n po drugom zakonu."
msgid "Human health and safety"
-msgstr ""
+msgstr "Zdravlje i bezbednost ljudi"
msgid "I am asking for <strong>new information</strong>"
msgstr "Molim za <strong>nove informacije</strong>"
msgid "I am requesting an <strong>internal review</strong>"
-msgstr ""
+msgstr "Molim za <strong>urgenciju</strong>"
msgid "I am writing to request an internal review of {{public_body_name}}'s handling of my FOI request '{{info_request_title}}'."
-msgstr ""
+msgstr "Pišem Vam da zatražim kontrolu načina na koji je moj Zahtev za slobodan pristup informacijama od javnog značaja '{{info_request_title}}' obrađen od strane {{public_body_name}} ."
msgid "I don't like these ones &mdash; give me some more!"
msgstr "Ne sviđaju mi se ove &mdash; dajte mi više!"
@@ -1015,21 +987,19 @@ msgid "I don't want to do any more tidying now!"
msgstr "Ne želim da uređujem više u ovom momentu!"
msgid "I like this request"
-msgstr ""
+msgstr "Sviđa mi se ovaj zahtev"
msgid "I would like to <strong>withdraw this request</strong>"
-msgstr "Želio/la bih da <strong>povučem ovaj zahtev</strong>"
+msgstr "Želim da <strong>povučem ovaj zahtev</strong>"
msgid "I'm still <strong>waiting</strong> for my information\\n <small>(maybe you got an acknowledgement)</small>"
-msgstr ""
-"Još uvek <strong>čekam</strong> na svoje informacije\n"
-" <small>(možda ste dobili potvrdu)</small>"
+msgstr "Još uvek <strong>čekam</strong> da dobijem informacije\\n <small>(možda ste dobili potvrdu)</small>"
msgid "I'm still <strong>waiting</strong> for the internal review"
msgstr "Još uvek <strong>čekam</strong> na urgenciju"
msgid "I'm waiting for an <strong>internal review</strong> response"
-msgstr "Čekam na <strong>urgenciju</strong>"
+msgstr "Čekam na odgovor u vezi <strong>urgencije</strong>"
msgid "I've been asked to <strong>clarify</strong> my request"
msgstr "Zamoljen/a sam da <strong>objasnim</strong> moj zahtev"
@@ -1038,28 +1008,25 @@ msgid "I've received <strong>all the information"
msgstr "Dobio/la sam <strong>sve informacije"
msgid "I've received <strong>some of the information</strong>"
-msgstr "Dobio/la sam <strong>dio informacija</strong>"
+msgstr "Dobio/la sam <strong>deo informacija</strong>"
msgid "I've received an <strong>error message</strong>"
-msgstr "Dobio/la sam <strong>poruku o pogrešci</strong>"
+msgstr "Dobio/la sam <strong>poruku o greški</strong>"
msgid "I've received an error message"
-msgstr ""
+msgstr "Dobio sam poruku o grešci"
msgid "Id"
-msgstr ""
+msgstr "Id"
msgid "If the address is wrong, or you know a better address, please <a href=\"{{url}}\">contact us</a>."
msgstr "Ako je adresa pogrešna, ili znate bolju adresu, molimo Vas <a href=\"{{url}}\">da nas kontaktirate</a>."
msgid "If the error was a delivery failure, and you can find an up to date FOI email address for the authority, please tell us using the form below."
-msgstr ""
+msgstr "Ako je greška bila u isporuci, a poznata vam je ažurna email adresa ustanove za potrebe Zahteva za slobodan pristup informacijama od javnog značaja, molimo Vas da nam dostavite tu email adresu koristeći formular ispod."
msgid "If this is incorrect, or you would like to send a late response to the request\\nor an email on another subject to {{user}}, then please\\nemail {{contact_email}} for help."
-msgstr ""
-"Ako je ovo pogrešno, ili biste da pošaljete novi odgovor na zahtev\n"
-"ili e-mail o nečemu drugome {{user}}, onda molimo\n"
-"pošaljite nam e-mail {{contact_email}} za pomoć."
+msgstr "Ako je ovo netačno, ili biste želeli da pošaljete zakasneli odgovor na ovaj zahtev\\nili e-mail poruku po drugom osnovu korisniku {{user}}, molimo\\n pošaljite poruku na adresu {{contact_email}} za pomoć."
msgid "If you are dissatisfied by the response you got from\\n the public authority, you have the right to\\n complain (<a href=\"{{url}}\">details</a>)."
msgstr ""
@@ -1071,10 +1038,10 @@ msgid "If you are still having trouble, please <a href=\"{{url}}\">contact us</a
msgstr "Ako i dalje imate problema, molimo <a href=\"{{url}}\">kontaktirajte nas</a>."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the message."
-msgstr ""
+msgstr "Ako ste Vi podnosilac zahteva onda molimo da se <a href=\"{{url}}\">prijavite na sistem</a> da biste videli poruku."
msgid "If you are the requester, then you may <a href=\"{{url}}\">sign in</a> to view the request."
-msgstr "Ako ste podnosioc zahteva, možete se <a href=\"{{url}}\">prijaviti</a> da biste pogledali zahtev."
+msgstr "Ako ste podnosilac zahteva, možete se <a href=\"{{url}}\">prijaviti</a> da biste pogledali zahtev."
msgid "If you are thinking of using a pseudonym,\\n please <a href=\"{{url}}\">read this first</a>."
msgstr ""
@@ -1082,193 +1049,175 @@ msgstr ""
" molimo da<a href=\"{{url}}\">pročitajte prvo ovo</a>."
msgid "If you are {{user_link}}, please"
-msgstr "Ako ste {{user_link}}, molimo"
+msgstr "Ako ste Vi {{user_link}}, molimo"
msgid "If you believe this request is not suitable, you can report it for attention by the site administrators"
-msgstr ""
+msgstr "Ako verujete da je zahtev neprikladan možete ga prijaviti administratorima sistema"
msgid "If you can't click on it in the email, you'll have to <strong>select and copy\\nit</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\\nyou would type the address of any other webpage."
-msgstr ""
-"Ako ne možete kliknuti na njega u e-mailu, morati ćete <strong>odabrati i kopirati\n"
-"ga</strong> sa e-maila. Zatim <strong>nalijepite ga u Vaš pretraživač</strong>, na mjesto\n"
-"gde biste ukucali adresu bilo koje druge web stranice."
+msgstr "Ako ne možete kliknuti na njega u e-mail poruci, moraćete da <strong>obeležite i kopirate\\nga</strong> iz poruke. Onda <strong>ga prepišite u Vaš browser</strong>, na mesto gde\\ninače upisujete adresu bilo koje druge web stranice."
msgid "If you can, scan in or photograph the response, and <strong>send us\\n a copy to upload</strong>."
-msgstr ""
-"Ako možete skenirajte ili uslikajte odgovor, i <strong>pošaljite nam\n"
-" kopiju za slanje</strong>."
+msgstr "Ako je moguće molimo skenirajte ili fotografišite odgovor i <strong>pošaljite nam ga\\n da ga postavimo</strong>."
msgid "If you find this service useful as an FOI officer, please ask your web manager to link to us from your organisation's FOI page."
-msgstr ""
+msgstr "Ako Vam, kao nadležnom referentu za izdavanje informacija od javnog značaja, ovaj sistem koristi, molimo Vas da tražite od vašeg webmastera da postavi link na naš sistem sa stranice web sajta Vaše ustanove koja se tiče informacija od javnog značaja."
msgid "If you got the email <strong>more than six months ago</strong>, then this login link won't work any\\nmore. Please try doing what you were doing from the beginning."
-msgstr ""
-"Ako ste dobili e-mail <strong>pre više od šest meseci</strong>, onda ovaj link za prijavu više neće\n"
-"raditi. Molimo pokušajte ispočetka."
+msgstr "Ako ste dobili e-mail <strong>pre više od šest meseci</strong>, onda ovaj link za prijavu na sistem više neće\\nraditi. U tom slučaju molimo pokušajte ispočetka."
msgid "If you have not done so already, please write a message below telling the authority that you have withdrawn your request. Otherwise they will not know it has been withdrawn."
-msgstr "Ako niste već, molimo napišite poruku ispod u kojoj napominjete ustanovu da ste povukli Vaš zahtev. U protivnom neće znati da je zahtev povučen."
+msgstr "Ako već niste, molimo napišite ispod poruku kojom informišete ustanovu da ste povukli Vaš zahtev. U protivnom oni neće znati da je zahtev povučen."
msgid "If you reply to this message it will go directly to {{user_name}}, who will\\nlearn your email address. Only reply if that is okay."
-msgstr ""
+msgstr "Ako odgovorite korisniku {{user_name}} na ovu email poruku direktno, korisnik će\\nsaznati Vašu e-mail adresu. Odgovorite samo ako se slažete sa ovim."
msgid "If you use web-based email or have \"junk mail\" filters, also check your\\nbulk/spam mail folders. Sometimes, our messages are marked that way."
-msgstr ""
-"Ako koristite neke od web mail servisa ili imate filtere za \"junk mail\", provjerite u Vašim\n"
-"bulk/spam folderima. Ponekad su naše poruke označene tako."
+msgstr "Ako koristite web mail ili imate \"junk mail\" filtere, proverite takođe\\nbulk/spam mail foldere. Naše poruke ponekad budu tako klasifikovane."
msgid "If you would like us to lift this ban, then you may politely\\n<a href=\"/help/contact\">contact us</a> giving reasons.\\n"
-msgstr ""
-"Ako biste željeli da ukinemo ovu zabranu, možete nas na pristojan način\n"
-"<a href=\"/help/contact\">kontaktirati</a> uz obrazloženje.\\n"
+msgstr "Ako biste želeli da ukinemo ovu zabranu, molimo Vas da nas na uljudan način\\n<a href=\"/help/contact\">kontaktirate</a> uz obrazloženje.\\n"
msgid "If you're new to {{site_name}}"
msgstr "Ako ste novi na {{site_name}}"
msgid "If you've used {{site_name}} before"
-msgstr "Ako ste koristili {{site_name}} prije"
+msgstr "Ako ste koristili {{site_name}} ranije"
msgid "If your browser is set to accept cookies and you are seeing this message,\\nthen there is probably a fault with our server."
-msgstr ""
-"Ako je Vaš pretraživač namješten da prihvata cookies-e i vidite ovu poruku,\n"
-"onda vjerovatno postoji problem sa našim serverom."
+msgstr "Ako je Vaš browser podešen da prihvata cookies-e i vidite ovu poruku,\\nonda je verovatno neki problem sa našim serverom."
msgid "Incoming email address"
-msgstr ""
+msgstr "Dolazna email adresa"
msgid "Incoming message"
-msgstr ""
+msgstr "Dolazna poruka"
msgid "IncomingMessage|Cached attachment text clipped"
-msgstr ""
+msgstr "IncomingMessage|Keširani tekst priloga odsečen"
msgid "IncomingMessage|Cached main body text folded"
-msgstr ""
+msgstr "IncomingMessage|Keširani glavni tekst isprelaman"
msgid "IncomingMessage|Cached main body text unfolded"
-msgstr ""
+msgstr "IncomingMessage|Keširani glavni tekst rekonstruisan"
msgid "IncomingMessage|Last parsed"
-msgstr ""
+msgstr "IncomingMessage|Poslednje analizirano"
msgid "IncomingMessage|Mail from"
-msgstr ""
+msgstr "IncomingMessage|Poruka od"
msgid "IncomingMessage|Mail from domain"
-msgstr "Nadolazeća poruka|Pošta sa domene"
+msgstr "IncomingMessage|Poruka sa domena"
msgid "IncomingMessage|Prominence"
-msgstr ""
+msgstr "IncomingMessage|Važnost"
msgid "IncomingMessage|Prominence reason"
-msgstr ""
+msgstr "IncomingMessage|Razlog važnosti"
msgid "IncomingMessage|Sent at"
-msgstr "Nadolazeća poruka|Poslana u"
+msgstr "IncomingMessage|Poslata u"
msgid "IncomingMessage|Subject"
-msgstr "Nadolazeća poruka|Tema"
+msgstr "IncomingMessage|Predmet"
msgid "IncomingMessage|Valid to reply to"
-msgstr "Nadolazeća poruka|Validna za odgovor za"
+msgstr "IncomingMessage|Validna za odgovor za"
msgid "Individual requests"
-msgstr ""
+msgstr "Pojedinačni zahtevi"
msgid "Info request"
-msgstr ""
+msgstr "Zahtev za informacije"
msgid "Info request event"
-msgstr ""
+msgstr "Događaj u vezi zahteva za informacije"
msgid "InfoRequestEvent|Calculated state"
-msgstr ""
+msgstr "InfoRequestEvent|Sračunato stanje"
msgid "InfoRequestEvent|Described state"
-msgstr ""
+msgstr "InfoRequestEvent|Opisano stanje"
msgid "InfoRequestEvent|Event type"
-msgstr ""
+msgstr "InfoRequestEvent|Tip događaja"
msgid "InfoRequestEvent|Last described at"
-msgstr ""
+msgstr "InfoRequestEvent|Poslednji put opisano"
msgid "InfoRequestEvent|Params yaml"
-msgstr ""
+msgstr "InfoRequestEvent|YAML parametri"
msgid "InfoRequest|Allow new responses from"
-msgstr ""
+msgstr "InfoRequest|Dozvoli nove odgovore od"
msgid "InfoRequest|Attention requested"
-msgstr ""
+msgstr "InfoRequest|Zahtevana pažnja"
msgid "InfoRequest|Awaiting description"
-msgstr ""
+msgstr "InfoRequest|Čekajući opis"
msgid "InfoRequest|Comments allowed"
-msgstr ""
+msgstr "InfoRequest|Dozvoljeni komentari"
msgid "InfoRequest|Described state"
-msgstr ""
+msgstr "InfoRequest|Opisano stanje"
msgid "InfoRequest|External url"
-msgstr ""
+msgstr "InfoRequest|Spoljni url"
msgid "InfoRequest|External user name"
-msgstr ""
+msgstr "InfoRequest|Spoljno korisničko ime"
msgid "InfoRequest|Handle rejected responses"
-msgstr ""
+msgstr "InfoRequest|Razrešavanje odbijenih odgovora"
msgid "InfoRequest|Idhash"
-msgstr ""
+msgstr "InfoRequest|Idhash"
msgid "InfoRequest|Law used"
-msgstr ""
+msgstr "InfoRequest|Primenjeni zakon"
msgid "InfoRequest|Prominence"
-msgstr ""
+msgstr "InfoRequest|Važnost"
msgid "InfoRequest|Title"
-msgstr ""
+msgstr "InfoRequest|Naslov"
msgid "InfoRequest|Url title"
-msgstr ""
+msgstr "InfoRequest|Url naslov"
msgid "Information not held."
-msgstr "Ne posedujemo informacije."
+msgstr "Informacija nije u posedu."
msgid "Information on emissions and discharges (e.g. noise, energy,\\n radiation, waste materials)"
-msgstr ""
-"Informacije o emisijama i otpadima (npr. buka, energija,\n"
-" radijacija, otpadni materijali)"
+msgstr "Informacije o emisijama i otpadima (npr. šum\\n radijacija, otpadni materijali)"
msgid "Internal review request"
msgstr "Zahtev za urgenciju"
msgid "Is {{email_address}} the wrong address for {{type_of_request}} requests to {{public_body_name}}? If so, please contact us using this form:"
-msgstr "Da li je {{email_address}} pogrešna adresa za {{type_of_request}} zahteve za {{public_body_name}}?Ako da, molimo kontaktirajte nas koristeći ovaj formular:"
+msgstr "Da li je {{email_address}} pogrešna email adresa za zahteve za {{public_body_name}} tipa {{type_of_request}}? Ako jeste, molimo da nas kontaktirate koristeći ovaj formular:"
msgid "It may be that your browser is not set to accept a thing called \"cookies\",\\nor cannot do so. If you can, please enable cookies, or try using a different\\nbrowser. Then press refresh to have another go."
-msgstr ""
-"Moguće je da Vaš pretraživač nije namešten da prihvata nešto što se zove \"cookies\",\n"
-"ili nema tu mogućnost. Ako možete, molimo pokušajte aktivirati cookies-e, ili pokušajte koristiti drugi\n"
-"pretraživač. Zatim pritisnite refresh da biste pokušali ponovo."
+msgstr "Moguće je da Vaš browser nije podešen da prihvata nešto što se zove \"cookies\",\\nili nema tu mogućnost. Ako možete, molimo pokušajte aktivirati cookies-e, ili pokušajte koristiti drugi\\nbrowser. Onda osvežite stranicu da probate ponovo."
msgid "Items matching the following conditions are currently displayed on your wall."
-msgstr ""
+msgstr "Ono što ispunjava sledeće zahteve je trenutno prikazano na Vašem zidu."
msgid "Items sent in last month"
-msgstr ""
+msgstr "Poslato prošlog meseca"
msgid "Joined in"
msgstr "Pridružio se u"
msgid "Joined {{site_name}} in"
-msgstr "Pridružio se na {{site_name}} u"
+msgstr "Počeo koristiti {{site_name}} u"
msgid "Just one more thing"
-msgstr ""
+msgstr "Samo još jedna stvar"
msgid "Keep it <strong>focused</strong>, you'll be more likely to get what you want (<a href=\"{{url}}\">why?</a>)."
msgstr "Držite se <strong>suštine</strong>, lakše ćete dobiti ono što tražite(<a href=\"{{url}}\">Više informacija</a>)."
@@ -1277,118 +1226,112 @@ msgid "Keywords"
msgstr "Ključne reči"
msgid "Last authority viewed: "
-msgstr "Zadnja pregledana ustanova: "
+msgstr "Poslednja pregledana ustanova: "
msgid "Last request viewed: "
-msgstr "Zadnji pregledani zahtev: "
+msgstr "Poslednji pregledani zahtev: "
msgid "Let us know what you were doing when this message\\nappeared and your browser and operating system type and version."
-msgstr ""
-"Obavestite nas o tome šta ste uradili kada se ova poruka\n"
-"pojavila i o tipu i verziji Vašeg pretraživača i operativnog sistema."
+msgstr "Obavestite nas šta ste radili kada se pojavila ova poruka\\ni takođe koji browser i tip i verziju operativnog sistema koristite."
msgid "Link to this"
msgstr "Spojite sa ovim"
msgid "List all"
-msgstr ""
+msgstr "Prikaži sve"
msgid "List of all authorities (CSV)"
msgstr "Popis svih ustanova (CSV)"
msgid "Listing FOI requests"
-msgstr ""
+msgstr "Prikaz zahteva"
msgid "Listing public authorities"
-msgstr ""
+msgstr "Prikaz ustanova"
msgid "Listing public authorities matching '{{query}}'"
-msgstr ""
+msgstr "Prikaz ustanova koje odgovaraju upitu '{{query}}'"
msgid "Listing tracks"
-msgstr ""
+msgstr "Prikaz praćenja"
msgid "Listing users"
-msgstr ""
+msgstr "Prikaz korisnika"
msgid "Log in to download a zip file of {{info_request_title}}"
-msgstr "Prijavite se da preuzmete zipovano {{info_request_title}}"
+msgstr "Prijavite se da preuzmete {{info_request_title}} u obliku zip arhive"
msgid "Log into the admin interface"
-msgstr ""
+msgstr "Prijavite se na administrativnu aplikaciju"
msgid "Long overdue."
-msgstr ""
+msgstr "Davno prošao rok."
msgid "Made between"
msgstr "Napravljen između"
msgid "Mail server log"
-msgstr ""
+msgstr "Pošalji serverski dnevnik aktivnosti"
msgid "Mail server log done"
-msgstr ""
+msgstr "Serverski dnevnik aktivnosti poslat"
msgid "MailServerLogDone|Filename"
-msgstr ""
+msgstr "MailServerLogDone|Ime datoteke"
msgid "MailServerLogDone|Last stat"
-msgstr ""
+msgstr "MailServerLogDone|Poslednje statistike"
msgid "MailServerLog|Line"
-msgstr ""
+msgstr "MailServerLog|Linija"
msgid "MailServerLog|Order"
-msgstr ""
+msgstr "MailServerLog|Redosled"
msgid "Make a new<br/>\\n <strong>Freedom <span>of</span><br/>\\n Information<br/>\\n request</strong>"
-msgstr ""
-"Podnesi novi<br/>\n"
-" <strong>Zahtev<span> za</span><br/>\n"
-" slobodan<br/>\n"
-" pristup informacijama</strong>"
+msgstr "Podnesi novi<br/>\\n<strong>Zahtev<span> za</span><br/>\\nslobodan<br/>\\npristup informacijama od javnog značaja</strong>"
msgid "Make a request"
msgstr "Podnesi zahtev"
msgid "Make a request to this authority"
-msgstr ""
+msgstr "Podnesite zahtev ovoj instituciji"
msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
msgstr "Podnesi {{law_used_short}} zahtev javnoj ustanovi '{{public_body_name}}'"
msgid "Make and browse Freedom of Information (FOI) requests"
-msgstr "Napravi i pretraži Zahteve za slobodan pristup informacijama"
+msgstr "Podnesi ili pretražuj zahteve po Zakonu o slobodnom pristupu informacijama od javnog značaja (ZOSPIOJ)"
msgid "Make your own request"
-msgstr "Načinite Vaš zahtev"
+msgstr "Podnesite zahtev"
msgid "Many requests"
-msgstr ""
+msgstr "Puno zahteva"
msgid "Message"
-msgstr ""
+msgstr "Poruka"
msgid "Message has been removed"
-msgstr ""
+msgstr "Poruka je uklonjena"
msgid "Message sent using {{site_name}} contact form, "
-msgstr "Poruka poslana koristeći {{site_name}} formular za kontakt, "
+msgstr "Poruka poslata koristeći formular za kontakt na sajtu {{site_name}},"
msgid "Missing contact details for '"
-msgstr "Nedostaju detalji kontakta za '"
+msgstr "Nedostaju detalji za kontakt za '"
msgid "More about this authority"
-msgstr "Više o ovoj ustanovi"
+msgstr "Još o ovoj ustanovi"
msgid "More requests..."
-msgstr ""
+msgstr "Još zahteva..."
msgid "More similar requests"
-msgstr "Više sličnih zahteva"
+msgstr "Još sličnih zahteva"
msgid "More successful requests..."
-msgstr "Više uspešnih zahteva..."
+msgstr "Još uspešnih zahteva..."
msgid "My profile"
msgstr "Moj profil"
@@ -1400,58 +1343,58 @@ msgid "My requests"
msgstr "Moji zahtevi"
msgid "My wall"
-msgstr ""
+msgstr "Moj zid"
msgid "Name can't be blank"
msgstr "Ime ne može ostati prazno"
msgid "Name is already taken"
-msgstr "Ime se već koristi"
+msgstr "Ime je zauzeto"
msgid "New Freedom of Information requests"
-msgstr "Novi Zahtevi za slobodan pristup informacijama"
+msgstr "Novi Zahtevi za slobodan pristup informacijama od javnog značaja"
msgid "New censor rule"
-msgstr ""
+msgstr "Novo pravilo cenzure"
msgid "New e-mail:"
msgstr "Novi e-mail:"
msgid "New email doesn't look like a valid address"
-msgstr "Novi e-mail ne izgleda kao validna adresa"
+msgstr "Novi e-mail ne izgleda kao ispravna adresa"
msgid "New password:"
-msgstr "Novi password:"
+msgstr "Nova lozinka:"
msgid "New password: (again)"
-msgstr "Novi password: (ponovo)"
+msgstr "Nova lozinka: (ponovo)"
msgid "New response to '{{title}}'"
-msgstr ""
+msgstr "Novi odgovor na '{{title}}'"
msgid "New response to your FOI request - "
-msgstr "Novi odgovor na Vaš Zahtev o slobodnom pristupu informacijama - "
+msgstr "Novi odgovor na Vaš zahtev po Zakonu o slobodnom pristupu informacijama od javnog značaja - "
msgid "New response to your request"
msgstr "Novi odgovor na Vaš zahtev"
msgid "New response to {{law_used_short}} request"
-msgstr "Novi odgovor na {{law_used_short}} zahtev"
+msgstr "Novi odgovor na zahtev {{law_used_short}}"
msgid "New updates for the request '{{request_title}}'"
-msgstr "Nova ažuriranja za zahtev '{{request_title}}'"
+msgstr "Nove vesti za zahtev '{{request_title}}'"
msgid "Newest results first"
-msgstr "Najnoviji rezultati "
+msgstr "Najnoviji rezultati na vrh"
msgid "Next"
-msgstr "Slijedeći"
+msgstr "Sledeći"
msgid "Next, crop your photo &gt;&gt;"
-msgstr "Zatim, smanjite Vašu sliku &gt;&gt;"
+msgstr "Zatim, opsecite Vašu sliku &gt;&gt;"
msgid "No requests of this sort yet."
-msgstr "Nema zahteva ove vrste dosada."
+msgstr "Nema još ni jednog zahteva ove vrste."
msgid "No results found."
msgstr "Nema rezultata pretrage"
@@ -1460,22 +1403,22 @@ msgid "No similar requests found."
msgstr "Nisu nađeni slični zahtevi."
msgid "No tracked things found."
-msgstr ""
+msgstr "Nema praćenih stvari"
msgid "Nobody has made any Freedom of Information requests to {{public_body_name}} using this site yet."
-msgstr "Niko nije podnio Zahtev za slobodan pristup informacijama {{public_body_name}} koristeći ovu stranicu."
+msgstr "Niko još nije podneo Zahtev za slobodan pristup informacijama od javnog značaja za {{public_body_name}} koristeći ovu stranicu."
msgid "None found."
-msgstr "Ništa nije nađeno."
+msgstr "Nije nađen nijedan."
msgid "None made."
-msgstr "Ništa podneseno."
+msgstr "Nije podnet nijedan."
msgid "Not a valid FOI request"
-msgstr ""
+msgstr "Neispravan zahtev"
msgid "Note that the requester will not be notified about your annotation, because the request was published by {{public_body_name}} on their behalf."
-msgstr ""
+msgstr "Imajte u vidu da podnosilac zahteva neće biti obavešten o Vašem komentaru, zato što je zahtev objavljen od strane ustanove {{public_body_name}} u njegovo/njeno ime."
msgid "Now check your email!"
msgstr "Sada proverite Vaš e-mail!"
@@ -1484,37 +1427,37 @@ msgid "Now preview your annotation"
msgstr "Sada pregledajte Vašu napomenu"
msgid "Now preview your follow up"
-msgstr ""
+msgstr "Sada pregledajte Vašu reakciju"
msgid "Now preview your message asking for an internal review"
msgstr "Sada pregledajte Vašu poruku u kojoj tražite urgenciju "
msgid "Number of requests"
-msgstr ""
+msgstr "Broj zahteva"
msgid "OR remove the existing photo"
-msgstr "ILI odstrani postojeću sliku"
+msgstr "ILI odstranite postojeću sliku"
msgid "Offensive? Unsuitable?"
-msgstr ""
+msgstr "Uvredljivo? Neprikladno?"
msgid "Oh no! Sorry to hear that your request was refused. Here is what to do now."
-msgstr "Žao nam je što je Vaš zahtev odbijen. Prijedlog za Vaše slijedeće akcije."
+msgstr "Žao nam je što je Vaš zahtev odbijen. Evo šta sada možete uraditi."
msgid "Old e-mail:"
msgstr "Stari e-mail:"
msgid "Old email address isn't the same as the address of the account you are logged in with"
-msgstr "Stara e-mail adresa nije ista kao adresa računa na koji ste prijavljeni"
+msgstr "Stara e-mail adresa nije ista kao adresa profila na koji ste prijavljeni"
msgid "Old email doesn't look like a valid address"
-msgstr "Stari e-mail ne izgleda kao validna adresa"
+msgstr "Stari e-mail ne izgleda kao ispravna adresa"
msgid "On this page"
msgstr "Na ovoj stranici"
msgid "One FOI request found"
-msgstr "Pronađen jedan Zahtev za slobodan pristup informacijama"
+msgstr "Pronađen jedan zahtev po ZOSPIOJ"
msgid "One person found"
msgstr "Jedna osoba pronađena"
@@ -1523,82 +1466,82 @@ msgid "One public authority found"
msgstr "Jedna javna ustanova pronađena"
msgid "Only put in abbreviations which are really used, otherwise leave blank. Short or long name is used in the URL – don't worry about breaking URLs through renaming, as the history is used to redirect"
-msgstr ""
+msgstr "Upišite samo skraćenice koje se zaista koriste, inače ostavite prazno.Kratko i dugo ime se koriste u URL – ne brinite za kvarenje URL preimenovanjem, pošto se istorija koristi za preusmeravanje"
msgid "Only requests made using {{site_name}} are shown."
-msgstr "Samo zahtevi koji koriste {{site_name}} su prikazani."
+msgstr "Prikazani su samo zahtevi podneti pomoću {{site_name}}."
msgid "Only the authority can reply to this request, and I don't recognise the address this reply was sent from"
-msgstr "Samo ustanova može odgovoriti na ovaj zahtev, i ne prepoznajemo adresu sa koje je poslan ovaj odgovor"
+msgstr "Samo ustanova kojoj je zahtev podnet može odgovoriti na ovaj zahtev - adresa sa koje je poslat ovaj odgovor nije prepoznata"
msgid "Only the authority can reply to this request, but there is no \"From\" address to check against"
-msgstr "Samo ustanova može odgovoriti na ovaj zahtev, ali ne sadrži adresu pošiljaoca"
+msgstr "Samo ustanova kojoj je zahtev podnet može odgovoriti na ovaj zahtev - ali poruka ne sadrži adresu pošiljaoca - \"From\""
msgid "Or search in their website for this information."
-msgstr "Ili tražite ovu informaciju na njihovoj web stranici."
+msgstr "Ili tražite ovu informaciju na njihovom web sajtu."
msgid "Original request sent"
-msgstr "Originalni zahtev poslan"
+msgstr "Originalni zahtev poslat"
msgid "Other:"
-msgstr "Drugo:"
+msgstr "Ostalo:"
msgid "Outgoing message"
-msgstr ""
+msgstr "Odlazna poruka"
msgid "OutgoingMessage|Body"
-msgstr "Odlazeća poruka|Tijelo"
+msgstr "OutgoingMessage|Telo"
msgid "OutgoingMessage|Last sent at"
-msgstr "Odlazeća poruka|Zadnja poslana u"
+msgstr "OutgoingMessage|Zadnja poslana u"
msgid "OutgoingMessage|Message type"
-msgstr "Odlazeća poruka|Tip poruke"
+msgstr "OutgoingMessage|Tip poruke"
msgid "OutgoingMessage|Prominence"
-msgstr ""
+msgstr "OutgoingMessage|Važnost"
msgid "OutgoingMessage|Prominence reason"
-msgstr ""
+msgstr "OutgoingMessage|Razlog važnosti"
msgid "OutgoingMessage|Status"
-msgstr "Odlazeća poruka|Status"
+msgstr "OutgoingMessage|Status"
msgid "OutgoingMessage|What doing"
-msgstr "Odlazeća poruka|Šta radi"
+msgstr "OutgoingMessage|Šta radi"
msgid "Partially successful."
-msgstr "Delimično uspješan."
+msgstr "Delimično uspešno."
msgid "Password is not correct"
-msgstr "Password nije ispravan"
+msgstr "Neispravna lozinka"
msgid "Password:"
-msgstr "Password:"
+msgstr "Lozinka:"
msgid "Password: (again)"
-msgstr "Password: (ponovo)"
+msgstr "Lozinka: (ponovo)"
msgid "Paste this link into emails, tweets, and anywhere else:"
-msgstr "Nalijepite ovaj link na e-mailove, tweets-e i na druga mjesta:"
+msgstr "Ubacite ovaj link na e-mailove, tvitove i na druga mjesta:"
msgid "People"
-msgstr ""
+msgstr "Ljudi"
msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr ""
+msgstr "Osobe {{start_count}} do {{end_count}} od ukupno {{total_count}}"
msgid "Percentage of requests that are overdue"
-msgstr ""
+msgstr "Procenat zahteva za koje odgovor kasni"
msgid "Percentage of total requests"
-msgstr ""
+msgstr "Procenat od ukupnog broja zahteva"
msgid "Photo of you:"
msgstr "Vaša slika:"
msgid "Plans and administrative measures that affect these matters"
-msgstr "Planovi i administrativne mjere koje utiču na ove predmete"
+msgstr "Planovi i administrativne mere koje utiču na ovu oblast"
msgid "Play the request categorisation game"
msgstr "Igrajte igru kategorizacije zahteva"
@@ -1610,13 +1553,13 @@ msgid "Please"
msgstr "Molimo"
msgid "Please <a href=\"{{url}}\">contact us</a> if you have any questions."
-msgstr ""
+msgstr "Molimo da nas <a href=\"{{url}}\">kontaktirate</a> ako imate pitanja."
msgid "Please <a href=\"{{url}}\">get in touch</a> with us so we can fix it."
-msgstr "Molimo <a href=\"{{url}}\">kontaktirajte</a> nas kako bi to mogli popraviti."
+msgstr "Molimo <a href=\"{{url}}\">kontaktirajte</a> nas kako bismo mogli to da popravimo."
msgid "Please <strong>answer the question above</strong> so we know whether the "
-msgstr "Molimo <strong>odgovorite na pitanje iznad</strong> kako bi znali da li"
+msgstr "Molimo <strong>odgovorite na pitanje iznad</strong> kako bismo znali da li"
msgid "Please <strong>go to the following requests</strong>, and let us\\n know if there was information in the recent responses to them."
msgstr ""
@@ -1624,42 +1567,42 @@ msgstr ""
" nas ako je bilo informacija u skorašnjim odgovorima."
msgid "Please <strong>only</strong> write messages directly relating to your request {{request_link}}. If you would like to ask for information that was not in your original request, then <a href=\"{{new_request_link}}\">file a new request</a>."
-msgstr "Molimo <strong>samo</strong> pišite poruke samo uvezi sa Vašim zahtevom {{request_link}}. Ako želite da tražite informacije koje nisu u Vašem originalnom zahtevu, onda <a href=\"{{new_request_link}}\">podnesite novi zahtev</a>."
+msgstr "Molimo pišite poruke <strong>samo</strong> uvezi sa Vašim zahtevom {{request_link}}. Ako želite da tražite informacije koje nisu u Vašem originalnom zahtevu, onda <a href=\"{{new_request_link}}\">podnesite novi zahtev</a>."
msgid "Please ask for environmental information only"
-msgstr "Molimo tražite samo informacije o okolišu"
+msgstr "Molimo tražite samo informacije o prirodnoj okolini"
msgid "Please check the URL (i.e. the long code of letters and numbers) is copied\\ncorrectly from your email."
msgstr ""
-"Molimo proverite da li je URL (i.e. the long code of letters and numbers) kopiran\n"
-"ispravno sa Vašeg e-maila."
+"Molimo proverite da li je URL (duga šifra od slova i brojeva) kopiran\n"
+"ispravno iz Vašeg e-maila."
msgid "Please choose a file containing your photo."
-msgstr "Molimo izaberite datoteku koja sadržava Vašu sliku."
+msgstr "Molimo izaberite datoteku koja sadrži Vašu sliku."
msgid "Please choose a reason"
-msgstr ""
+msgstr "Molimo odaberite razlog"
msgid "Please choose what sort of reply you are making."
-msgstr "Molimo izaberite vrstu odgovora."
+msgstr "Molimo izaberite vrstu odgovora koji pripremate."
msgid "Please choose whether or not you got some of the information that you wanted."
-msgstr "Ako ste podnosioc zahteva, možete se <a href=\"%s\">prijaviti</a> da biste pogledali zahtev."
+msgstr "Molimo izaberite da li jeste ili niste dobili nešto od informacija koje ste tražili."
msgid "Please click on the link below to cancel or alter these emails."
-msgstr "Molimo kliknite na link ispod da biste poništili ili promijenili ove e-mailove"
+msgstr "Molimo kliknite na link ispod da biste otkazali ili promenili ove e-mailove"
msgid "Please click on the link below to confirm that you want to \\nchange the email address that you use for {{site_name}}\\nfrom {{old_email}} to {{new_email}}"
msgstr ""
"Molimo kliknite na link ispod da potvrdite da želite \n"
-"promeniti e-mail adresu koju koristite na {{site_name}}\n"
+"da promenite e-mail adresu koju koristite na sistemu {{site_name}}\n"
"sa {{old_email}} na {{new_email}}"
msgid "Please click on the link below to confirm your email address."
msgstr "Molimo kliknite na link ispod da biste potvrdili Vašu e-mail adresu."
msgid "Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway."
-msgstr "Molimo dodatno opišite o kakvom zahtevu je reč u predmetu. Nije potrebno reći da je Zahtev za slobodan pristup informacijama, tu ćemo stavku dodati svakako."
+msgstr "Molimo u predmetu zahteva opišite o čemu je zahtev. Nije potrebno reći da je zahtev po Zakonu o slobodnom pristupu informacijama od javnog značaja, to će svakako biti dodato."
msgid "Please don't upload offensive pictures. We will take down images\\n that we consider inappropriate."
msgstr ""
@@ -1670,31 +1613,31 @@ msgid "Please enable \"cookies\" to carry on"
msgstr "Molimo aktivirajte cookies-e da biste nastavili"
msgid "Please enter a password"
-msgstr "Molimo unesite password"
+msgstr "Molimo unesite lozinku"
msgid "Please enter a subject"
-msgstr "Molimo unestite naslov"
+msgstr "Molimo unestite predmet"
msgid "Please enter a summary of your request"
msgstr "Molimo unesite sažetak Vašeg zahteva"
msgid "Please enter a valid email address"
-msgstr "Molimo unesite valjanu e-mail adresu"
+msgstr "Molimo unesite ispravnu e-mail adresu"
msgid "Please enter the message you want to send"
-msgstr "Molimo upišite poruku koju želite poslati"
+msgstr "Molimo unesite poruku koju želite da pošaljete"
msgid "Please enter the same password twice"
-msgstr "Molimo unesite isti password dva puta"
+msgstr "Molimo unesite istu lozinku dva puta"
msgid "Please enter your annotation"
-msgstr "Molimo unesite komentar"
+msgstr "Molimo unesite Vaš komentar"
msgid "Please enter your email address"
msgstr "Molimo unesite Vašu e-mail adresu"
msgid "Please enter your follow up message"
-msgstr "Molimo unesite Vašu prateću poruku"
+msgstr "Molimo unesite Vašu reakciju"
msgid "Please enter your letter requesting information"
msgstr "Molimo unesite Vaše pismo za zahtev informacija"
@@ -1703,7 +1646,7 @@ msgid "Please enter your name"
msgstr "Molimo unesite Vaše ime"
msgid "Please enter your name, not your email address, in the name field."
-msgstr "Molimo unesite Vaše ime, ne Vašu e-mail adresu, u polje."
+msgstr "Molimo unesite Vaše ime, a ne Vašu e-mail adresu, u polje imena."
msgid "Please enter your new email address"
msgstr "Molimo unesite Vašu novu e-mail adresu"
@@ -1712,7 +1655,7 @@ msgid "Please enter your old email address"
msgstr "Molimo unesite Vašu staru e-mail adresu"
msgid "Please enter your password"
-msgstr "Molimo unesite Vaš password"
+msgstr "Molimo unesite Vašu lozinku"
msgid "Please give details explaining why you want a review"
msgstr "Molimo objasnite zašto želite urgenciju"
@@ -1721,33 +1664,33 @@ msgid "Please keep it shorter than 500 characters"
msgstr "Molimo da ne koristite više od 500 znakova"
msgid "Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence."
-msgstr "Molimo da sažetak bude kratak, poput naslova e-maila. Radije koristite frazu nego punu rečenicu."
+msgstr "Molimo da sažetak bude kratak, slično predmetu e-mail poruka. Radije koristite frazu nego punu rečenicu."
msgid "Please only request information that comes under those categories, <strong>do not waste your\\n time</strong> or the time of the public authority by requesting unrelated information."
-msgstr ""
+msgstr "Molimo da zahtevate informacije iz jedne od sledećih kategorija, <strong>nemojte gubiti Vaše\\n vreme</strong> ni vreme zaposlenih u javnim ustanovama tražeći nevezane informacije."
msgid "Please pass this on to the person who conducts Freedom of Information reviews."
-msgstr ""
+msgstr "Molimo da prosledite ovo osobi koja vrši proveru rukovanja zahtevima za slobodan pristup informacijama od javnog značaja."
msgid "Please select each of these requests in turn, and <strong>let everyone know</strong>\\nif they are successful yet or not."
msgstr ""
-"Molimo odaberite svaki od ovih zahteva naizmjenice, i <strong>obavestite sve</strong>\n"
-"da li su bili uspešni ili ne."
+"Molimo odaberite redom svaki od ovih zahteva, i <strong>obavestite javnost</strong>\n"
+"da li su zahtevi bili uspešni ili nisu."
msgid "Please sign at the bottom with your name, or alter the \"{{signoff}}\" signature"
-msgstr "Molimo da se na dnu potpišete, ili izmijenite \"{{signoff}}\" potpis"
+msgstr "Molimo da se na dnu potpišete svojim imenom, ili izmenite \"{{signoff}}\" potpis"
msgid "Please sign in as "
msgstr "Molimo prijavite se kao "
msgid "Please sign in or make a new account."
-msgstr ""
+msgstr "Molimo prijavite se na sistem ili se registrujte."
msgid "Please type a message and/or choose a file containing your response."
msgstr "Molimo upišite poruku i/ili odaberite fajl koji sadrži vaš odgovor."
msgid "Please use this email address for all replies to this request:"
-msgstr "Molimo koristite ovu e-mail adresu za odgovore na ovaj zahtev:"
+msgstr "Molimo koristite ovu e-mail adresu za sve odgovore na ovaj zahtev:"
msgid "Please write a summary with some text in it"
msgstr "Molimo napišite sažetak sa nešto teksta"
@@ -1759,7 +1702,7 @@ msgid "Please write your annotation using a mixture of capital and lower case le
msgstr "Molimo napišite komentar koristeći velika i mala slova. Tako ćete olakšati čitanje drugima."
msgid "Please write your follow up message containing the necessary clarifications below."
-msgstr ""
+msgstr "Molimo napišite ispod reakciju na odgovor koji sadrži neophodna razjašnjenja."
msgid "Please write your message using a mixture of capital and lower case letters. This makes it easier for others to read."
msgstr "Molimo napišite poruku koristeći velika i mala slova. Tako ćete olakšati čitanje drugima."
@@ -1768,46 +1711,46 @@ msgid "Point to <strong>related information</strong>, campaigns or forums which
msgstr "Ukažite na <strong>slične informacije</strong>, kampanje ili forume koji mogu biti korisni."
msgid "Possibly related requests:"
-msgstr "Vjerovatno srodni zahtevi:"
+msgstr "Mogući povezani zahtevi:"
msgid "Post annotation"
-msgstr "Postaj napomenu"
+msgstr "Pošalji napomenu"
msgid "Post redirect"
-msgstr ""
+msgstr "Preusmerenje slanja"
msgid "PostRedirect|Circumstance"
-msgstr ""
+msgstr "PostRedirect|Okolnosti"
msgid "PostRedirect|Email token"
-msgstr ""
+msgstr "PostRedirect|Email token"
msgid "PostRedirect|Post params yaml"
-msgstr ""
+msgstr "PostRedirect|YAML post parametara"
msgid "PostRedirect|Reason params yaml"
-msgstr ""
+msgstr "PostRedirect|YAML parametara razloga"
msgid "PostRedirect|Token"
-msgstr ""
+msgstr "PostRedirect|Token"
msgid "PostRedirect|Uri"
-msgstr ""
+msgstr "PostRedirect|Uri"
msgid "Posted on {{date}} by {{author}}"
-msgstr "Poslano na datum {{date}} od strane {{author}}"
+msgstr "Objavljeno {{date}} od strane {{author}}"
msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
-msgstr ""
+msgstr "Na bazi <a href=\"http://www.alaveteli.org/\">Alaveteli</a> proizvoda"
msgid "Prev"
-msgstr "Prethodna"
+msgstr "Preth"
msgid "Preview follow up to '"
-msgstr ""
+msgstr "Pregledajte reakcije do '"
msgid "Preview new annotation on '{{info_request_title}}'"
-msgstr "Pregledaj novu napomenu za '{{info_request_title}}'"
+msgstr "Pregledajte novu napomenu o '{{info_request_title}}'"
msgid "Preview your annotation"
msgstr "Pregledajte Vašu napomenu"
@@ -1819,19 +1762,19 @@ msgid "Preview your public request"
msgstr "Pregledajte Vaš javni zahtev"
msgid "Profile photo"
-msgstr ""
+msgstr "Slika u profilu"
msgid "ProfilePhoto|Data"
-msgstr "Slika na profilu|Podaci"
+msgstr "ProfilePhoto|Podaci"
msgid "ProfilePhoto|Draft"
-msgstr "Slika na profilu|Skica"
+msgstr "ProfilePhoto|Skica"
msgid "Public Bodies"
-msgstr ""
+msgstr "Javne ustanove"
msgid "Public Body Statistics"
-msgstr ""
+msgstr "Statistike javnih ustanova"
msgid "Public authorities"
msgstr "Javne ustanove"
@@ -1840,109 +1783,112 @@ msgid "Public authorities - {{description}}"
msgstr "Javne ustanove - {{description}}"
msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
-msgstr ""
+msgstr "Javne ustanove {{start_count}} do {{end_count}} od ukupno {{total_count}}"
msgid "Public authority – {{name}}"
-msgstr ""
+msgstr "Ustanova – {{name}}"
msgid "Public bodies that most frequently replied with \"Not Held\""
-msgstr ""
+msgstr "Javne ustanove koje su najčešće odgovorile \"Nemamo\""
msgid "Public bodies with most overdue requests"
-msgstr ""
+msgstr "Javne ustanove sa najviše zakasnelih odgovora"
msgid "Public bodies with the fewest successful requests"
-msgstr ""
+msgstr "Javne ustaove sa najmanje uspešnih odgovora"
msgid "Public bodies with the most requests"
-msgstr ""
+msgstr "Javne ustanove sa najviše zahteva"
msgid "Public bodies with the most successful requests"
-msgstr ""
+msgstr "Javne ustanove sa najviše uspešnih zahteva"
msgid "Public body"
-msgstr ""
+msgstr "Javna ustanova"
msgid "Public notes"
-msgstr ""
+msgstr "Javne beleške"
msgid "Public page"
-msgstr ""
+msgstr "Javna strana"
msgid "Public page not available"
-msgstr ""
+msgstr "Javna strana nije raspoloživa"
msgid "PublicBody|Api key"
-msgstr ""
+msgstr "PublicBody|API ključ"
msgid "PublicBody|Disclosure log"
-msgstr ""
+msgstr "PublicBody|Dnevnik obaveštenja"
msgid "PublicBody|First letter"
-msgstr "Javno tijelo|Početno slovo"
+msgstr "PublicBody|Početno slovo"
msgid "PublicBody|Home page"
-msgstr "Javno tijelo|Home page"
+msgstr "PublicBody|Početna strana"
msgid "PublicBody|Info requests count"
-msgstr ""
+msgstr "PublicBody|Broj zahteva za informacijama"
msgid "PublicBody|Info requests not held count"
-msgstr ""
+msgstr "PublicBody|Broj odgovora \"nemamo\""
msgid "PublicBody|Info requests overdue count"
-msgstr ""
+msgstr "PublicBody|Broj zakasnelih odgovora"
msgid "PublicBody|Info requests successful count"
+msgstr "PublicBody|Broj uspešnih odgovora"
+
+msgid "PublicBody|Info requests visible classified count"
msgstr ""
msgid "PublicBody|Last edit comment"
-msgstr "Javno tijelo|Zadnji uređeni komentar"
+msgstr "PublicBody|Komentar poslednje izmene"
msgid "PublicBody|Last edit editor"
-msgstr "Javno tijelo|Zadnji uređivač"
+msgstr "PublicBody|Autor poslednje izmene"
msgid "PublicBody|Name"
-msgstr "Javno tijelo | Ime"
+msgstr "PublicBody|Ime"
msgid "PublicBody|Notes"
-msgstr "Javno tijelo|Bilješke"
+msgstr "PublicBody|Beleške"
msgid "PublicBody|Publication scheme"
-msgstr "Javno tijelo|Nacrt publikacije"
+msgstr "PublicBody|Mehanizam objavljivanja"
msgid "PublicBody|Request email"
-msgstr "Javno tijelo|"
+msgstr "PublicBody|Email adresa"
msgid "PublicBody|Short name"
-msgstr "Javno tijelo|Nadimak"
+msgstr "PublicBody|Kratko ime"
msgid "PublicBody|Url name"
-msgstr "Javno tijelo|Url ime"
+msgstr "PublicBody|Url ime"
msgid "PublicBody|Version"
-msgstr "Javno tijelo|Verzija"
+msgstr "PublicBody|Verzija"
msgid "Publication scheme"
-msgstr "Nacrt publikacije"
+msgstr "Mehanizam objavljivanja"
msgid "Publication scheme URL"
-msgstr ""
+msgstr "URL mehanizma objavljivanja"
msgid "Purge request"
-msgstr ""
+msgstr "Zahtev za čišćenje"
msgid "PurgeRequest|Model"
-msgstr ""
+msgstr "PurgeRequest|Model"
msgid "PurgeRequest|Url"
-msgstr ""
+msgstr "PurgeRequest|Url"
msgid "RSS feed"
-msgstr ""
+msgstr "RSS feed"
msgid "RSS feed of updates"
-msgstr ""
+msgstr "RSS feed novosti"
msgid "Re-edit this annotation"
msgstr "Ponovo urediti ovu napomenu"
@@ -1951,81 +1897,81 @@ msgid "Re-edit this message"
msgstr "Ponovo urediti ovu poruku"
msgid "Read about <a href=\"{{advanced_search_url}}\">advanced search operators</a>, such as proximity and wildcards."
-msgstr ""
+msgstr "Pročitajte o <a href=\"{{advanced_search_url}}\">operatorima za napredno pretraživanje</a>, kao što su džoker znaci i blizina."
msgid "Read blog"
-msgstr "Čitaj blog"
+msgstr "Čitajte blog"
msgid "Received an error message, such as delivery failure."
-msgstr "Dobijena poruka o pogrešci, poput neuspješnog prijema poruke."
+msgstr "Dobijena poruka o grešci, npr. neuspeh u isporuci."
msgid "Recently described results first"
-msgstr "Nedavno opisani rezultati "
+msgstr "Rezultati koji su skoro komentarisani na vrhu"
msgid "Refused."
msgstr "Odbijen."
msgid "Remember me</label> (keeps you signed in longer;\\n do not use on a public computer) "
msgstr ""
-"Zapamti nalog</label> (Omogućava da ostanete duže prijavljeni;\n"
+"Zapamti prijavu na sistem</label> (Omogućava da ostanete duže prijavljeni;\n"
" Ovu opciju nemojte koristiti na javnim računarima) "
msgid "Report abuse"
-msgstr "Prijavi zloupotrebu"
+msgstr "Prijavite zloupotrebu"
msgid "Report an offensive or unsuitable request"
-msgstr ""
+msgstr "Prijavite uvredljiv ili neprikladan zahtev"
msgid "Report request"
-msgstr ""
+msgstr "Prijavite zahtev"
msgid "Report this request"
-msgstr ""
+msgstr "Prijavite ova zahtev"
msgid "Reported for administrator attention."
-msgstr ""
+msgstr "Prijavljeno administratorima."
msgid "Request an internal review"
-msgstr ""
+msgstr "Zatražite urgenciju"
msgid "Request an internal review from {{person_or_body}}"
-msgstr "Zatražiti urgenciju od strane {{person_or_body}}"
+msgstr "Zatražite urgenciju od strane {{person_or_body}}"
msgid "Request email"
-msgstr ""
+msgstr "Zahtevajte email"
msgid "Request has been removed"
msgstr "Zahtev je uklonjen"
msgid "Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr "Zahtev poslan {{public_body_name}} od strane {{info_request_user}} na datum {{date}}."
+msgstr "Zahtev je poslat na adresu {{public_body_name}} od strane korisnika {{info_request_user}} na dan {{date}}."
msgid "Request to {{public_body_name}} by {{info_request_user}}. Annotated by {{event_comment_user}} on {{date}}."
-msgstr "Zahtev za {{public_body_name}} od strane {{info_request_user}}. Prokomentarisan od strane {{event_comment_user}} na datum {{date}}."
+msgstr "Zahtev za {{public_body_name}} poslat od strane korisnika {{info_request_user}}. Prokomentarisan od strane korisnika {{event_comment_user}} na dan {{date}}."
msgid "Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
-msgstr "Traženo od {{public_body_name}} od strane {{info_request_user}} na datum {{date}}"
+msgstr "Zatraženo od {{public_body_name}} od strane korisnika {{info_request_user}} na dan {{date}}"
msgid "Requested on {{date}}"
-msgstr "Traženo na datum {{date}}"
+msgstr "Traženo na dan {{date}}"
msgid "Requests are considered overdue if they are in the 'Overdue' or 'Very Overdue' states."
-msgstr ""
+msgstr "Zahtevi se smatraju zakasnelim ako su u stanjima \"Kasni\" i \"Veoma kasni\""
msgid "Requests are considered successful if they were classified as either 'Successful' or 'Partially Successful'."
-msgstr ""
+msgstr "Zahtevi se smatraju uspešnim ako su klasifikovani kao \"Uspešan\" ili \"Delimično uspešan\"."
msgid "Requests for personal information and vexatious requests are not considered valid for FOI purposes (<a href=\"/help/about\">read more</a>)."
-msgstr ""
+msgstr "Zahtevi za lične podatke i zahtevi koji se smatraju zloupotrebama prava se ne smatraju važećim u smislu Zakona o slobodnom pristupu informacijama od javnog značaja (<a href=\"/help/about\">više informacija možete dobiti ovde</a>)."
msgid "Requests or responses matching your saved search"
-msgstr "Zahtevi ili odgovori koji odgovaraju Vašoj spašenoj pretrazi"
+msgstr "Zahtevi ili odgovori koji odgovaraju Vašem snimljenom upitu"
msgid "Requests similar to '{{request_title}}'"
-msgstr ""
+msgstr "Zahtevi slični '{{request_title}}'"
msgid "Requests similar to '{{request_title}}' (page {{page}})"
-msgstr ""
+msgstr "Zahtevi slični '{{request_title}}' (strana {{page}})"
msgid "Respond by email"
msgstr "Odgovoriti e-mailom"
@@ -2034,7 +1980,7 @@ msgid "Respond to request"
msgstr "Odgovoriti na zahtev"
msgid "Respond to the FOI request"
-msgstr "Odgovoriti na Zahtev za slobodan pristup informacijama"
+msgstr "Odgovoriti na zahtev po ZOSPIOJ"
msgid "Respond using the web"
msgstr "Odgovoriti preko web-a"
@@ -2046,10 +1992,10 @@ msgid "Response from a public authority"
msgstr "Odgovor od javne ustanove"
msgid "Response to '{{title}}'"
-msgstr ""
+msgstr "Odgovor na '{{title}}'"
msgid "Response to this request is <strong>delayed</strong>."
-msgstr "Odgovor na ovaj zahtev je <strong>odgođen</strong>."
+msgstr "Odgovor na ovaj zahtev je <strong>odložen</strong>."
msgid "Response to this request is <strong>long overdue</strong>."
msgstr "Odgovor na ovaj zahtev <strong>kasni</strong>."
@@ -2064,7 +2010,7 @@ msgid "Restrict to"
msgstr "Ograničiti na"
msgid "Results page {{page_number}}"
-msgstr "Rezultati na stranici {{page_number}}"
+msgstr "Stranica sa rezultatima br. {{page_number}}"
msgid "Save"
msgstr "Sačuvaj"
@@ -2073,43 +2019,40 @@ msgid "Search"
msgstr "Pretraži"
msgid "Search Freedom of Information requests, public authorities and users"
-msgstr "Pretraži Zahteve za slobodan pristup informacijama, javne ustanove i korisnici"
+msgstr "Pretraži Zahteve za slobodan pristup informacijama od javnog značaja, javne ustanove i korisnika"
msgid "Search contributions by this person"
msgstr "Pretraži doprinose od strane ove osobe"
msgid "Search for words in:"
-msgstr ""
+msgstr "Traži reči u:"
msgid "Search in"
-msgstr "Pretraži u"
+msgstr "Traži u"
msgid "Search over<br/>\\n <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\\n <strong>{{number_of_authorities}} authorities</strong>"
-msgstr ""
-"Traži preko<br/>\n"
-" <strong>{{number_of_requests}} zahteva</strong> <span>i</span><br/>\n"
-" <strong>{{number_of_authorities}} ustanova</strong>"
+msgstr "Search over<br/>\\n <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\\n <strong>{{number_of_authorities}} authorities</strong>"
msgid "Search queries"
-msgstr ""
+msgstr "Upiti za pretragu"
msgid "Search results"
msgstr "Rezultati pretrage"
msgid "Search the site to find what you were looking for."
-msgstr "Pretražite web stranicu da pronađete što ste tražili."
+msgstr "Koristite pretragu sajta da pronađete ono što tražite"
msgid "Search within the {{count}} Freedom of Information requests to {{public_body_name}}"
msgid_plural "Search within the {{count}} Freedom of Information requests made to {{public_body_name}}"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Tražite među {{count}} zahtevom za slobodni pristup informacijama od javnog značaja za {{public_body_name}}"
+msgstr[1] "Tražite među {{count}} zahteva za slobodni pristup informacijama od javnog značaja za {{public_body_name}}"
+msgstr[2] "Tražite među {{count}} zahteva za slobodni pristup informacijama od javnog značaja za {{public_body_name}}"
msgid "Search your contributions"
-msgstr "Pretražite Vaše doprinose"
+msgstr "Tražite Vaše doprinose"
msgid "See bounce message"
-msgstr ""
+msgstr "Postavite poruku u slučaju odbijanja"
msgid "Select one to see more information about the authority."
msgstr "Odaberite jedan da biste videli više informacija o ustanovi."
@@ -2118,40 +2061,40 @@ msgid "Select the authority to write to"
msgstr "Odaberite ustanovu kojoj ćete pisati"
msgid "Send a followup"
-msgstr ""
+msgstr "Pošaljite reakciju"
msgid "Send a message to "
msgstr "Pošalji poruku za "
msgid "Send a public follow up message to {{person_or_body}}"
-msgstr ""
+msgstr "Pošaljite javnu reakciju za {{person_or_body}}"
msgid "Send a public reply to {{person_or_body}}"
-msgstr "Poslati javni odgovor za {{person_or_body}}"
+msgstr "Pošaljite javni odgovor za {{person_or_body}}"
msgid "Send follow up to '{{title}}'"
-msgstr ""
+msgstr "Pošalji reakciju na '{{title}}'"
msgid "Send message"
msgstr "Pošalji poruku"
msgid "Send message to "
-msgstr "Pošalji poruku "
+msgstr "Pošalji poruku za"
msgid "Send request"
msgstr "Pošalji zahtev"
msgid "Set your profile photo"
-msgstr "Podesiti sliku na Vašem profilu"
+msgstr "Podesite sliku na Vašem profilu"
msgid "Short name"
-msgstr ""
+msgstr "Kratko ime"
msgid "Short name is already taken"
-msgstr "Nadimak se već koristi"
+msgstr "Kratko ime je zauzeto"
msgid "Show most relevant results first"
-msgstr "Prikaži najreleveantnije rezultate "
+msgstr "Prikaži najrelevantnije rezultate na vrhu"
msgid "Show only..."
msgstr "Prikaži samo..."
@@ -2163,7 +2106,7 @@ msgid "Sign in"
msgstr "Prijavite se"
msgid "Sign in or make a new account"
-msgstr "Prijavite se ili napravite novi korisnički račun"
+msgstr "Prijavite se ili napravite novi korisnički profil"
msgid "Sign in or sign up"
msgstr "Prijavite se ili Registrujte se"
@@ -2181,37 +2124,37 @@ msgid "Simple search"
msgstr "Jednostavna pretraga"
msgid "Some notes have been added to your FOI request - "
-msgstr "Bilješke su dodate na Vaš Zahtev o slobodnom pristupu informacijama - "
+msgstr "Beleške su dodate na Vaš zahtev po ZOSPIOJ - "
msgid "Some of the information requested has been received"
-msgstr "Dio traženih informacija je dobijen"
+msgstr "Deo traženih informacija je primljen"
msgid "Some people who've made requests haven't let us know whether they were\\nsuccessful or not. We need <strong>your</strong> help &ndash;\\nchoose one of these requests, read it, and let everyone know whether or not the\\ninformation has been provided. Everyone'll be exceedingly grateful."
msgstr ""
"Neki od podnosioca zahteva nas nisu obavestili da li su njihovi zahtevi bili\n"
-"uspešni ili ne. Trebamo <strong>Vašu</strong> pomoć &ndash;\n"
-"odaberite jedan od ovih zahteva, pročitajte ga, i obavestite sve da li su\n"
+"uspešni ili ne. Potrebna nam je <strong>Vaša</strong> pomoć &ndash;\n"
+"odaberite jedan od ovih zahteva, pročitajte ga - i obavestite sve da li su\n"
"informacije dobijene ili ne. Svi će Vam biti veoma zahvalni."
msgid "Somebody added a note to your FOI request - "
-msgstr "Neko je dodao komentar na Vaš Zahtev za slobodan pristup informacijama."
+msgstr "Neko je dodao komentar na Vaš zahtev po ZOSPIOJ."
msgid "Someone has updated the status of your request"
-msgstr ""
+msgstr "Neko je promenio status Vašeg zahteva"
msgid "Someone, perhaps you, just tried to change their email address on\\n{{site_name}} from {{old_email}} to {{new_email}}."
msgstr ""
-"Neko je, možda ste to Vi, pokušao da promijeni svoju e-mail adresu na\n"
-"{{site_name}} sa {{old_email}} na {{new_email}}."
+"Neko je, možda ste to Vi, pokušao da promeni svoju registrovanu e-mail adresu na\n"
+"sistemu {{site_name}} sa {{old_email}} na {{new_email}}."
msgid "Sorry - you cannot respond to this request via {{site_name}}, because this is a copy of the request originally at {{link_to_original_request}}."
-msgstr ""
+msgstr "Izvinite - ne možete odogovoriti na ovaj zahtev pomoću sistema {{site_name}}, zato što je ovo kopija zahteva sa {{link_to_original_request}}."
msgid "Sorry, but only {{user_name}} is allowed to do that."
-msgstr "Žalimo, ali samo {{user_name}} može raditi to."
+msgstr "Žalimo, ali samo korisnik {{user_name}} može raditi to."
msgid "Sorry, there was a problem processing this page"
-msgstr "Žalimo, postoji problem u procesuiranju stranice"
+msgstr "Žalimo, došlo je do problema u obradi ove stranice"
msgid "Sorry, we couldn't find that page"
msgstr "Žalimo, nismo mogli pronaći tu stranicu"
@@ -2226,155 +2169,156 @@ msgid "Start your own blog"
msgstr "Započnite Vaš blog"
msgid "Stay up to date"
-msgstr ""
+msgstr "Budite stalno informisani"
msgid "Still awaiting an <strong>internal review</strong>"
-msgstr "I dalje čeka <strong>internal review</strong>"
+msgstr "I dalje čeka na <strong>urgenciju</strong>"
msgid "Subject"
-msgstr ""
+msgstr "Predmet"
msgid "Subject:"
-msgstr "Tema:"
+msgstr "Predmet:"
msgid "Submit"
-msgstr "Predaj"
+msgstr "Pošalji"
msgid "Submit status"
msgstr "Pošalji status"
msgid "Submit status and send message"
-msgstr ""
+msgstr "Upiši status i pošalji poruku"
msgid "Subscribe to blog"
msgstr "Pretplatiti se na blog"
msgid "Successful Freedom of Information requests"
-msgstr "Uspešni Zahtevi za slobodan pristup informacijama"
+msgstr "Uspešni Zahtevi za slobodan pristup informacijama od javnog značaja"
msgid "Successful."
msgstr "Uspešan."
msgid "Suggest how the requester can find the <strong>rest of the information</strong>."
-msgstr "Predložite kako ponosioc zahteva može pronaći <strong>ostatak informacije</strong>."
+msgstr "Predložite kako ponosilac zahteva može pronaći <strong>ostatak informacije</strong>."
msgid "Summary:"
msgstr "Sažetak:"
msgid "Table of statuses"
-msgstr "Pregled statusa"
+msgstr "Tabela statusa"
msgid "Table of varieties"
msgstr "Tabela vrsta"
msgid "Tags"
-msgstr ""
+msgstr "Privesci"
msgid "Tags (separated by a space):"
-msgstr ""
+msgstr "Privesci (razdvojeni razmakom):"
msgid "Tags:"
-msgstr "Označeni:"
+msgstr "Privesci:"
msgid "Technical details"
msgstr "Tehnički detalji"
msgid "Thank you for helping us keep the site tidy!"
-msgstr "Hvala što nam pomažete da održavamo ovu web stranicu urednom!"
+msgstr "Hvala što nam pomažete da održavamo ovaj sistem u urednom stanju!"
msgid "Thank you for making an annotation!"
-msgstr "Hvala što ste napravili napomenu!"
+msgstr "Hvala što ste upisali napomenu!"
msgid "Thank you for responding to this FOI request! Your response has been published below, and a link to your response has been emailed to "
-msgstr "Hvala na Vašem odgovoru na ovaj Zahtev za slobodan pristup informacijama! Vaš odgovor je objavljen ispod, i link na vaš odgovor je poslan putem e-maila za"
+msgstr "Hvala na Vašem odgovoru na ovaj Zahtev za slobodan pristup informacijama od javnog značaja! Vaš odgovor je objavljen ispod i link na Vaš odgovor je poslat putem e-mail poruke za"
msgid "Thank you for updating the status of the request '<a href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests below for you to classify."
-msgstr "Hvala na ažuriranju statusa zahteva '<a href=\"{{url}}\">{{info_request_title}}</a>'. Postoje drugi zahtevi ispod koje možete klasificirati."
+msgstr "Hvala na ažuriranju statusa zahteva '<a href=\"{{url}}\">{{info_request_title}}</a>'. Postoji još nekoliko zahteva ispod koje takođe možete klasifikovati."
msgid "Thank you for updating this request!"
-msgstr "Hvala na ažuriranju zahteva!"
+msgstr "Hvala na ažuriranju ovog zahteva!"
msgid "Thank you for updating your profile photo"
msgstr "Hvala što ste ažurirali sliku na Vašem profilu"
msgid "Thank you! We'll look into what happened and try and fix it up."
-msgstr ""
+msgstr "Hvala! Pogledaćemo šta se desilo i pokušati da to ispravimo."
msgid "Thanks for helping - your work will make it easier for everyone to find successful\\nresponses, and maybe even let us make league tables..."
msgstr ""
"Hvala na pomoći - Vaš rad će svima olakšati pronalaženje pozitivnih\n"
-"odgovora, i možda čak dozvoliti nama da pravimo rangliste..."
+"odgovora - i možda čak dozvoliti nama da pravimo rangliste institucija..."
msgid "Thanks very much - this will help others find useful stuff. We'll\\n also, if you need it, give advice on what to do next about your\\n requests."
msgstr ""
"Hvala - ovo će pomoći drugima da pronađu korisne stvari. Mi ćemo Vas\n"
-" takođe, ako vam zatreba, savetovati o tome šta da radite dalje sa Vašim\n"
-" zahtevima."
+"takođe, ako Vam zatreba, savetovati o tome šta da radite dalje sa Vašim\n"
+"zahtevima."
msgid "Thanks very much for helping keep everything <strong>neat and organised</strong>.\\n We'll also, if you need it, give you advice on what to do next about each of your\\n requests."
msgstr ""
"Hvala Vam što pomažete da sve bude<strong>čitko i organizovano</strong>.\n"
-" Mi ćemo Vas takođe, ako vam zatreba, posavetovati o tome šta da dalje radite sa svakim od Vaših\n"
-" zahteva."
+"Mi ćemo Vas takođe, ako Vam zatreba, posavetovati o tome šta da dalje radite sa svakim od Vaših\n"
+"zahteva."
msgid "That doesn't look like a valid email address. Please check you have typed it correctly."
-msgstr "E-mail adresa ne izgleda validna. Molimo provjerite da li ste je ukucali pravilno."
+msgstr "E-mail adresa ne izgleda ispravna. Molimo proverite da li ste je ispravno ukucali."
msgid "The <strong>review has finished</strong> and overall:"
-msgstr "Pregled <strong>je završen</strong> i sveukupno:"
+msgstr "Pregled <strong>je završen</strong> i sve u svemu:"
msgid "The Freedom of Information Act <strong>does not apply</strong> to"
-msgstr "Zakon o slobodnom pristupu informacijama <strong>se ne odnosi</strong> na"
+msgstr "Zakon o slobodnom pristupu informacijama od javnog značaja <strong>se ne odnosi</strong> na"
msgid "The accounts have been left as they previously were."
-msgstr "Korisnički računi nisu menjani"
+msgstr "Korisnički profili nisu menjani"
msgid "The authority do <strong>not have</strong> the information <small>(maybe they say who does)"
-msgstr "Ustanova <strong>ne posjeduje</strong> informacije <small>(možda mogu reći ko posjeduje)"
+msgstr "Ustanova <strong>ne poseduje</strong> informacije <small>(ali oni možda mogu reći ko ih poseduje)"
msgid "The authority only has a <strong>paper copy</strong> of the information."
-msgstr "Ustanova ima samo <strong>štampanu kopiju</strong> informacije."
+msgstr "Ustanova ima samo <strong>štampani oblik</strong> informacije."
msgid "The authority say that they <strong>need a postal\\n address</strong>, not just an email, for it to be a valid FOI request"
msgstr ""
-"Iz ustanove kažu da im <strong>treba poštanska\n"
-" adresa</strong>, ne samo e-mail, da bi Zahtev za slobodan pristup informacijama bio valjan"
+"Iz ustanove kažu da im <strong>je potrebna i poštanska\n"
+"adresa</strong>, ne samo e-mail, da bi Zahtev za slobodan \n"
+"pristup informacijama od javnog značaja bio valjan"
msgid "The authority would like to / has <strong>responded by post</strong> to this request."
-msgstr "Ustanova bi željela / je <strong>odgovorila poštom</strong> na ovaj zahtev."
+msgstr "Ustanova bi htela da odgovori / je odgovorila <strong>poštom</strong> na ovaj zahtev."
msgid "The classification of requests (e.g. to say whether they were successful or not) is done manually by users and administrators of the site, which means that they are subject to error."
-msgstr ""
+msgstr "Klasifikaciju zahteva (npr. da li je uspešan ili ne) rade korisnici i administratori sistma, što znači da je podložna greškama"
msgid "The email that you, on behalf of {{public_body}}, sent to\\n{{user}} to reply to an {{law_used_short}}\\nrequest has not been delivered."
-msgstr ""
+msgstr "Poruka koju ste, u ime ustanove '{{public_body}}', poslali podnosiocu\\n'{{user}}' da odgovorite na zahtev vezan za {{law_used_short}}\\n nije isporučena."
msgid "The error bars shown are 95% confidence intervals for the hypothesized underlying proportion (i.e. that which you would obtain by making an infinite number of requests through this site to that authority). In other words, the population being sampled is all the current and future requests to the authority through this site, rather than, say, all requests that have been made to the public body by any means."
-msgstr ""
+msgstr "Prikazani histogrami grešaka su na bazi intervala poverenja od 95% c za pretpostavljenu proporciju (tj. onu koja bi se dobila za beskonačan broj poruka poslat toj ustanovi). Drugim rečima, uzorak koji se uzima su svi sadašnji i budući zahtevi ustanovi kroz ovaj sajt, a ne svi zahtevi koji su bili podneti bilo kojim metodom.."
msgid "The page doesn't exist. Things you can try now:"
-msgstr "Stranica ne postoji. Stvari koje možete probati sada:"
+msgstr "Stranica ne postoji. Stvari koje sada možete probati:"
msgid "The percentages are calculated with respect to the total number of requests, which includes invalid requests; this is a known problem that will be fixed in a later release."
-msgstr ""
+msgstr "Procenti su sračunati na bazi ukupnog broja zahteva, što uključuje i neispravne zahteve; ovo je poznat problem koji će biti ispravljen u budućim verzijama."
msgid "The public authority does not have the information requested"
-msgstr "Javna ustanova ne posjeduje tražene informacije"
+msgstr "Ova javna ustanova ne poseduje tražene informacije"
msgid "The public authority would like part of the request explained"
-msgstr "Javna ustanova bi htjela objašnjenje dijela zahteva"
+msgstr "Ova javna ustanova bi htela razjašnjenje dela zahteva"
msgid "The public authority would like to / has responded by post"
-msgstr "Javna ustanova bi htjela odgovoriti ili je već odgovorila poštom"
+msgstr "Ova javna ustanova bi htela odgovoriti / već je odgovorila poštom"
msgid "The request has been <strong>refused</strong>"
msgstr "Zahtev je <strong>odbijen</strong>"
msgid "The request has been updated since you originally loaded this page. Please check for any new incoming messages below, and try again."
-msgstr "Zahtev je ažuriran otkako ste prvi put učitali ovu stranicu. Molimo provjerite nove dolazeće poruke ispod i pokušajte ponovo. "
+msgstr "Zahtev je ažuriran otkako ste prvi put učitali ovu stranicu. Molimo proverite nove primljene poruke ispod i pokušajte ponovo. "
msgid "The request is <strong>waiting for clarification</strong>."
-msgstr "Zahtev <strong>čeka na objašnjenje</strong>."
+msgstr "Zahtev <strong>čeka na razjašnjenje</strong>."
msgid "The request was <strong>partially successful</strong>."
msgstr "Zahtev je <strong>delimično uspešan</strong>."
@@ -2391,17 +2335,17 @@ msgstr "Zahtev je odbijen od strane javne ustanove"
msgid "The request you have tried to view has been removed. There are\\nvarious reasons why we might have done this, sorry we can't be more specific here. Please <a\\n href=\"{{url}}\">contact us</a> if you have any questions."
msgstr ""
"Zahtev koji ste pokušali pregledati je uklonjen. Postoje\n"
-"razni razlozi radi kojih smo to mogli uraditi, žao nam je ali ne možemo biti precizniji po tom pitanju. Molimo <a\n"
+"razni razlozi zbog kojih smo to mogli uraditi - žao nam je, ali ne možemo biti precizniji po tom pitanju. Molimo <a\n"
" href=\"{{url}}\">kontaktirajte nas</a> ako imate pitanja."
msgid "The requester has abandoned this request for some reason"
-msgstr "Podnosioc je odustao od ovog zahteva iz nekog razloga"
+msgstr "Podnosilac je odustao od ovog zahteva iz nekog razloga"
msgid "The response to your request has been <strong>delayed</strong>. You can say that,\\n by law, the authority should normally have responded\\n <strong>promptly</strong> and"
msgstr ""
-"Odgovor na Vaš zahtev je <strong>odgođen</strong>. Možete reći da je, \n"
+"Odgovor na Vaš zahtev <strong>kasni</strong>. Možete reći da je, \n"
" po zakonu, ustanova trebala odgovoriti\n"
-" <strong>brzo</strong> i"
+" <strong>bez odlaganja</strong> i"
msgid "The response to your request is <strong>long overdue</strong>. You can say that, by\\n law, under all circumstances, the authority should have responded\\n by now"
msgstr ""
@@ -2410,40 +2354,40 @@ msgstr ""
" do sada"
msgid "The search index is currently offline, so we can't show the Freedom of Information requests that have been made to this authority."
-msgstr "Indeks za pretragu je trenutno isključen, ne možemo prikazati Zahteve za slobodan pristup informacijama podnesene ovoj ustanovi."
+msgstr "Indeks za pretragu je trenutno isključen, tako da ne možemo prikazati Zahteve za slobodan pristup informacijama od javnog značaja podnete ovoj ustanovi."
msgid "The search index is currently offline, so we can't show the Freedom of Information requests this person has made."
-msgstr "Indeks za pretragu je trenutno isključen, radi toga ne možemo prikazati Zahteve za slobodan pristup informacijama koje je ova osoba napravila."
+msgstr "Indeks za pretragu je trenutno isključen, pa zbog toga ne možemo prikazati Zahteve za slobodan pristup informacijama od javnog značaja koje je ova osoba podnela."
msgid "The {{site_name}} team."
-msgstr ""
+msgstr "Tim sistema {{site_name}}."
msgid "Then you can cancel the alert."
-msgstr "Tada možete poništiti upozorenje."
+msgstr "Tada možete opozvati upozorenje."
msgid "Then you can cancel the alerts."
-msgstr "Tada možete poništiti upozorenja."
+msgstr "Tada možete opozvati upozorenja."
msgid "Then you can change your email address used on {{site_name}}"
msgstr "Tada možete promeniti Vašu e-mail adresu korištenu na {{site_name}}"
msgid "Then you can change your password on {{site_name}}"
-msgstr "Tada možete promeniti Vaš password na {{site_name}}"
+msgstr "Tada možete promeniti Vašu lozinku na {{site_name}}"
msgid "Then you can classify the FOI response you have got from "
-msgstr "Tada možete klasificirati ZOSPI odgovor koji ste dobili od"
+msgstr "Tada možete klasifikovati ZOSPIOJ odgovor koji ste dobili od"
msgid "Then you can download a zip file of {{info_request_title}}."
-msgstr "Tada možete preuzeti zipovano {{info_request_title}}."
+msgstr "Tada možete preuzeti {{info_request_title}} u formi zip arhive."
msgid "Then you can log into the administrative interface"
-msgstr ""
+msgstr "Onda se možete prijaviti na administrativnu aplikaciju"
msgid "Then you can play the request categorisation game."
msgstr "Tada možete igrati igru kategorizacije zatjeva."
msgid "Then you can report the request '{{title}}'"
-msgstr ""
+msgstr "Onda možete prijaviti zahtev '{{title}}'"
msgid "Then you can send a message to "
msgstr "Tada možete poslati poruku za "
@@ -2455,85 +2399,85 @@ msgid "Then you can update the status of your request to "
msgstr "Tada možete ažurirati status vašeg zahteva prema"
msgid "Then you can upload an FOI response. "
-msgstr "Tada možete postaviti odgovor na Zahtev o slobodnom pristupu informacijama."
+msgstr "Tada možete učitati odgovor na zahtev po ZOSPIOJ."
msgid "Then you can write follow up message to "
-msgstr "Tada možete napisati prateću poruku za "
+msgstr "Tada možete napisati reakciju za "
msgid "Then you can write your reply to "
msgstr "Tada možete napisati Vaš odgovor za"
msgid "Then you will be following all new FOI requests."
-msgstr ""
+msgstr "Onda ćete pratiti sve nove zahteve za slobodan pristup informacijama od javnog značaja pomoću e-mail biltena."
msgid "Then you will be notified whenever '{{user_name}}' requests something or gets a response."
-msgstr ""
+msgstr "Onda ćete biti obavešteni e-mail biltenom kad god korisnik '{{user_name}}' podnese zahtev ili dobije odgovor."
msgid "Then you will be notified whenever a new request or response matches your search."
-msgstr ""
+msgstr "Onda ćete biti obavešteni email biltenom kad god novi zahtev ili odgovor bude odgovarao uslovima vašeg upita."
msgid "Then you will be notified whenever an FOI request succeeds."
-msgstr ""
+msgstr "Onda ćete biti obavešteni e-mail biltenom kad god neki zahtev uspe."
msgid "Then you will be notified whenever someone requests something or gets a response from '{{public_body_name}}'."
-msgstr ""
+msgstr "Onda ćete biti obavešteni e-mail biltenom kad god neko podnese zahtev ili dobije odgovor od ustanove '{{public_body_name}}'."
msgid "Then you will be updated whenever the request '{{request_title}}' is updated."
-msgstr ""
+msgstr "Onda ćete biti obavešteni e-mail biltenom kada god zahtev '{{request_title}}' bude promenjen."
msgid "Then you'll be allowed to send FOI requests."
-msgstr "Tada će Vam biti dozvoljeno da šaljete Zahteve za slobodan pristup informacijama "
+msgstr "Tada će Vam biti dozvoljeno da šaljete Zahteve za slobodan pristup informacijama od javnog značaja"
msgid "Then your FOI request to {{public_body_name}} will be sent."
-msgstr "Tada će Vaši Zahtevi za slobodan pristup informacijama za {{public_body_name}} biti poslani."
+msgstr "Tada će Vaš zahtev za pristup informacijama od javnog značaja za {{public_body_name}} biti poslati."
msgid "Then your annotation to {{info_request_title}} will be posted."
-msgstr "Tada će Vaša napomena za {{info_request_title}} biti postavljena."
+msgstr "Tada će Vaša napomena za {{info_request_title}} biti objavljena."
msgid "There are {{count}} new annotations on your {{info_request}} request. Follow this link to see what they wrote."
msgstr "Postoje {{count}} nove napomene na Vašem {{info_request}} zahtevu. Pratite ovaj link da pogledate šta je napisano."
msgid "There is <strong>more than one person</strong> who uses this site and has this name.\\n One of them is shown below, you may mean a different one:"
-msgstr ""
+msgstr "Postoji <strong>više od jedne osobe</strong> koja koristi ovaj sistem i ima ovo ime.\\n Jedna od njih je prikazana ispod, možda ste mislili na neku drugu:"
msgid "There is a limit on the number of requests you can make in a day, because we don’t want public authorities to be bombarded with large numbers of inappropriate requests. If you feel you have a good reason to ask for the limit to be lifted in your case, please <a href='{{help_contact_path}}'>get in touch</a>."
-msgstr ""
+msgstr "Postoji ograničenje broja zahteva koje možete podneti u jednom danu, pošto želimo da izbegnemo da javne ustanove budu bombardovane velikim brojem neprikladnih zahteva. Ako mislite da u Vašem slučaju ovo ograničenje treba ukloniti, molimo <a href='{{help_contact_path}}'>da nam se javite</a>."
msgid "There is {{count}} person following this request"
msgid_plural "There are {{count}} people following this request"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Trenutno {{count}} korisnik prati ovaj zahtev"
+msgstr[1] "Trenutno {{count}} korisnika prati ovaj zahtev"
+msgstr[2] "Trenutno {{count}} korisnika prati ovaj zahtev"
msgid "There was a <strong>delivery error</strong> or similar, which needs fixing by the {{site_name}} team."
-msgstr "Došlo je do <strong>greške u isporuci</strong> ili nečega sličnog što treba popravku od strane {{site_name}} tima."
+msgstr "Došlo je do <strong>greške u isporuci</strong> ili nečega sličnog što zahteva popravku od strane tima {{site_name}}."
msgid "There was an error with the words you entered, please try again."
-msgstr "Postoji greška u rečima koje ste ukucali, molimo pokušajte ponovo."
+msgstr "Postoji greška u rečima koje ste uneli, molimo pokušajte ponovo."
msgid "There was no data calculated for this graph yet."
-msgstr ""
+msgstr "Za ovaj graf još nisu računati podaci"
msgid "There were no requests matching your query."
-msgstr "Nema zahteva koji odgovaraju Vašoj pretrazi."
+msgstr "Nema zahteva koji odgovaraju Vašem upitu."
msgid "There were no results matching your query."
-msgstr ""
+msgstr "Nema rezultata koji odgovaraju Vašem upitu."
msgid "These graphs were partly inspired by <a href=\"http://mark.goodge.co.uk/2011/08/number-crunching-whatdotheyknow/\">some statistics that Mark Goodge produced for WhatDoTheyKnow</a>, so thanks are due to him."
-msgstr ""
+msgstr "Ovi grafici su delimično inspirisani <a href=\"http://mark.goodge.co.uk/2011/08/number-crunching-whatdotheyknow/\">statistikama koje je Mark Goodge napravio za britanski sajt WhatDoTheyKnow</a>, tako da smo zahvalni njemu za ovo."
msgid "They are going to reply <strong>by post</strong>"
-msgstr "Odgovoriti će <strong>poštom</strong>"
+msgstr "Oni će odgovoriti <strong>poštom</strong>"
msgid "They do <strong>not have</strong> the information <small>(maybe they say who does)</small>"
-msgstr "Oni <strong>ne posjeduju</strong> informaciju <small>(možda mogu reći ko je posjeduje)</small>"
+msgstr "Oni <strong>ne poseduju</strong> informaciju <small>(ali možda oni mogu reći ko je poseduje)</small>"
msgid "They have been given the following explanation:"
msgstr "Dato im je slijedeće objašnjenje:"
msgid "They have not replied to your {{law_used_short}} request {{title}} promptly, as normally required by law"
-msgstr "Nisu odgovorili na Vaš {{law_used_short}} zahtev {{title}} u kratkom vremenskom roku, kao što je predviđeno zakonom"
+msgstr "Oni nisu odgovorili na Vaš {{law_used_short}} zahtev {{title}} u kratkom vremenskom roku, kao što je predviđeno zakonom"
msgid "They have not replied to your {{law_used_short}} request {{title}}, \\nas required by law"
msgstr ""
@@ -2541,25 +2485,25 @@ msgstr ""
"kao što je predviđeno zakonom"
msgid "Things to do with this request"
-msgstr "Stvari za uraditi sa ovim zahtevom"
+msgstr "Šta se može uraditi sa ovim zahtevom"
msgid "Things you're following"
-msgstr ""
+msgstr "Stvari koje pratite"
msgid "This authority no longer exists, so you cannot make a request to it."
-msgstr "Ova ustanova više ne postoji, zato joj nije moguće podnijeti zahtev. "
+msgstr "Ova ustanova više ne postoji, zato joj nije moguće podneti zahtev. "
msgid "This covers a very wide spectrum of information about the state of\\n the <strong>natural and built environment</strong>, such as:"
-msgstr ""
+msgstr "Ovo pokriva veoma širok spektar informacija u vezi stanja\\n <strong>prirodne i urbane okoline</strong>, kao npr.:"
msgid "This external request has been hidden"
-msgstr ""
+msgstr "Ovaj spoljni zahtev je sakriven"
msgid "This is a plain-text version of the Freedom of Information request \"{{request_title}}\". The latest, full version is available online at {{full_url}}"
-msgstr ""
+msgstr "Ovo je \"plain-text\" verzija Zahteva za slobodan pristup informacijama od javnog značaja \"{{request_title}}\". Najnovija, puna verzija je raspoloživa online na {{full_url}}"
msgid "This is an HTML version of an attachment to the Freedom of Information request"
-msgstr "Ovo je HTML verzija priloga uz Zahtev za slobodnom pristupu informacijama"
+msgstr "Ovo je HTML verzija priloga uz Zahtev za slobodan pristup informacijama od javnog značaja"
msgid "This is because {{title}} is an old request that has been\\nmarked to no longer receive responses."
msgstr ""
@@ -2567,121 +2511,119 @@ msgstr ""
"označen da više ne prima odgovore."
msgid "This is the first version."
-msgstr ""
+msgstr "Ovo je prva verzija."
msgid "This is your own request, so you will be automatically emailed when new responses arrive."
-msgstr "Ovo je Vaš zahtev, biti ćete automatski obavešteni e-mailom kada novi odgovori budu stizali."
+msgstr "Ovo je Vaš zahtev, bićete automatski obaveštavani e-mailom kada novi odgovori budu stizali."
msgid "This message has been hidden."
-msgstr ""
+msgstr "Ova poruka je sakrivena."
msgid "This message has been hidden. There are various reasons why we might have done this, sorry we can't be more specific here."
-msgstr ""
+msgstr "Ova poruka je sakrivena. Postoje razni razlozi zašto smo ovo mogli uraditi, žao nam je, ali ne možemo biti precizniji po tom pitanju."
msgid "This message has prominence 'hidden'. You can only see it because you are logged in as a super user."
-msgstr ""
+msgstr "Ova poruka ima važnost \"sakrivena\". Možete je videti zato što ste prijavljeni kao administrator."
msgid "This message has prominence 'hidden'. {{reason}} You can only see it because you are logged in as a super user."
-msgstr ""
+msgstr "Ova poruka ima važnost \"sakrivena\". {{reason}} Možete je videti zato što ste prijavljeni kao administrator."
msgid "This message is hidden, so that only you, the requester, can see it. Please <a href=\"{{url}}\">contact us</a> if you are not sure why."
-msgstr ""
+msgstr "Ova poruka je sakrivena tako da je samo vi, podnosilac, možete videti. Molimo <a href=\"{{url}}\">kontaktirajte nas </a> ako niste sigurni zašto."
msgid "This message is hidden, so that only you, the requester, can see it. {{reason}}"
-msgstr ""
+msgstr "Ova poruka je sakrivena tako da je samo vi kao podnosilac možete videti. {{reason}}"
msgid "This page of public body statistics is currently experimental, so there are some caveats that should be borne in mind:"
-msgstr ""
+msgstr "Ova stranica sa statistikama javnih institucija je trenutno eksperimentalna, tako da treba da imate u vidu sledeće:"
msgid "This particular request is finished:"
msgstr "Ovaj zahtev je završen:"
msgid "This person has made no Freedom of Information requests using this site."
-msgstr "Ova osoba nije podnela nijedan Zahtev za slobodan pristup informacijama koristeći ovu web stranicu."
+msgstr "Ova osoba nije podnela nijedan Zahtev za slobodan pristup informacijama od javnog značaja koristeći ovaj sistem."
msgid "This person's annotations"
msgstr "Napomene ove osobe"
msgid "This person's {{count}} Freedom of Information request"
msgid_plural "This person's {{count}} Freedom of Information requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{{count}} zahtev ovog korisnika"
+msgstr[1] "{{count}} zahteva ovog korisnika"
+msgstr[2] "{{count}} zahteva ovog korisnika"
msgid "This person's {{count}} annotation"
msgid_plural "This person's {{count}} annotations"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{{count}} komentar ovog korisnika"
+msgstr[1] "{{count}} komentara ovog korisnika"
+msgstr[2] "{{count}} komentara ovog korisnika"
msgid "This request <strong>requires administrator attention</strong>"
-msgstr "Ovaj zahtev <strong>treba provjeru administratora</strong>"
+msgstr "Ovaj zahtev <strong>treba da pregleda administrator</strong>"
msgid "This request has already been reported for administrator attention"
-msgstr ""
+msgstr "Ovaj zahtev je već prijavljen administratorima"
msgid "This request has an <strong>unknown status</strong>."
msgstr "Ovaj zahtev ima <strong>nepoznat status</strong>."
msgid "This request has been <strong>hidden</strong> from the site, because an administrator considers it not to be an FOI request"
-msgstr ""
+msgstr "Ovaj zahtev je <strong>sakriven</strong> od javnosti, zato što administratori ne smatraju da je u skladu sa Zakonom o slobodnom pristupu informacijama od javnog značaja."
msgid "This request has been <strong>hidden</strong> from the site, because an administrator considers it vexatious"
-msgstr ""
+msgstr "Ovaj zahtev je <strong>sakriven</strong> od javnosti, zato što administratori smatraju da je zloupotreba prava na slobodan pristup informacijama od javnog značaja."
msgid "This request has been <strong>reported</strong> as needing administrator attention (perhaps because it is vexatious, or a request for personal information)"
-msgstr ""
+msgstr "Ovaj zahtev je <strong>prijavljen</strong> administratorima (možda zato što izgleda kao zloupotreba prava, ili zahtev za izdavanje ličnih podataka)"
msgid "This request has been <strong>withdrawn</strong> by the person who made it.\\n There may be an explanation in the correspondence below."
-msgstr ""
-"Ovaj zahtev je <strong>povučen</strong> od strane osobe koja ga je napravila. \n"
-" <span class=\"whitespace other\" title=\"Tab\">»</span> Obijašnjenje može biti u dopisima ispod."
+msgstr "Ovaj zahtev je <strong>povučen</strong> od strane osobe koja ga je napravila.\\n Možda prepiska prikazana ispod sadrži objašnjenje."
msgid "This request has been marked for review by the site administrators, who have not hidden it at this time. If you believe it should be hidden, please <a href=\"{{url}}\">contact us</a>."
-msgstr ""
+msgstr "Ovaj zahtev je obeležen za pregled od strane administratora, koji ga za sada nisu sakrili. Ako verujete da zahtev treba da bude sakriven, molimo <a href=\"{{url}}\">kontaktirajte nas</a>."
msgid "This request has been reported for administrator attention"
-msgstr ""
+msgstr "Ovaj zahtev je prijavljen administratorima"
msgid "This request has been set by an administrator to \"allow new responses from nobody\""
-msgstr ""
+msgstr "Ovaj zahtev je poslao jedan od administratora da \"ne dozvoli nove odgovore ni od koga\""
msgid "This request has had an unusual response, and <strong>requires attention</strong> from the {{site_name}} team."
-msgstr "Ovaj zahtev je dobio neobičan odgovor, i <strong>treba pregled</strong> od strane {{site_name}} tima."
+msgstr "Ovaj zahtev je dobio neobičan odgovor i <strong>potrebno je da ga vidi</strong> tim {{site_name}}."
msgid "This request has prominence 'hidden'. You can only see it because you are logged\\n in as a super user."
msgstr ""
"Ovaj zahtev je inače skriven. Možete ga videti jer ste prijavljeni \n"
-" kao super korisnik."
+" kao administrator."
msgid "This request is hidden, so that only you the requester can see it. Please\\n <a href=\"{{url}}\">contact us</a> if you are not sure why."
msgstr ""
-"Ovaj zahtev je skriven tako da ga samo Vi podnosioc možete videti. Molimo\n"
+"Ovaj zahtev je skriven tako da ga samo Vi podnosilac možete videti. Molimo\n"
" <a href=\"{{url}}\">kontaktirajte nas</a> ako niste sigurni zašto."
msgid "This request is still in progress:"
msgstr "Ovaj zahtev je još u toku:"
msgid "This request requires administrator attention"
-msgstr ""
+msgstr "Ovaj zahtev moraju da pogledaju administratori"
msgid "This request was not made via {{site_name}}"
-msgstr ""
+msgstr "Ovaj zahtev nije podnet pomoću sistema {{site_name}}"
msgid "This table shows the technical details of the internal events that happened\\nto this request on {{site_name}}. This could be used to generate information about\\nthe speed with which authorities respond to requests, the number of requests\\nwhich require a postal response and much more."
-msgstr ""
+msgstr "Ova tabela pokazuje tehničke detalje internih akcija koje su se desile\\nu vezi ovog zahteva na sistemu {{site_name}}. Ovo se može koristiti za pripremu podataka u vezi\\nbrzine kojom ustanove odgovaraju na zahteve, broja zahteva\\nkoji zahtevaju poštanski odgovor - i mnogo drugih namena."
msgid "This user has been banned from {{site_name}} "
msgstr "Ovaj korisnik je isključen sa {{site_name}} "
msgid "This was not possible because there is already an account using \\nthe email address {{email}}."
-msgstr "To nije bilo moguće jer već postoji račun koji koristi ovu e-mail adresu {{email}}."
+msgstr "To nije bilo moguće jer već postoji račun koji koristi e-mail adresu {{email}}."
msgid "To cancel these alerts"
-msgstr "Da biste poništili ova upozorenja"
+msgstr "Da biste opozvali ova upozorenja"
msgid "To cancel this alert"
-msgstr "Da biste poništili ovo upozorenje"
+msgstr "Da biste opozvali ovo upozorenje"
msgid "To carry on, you need to sign in or make an account. Unfortunately, there\\nwas a technical problem trying to do this."
msgstr ""
@@ -2689,13 +2631,13 @@ msgstr ""
"tehničke prirode se pojavio pri pokušaju navedenog."
msgid "To change your email address used on {{site_name}}"
-msgstr "Da biste promenili Vašu e-mail adresu korištenu na {{site_name}}"
+msgstr "Da biste promenili Vašu e-mail adresu korišćenu na {{site_name}}"
msgid "To classify the response to this FOI request"
-msgstr "Da biste klasificirali odgovor na ovaj Zahtev za slobodan pristup informacijama"
+msgstr "Da biste klasifikovali odgovor na ovaj Zahtev za slobodan pristup informacijama od javnog značaja"
msgid "To do that please send a private email to "
-msgstr "Da biste to uradili molimo pošaljite privatni e-mail "
+msgstr "Da biste to uradili molimo pošaljite privatni e-mail za"
msgid "To do this, first click on the link below."
msgstr "Da biste ovo uradili, prvo kliknite na link ispod."
@@ -2704,31 +2646,31 @@ msgid "To download the zip file"
msgstr "Da biste preuzeli zip fajl"
msgid "To follow all successful requests"
-msgstr ""
+msgstr "Da pratite sve uspešne zahteve pomoću e-mail biltena"
msgid "To follow new requests"
-msgstr ""
+msgstr "Da pratite nove zahteve"
msgid "To follow requests and responses matching your search"
-msgstr "Da biste pratili zahteve i odgovore koji se podudaraju sa Vašom pretragom"
+msgstr "Da biste pratili zahteve i odgovore koji su pronađeni na bazi Vašeg upita"
msgid "To follow requests by '{{user_name}}'"
-msgstr ""
+msgstr "Da pratite sve zahteve podnete od strane korisnika '{{user_name}}' pomoću e-mail biltena"
msgid "To follow requests made using {{site_name}} to the public authority '{{public_body_name}}'"
-msgstr ""
+msgstr "Da pratite sve zahteve podnete za ustanovu '{{public_body_name}}' kroz sistem {{site_name}} pomoću e-mail biltena"
msgid "To follow the request '{{request_title}}'"
-msgstr ""
+msgstr "Da pratite zahtev '{{request_title}}' pomoću e-mail biltena"
msgid "To help us keep the site tidy, someone else has updated the status of the \\n{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
-msgstr ""
+msgstr "Da nam pomogne da održavamo podatke urednim, neko drugi je ažurirao status\\nzahteva vezanog za {{law_used_full}} pod naslovom {{title}} koji ste Vi podneli ustanovi {{public_body}}, na \"{{display_status}}\" Ako se ne slažete sa njihovom kategorizacijom, molimo Vas da sami ažurirate status onako kako mislite da je ispravnije."
msgid "To let everyone know, follow this link and then select the appropriate box."
-msgstr ""
+msgstr "Da svima objavite, molimo pratite ovaj link i onda odaberite odgovarajuće polje."
msgid "To log into the administrative interface"
-msgstr ""
+msgstr "Da se prijavite na administrativnu aplikaciju"
msgid "To play the request categorisation game"
msgstr "Da biste igrali igru kategorizacije zahteva"
@@ -2740,28 +2682,28 @@ msgid "To reply to "
msgstr "Da biste odgovorili "
msgid "To report this request"
-msgstr ""
+msgstr "Da biste prijavili ovaj zahtev"
msgid "To send a follow up message to "
-msgstr "Da biste poslali prateću poruku za "
+msgstr "Da biste poslali reakciju za "
msgid "To send a message to "
msgstr "Da biste poslali poruku za "
msgid "To send your FOI request"
-msgstr "Da biste poslali Vaš Zahtev za slobodan pristup informacijama."
+msgstr "Da biste poslali Vaš Zahtev za slobodan pristup informacijama od javnog značaja"
msgid "To update the status of this FOI request"
-msgstr "Da biste ažurirali status Vašeg Zahteva za slobodan pristup informacijama."
+msgstr "Da biste ažurirali status Vašeg Zahteva za slobodan pristup informacijama od javnog značaja"
msgid "To upload a response, you must be logged in using an email address from "
-msgstr "Da biste postavili odgovor, morate biti prijavljeni koristeći pritom e-mail adresu sa "
+msgstr "Da biste učitali odgovor, morate biti prijavljeni koristeći e-mail adresu sa "
msgid "To use the advanced search, combine phrases and labels as described in the search tips below."
msgstr "Da biste koristili napredno pretraživanje, kombinujte fraze i oznake kao što je opisano u savetima za pretragu ispod."
msgid "To view the email address that we use to send FOI requests to {{public_body_name}}, please enter these words."
-msgstr "Da biste videli e-mail adresu koju koristimo za slanje Zahteva za slobodan pristup informacijama prema {{public_body_name}}, molimo unesite ove reči."
+msgstr "Da biste videli e-mail adresu koju koristimo za slanje Zahteva za slobodan pristup informacijama od javnog značaja za {{public_body_name}}, molimo unesite ove reči."
msgid "To view the response, click on the link below."
msgstr "Da biste videli odgovor, kliknite na link ispod."
@@ -2776,72 +2718,72 @@ msgid "Today"
msgstr "Danas"
msgid "Too many requests"
-msgstr ""
+msgstr "Previše zahteva"
msgid "Top search results:"
msgstr "Glavni rezultati pretrage"
msgid "Track thing"
-msgstr ""
+msgstr "Pratite stvar"
msgid "Track this person"
msgstr "Prati ovu osobu"
msgid "Track this search"
-msgstr "Pratite ovu pretragu"
+msgstr "Prati ovu pretragu"
msgid "TrackThing|Track medium"
-msgstr ""
+msgstr "TrackThing|Medijum za praćenje"
msgid "TrackThing|Track query"
-msgstr ""
+msgstr "TrackThing|Upit za praćenje"
msgid "TrackThing|Track type"
-msgstr ""
+msgstr "TrackThing|Tip praćenja"
msgid "Turn off email alerts"
-msgstr ""
+msgstr "Isključi e-mail biltene"
msgid "Tweet this request"
-msgstr "Tweetuj ovaj zahtev"
+msgstr "Tvituj ovaj zahtev"
msgid "Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show things that happened in the first two weeks of January."
-msgstr "Upišite <strong><code>01/01/2008..14/01/2008</code></strong> da prikažete samo ono što se dešavalo u prve dve nedelje januara."
+msgstr "Upišite <strong><code>01/01/2008..14/01/2008</code></strong> da se prikaže samo ono što se dešavalo u prve dve nedelje januara."
msgid "URL name can't be blank"
-msgstr "Ime URL-a ne može ostati prazno "
+msgstr "URL ime ne može ostati prazno "
msgid "Unable to change email address on {{site_name}}"
-msgstr "Nemoguće promeniti e-mail adresu na {{site_name}}"
+msgstr "Nemoguće promeniti e-mail adresu na {{site_name}}"
msgid "Unable to send a reply to {{username}}"
-msgstr "Ne možemo poslati poruku za {{username}}"
+msgstr "Ne možemo poslati odgovor za {{username}}"
msgid "Unable to send follow up message to {{username}}"
-msgstr "Ne možemo poslati popratnu pokuku za {{username}}"
+msgstr "Ne možemo poslati reakciju za {{username}}"
msgid "Unexpected search result type"
-msgstr ""
+msgstr "Neočekivani tip rezultata pretrage"
msgid "Unexpected search result type "
-msgstr ""
+msgstr "Neočekivani tip rezultata pretrage"
msgid "Unfortunately we don't know the FOI\\nemail address for that authority, so we can't validate this.\\nPlease <a href=\"{{url}}\">contact us</a> to sort it out."
msgstr ""
-"Nažalost nismo u posjedu e-mail adrese za ZOSPI\n"
-"te ustanove, tako da nismo u mogućnosti validirati ovo.\n"
+"Nažalost nemamo e-mail adresu za ZOSPI\n"
+"te ustanove, tako da ne možemo da ovo validiramo.\n"
"Molimo <a href=\"{{url}}\">kontaktirajte nas</a> da to razjasnimo."
msgid "Unfortunately, we do not have a working {{info_request_law_used_full}}\\naddress for"
msgstr ""
-"Nažalost, ne posedujemo ispravnu {{info_request_law_used_full}}\n"
-"adresu za"
+"Nažalost, ne posedujemo ispravnu \n"
+"adresu za upite u vezi {{info_request_law_used_full}} za"
msgid "Unknown"
msgstr "Nepoznat"
msgid "Unsubscribe"
-msgstr ""
+msgstr "Otkaži praćenje"
msgid "Unusual response."
msgstr "Neobičan odgovor."
@@ -2853,150 +2795,142 @@ msgid "Update the status of your request to "
msgstr "Ažurirajte status Vašeg zahteva za "
msgid "Upload FOI response"
-msgstr ""
+msgstr "Učitajte odgovor"
msgid "Use OR (in capital letters) where you don't mind which word, e.g. <strong><code>commons OR lords</code></strong>"
-msgstr ""
+msgstr "Koristite OR (velika slova) gde vam je svejedno koja reč, e.g. <strong><code>commons OR lords</code></strong>"
msgid "Use quotes when you want to find an exact phrase, e.g. <strong><code>\"Liverpool City Council\"</code></strong>"
-msgstr "Koristite navodnike kada želite naći tačne fraze, npr. <strong><code>\"Ministarstvo Trgovine i Industrije\"</code></strong>"
+msgstr "Koristite navodnike kada želite naći ceo niz reči, npr. <strong><code>\"Ministarstvo Unutrašnjih Poslova\"</code></strong>"
msgid "User"
-msgstr ""
+msgstr "Korisnik"
msgid "User info request sent alert"
-msgstr ""
+msgstr "Zahtev za informacije o korisniku je poslao e-mail bilten"
msgid "User – {{name}}"
-msgstr ""
+msgstr "Korisnik – {{name}}"
msgid "UserInfoRequestSentAlert|Alert type"
-msgstr ""
+msgstr "UserInfoRequestSentAlert|Alert događaja"
msgid "User|About me"
-msgstr "Korisnik|O meni"
-
-msgid "User|Address"
-msgstr ""
+msgstr "User|O meni"
msgid "User|Admin level"
-msgstr "Korisnik|Administratorski nivo"
+msgstr "User|Administratorski nivo"
msgid "User|Ban text"
-msgstr "Korisnik|tekst isključenja"
-
-msgid "User|Dob"
-msgstr ""
+msgstr "User|Tekst isključenja"
msgid "User|Email"
-msgstr "Korisnik|E-mail"
+msgstr "User|E-mail"
msgid "User|Email bounce message"
-msgstr ""
+msgstr "User|Poruka odbijenog emaila"
msgid "User|Email bounced at"
-msgstr ""
+msgstr "User|Email odbijen u"
msgid "User|Email confirmed"
-msgstr "Korisnik | E-mail potvrđen"
+msgstr "User|E-mail potvrđen"
msgid "User|Hashed password"
-msgstr "Korisnik|Hashed password"
+msgstr "User|Hash lozinke"
msgid "User|Last daily track email"
-msgstr ""
+msgstr "User|Poslednji email dnevnog praćenja"
msgid "User|Locale"
-msgstr ""
+msgstr "User|Jezik"
msgid "User|Name"
-msgstr "Korisnik|Ime"
+msgstr "User|Ime"
msgid "User|No limit"
-msgstr ""
+msgstr "User|Bez limita"
msgid "User|Receive email alerts"
-msgstr ""
+msgstr "User|Primaj e-mail biltene"
msgid "User|Salt"
-msgstr ""
+msgstr "User|So lozinke"
msgid "User|Url name"
-msgstr "Korisnik|Url ime"
+msgstr "User|Url ime"
msgid "Version {{version}}"
-msgstr ""
+msgstr "Verzija {{version}}"
msgid "View FOI email address"
-msgstr "Videti adresu za Zahteve za slobodan pristup informacijama."
+msgstr "Videti email adresu za Zahteve za slobodan pristup informacijama od javnog značaja."
msgid "View FOI email address for '{{public_body_name}}'"
msgstr "Videti ZOSPI e-mail za '{{public_body_name}}'"
msgid "View FOI email address for {{public_body_name}}"
-msgstr "Pogledati ZOSPI e-mail adrese za {{public_body_name}}"
+msgstr "Pogledati ZOSPI e-mail adresu za {{public_body_name}}"
msgid "View Freedom of Information requests made by {{user_name}}:"
-msgstr "Pegledati Zahjeve za slobodan pristup informacijama napravljene od strane {{user_name}}:"
+msgstr "Videti Zahteve za slobodan pristup informacijama od javnog značaja napravljene od strane {{user_name}}:"
msgid "View and search requests"
msgstr "Pregledaj i pretraži zahteve"
msgid "View authorities"
-msgstr "Videti ustanove"
+msgstr "Pregledaj ustanove"
msgid "View email"
-msgstr "Pogledati e-mail"
+msgstr "Prikaži e-mail"
msgid "View requests"
-msgstr "Videti zahteve"
+msgstr "Pregled zahteva"
msgid "Waiting clarification."
-msgstr "Čekamo na objašnjenje."
+msgstr "Čeka na razjašnjenje."
msgid "Waiting for an <strong>internal review</strong> by {{public_body_link}} of their handling of this request."
-msgstr ""
+msgstr "Čeka na <strong>urgenciju </strong> od strane {{public_body_link}} u vezi njihove obrade ovog zahteva."
msgid "Waiting for the public authority to complete an internal review of their handling of the request"
-msgstr ""
+msgstr "Čeka se na javnu ustanovu da završi urgenciju u vezi obrade ovog zahteva"
msgid "Waiting for the public authority to reply"
-msgstr "Čekamo na odgovor javne ustanove"
+msgstr "Čeka na odgovor javne ustanove"
msgid "Was the response you got to your FOI request any good?"
-msgstr "Da li je odgovor koji ste dobili na Vaš Zahtev o slobodnom pristupu informacijama bio od ikakve koristi?"
+msgstr "Da li je odgovor koji ste dobili na Vaš Zahtev o slobodnom pristupu informacijama od javnog značaja bio od ikakve koristi?"
msgid "We consider it is not a valid FOI request, and have therefore hidden it from other users."
-msgstr ""
+msgstr "Smatramo da ovo nije ispravan zahtev pa smo ga zbog toga sakrili od ostalih korisnika."
msgid "We consider it to be vexatious, and have therefore hidden it from other users."
-msgstr ""
+msgstr "Smatramo da je ovaj zahtev zloupotreba prava pa smo ga zbog toga sakrili od ostalih korisnika."
msgid "We do not have a working request email address for this authority."
-msgstr "Ne posedujemo ispravnu e-mail adresu za zahteve ove ustanove."
+msgstr "Ne posedujemo ispravnu e-mail adresu za zahteve za ovu ustanovu."
msgid "We do not have a working {{law_used_full}} address for {{public_body_name}}."
-msgstr "Nemamo ispravnu {{law_used_full}} adresu za {{public_body_name}}."
+msgstr "Nemamo ispravnu adresu za {{public_body_name}} za upite vezane za {{law_used_full}}."
msgid "We don't know whether the most recent response to this request contains\\n information or not\\n &ndash;\\n\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
-msgstr ""
-"Ne znamo da li najnoviji odgovor na ovaj zahtev sadrži\n"
-" informacije ili ne\n"
-" &ndash;\n"
-"<span class=\"whitespace other\" title=\"Tab\">»</span>ako ste {{user_link}} molimo <a href=\"{{url}}\">prijavite se</a> i obavestite sve."
+msgstr "Ne znamo da li najnoviji odgovor na ovaj zahtev sadrži\\n ili ne tražene informacije\\n &ndash;\\n⇥ako ste vi {{user_link}} molimo <a href=\"{{url}}\">prijavite se na sistem</a> i obavestite sve o tome."
msgid "We will not reveal your email address to anybody unless you or\\n the law tell us to (<a href=\"{{url}}\">details</a>). "
msgstr ""
+"Nećemo otkriti Vašu email adresu nikome osim ako nam Vi ne odobrite\\n\n"
+"ili nas na to ne natera zakon (<a href=\"{{url}}\">više informacija</a>). "
msgid "We will not reveal your email address to anybody unless you\\nor the law tell us to."
msgstr ""
"Nećemo prikazati Vašu e-mail adresu nikome osim ako nam Vi\n"
-"ili zakon to budete zahtijevali."
+"ili zakon to ne budete tražili."
msgid "We will not reveal your email addresses to anybody unless you\\nor the law tell us to."
msgstr ""
"Nećemo prikazati Vašu e-mail adresu nikome osim ako nam Vi\n"
-"ili zakon to budete zahtijevali."
+"ili zakon to ne budete tražili."
msgid "We're waiting for"
msgstr "Čekamo da"
@@ -3006,41 +2940,37 @@ msgstr "Čekamo da neko pročita"
msgid "We've sent an email to your new email address. You'll need to click the link in\\nit before your email address will be changed."
msgstr ""
-"Poslali smo e-mail na Vašu novu e-mail adresu. Morati ćete kliknuti na link u\n"
-"njemu prije nego Vaša adresa bude izmjenjena."
+"Poslali smo e-mail na Vašu novu e-mail adresu. Moraćete kliknuti na link u\n"
+"njemu da bi Vaša e-mail adresa bila promenjena."
msgid "We've sent you an email, and you'll need to click the link in it before you can\\ncontinue."
-msgstr ""
-"Poslali smo Vam e-mail, trebate kliknuti na link u njemu prije nego što \n"
-"nastavite."
+msgstr "Poslali smo Vam e-mail, potrebno je da kliknete na link u njemu da biste mogli da nastavite."
msgid "We've sent you an email, click the link in it, then you can change your password."
-msgstr "Poslali smo Vam e-mail, kliknite na link u njemu, onda ćete moći promjeniti Vaš password."
+msgstr "Poslali smo Vam e-mail - kliknite na link u njemu, pa ćete moći da promenite Vašu lozinku."
msgid "What are you doing?"
msgstr "Šta radite?"
msgid "What best describes the status of this request now?"
-msgstr "Šta najbolje opisuje status ovog zahteva sada?"
+msgstr "Šta najbolje opisuje status ovog zahteva u ovom trenutku?"
msgid "What information has been released?"
msgstr "Koje informacije su objavljene?"
msgid "What information has been requested?"
-msgstr ""
+msgstr "Koje informacije su tražene?"
msgid "When you get there, please update the status to say if the response \\ncontains any useful information."
-msgstr ""
-"Kada dođete do toga, molimo ažurirajte status da nam kažete da li \n"
-"je odgovor sadržavao korisne informacije."
+msgstr "Kada dođete tamo, molimo ažurirajte status da objasnite da li odgovor\\nsadrži korisne informacije."
msgid "When you receive the paper response, please help\\n others find out what it says:"
msgstr ""
-"Kada dobijete printanu kopiju, molimo pomozite\n"
-" drugima da saznaju njen sadržaj:"
+"Kada dobijete odgovor u štampanoj formi, molimo pomozite\n"
+" drugima da saznaju njegov sadržaj:"
msgid "When you're done, <strong>come back here</strong>, <a href=\"{{url}}\">reload this page</a> and file your new request."
-msgstr "Kada završite, <strong>vratite se ovde</strong>, <a href=\"{{url}}\">učitajte ponovo ovu stranicu</a> i spremite Vaš novi zahtev."
+msgstr "Kada završite, <strong>vratite se ovde</strong>, <a href=\"{{url}}\">učitajte ponovo ovu stranicu</a> i podnesite Vaš novi zahtev."
msgid "Which of these is happening?"
msgstr "Šta se od ovoga događa?"
@@ -3052,19 +2982,19 @@ msgid "Withdrawn by the requester."
msgstr "Povučeno od strane podnosioca zahteva."
msgid "Wk"
-msgstr "Nedelja"
+msgstr "Nd"
msgid "Would you like to see a website like this in your country?"
-msgstr "Da li biste hteli videti ovakvu web stranicu u Vašoj zemlji?"
+msgstr "Da li biste želeli da imate ovakav sistem u Vašoj zemlji?"
msgid "Write a reply"
-msgstr "Napisati odgovor"
+msgstr "Napišite odgovor"
msgid "Write a reply to "
-msgstr "napišite odgovor za "
+msgstr "Napišite odgovor za "
msgid "Write your FOI follow up message to "
-msgstr "Napišite Vašu prateću poruku Zahteva za slobodan pristup informacijama za "
+msgstr "Napišite Vašu reakciju po Zahtevu za slobodan pristup informacijama od javnog značaja za "
msgid "Write your request in <strong>simple, precise language</strong>."
msgstr "Pišite Vaš zahtev <strong>jednostavnim, preciznim jezikom</strong>."
@@ -3073,171 +3003,171 @@ msgid "You"
msgstr "Vi"
msgid "You are already following new requests"
-msgstr ""
+msgstr "Već pratite nove zahteve"
msgid "You are already following requests to {{public_body_name}}"
-msgstr ""
+msgstr "Već pratite zahteve za ustanovu '{{public_body_name}}'"
msgid "You are already following things matching this search"
-msgstr ""
+msgstr "Već pratite ono što odgovara ovom upitu"
msgid "You are already following this person"
-msgstr ""
+msgstr "Već pratite ovog korisnika"
msgid "You are already following this request"
-msgstr ""
+msgstr "Već pratite ovaj zahtev"
msgid "You are already following updates about {{track_description}}"
-msgstr ""
+msgstr "Već primate sledeće e-mail biltene u vezi {{track_description}}"
msgid "You are currently receiving notification of new activity on your wall by email."
-msgstr ""
+msgstr "Već pratite aktivnost na Vašem zidu pomoću e-mail biltena"
msgid "You are following all new successful responses"
-msgstr ""
+msgstr "Pratite sve nove uspešne odgovore"
msgid "You are no longer following {{track_description}}."
-msgstr ""
+msgstr "Više ne pratite {{track_description}}."
msgid "You are now <a href=\"{{wall_url_user}}\">following</a> updates about {{track_description}}"
-msgstr ""
+msgstr "Sada <a href=\"{{wall_url_user}}\">pratite</a> novosti u vezi {{track_description}}"
msgid "You can <strong>complain</strong> by"
-msgstr "Možete se <strong>žaliti</strong> tako što ćete"
+msgstr "Možete se <strong>žaliti</strong> tako što"
msgid "You can change the requests and users you are following on <a href=\"{{profile_url}}\">your profile page</a>."
-msgstr ""
+msgstr "Možete promeniti listu zahteva i korisnika koje pratite <a href=\"{{profile_url}}\">na stranici Vašeg profila</a>."
msgid "You can get this page in computer-readable format as part of the main JSON\\npage for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
-msgstr ""
+msgstr "Ovu stranu možete dobiti u mašinski čitljivom obliku kao deo glavne JSON\\nstrane za ovaj zahtev. Pogledajte <a href=\"{{api_path}}\">API dokumentaciju</a>."
msgid "You can only request information about the environment from this authority."
-msgstr "Možete samo zahtevati informacije o okolišu od ove ustanove."
+msgstr "Od ove ustanove možete zahtevati samo informacije u vezi zaštite okoline."
msgid "You have a new response to the {{law_used_full}} request "
-msgstr "Imate novi odgovor na {{law_used_full}} zahtev "
+msgstr "Imate novi odgovor na zahtev vezan za {{law_used_full}} "
msgid "You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to tell us about the problem"
-msgstr "Pronašli ste programsku grešku. Molimo <a href=\"{{contact_url}}\">kontaktirajte nas</a> da nam ukažete na problem"
+msgstr "Pronašli ste programsku grešku. Molimo <a href=\"{{contact_url}}\">kontaktirajte nas</a> da nam objasnite šta je izazvalo problem"
msgid "You have hit the rate limit on new requests. Users are ordinarily limited to {{max_requests_per_user_per_day}} requests in any rolling 24-hour period. You will be able to make another request in {{can_make_another_request}}."
-msgstr ""
+msgstr "Dostigli ste limit broja unetih zahteva dnevno. Uobičajeni limit za korisnike sistema je {{max_requests_per_user_per_day}} podnetih zahteva u periodu od 24h. Novi zahtev ćete moći podneti {{can_make_another_request}}."
msgid "You have made no Freedom of Information requests using this site."
-msgstr "Niste podneli nijedan Zahtev za slobodan pristup informacijama koristeći ovu web stranicu. "
+msgstr "Još niste podneli ni jedan Zahtev za slobodan pristup informacijama od javnog značaja pomoću ovog sistema. "
msgid "You have now changed the text about you on your profile."
msgstr "Sada ste promenili tekst o Vama na Vašem profilu."
msgid "You have now changed your email address used on {{site_name}}"
-msgstr "Sada ste promenili Vašu e-mail adresu korištenu na {{site_name}}"
+msgstr "Sada ste promenili Vašu e-mail adresu registrovanu na {{site_name}}"
msgid "You just tried to sign up to {{site_name}}, when you\\nalready have an account. Your name and password have been\\nleft as they previously were.\\n\\nPlease click on the link below."
msgstr ""
-"Probali ste da se registrujete {{site_name}}, mada već\n"
-"imate račun. Vaše ime i password su ostali\n"
-"isti kao prije.\n"
+"Probali ste da se registrujete na sistem {{site_name}}, mada već\n"
+"imate račun. Vaše ime i lozinka su ostali\n"
+"isti kao ranije.\n"
"\n"
"Molimo kliknite na link ispod."
msgid "You know what caused the error, and can <strong>suggest a solution</strong>, such as a working email address."
-msgstr "Znate šta je uzrok greške i možete <strong>predložiti rešenje</strong>, poput ispravne e-mail adrese."
+msgstr "Znate šta je uzrok ove greške i možete <strong>predložiti rešenje</strong>, poput ispravne e-mail adrese."
msgid "You may <strong>include attachments</strong>. If you would like to attach a\\n file too large for email, use the form below."
-msgstr ""
+msgstr "Možete <strong>ubaciti priloge</strong>. Ako želite ubaciti datoteku\\n preveliku za e-mail poruke, koristite obrazac ispod."
msgid "You may be able to find\\n one on their website, or by phoning them up and asking. If you manage\\n to find one, then please <a href=\"{{url}}\">send it to us</a>."
msgstr ""
"Moguće je da je nađete\n"
-" na njihovoj web stranici, ili putem telefonskog poziva. Ako uspete\n"
+" na njihovoj web stranici, ili uz pomoć telefonskog poziva. Ako uspete\n"
" da je nađete, onda molimo <a href=\"{{url}}\">da nam je pošaljete</a>."
msgid "You may be able to find\\none on their website, or by phoning them up and asking. If you manage\\nto find one, then please <a href=\"{{help_url}}\">send it to us</a>."
msgstr ""
"Možete ga naći\n"
-"na njihovoj web-stranici, ili ih pitati putem telefona. Ako ga uspete\n"
-"naći, tada molimo <a href=\"{{help_url}}\">pošaljite nam ga</a>."
+"na njihovoj web-stranici, ili ih pitati telefonom. Ako ga uspete\n"
+"naći, molimo <a href=\"{{help_url}}\">pošaljite ga i nama</a>."
msgid "You need to be logged in to change the text about you on your profile."
-msgstr "Morate biti prijavljeni ukoliko želite mjenjati tekst o Vama na Vašem profilu."
+msgstr "Morate biti prijavljeni na sistem ukoliko želite menjati tekst o Vama na Vašem profilu."
msgid "You need to be logged in to change your profile photo."
-msgstr "Morate biti prijavljeni ukoliko želite mjenjati sliku na Vašem profilu."
+msgstr "Morate biti prijavljeni na sistem ukoliko želite menjati sliku na Vašem profilu."
msgid "You need to be logged in to clear your profile photo."
-msgstr "Morate biti prijavljeni ukoliko želite izbrisati sliku na Vašem profilu."
+msgstr "Morate biti prijavljeni na sistem ukoliko želite izbrisati sliku na Vašem profilu."
msgid "You need to be logged in to edit your profile."
-msgstr ""
+msgstr "Morate biti prijavljeni na sistem da biste menjali Vaš profil."
msgid "You need to be logged in to report a request for administrator attention"
-msgstr ""
+msgstr "Morate biti prijavljeni na sistem da biste prijavili ovaj zahtev administratorima"
msgid "You previously submitted that exact follow up message for this request."
-msgstr "Prethodno ste predali istu popratnu poruku za ovaj zahtev."
+msgstr "Već ste jednom poslali potpuno istu reakciju za ovaj zahtev."
msgid "You should have received a copy of the request by email, and you can respond\\n by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
-msgstr ""
+msgstr "Trebalo bi da ste dobili kopiju zahteva e-mailom i možete odgovoriti\\n prosto tako što <strong>odgovorite na e-mail</strong>. Evo adrese:"
msgid "You want to <strong>give your postal address</strong> to the authority in private."
-msgstr "Želite da <strong>date vašu poštansku adresu</strong> isključivo ustanovi."
+msgstr "Želite da <strong>date vašu poštansku adresu</strong> isključivo toj ustanovi - bez objavljivanja svima."
msgid "You will be unable to make new requests, send follow ups, add annotations or\\nsend messages to other users. You may continue to view other requests, and set\\nup\\nemail alerts."
-msgstr ""
+msgstr "Nećete moći da šaljete nove zahteve, reakcije, dodajete komentare ili\\nšaljete poruke drugim korisnicima. Možete da nastavite da gledate druge zahteve, i konfigurišete\\ne-mail biltene."
msgid "You will no longer be emailed updates for those alerts"
-msgstr "Više vam nećemo slati ažuriranja za ova upozorenja"
+msgstr "Više vam nećemo slati novosti za ta upozorenja"
msgid "You will now be emailed updates about {{track_description}}. <a href=\"{{change_email_alerts_url}}\">Prefer not to receive emails?</a>"
-msgstr ""
+msgstr "Sada ćete dobijati e-mail biltene u vezi {{track_description}}. <a href=\"{{change_email_alerts_url}}\">Radije ne biste primali e-mail poruke?</a>"
msgid "You will only get an answer to your request if you follow up\\nwith the clarification."
-msgstr ""
+msgstr "Dobićete odgovor na Vaš zahtev ako reagujete\\n šaljući razjašnjenje."
msgid "You will still be able to view it while logged in to the site. Please reply to this email if you would like to discuss this decision further."
-msgstr ""
+msgstr "I dalje ćete moći da ga vidite kada ste prijavljeni na sistem. Molimo odgovorite na ovu poruku ako želite da komentarišete dalje ovu odluku."
msgid "You're in. <a href=\"#\" id=\"send-request\">Continue sending your request</a>"
-msgstr ""
+msgstr "Prijavili ste se. <a href=\"#\" id=\"send-request\">Nastavite podnošenje zahteva</a>"
msgid "You're long overdue a response to your FOI request - "
-msgstr ""
+msgstr "Odgovor na Vaš zahtev za slobodan pristup informacijama od javnog značaja kasni - "
msgid "You're not following anything."
-msgstr ""
+msgstr "Trenutno ne pratite ništa pomoću e-mail biltena."
msgid "You've now cleared your profile photo"
msgstr "Sada ste izbrisali sliku na Vašem profilu"
msgid "Your <strong>name will appear publicly</strong>\\n (<a href=\"{{why_url}}\">why?</a>)\\n on this website and in search engines. If you\\n are thinking of using a pseudonym, please\\n <a href=\"{{help_url}}\">read this first</a>."
-msgstr ""
+msgstr "Vaše <strong>ime će biti javno prikazano</strong>\\n (<a href=\"{{why_url}}\">zašto?</a>)\\n na ovom sistemu i u pretraživačima. Ako \\n razmišljate o upotrebi pseudonima, molimo\\n <a href=\"{{help_url}}\">prvo ovo pročitajte</a>."
msgid "Your annotations"
msgstr "Vaše napomene"
msgid "Your details, including your email address, have not been given to anyone."
-msgstr ""
+msgstr "Vaši lični podaci, uključujući Vašu email adresu, nisu dati nikome."
msgid "Your e-mail:"
msgstr "Vaš e-mail:"
msgid "Your follow up has not been sent because this request has been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you really want to send a follow up message."
-msgstr ""
+msgstr "Vaša reakcija nije poslata zato što je ovaj zahtev blokiran da se spreči spam. Molimo <a href=\"{{url}}\">kontaktirajte nas</a> ako stvarno želite da pošaljete ovu reakciju."
msgid "Your follow up message has been sent on its way."
-msgstr "Vaša prateća poruka je na putu."
+msgstr "Vaša reakcija je poslata."
msgid "Your internal review request has been sent on its way."
-msgstr "Vaša urgencija je na putu."
+msgstr "Vaša urgencija je poslata."
msgid "Your message has been sent. Thank you for getting in touch! We'll get back to you soon."
-msgstr "Igrajte igru kategorizacije zahteva"
+msgstr "Vaša poruka je poslata. Hvala što ste se javili! Javićemo Vam se uskoro."
msgid "Your message to {{recipient_user_name}} has been sent"
-msgstr ""
+msgstr "Vaša poruka za korisnika {{recipient_user_name}} je poslata"
msgid "Your message to {{recipient_user_name}} has been sent!"
-msgstr "Vaša poruka za {{recipient_user_name}} je poslana!"
+msgstr "Vaša poruka za {{recipient_user_name}} je poslata!"
msgid "Your message will appear in <strong>search engines</strong>"
msgstr "Vaša poruka će se pojaviti u <strong>pretraživačima</strong>"
@@ -3254,52 +3184,52 @@ msgid "Your name:"
msgstr "Vaše ime:"
msgid "Your original message is attached."
-msgstr "Vaša originalna poruka je pridružena."
+msgstr "Vaša originalna poruka je u prilogu."
msgid "Your password has been changed."
-msgstr "Vaš password je promenjen."
+msgstr "Vaša lozinka je promenjena."
msgid "Your password:"
-msgstr "Vaš password:"
+msgstr "Vaša lozinka:"
msgid "Your photo will be shown in public <strong>on the Internet</strong>,\\n wherever you do something on {{site_name}}."
-msgstr ""
+msgstr "Vaša fotografija će biti javno prikazana <strong>na Internetu</strong>,\\n kad god nešto uradite na sistemu {{site_name}}."
msgid "Your request '{{request}}' at {{url}} has been reviewed by moderators."
-msgstr ""
+msgstr "Vaš zahtev '{{request}}' na {{url}} je bio pregledan od strane moderatora."
msgid "Your request on {{site_name}} hidden"
-msgstr ""
+msgstr "Vaš zahtev na sistemu {{site_name}} je sakriven"
msgid "Your request was called {{info_request}}. Letting everyone know whether you got the information will help us keep tabs on"
-msgstr "Naziv Vašeg zahteva je {{info_request}}. Obavest o tome da li ste dobili odgovor će nam pomoći da bolje pratimo."
+msgstr "Naziv Vašeg zahteva je {{info_request}}. Ažuriranjem informacije o tome da li ste dobili odgovor ćete nam pomoći da bolje pratimo ponašanje "
msgid "Your request:"
msgstr "Vaš zahtev:"
msgid "Your response to an FOI request was not delivered"
-msgstr ""
+msgstr "Vaš odgovor na Zahtev za slobodan pristup informacijama od javnog značaja nije isporučen"
msgid "Your response will <strong>appear on the Internet</strong>, <a href=\"{{url}}\">read why</a> and answers to other questions."
msgstr "Vaš odgovor će se <strong>pojaviti na Internetu</strong>, <a href=\"{{url}}\">pročitajte zašto</a> i odgovore na druga pitanja."
msgid "Your thoughts on what the {{site_name}} <strong>administrators</strong> should do about the request."
-msgstr "Vaše mišljenje o tome šta administratori {{site_name}} trebaju da rade po pitanju zahteva."
+msgstr "Vaše mišljenje o tome šta administratori sistema {{site_name}} treba da rade po pitanju ovog zahteva."
msgid "Your {{count}} Freedom of Information request"
msgid_plural "Your {{count}} Freedom of Information requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Vaš {{count}} zahtev"
+msgstr[1] "Vaša {{count}} zahteva"
+msgstr[2] "Vaših {{count}} zahteva"
msgid "Your {{count}} annotation"
msgid_plural "Your {{count}} annotations"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Vaš {{count}} komentar"
+msgstr[1] "Vaša {{count}} komentara"
+msgstr[2] "Vaših {{count}} komentara"
msgid "Your {{site_name}} email alert"
-msgstr "Vaše {{site_name}} e-mail upozorenje"
+msgstr "Vaš e-mail bilten od {{site_name}} "
msgid "Yours faithfully,"
msgstr "S poštovanjem,"
@@ -3308,30 +3238,28 @@ msgid "Yours sincerely,"
msgstr "S poštovanjem,"
msgid "Yours,"
-msgstr ""
+msgstr "S poštovanjem,"
msgid "[FOI #{{request}} email]"
-msgstr ""
+msgstr "[E-mail za zahtev #{{request}}]"
msgid "[{{public_body}} request email]"
-msgstr ""
+msgstr "[E-mail za zahteve ustanovi {{public_body}}]"
msgid "[{{site_name}} contact email]"
-msgstr ""
+msgstr "[Kontakt email za sistem {{site_name}}]"
msgid "\\n\\n[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
-msgstr ""
+msgstr "\\n\\n[ Poruka sistema {{site_name}}: Tekst iznad je bio loše kodiran, pa su čudni znakovi uklonjeni. ]"
msgid "a one line summary of the information you are requesting, \\n\t\t\te.g."
-msgstr ""
-"sažetak informacije koju tražite u jednoj rečenici,\n"
-"»»» npr."
+msgstr "sažetak u jednoj liniji kakve informacije tražite, \\n⇥⇥⇥npr."
msgid "admin"
msgstr "administrator"
msgid "alaveteli_foi:The software that runs {{site_name}}"
-msgstr ""
+msgstr "alaveteli_foi:Softver koji koristi sistem {{site_name}}"
msgid "all requests"
msgstr "svi zahtevi"
@@ -3340,13 +3268,13 @@ msgid "also called {{public_body_short_name}}"
msgstr "takođe poznat/a kao {{public_body_short_name}}"
msgid "an anonymous user"
-msgstr ""
+msgstr "anonimni korisnik"
msgid "and"
msgstr "i"
msgid "and update the status accordingly. Perhaps <strong>you</strong> might like to help out by doing that?"
-msgstr "i ažurirajte status po tome. Možda <strong>biste</strong> hteli pomoći radeći to?"
+msgstr "i ažurirajte status po tome. Možda biste <strong>Vi</strong> želeli pomoći radeći to?"
msgid "and update the status."
msgstr "i ažurirajte status."
@@ -3364,34 +3292,34 @@ msgid "anything"
msgstr "bilo šta"
msgid "are long overdue."
-msgstr ""
+msgstr "kasne."
msgid "at"
-msgstr ""
+msgstr "na"
msgid "authorities"
msgstr "ustanove"
msgid "awaiting a response"
-msgstr ""
+msgstr "čeka odgovor"
msgid "beginning with ‘{{first_letter}}’"
-msgstr ""
+msgstr "koje počinje slovom ‘{{first_letter}}’"
msgid "between two dates"
msgstr "između dva datuma"
msgid "but followupable"
-msgstr ""
+msgstr "ali je reakcija moguća"
msgid "by"
msgstr "od strane"
msgid "by <strong>{{date}}</strong>"
-msgstr "od strane <strong>{{date}}</strong>"
+msgstr "do <strong>{{date}}</strong>"
msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
-msgstr "od strane {{public_body_name}} za {{info_request_user}} na datum {{date}}."
+msgstr "od strane {{public_body_name}} za korisnika {{info_request_user}} na dan {{date}}."
msgid "by {{user_link_absolute}}"
msgstr "od strane {{user_link_absolute}}"
@@ -3401,20 +3329,20 @@ msgstr "komentari"
msgid "containing your postal address, and asking them to reply to this request.\\n Or you could phone them."
msgstr ""
-"sa Vašom poštanskom adresom, tražite da odgovore na ovaj zahtev.\n"
-" Ili ih možete kontaktirati putem telefona."
+"sa Vašom poštanskom adresom i tražite da odgovore na ovaj zahtev.\n"
+" Ili im možete kontaktirati telefonom."
msgid "details"
msgstr "detalji"
msgid "display_status only works for incoming and outgoing messages right now"
-msgstr ""
+msgstr "display_status trenutno radi samo za odlazne i dolazne poruke"
msgid "during term time"
msgstr "u toku polugodišta"
msgid "edit text about you"
-msgstr "uredite tekst o Vama"
+msgstr "promenite tekst o Vama"
msgid "even during holidays"
msgstr "i za vreme praznika"
@@ -3423,22 +3351,22 @@ msgid "everything"
msgstr "sve"
msgid "external"
-msgstr ""
+msgstr "spoljni"
msgid "has reported an"
msgstr "je prijavio/la"
msgid "have delayed."
-msgstr "je odgodio/la"
+msgstr "je odložen."
msgid "hide quoted sections"
-msgstr ""
+msgstr "sakrij navedene sekcije"
msgid "in term time"
-msgstr ""
+msgstr "u toku školske godine"
msgid "in the category ‘{{category_name}}’"
-msgstr ""
+msgstr "u kategoriji ‘{{category_name}}’"
msgid "internal error"
msgstr "interna greška"
@@ -3447,7 +3375,7 @@ msgid "internal reviews"
msgstr "urgencije"
msgid "is <strong>waiting for your clarification</strong>."
-msgstr "<strong>čeka na Vaše objašnjenje</strong>."
+msgstr "<strong>čeka na Vaše razjašnjenje</strong>."
msgid "just to see how it works"
msgstr "samo da vidite kako radi"
@@ -3459,7 +3387,7 @@ msgid "made."
msgstr "napravljen."
msgid "matching the tag ‘{{tag_name}}’"
-msgstr ""
+msgstr "odgovara privesku ‘{{tag_name}}’"
msgid "messages from authorities"
msgstr "poruke od ustanova"
@@ -3468,19 +3396,19 @@ msgid "messages from users"
msgstr "poruke od korisnika"
msgid "move..."
-msgstr ""
+msgstr "pomeri..."
msgid "no later than"
-msgstr "ne kasnije od"
+msgstr "najkasnije do"
msgid "no longer exists. If you are trying to make\\n From the request page, try replying to a particular message, rather than sending\\n a general followup. If you need to make a general followup, and know\\n an email which will go to the right place, please <a href=\"{{url}}\">send it to us</a>."
-msgstr ""
+msgstr "više ne postoji. Ako želite da uradite to\\n sa stranice zahteva, pokušajte da odgovorite na konkretnu poruku, umesto slanja\\n reakcije. Ako je potrebno da pošaljete reakciju i znate\\n email adresu pravog mesta, molimo <a href=\"{{url}}\">pošaljite je i nama</a>."
msgid "normally"
-msgstr ""
+msgstr "po običaju"
msgid "not requestable due to: {{reason}}"
-msgstr ""
+msgstr "zahtev nije moguć zato što: {{reason}}"
msgid "please sign in as "
msgstr "molimo prijavite se kao "
@@ -3495,25 +3423,25 @@ msgid "requests which are {{list_of_statuses}}"
msgstr "zahtevi koji su {{list_of_statuses}}"
msgid "response as needing administrator attention. Take a look, and reply to this\\nemail to let them know what you are going to do about it."
-msgstr ""
+msgstr "odgovor pošto zahteva akciju administratora. Pogledajte i odgovorite na ovo\\npošaljite e-mail da im kažete šta planirate da uradite u vezi toga."
msgid "send a follow up message"
-msgstr "pošaljite prateću poruku"
+msgstr "pošaljite reakciju"
msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr "poslano za {{public_body_name}} od strane {{info_request_user}} na datum {{date}}."
+msgstr "poslato za {{public_body_name}} od strane {{info_request_user}} na dan {{date}}."
msgid "set to <strong>blank</strong> (empty string) if can't find an address; these emails are <strong>public</strong> as anyone can view with a CAPTCHA"
-msgstr ""
+msgstr "postavlja na <strong>blank</strong> (prazan niz) ako ne može da pronađe adresu; ove e-mail poruke su <strong>javne</strong> pošto svako može da ih vidi kad unese CAPTCHA"
msgid "show quoted sections"
-msgstr ""
+msgstr "prikaži navedene sekcije"
msgid "sign in"
msgstr "prijavite se"
msgid "simple_date_format"
-msgstr ""
+msgstr "simple_date_format"
msgid "successful"
msgstr "uspešni"
@@ -3522,10 +3450,10 @@ msgid "successful requests"
msgstr "uspešni zahtevi"
msgid "that you made to"
-msgstr ""
+msgstr "koje ste podneli"
msgid "the main FOI contact address for {{public_body}}"
-msgstr "glavne kontakt adrese za Zahteve o slobodnom pristupu informacijama za {{public_body}}"
+msgstr "glavne kontakt adrese za Zahteve o slobodnom pristupu informacijama od javnog značaja za {{public_body}}"
#. This phrase completes the following sentences:
#. Request an internal review from...
@@ -3533,19 +3461,19 @@ msgstr "glavne kontakt adrese za Zahteve o slobodnom pristupu informacijama za {
#. Send a public reply to...
#. Don't want to address your message to... ?
msgid "the main FOI contact at {{public_body}}"
-msgstr "glavni kontakt za Zahteve o slobodnom pristupu informacijama u ustanovi {{public_body}}"
+msgstr "glavni kontakt za Zahteve o slobodnom pristupu informacijama od javnog značaja u ustanovi {{public_body}}"
msgid "the requester"
-msgstr ""
+msgstr "podnosilac zahteva"
msgid "the {{site_name}} team"
-msgstr "{{site_name}} tim"
+msgstr "tim {{site_name}}"
msgid "to read"
-msgstr "za čitati"
+msgstr "za čitanje"
msgid "to send a follow up message."
-msgstr "poslati prateću poruku."
+msgstr "poslati reakciju."
msgid "to {{public_body}}"
msgstr "za {{public_body}}"
@@ -3557,22 +3485,22 @@ msgid "unknown status "
msgstr "nepoznat status "
msgid "unresolved requests"
-msgstr "neriješeni zahtevi"
+msgstr "nerešeni zahtevi"
msgid "unsubscribe"
-msgstr "prekinuti pretplatu"
+msgstr "odjaviti se"
msgid "unsubscribe all"
-msgstr "prekinuti pretplatu na sve"
+msgstr "odjaviti se za sve"
msgid "unsuccessful"
-msgstr "neuspešni"
+msgstr "neuspešno"
msgid "unsuccessful requests"
msgstr "neuspešni zahtevi"
msgid "useful information."
-msgstr "korisna informacija"
+msgstr "korisna informacija."
msgid "users"
msgstr "korisnici"
@@ -3581,126 +3509,123 @@ msgid "what's that?"
msgstr "šta je to?"
msgid "{{count}} FOI requests found"
-msgstr "{{count}} Zahteva za slobodan pristup informacijama pronađeno"
+msgstr "pronađen/o {{count}} Zahtev/a za slobodan pristup informacijama od javnog značaja"
msgid "{{count}} Freedom of Information request to {{public_body_name}}"
msgid_plural "{{count}} Freedom of Information requests to {{public_body_name}}"
-msgstr[0] "{{count}} Freedom of Information requests to {{public_body_name}}"
-msgstr[1] "{{count}} Freedom of Information requests to {{public_body_name}}"
-msgstr[2] "{{count}} Freedom of Information requests to {{public_body_name}}"
+msgstr[0] "{{count}} zahtev za {{public_body_name}}"
+msgstr[1] "{{count}} zahteva za {{public_body_name}}"
+msgstr[2] "{{count}} zahteva za {{public_body_name}}"
msgid "{{count}} person is following this authority"
msgid_plural "{{count}} people are following this authority"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{{count}} korisnik prati ovu ustanovu"
+msgstr[1] "{{count}} korisnika prati ovu ustanovu"
+msgstr[2] "{{count}} korisnika prati ovu ustanovu"
msgid "{{count}} request"
msgid_plural "{{count}} requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{{count}} zahtev"
+msgstr[1] "{{count}} zahteva"
+msgstr[2] "{{count}} zahteva"
msgid "{{count}} request made."
msgid_plural "{{count}} requests made."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "{{count}} zahtev je podnet."
+msgstr[1] "{{count}} zahteva su podneta."
+msgstr[2] "{{count}} zahteva je podneto."
msgid "{{existing_request_user}} already\\n created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\\n or edit the details below to make a new but similar request."
-msgstr ""
+msgstr "{{existing_request_user}} je već\\n podneo isti zahtev na dan {{date}}. Možete ili pogledati <a href=\"{{existing_request}}\">postojeći zahtev</a>,\\n ili promeniti detalje ispod da napravite novi, sličan zahtev."
msgid "{{info_request_user_name}} only:"
-msgstr "{{info_request_user_name}} samo:"
+msgstr "samo {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
-msgstr ""
-
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
+msgstr "Zahtev koji se poziva na {{law_used_full}} - {{title}}"
msgid "{{law_used}} requests at {{public_body}}"
-msgstr ""
+msgstr "Zahtevi vezani za {{law_used}} za ustanovu {{public_body}}"
msgid "{{length_of_time}} ago"
msgstr "pre {{length_of_time}}"
msgid "{{list_of_things}} matching text '{{search_query}}'"
-msgstr ""
+msgstr "{{list_of_things}} odgovara upitu '{{search_query}}'"
msgid "{{number_of_comments}} comments"
-msgstr "{{number_of_comments}} komentara"
+msgstr "{{number_of_comments}} komentar/a"
msgid "{{public_body_link}} answered a request about"
-msgstr ""
+msgstr "{{public_body_link}} su već odgovorili na zahtev u vezi"
msgid "{{public_body_link}} was sent a request about"
-msgstr ""
+msgstr "{{public_body_link}} su već primili zahtev u vezi"
msgid "{{public_body_name}} only:"
-msgstr "{{public_body_name}} samo:"
+msgstr "samo {{public_body_name}}:"
msgid "{{public_body}} has asked you to explain part of your {{law_used}} request."
-msgstr ""
+msgstr "{{public_body}} su tražili da razjasnite deo Vašeg zahteva vezanog za {{law_used}}."
msgid "{{public_body}} sent a response to {{user_name}}"
-msgstr "{{public_body}} je poslao/la poruku za {{user_name}}"
+msgstr "{{public_body}} su poslali poruku za korisnika {{user_name}}"
msgid "{{reason}}, please sign in or make a new account."
-msgstr ""
+msgstr "{{reason}}, molimo prijavite se na sistem ili se registrujte."
msgid "{{search_results}} matching '{{query}}'"
-msgstr ""
+msgstr "{{search_results}} odgovaraju upitu '{{query}}'"
msgid "{{site_name}} blog and tweets"
-msgstr "{{site_name}} blogovi i tweet-ovi"
+msgstr "blog i tweet-ovi {{site_name}} "
msgid "{{site_name}} covers requests to {{number_of_authorities}} authorities, including:"
-msgstr ""
+msgstr "{{site_name}} podržava zahteve za {{number_of_authorities}} ustanova, uključujući:"
msgid "{{site_name}} sends new requests to <strong>{{request_email}}</strong> for this authority."
-msgstr "{{site_name}} šalje nove zahteve <strong>{{request_email}}</strong> za ovu javnu ustanovu."
+msgstr "Za ovu ustanovu {{site_name}} nove zahteve šalje na adresu <strong>{{request_email}}</strong>."
msgid "{{site_name}} users have made {{number_of_requests}} requests, including:"
-msgstr "korisnici {{site_name}} su podneli {{number_of_requests}} zahteva, uključujući:"
+msgstr "Korisnici {{site_name}} su podneli {{number_of_requests}} zahteva, uključujući:"
msgid "{{thing_changed}} was changed from <code>{{from_value}}</code> to <code>{{to_value}}</code>"
-msgstr ""
+msgstr "{{thing_changed}} je promenjeno sa <code>{{from_value}}</code> na <code>{{to_value}}</code>"
msgid "{{title}} - a Freedom of Information request to {{public_body}}"
-msgstr ""
+msgstr "{{title}} - Zahtev za slobodan pristup informacijama od javnog značaja upućen ustanovi {{public_body}}"
msgid "{{user_name}} (Account suspended)"
-msgstr ""
+msgstr "{{user_name}} (blokiran profil)"
msgid "{{user_name}} - Freedom of Information requests"
-msgstr ""
+msgstr "{{user_name}} - Zahtevi za slobodan pristup informacijama od javnog značaja"
msgid "{{user_name}} - user profile"
-msgstr ""
+msgstr "{{user_name}} - korisnički profil"
msgid "{{user_name}} added an annotation"
-msgstr "{{user_name}} je dodao napomenu"
+msgstr "{{user_name}} je dodao/la napomenu"
msgid "{{user_name}} has annotated your {{law_used_short}} \\nrequest. Follow this link to see what they wrote."
msgstr ""
-"{{user_name}} su komentarisali Vaš {{law_used_short}} \n"
-"zahtev. Pratite ovaj link da vidite šta su napisali."
+"{{user_name}} su komentarisali Vaš zahtev vezan za {{law_used_short}}.\n"
+"Pratite ovaj link da vidite šta su napisali."
msgid "{{user_name}} has used {{site_name}} to send you the message below."
-msgstr "{{user_name}} je koristio {{site_name}} da Vam pošalje poruku ispod."
+msgstr "{{user_name}} je upotrebio/la sistem {{site_name}} da Vam pošalje poruku ispod."
msgid "{{user_name}} sent a follow up message to {{public_body}}"
-msgstr ""
+msgstr "{{user_name}} je poslao/la reakciju za {{public_body}}"
msgid "{{user_name}} sent a request to {{public_body}}"
-msgstr "{{user_name}} je poslao zahtev za {{public_body}}"
+msgstr "{{user_name}} je poslao/la zahtev za {{public_body}}"
msgid "{{username}} left an annotation:"
-msgstr "{{username}} je ostavio napomenu:"
+msgstr "{{username}} je ostavio/la napomenu:"
msgid "{{user}} ({{user_admin_link}}) made this {{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
-msgstr "{{user}} ({{user_admin_link}}) je podnio ovaj {{law_used_full}} zahtev (<a href=\"{{request_admin_url}}\">admin</a>) za {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
+msgstr "{{user}} ({{user_admin_link}}) je podneo ovaj zahtev vezan za {{law_used_full}} (<a href=\"{{request_admin_url}}\">admin</a>) za ustanovu '{{public_body_link}}' (<a href=\"{{public_body_admin_url}}\">admin</a>)"
msgid "{{user}} made this {{law_used_full}} request"
-msgstr "{{user}} je podnio/la ovaj {{law_used_full}} zahtev"
+msgstr "{{user}} je podneo/la ovaj zahtev pozivajući se na {{law_used_full}}"
diff --git a/locale/sv/app.po b/locale/sv/app.po
index 15eb35a7e..a22d01e06 100644
--- a/locale/sv/app.po
+++ b/locale/sv/app.po
@@ -6,10 +6,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/alaveteli/language/sv/)\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@@ -806,15 +806,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1789,6 +1798,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2718,18 +2730,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3419,9 +3425,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/tr/app.po b/locale/tr/app.po
index 1d6cb9d33..f7059000b 100644
--- a/locale/tr/app.po
+++ b/locale/tr/app.po
@@ -8,10 +8,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/alaveteli/language/tr/)\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
@@ -808,15 +808,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1791,6 +1800,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2720,18 +2732,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3421,9 +3427,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/uk/app.po b/locale/uk/app.po
index 52c85a9c0..b5d29c947 100644
--- a/locale/uk/app.po
+++ b/locale/uk/app.po
@@ -13,10 +13,10 @@
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/alaveteli/language/uk/)\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -882,15 +882,24 @@ msgstr "Відслідковувати цю людину"
msgid "Follow this request"
msgstr "Відслідковувати цей запит"
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr "Додатковий запит"
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr "Уточнююче повідомлення надіслане автором запиту"
msgid "Follow up messages to existing requests are sent to "
msgstr "Додаткові запити щодо наявних запитів відіслано до "
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr "Надсилання додаткових запитів та нових відповідей на цей запит припинено, щоб попередити спам. Будь ласка, <a href=\"{{url}}\">зверніться до нас</a> якщо ви {{user_link}} і хочете надіслати додатковий запит."
@@ -1904,6 +1913,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2847,18 +2859,12 @@ msgstr ""
msgid "User|About me"
msgstr "Користувач|Про мене"
-msgid "User|Address"
-msgstr "Користувач|Адреса"
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr "Користувач|Мейл"
@@ -3586,9 +3592,6 @@ msgstr "Тільки {{info_request_user_name}}:"
msgid "{{law_used_full}} request - {{title}}"
msgstr "Інформаційний запит - {{title}}"
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/locale/vi/app.po b/locale/vi/app.po
index 28bc581bd..c8bc3c580 100644
--- a/locale/vi/app.po
+++ b/locale/vi/app.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Anh Phan <ppanhh@gmail.com>, 2013
+# ppanhh <vietnamesel10n@gmail.com>, 2013
# ppanhh <ppanhh@gmail.com>, 2013
-# ppanhh <ppanhh@gmail.com>, 2013
-# ppanhh <ppanhh@gmail.com>, 2013
+# ppanhh <vietnamesel10n@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
-"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2013-09-19 10:47+0100\n"
-"PO-Revision-Date: 2013-09-19 09:50+0000\n"
-"Last-Translator: louisecrow <louise@mysociety.org>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-08 12:10+0000\n"
+"PO-Revision-Date: 2013-11-08 12:13+0000\n"
+"Last-Translator: mysociety <transifex@mysociety.org>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/alaveteli/language/vi/)\n"
"Language: vi\n"
"MIME-Version: 1.0\n"
@@ -21,10 +22,10 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
msgid " This will appear on your {{site_name}} profile, to make it\\n easier for others to get involved with what you're doing."
-msgstr ""
+msgstr " Phần này sẽ xuất hiện trên trang hồ sơ {{site_name}} , để làm trang này trở nên\\n dễ tham gia vào các tiến trình bạn đang thực hiện."
msgid " (<strong>no ranty</strong> politics, read our <a href=\"{{url}}\">moderation policy</a>)"
-msgstr ""
+msgstr " (<strong>không bao gồm</strong> politics, read our <a href=\"{{url}}\">moderation policy</a>)"
msgid " (<strong>patience</strong>, especially for large files, it may take a while!)"
msgstr " (<strong>kiên nhẫn</strong>, đặc biệt đối với các tập tin lớn, sẽ tốn kha khá thời gian!)"
@@ -809,15 +810,24 @@ msgstr ""
msgid "Follow this request"
msgstr ""
+#. "Follow up" in this context means a further
+#. message sent by the requester to the authority after
+#. the initial request
msgid "Follow up"
msgstr ""
+#. "Follow up message" in this context means a
+#. further message sent by the requester to the authority after
+#. the initial request
msgid "Follow up message sent by requester"
msgstr ""
msgid "Follow up messages to existing requests are sent to "
msgstr ""
+#. "Follow ups" in this context means further
+#. messages sent by the requester to the authority after
+#. the initial request
msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
@@ -1791,6 +1801,9 @@ msgstr ""
msgid "PublicBody|Info requests successful count"
msgstr ""
+msgid "PublicBody|Info requests visible classified count"
+msgstr ""
+
msgid "PublicBody|Last edit comment"
msgstr ""
@@ -2716,18 +2729,12 @@ msgstr ""
msgid "User|About me"
msgstr ""
-msgid "User|Address"
-msgstr ""
-
msgid "User|Admin level"
msgstr ""
msgid "User|Ban text"
msgstr ""
-msgid "User|Dob"
-msgstr ""
-
msgid "User|Email"
msgstr ""
@@ -3411,9 +3418,6 @@ msgstr ""
msgid "{{law_used_full}} request - {{title}}"
msgstr ""
-msgid "{{law_used_full}} request GQ - {{title}}"
-msgstr ""
-
msgid "{{law_used}} requests at {{public_body}}"
msgstr ""
diff --git a/public/404.html b/public/404.html
deleted file mode 100644
index 9a48320a5..000000000
--- a/public/404.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>The page you were looking for doesn't exist (404)</title>
- <style type="text/css">
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
- div.dialog {
- width: 25em;
- padding: 0 4em;
- margin: 4em auto 0 auto;
- border: 1px solid #ccc;
- border-right-color: #999;
- border-bottom-color: #999;
- }
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
- </style>
-</head>
-
-<body>
- <!-- This file lives in public/404.html -->
- <div class="dialog">
- <h1>The page you were looking for doesn't exist.</h1>
- <p>You may have mistyped the address or the page may have moved.</p>
- </div>
-</body>
-</html>
diff --git a/public/422.html b/public/422.html
deleted file mode 100644
index 83660ab18..000000000
--- a/public/422.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>The change you wanted was rejected (422)</title>
- <style type="text/css">
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
- div.dialog {
- width: 25em;
- padding: 0 4em;
- margin: 4em auto 0 auto;
- border: 1px solid #ccc;
- border-right-color: #999;
- border-bottom-color: #999;
- }
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
- </style>
-</head>
-
-<body>
- <!-- This file lives in public/422.html -->
- <div class="dialog">
- <h1>The change you wanted was rejected.</h1>
- <p>Maybe you tried to change something you didn't have access to.</p>
- </div>
-</body>
-</html>
diff --git a/public/500.html b/public/500.html
deleted file mode 100644
index b80307fc1..000000000
--- a/public/500.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>We're sorry, but something went wrong (500)</title>
- <style type="text/css">
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
- div.dialog {
- width: 25em;
- padding: 0 4em;
- margin: 4em auto 0 auto;
- border: 1px solid #ccc;
- border-right-color: #999;
- border-bottom-color: #999;
- }
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
- </style>
-</head>
-
-<body>
- <!-- This file lives in public/500.html -->
- <div class="dialog">
- <h1>We're sorry, but something went wrong.</h1>
- <p>We've been notified about this issue and we'll take a look at it shortly.</p>
- </div>
-</body>
-</html>
diff --git a/script/install-as-user b/script/install-as-user
new file mode 100755
index 000000000..4fc341fc6
--- /dev/null
+++ b/script/install-as-user
@@ -0,0 +1,159 @@
+#!/bin/bash
+
+set -e
+set -x
+
+if [ $# -ne 3 ]
+then
+ cat >&2 <<EOUSAGE
+Usage: $0 <UNIX-USER> <HOST> <INSTALLATION-DIRECTORY>
+EOUSAGE
+ exit 1
+fi
+
+UNIX_USER="$1"
+HOST="$2"
+DIRECTORY="$3"
+DB_NAME="alaveteli"
+
+# Check that the arguments we've been passed are sensible:
+
+IP_ADDRESS_FOR_HOST="$(dig +short $HOST)"
+
+if [ x = x"$IP_ADDRESS_FOR_HOST" ]
+then
+ echo "The hostname $HOST didn't resolve to an IP address"
+ exit 1
+fi
+
+if ! id "$UNIX_USER" 2> /dev/null > /dev/null
+then
+ echo "The user '$UNIX_USER' didn't exist."
+ exit 1
+fi
+
+if [ "$(whoami)" != "$UNIX_USER" ]
+then
+ echo "This script should be run by the user '$UNIX_USER'."
+ exit 1
+fi
+
+REPOSITORY="$DIRECTORY/alaveteli"
+LINK_DESTINATION="$HOME/alaveteli"
+
+ln -sfn "$REPOSITORY" $LINK_DESTINATION
+cd "$REPOSITORY"
+
+BASHRC="$HOME/.bashrc"
+
+BASHRC_GEM_COMMENT="Set up local gem directory for Alaveteli"
+BASHRC_START="# START $BASHRC_GEM_COMMENT"
+BASHRC_END="# END $BASHRC_GEM_COMMENT"
+
+# Remove the old lines we added:
+sed -ibackup "/$BASHRC_START/,/$BASHRC_END/d" "$BASHRC"
+
+# Create a temporary file, so we can prepend the lines we need. They
+# need to be prepended since the Ubuntu skeleton .bashrc begins with
+# '[ -z "$PS1" ] && return', skipping the rest of the .bashrc for
+# non-interactive use, but we need the gem settings when invoking
+# commands in the shell non-interactively.
+TMP_BASHRC="$(mktemp "$BASHRC.XXXXXXX")"
+
+cat >>$TMP_BASHRC <<EOBRC
+$BASHRC_START
+export GEM_HOME="$HOME/gems"
+mkdir -p "\$GEM_HOME"
+export GEM_PATH=
+export PATH="\$GEM_HOME/bin:\$PATH"
+$BASHRC_END
+EOBRC
+
+cat "$BASHRC" >> "$TMP_BASHRC"
+mv "$TMP_BASHRC" "$BASHRC"
+
+source "$BASHRC"
+
+# Speed up the installation of gems:
+echo 'gem: --no-ri --no-rdoc' > "$HOME/.gemrc"
+
+# Write sensible values into the config file:
+
+function random_alphanumerics() {
+ < /dev/urandom tr -dc A-Za-z0-9 | head -c$1
+}
+
+RANDOM_EMAIL_SECRET=$(random_alphanumerics 32)
+RANDOM_EMERGENCY_PASSWORD=$(random_alphanumerics 10)
+RANDOM_COOKIE_SECRET=$(random_alphanumerics 100)
+
+if ! [ -f config/general.yml ]
+then
+ sed -r \
+ -e "s,^( *DOMAIN:).*,\\1 '$HOST'," \
+ -e "s,^( *FORCE_SSL:).*,\\1 false," \
+ -e "s,^( *TIME_ZONE:).*,\\1 'Europe/London'," \
+ -e "s,^( *BLOG_FEED:).*,\\1 null," \
+ -e "s,^( *TWITTER_USERNAME:).*,\\1 null," \
+ -e "s,^( *INCLUDE_DEFAULT_LOCALE_IN_URLS:).*,\\1 false," \
+ -e "s,^( *INCOMING_EMAIL_DOMAIN:).*,\\1 '$HOST'," \
+ -e "s,^( *INCOMING_EMAIL_PREFIX:).*,\\1 'foi+'," \
+ -e "s,^( *INCOMING_EMAIL_SECRET:).*,\\1 '$RANDOM_EMAIL_SECRET'," \
+ -e "s,^( *ADMIN_USERNAME:).*,\\1 'emergency'," \
+ -e "s,^( *ADMIN_PASSWORD:).*,\\1 '$RANDOM_EMERGENCY_PASSWORD'," \
+ -e "s,^( *CONTACT_EMAIL:).*,\\1 'postmaster@$HOST'," \
+ -e "s,^( *TRACK_SENDER_EMAIL:).*,\\1 'postmaster@$HOST'," \
+ -e "s,^( *COOKIE_STORE_SESSION_SECRET:).*,\\1 '$RANDOM_COOKIE_SECRET'," \
+ -e "s,^( *FORWARD_NONBOUNCE_RESPONSES_TO:).*,\\1 'user-support@$HOST'," \
+ -e "s,^( *HTML_TO_PDF_COMMAND:).*,\\1 '/usr/bin/wkhtmltopdf-static'," \
+ -e "s,^( *EXCEPTION_NOTIFICATIONS_FROM:).*,\\1 'do-not-reply-to-this-address@$HOST'," \
+ -e "/EXCEPTION_NOTIFICATIONS_TO:/,/^$/c EXCEPTION_NOTIFICATIONS_TO:\n - team@$HOST\n" \
+ -e "s,^( *VARNISH_HOST:).*,\\1 null," \
+ -e "s,^( *MTA_LOG_PATH:).*,\\1 '/var/log/mail/mail.log-*'," \
+ -e "s,^( *MTA_LOG_TYPE:).*,\\1 'postfix'," \
+ -e "s,^( *DONATION_URL:).*,\\1 null," \
+ -e "s,^( *THEME_BRANCH:).*,\\1 'develop'," \
+ -e "s,^( *USE_MAILCATCHER_IN_DEVELOPMENT:).*,\\1 false," \
+ config/general.yml-example > config/general.yml
+fi
+
+# add database.yml
+sed -r \
+ -e "s,^( *database: *)foi_(.*),\\1${DB_NAME}_\\2," \
+ -e "s,^( *username: *).*,\\1${UNIX_USER}," \
+ -e "s,^( *password: *).*,\\1null," \
+ -e "s,^( *host: *).*,\\1/var/run/postgresql/," \
+ -e "s,# constraint_disabling: false, constraint_disabling: false," \
+ config/database.yml-example > config/database.yml
+
+for SUFFIX in production test development
+do
+ REAL_DB_NAME="${DB_NAME}_$SUFFIX"
+ echo Creating the database $REAL_DB_NAME
+ # Create each database if it doesn't exist:
+ if ! psql -l | egrep "^ *$REAL_DB_NAME *\|" > /dev/null
+ then
+ createdb -T template0 --owner "$UNIX_USER" "$REAL_DB_NAME"
+ fi
+done
+
+# Bundler isn't packaged on Debian squeeze, so we have to install it
+# as a gem:
+
+which bundle || gem install bundler
+
+echo Running rails-post-deploy
+script/rails-post-deploy
+
+LOADED_INDICATOR="$HOME/.alaveteli-sample-data-loaded"
+
+if [ ! -f "$LOADED_INDICATOR" ]
+then
+ echo Running load-sample-data
+ bundle exec script/load-sample-data
+
+ echo Running rebuild-xapian-index
+ script/rebuild-xapian-index
+
+ touch "$LOADED_INDICATOR"
+fi
diff --git a/script/make-crontab b/script/make-crontab
deleted file mode 100755
index d214f1485..000000000
--- a/script/make-crontab
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python
-import re
-
-mailto = "recipient-of-any-errors@localhost"
-user = "user-to-run-as"
-location = "/path/to/alaveteli"
-
-template = open("config/crontab-example").read()
-template = re.sub(r"MAILTO=.*", "MAILTO=%s" % mailto, template)
-template = template.replace("!!(*= $user *)!!", user)
-template = re.sub(r"/data/vhost/.*/script", location + "/script", template)
-
-print template
-
-
-
diff --git a/script/rails-post-deploy b/script/rails-post-deploy
index de950311c..bd5165a72 100755
--- a/script/rails-post-deploy
+++ b/script/rails-post-deploy
@@ -24,27 +24,32 @@ fi
# read config file in for later (STAGING_SITE)
if [ -e "config/general" ] || [ -e "config/general.yml" ]
then
- . commonlib/shlib/deployfns
- read_conf config/general
+ . commonlib/shlib/deployfns
+ read_conf config/general
else
- OPTION_DOMAIN=127.0.0.1:3000
- OPTION_STAGING_SITE=1
+ OPTION_DOMAIN=127.0.0.1:3000
+ OPTION_STAGING_SITE=1
fi
# create initial log files
if [ -e $TOP_DIR/../logs ]
then
- # mySociety servers have logs dir in level above
- rm -f log
- ln -s $TOP_DIR/../logs log
+ # mySociety servers have logs dir in level above
+ if ! [ -h log ] && [ -d log ]
+ then
+ # If log is a directory rather than a symlink, move that
+ # directory out of the way:
+ mv log log.original
+ fi
+ ln -sfn $TOP_DIR/../logs log
else
- # otherwise just make the directory
- if [ -h log ]
- then
- # remove any old-style symlink first
- rm -f log
- fi
- mkdir -p log
+ # otherwise just make the directory
+ if [ -h log ]
+ then
+ # remove any old-style symlink first
+ rm -f log
+ fi
+ mkdir -p log
fi
cd log
@@ -55,18 +60,18 @@ cd ..
if [ "$OPTION_STAGING_SITE" = "0" ]
then
cat <<-END
-
- *****************************************************************
- WARNING: About to make config/rails_env.rb which, via special
- code in config/boot.rb, forces the Rails environment to be
- "production". If this is a development system, please edit your
- config/general.yml file and set the STAGING_SITE option to 1,
- and also delete the generated config/rails_env.rb file.
- Alternatively, you can override config/rails_env.rb at any time
- with an environment variable.
- *****************************************************************
-
- END
+
+ *****************************************************************
+ WARNING: About to make config/rails_env.rb which, via special
+ code in config/boot.rb, forces the Rails environment to be
+ "production". If this is a development system, please edit your
+ config/general.yml file and set the STAGING_SITE option to 1,
+ and also delete the generated config/rails_env.rb file.
+ Alternatively, you can override config/rails_env.rb at any time
+ with an environment variable.
+ *****************************************************************
+
+END
echo "ENV['RAILS_ENV'] ||= 'production'" > config/rails_env.rb
fi
@@ -81,7 +86,7 @@ then
fi
if [ "$TRAVIS" = "true" ]
then
- bundle_install_options="--without development develop --deployment"
+ bundle_install_options="--without development develop --deployment"
fi
bundle install $bundle_install_options
@@ -91,3 +96,5 @@ bundle exec rake submodules:check
bundle exec rake db:migrate #--trace
bundle exec rake themes:install
+
+bundle exec rake assets:precompile
diff --git a/script/site-specific-install.sh b/script/site-specific-install.sh
new file mode 100755
index 000000000..8917fd577
--- /dev/null
+++ b/script/site-specific-install.sh
@@ -0,0 +1,163 @@
+#!/bin/sh
+
+# Set IDEAL_VERSION to the commitish we want to check out; typically
+# this is the version tag. Since this may not exist before release,
+# fall back to the master branch:
+VERSIONS="origin/install-script 0.15 origin/master"
+
+PARENT_SCRIPT_URL=https://github.com/mysociety/commonlib/blob/master/bin/install-site.sh
+
+misuse() {
+ echo The variable $1 was not defined, and it should be.
+ echo This script should not be run directly - instead, please run:
+ echo $PARENT_SCRIPT_URL
+ exit 1
+}
+
+# Strictly speaking we don't need to check all of these, but it might
+# catch some errors made when changing install-site.sh
+
+[ -z "$DIRECTORY" ] && misuse DIRECTORY
+[ -z "$UNIX_USER" ] && misuse UNIX_USER
+[ -z "$REPOSITORY" ] && misuse REPOSITORY
+[ -z "$REPOSITORY_URL" ] && misuse REPOSITORY_URL
+[ -z "$BRANCH" ] && misuse BRANCH
+[ -z "$SITE" ] && misuse SITE
+[ -z "$DEFAULT_SERVER" ] && misuse DEFAULT_SERVER
+[ -z "$HOST" ] && misuse HOST
+[ -z "$DISTRIBUTION" ] && misuse DISTRIBUTION
+[ -z "$VERSIONS" ] && misuse VERSIONS
+[ -z "$DEVELOPMENT_INSTALL" ] && misuse DEVELOPMENT_INSTALL
+[ -z "$BIN_DIRECTORY" ] && misuse BIN_DIRECTORY
+
+update_mysociety_apt_sources
+
+if [ ! "$DEVELOPMENT_INSTALL" = true ]; then
+ install_nginx
+ add_website_to_nginx
+ # Check out the first available requested version:
+ su -l -c "cd '$REPOSITORY' && (for v in $VERSIONS; do git checkout $v && break; done)" \
+ "$UNIX_USER"
+fi
+
+install_postfix
+
+# Now there's quite a bit of Postfix configuration that we need to
+# make sure is present:
+
+ensure_line_present \
+ "^ *alaveteli *unix *" \
+ "alaveteli unix - n n - 50 pipe flags=R user=$UNIX_USER argv=$REPOSITORY/script/mailin" \
+ /etc/postfix/master.cf 644
+
+ensure_line_present \
+ "^ *transport_maps *=" \
+ "transport_maps = regexp:/etc/postfix/transports" \
+ /etc/postfix/main.cf 644
+
+ensure_line_present \
+ "^ *local_recipient_maps *=" \
+ "local_recipient_maps = proxy:unix:passwd.byname regexp:/etc/postfix/recipients" \
+ /etc/postfix/main.cf 644
+
+ensure_line_present \
+ "^ *mydestination *=" \
+ "mydestination = $HOST, $(hostname --fqdn), localhost.localdomain, localhost" \
+ /etc/postfix/main.cf 644
+
+ensure_line_present \
+ "^do-not-reply" \
+ "do-not-reply-to-this-address: :blackhole:" \
+ /etc/aliases 644
+
+ensure_line_present \
+ "^mail" \
+ "mail.* -/var/log/mail/mail.log" \
+ /etc/rsyslog.d/50-default.conf 644
+
+cat > /etc/postfix/transports <<EOF
+/^foi.*/ alaveteli
+EOF
+
+cat > /etc/postfix/recipients <<EOF
+/^foi.*/ this-is-ignored
+/^postmaster@/ this-is-ignored
+/^user-support@/ this-is-ignored
+/^team@/ this-is-ignored
+EOF
+
+if ! egrep '^ */var/log/mail/mail.log *{' /etc/logrotate.d/rsyslog
+then
+ cat >> /etc/logrotate.d/rsyslog <<EOF
+/var/log/mail/mail.log {
+ rotate 30
+ daily
+ dateext
+ missingok
+ notifempty
+ compress
+ delaycompress
+ sharedscripts
+ postrotate
+ reload rsyslog >/dev/null 2>&1 || true
+ endscript
+}
+EOF
+fi
+
+/etc/init.d/rsyslog restart
+
+newaliases
+postmap /etc/postfix/transports
+postmap /etc/postfix/recipients
+postfix reload
+
+# (end of the Postfix configuration)
+
+install_website_packages
+
+# Make the PostgreSQL user a superuser to avoid the irritating error:
+# PG::Error: ERROR: permission denied: "RI_ConstraintTrigger_16564" is a system trigger
+# This is only needed for loading the sample data, so the superuser
+# permissions are dropped below.
+add_postgresql_user --superuser
+
+export DEVELOPMENT_INSTALL
+su -l -c "$BIN_DIRECTORY/install-as-user '$UNIX_USER' '$HOST' '$DIRECTORY'" "$UNIX_USER"
+
+# Now that the install-as-user script has loaded the sample data, we
+# no longer need the PostgreSQL user to be a superuser:
+echo "ALTER USER \"$UNIX_USER\" WITH NOSUPERUSER;" | su -l -c 'psql' postgres
+
+if [ ! "$DEVELOPMENT_INSTALL" = true ]; then
+ install_sysvinit_script
+fi
+
+# Set up root's crontab:
+
+cd "$REPOSITORY"
+
+echo -n "Creating /etc/cron.d/alaveteli... "
+(su -l -c "cd '$REPOSITORY' && bundle exec rake config_files:convert_crontab DEPLOY_USER='$UNIX_USER' VHOST_DIR='$DIRECTORY' VCSPATH='$SITE' SITE='$SITE' CRONTAB=config/crontab-example" "$UNIX_USER") > /etc/cron.d/alaveteli
+# There are some other parts to rewrite, so just do them with sed:
+sed -r \
+ -e "/foi-purge-varnish/d" \
+ -e "s,^(MAILTO=).*,\1root@$HOST," \
+ -e "s,run-with-lockfile,$REPOSITORY/commonlib/bin/run-with-lockfile.sh,g" \
+ -i /etc/cron.d/alaveteli
+echo $DONE_MSG
+
+echo -n "Creating /etc/init.d/foi-alert-tracks... "
+(su -l -c "cd '$REPOSITORY' && bundle exec rake config_files:convert_init_script DEPLOY_USER='$UNIX_USER' VHOST_DIR='$DIRECTORY' SCRIPT_FILE=config/alert-tracks-debian.ugly" "$UNIX_USER") > /etc/init.d/foi-alert-tracks
+chmod a+rx /etc/init.d/foi-alert-tracks
+echo $DONE_MSG
+
+if [ $DEFAULT_SERVER = true ] && [ x != x$EC2_HOSTNAME ]
+then
+ # If we're setting up as the default on an EC2 instance, make sure
+ # that the /etc/rc.local is set up to run the install script again
+ # to update the hostname:
+ overwrite_rc_local
+fi
+
+done_msg "Installation complete"; echo
diff --git a/script/switch-theme.rb b/script/switch-theme.rb
new file mode 100755
index 000000000..47f81c7a8
--- /dev/null
+++ b/script/switch-theme.rb
@@ -0,0 +1,120 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+# A simple script to swap around your Alaveteli themes when you're
+# hacking on Alaveteli. By default this assumes that you have an
+# 'alaveteli-themes' directory at the same level as your alaveteli git
+# repository, e.g.:
+#
+# alaveteli
+# ├── app
+# ├── cache
+# ...
+# └── vendor
+# alaveteli-themes/
+# ├── alavetelitheme
+# ├── asktheeu-theme
+# ├── chiediamo-theme
+# ├── ipvtheme
+# ├── queremossabertheme
+# ├── tuderechoasaber-theme
+# ├── whatdotheyknow-theme
+# └── yourrighttoknow
+#
+# However, you can override the location of your themes directory with
+# the environment variable ALAVETELI_THEMES_DIR.
+#
+# You need to have a corresponding general.yml file called, for example:
+#
+# config/general-whatdotheyknow-theme.yml
+# config/general-yourrighttoknow.yml
+
+require 'tempfile'
+
+theme_directory = ENV['ALAVETELI_THEMES_DIR']
+alaveteli_directory = File.expand_path(File.join(File.dirname(__FILE__),
+ ".."))
+unless theme_directory
+ theme_directory = File.expand_path File.join(alaveteli_directory,
+ '..',
+ 'alaveteli-themes')
+end
+
+unless File.exists? theme_directory
+ STDERR.puts "The theme directory '#{theme_directory}' didn't exist."
+ exit 1
+end
+
+# Assume that any directory directly under theme_directory is a theme:
+$available_themes = Dir.entries(theme_directory).find_all do |local_theme_name|
+ next if [".", ".."].index local_theme_name
+ next unless local_theme_name
+ full_path = File.join theme_directory, local_theme_name
+ next unless File.directory? full_path
+ next unless File.directory? File.join(full_path, '.git')
+ local_theme_name
+end
+
+if $available_themes.empty?
+ STDERR.puts "There were no theme directories found in '#{theme_directory}'"
+ exit
+end
+
+def usage_and_exit
+ STDERR.puts "Usage: #{$0} <THEME-NAME>"
+ $available_themes.sort.each do |theme_name|
+ STDERR.puts " #{theme_name}"
+ end
+ exit 1
+end
+
+usage_and_exit unless ARGV.length == 1
+requested_theme = ARGV[0]
+usage_and_exit unless $available_themes.include? requested_theme
+
+full_theme_path = File.join theme_directory, requested_theme
+
+config_directory = File.join alaveteli_directory, 'config'
+general_filename = File.join config_directory, "general.yml"
+theme_filename = File.join config_directory, "general-#{requested_theme}.yml"
+
+if File.exists?(general_filename) && ! (File.symlink? general_filename)
+ STDERR.puts "'#{general_filename}' exists, but isn't a symlink"
+ exit 1
+end
+
+unless File.exists? theme_filename
+ STDERR.puts "'#{theme_filename}' didn't exist"
+ exit 1
+end
+
+def symlink target, link_directory, link_name
+ tmp = Tempfile.new link_name, link_directory
+ if system("ln", "-sfn", target, tmp.path)
+ full_link_name = File.join(link_directory, link_name)
+ begin
+ File.rename tmp.path, full_link_name
+ rescue Errno::EISDIR
+ STDERR.puts "Couldn't overwrite #{full_link_name} since it's a directory"
+ exit 1
+ end
+ else
+ STDERR.puts "Failed to create a symlink from #{tmp.path} to #{target}"
+ exit 1
+ end
+end
+
+symlink(File.basename(theme_filename),
+ config_directory,
+ "general.yml")
+
+symlink(File.join(full_theme_path, 'public'),
+ File.join(alaveteli_directory, 'public'),
+ 'alavetelitheme')
+
+symlink(full_theme_path,
+ File.join(alaveteli_directory, 'vendor', 'plugins'),
+ requested_theme)
+
+STDERR.puts """Switched to #{requested_theme}!
+You will need to restart any development server you have running."""
diff --git a/spec/controllers/admin_incoming_message_controller_spec.rb b/spec/controllers/admin_incoming_message_controller_spec.rb
index b969a8a3f..21c744e5b 100644
--- a/spec/controllers/admin_incoming_message_controller_spec.rb
+++ b/spec/controllers/admin_incoming_message_controller_spec.rb
@@ -50,6 +50,17 @@ describe AdminIncomingMessageController, "when administering incoming messages"
:url_title => destination_info_request.url_title
end
+ it 'should succeed, even if a duplicate xapian indexing job is created' do
+
+ with_duplicate_xapian_job_creation do
+ current_info_request = info_requests(:fancy_dog_request)
+ destination_info_request = info_requests(:naughty_chicken_request)
+ incoming_message = incoming_messages(:useless_incoming_message)
+ post :redeliver, :redeliver_incoming_message_id => incoming_message.id,
+ :url_title => destination_info_request.url_title
+ end
+
+ end
end
diff --git a/spec/controllers/admin_public_body_controller_spec.rb b/spec/controllers/admin_public_body_controller_spec.rb
index 8a72db724..fe5087d7c 100644
--- a/spec/controllers/admin_public_body_controller_spec.rb
+++ b/spec/controllers/admin_public_body_controller_spec.rb
@@ -55,7 +55,8 @@ describe AdminPublicBodyController, "when administering public bodies" do
end
it "mass assigns tags" do
- n = PublicBody.count
+ condition = "public_body_translations.locale = ?"
+ n = PublicBody.joins(:translations).where([condition, "en"]).count
post :mass_tag_add, { :new_tag => "department", :table_name => "substring" }
request.flash[:notice].should == "Added tag to table of bodies."
response.should redirect_to(:action=>'list')
diff --git a/spec/controllers/general_controller_spec.rb b/spec/controllers/general_controller_spec.rb
index 8c86ad0be..116dbe07a 100644
--- a/spec/controllers/general_controller_spec.rb
+++ b/spec/controllers/general_controller_spec.rb
@@ -73,11 +73,10 @@ describe GeneralController, "when showing the frontpage" do
end
it "should render the front page with default language" do
- old_default_locale = I18n.default_locale
- I18n.default_locale = "es"
- get :frontpage
- response.should have_selector('html[lang="es"]')
- I18n.default_locale = old_default_locale
+ with_default_locale("es") do
+ get :frontpage
+ response.should have_selector('html[lang="es"]')
+ end
end
it "should render the front page with default language and ignore the browser setting" do
@@ -85,11 +84,10 @@ describe GeneralController, "when showing the frontpage" do
config['USE_DEFAULT_BROWSER_LANGUAGE'] = false
accept_language = "en-GB,en-US;q=0.8,en;q=0.6"
request.env['HTTP_ACCEPT_LANGUAGE'] = accept_language
- old_default_locale = I18n.default_locale
- I18n.default_locale = "es"
- get :frontpage
- response.should have_selector('html[lang="es"]')
- I18n.default_locale = old_default_locale
+ with_default_locale("es") do
+ get :frontpage
+ response.should have_selector('html[lang="es"]')
+ end
end
it "should render the front page with browser-selected language when there's no default set" do
@@ -219,6 +217,17 @@ describe GeneralController, 'when using xapian search' do
assigns[:xapian_bodies].should == nil
end
+ it 'should highlight words for a user-only request' do
+ get :search, :combined => "bob/users"
+ assigns[:highlight_words].should == ['bob']
+ end
+
+ it 'should show spelling corrections for a user-only request' do
+ get :search, :combined => "rob/users"
+ assigns[:spelling_correction].should == 'bob'
+ response.body.should include('did_you_mean')
+ end
+
it "should filter results based on end of URL being 'requests'" do
get :search, :combined => "bob/requests"
assigns[:xapian_requests].results.map{|x|x[:model]}.should =~ [
@@ -238,6 +247,11 @@ describe GeneralController, 'when using xapian search' do
assigns[:xapian_bodies].results.map{|x|x[:model]}.should == [public_bodies(:geraldine_public_body)]
end
+ it 'should show "Browse all" link if there are no results for a search restricted to bodies' do
+ get :search, :combined => "noresultsshouldbefound/bodies"
+ response.body.should include('Browse all')
+ end
+
it "should show help when searching for nothing" do
get :search_redirect, :query => nil
response.should render_template('search')
diff --git a/spec/controllers/public_body_controller_spec.rb b/spec/controllers/public_body_controller_spec.rb
index 2d1b1466f..63989baaa 100644
--- a/spec/controllers/public_body_controller_spec.rb
+++ b/spec/controllers/public_body_controller_spec.rb
@@ -82,21 +82,23 @@ describe PublicBodyController, "when listing bodies" do
def make_single_language_example(locale)
result = nil
- I18n.with_locale(locale) do
- case locale
- when :en
- result = PublicBody.new(:name => 'English only',
- :short_name => 'EO')
- when :es
- result = PublicBody.new(:name => 'Español Solamente',
- :short_name => 'ES')
- else
- raise StandardError.new "Unknown locale #{locale}"
+ with_default_locale(locale) do
+ I18n.with_locale(locale) do
+ case locale
+ when :en
+ result = PublicBody.new(:name => 'English only',
+ :short_name => 'EO')
+ when :es
+ result = PublicBody.new(:name => 'Español Solamente',
+ :short_name => 'ES')
+ else
+ raise StandardError.new "Unknown locale #{locale}"
+ end
+ result.request_email = "#{locale}@example.org"
+ result.last_edit_editor = 'test'
+ result.last_edit_comment = ''
+ result.save
end
- result.request_email = "#{locale}@example.org"
- result.last_edit_editor = 'test'
- result.last_edit_comment = ''
- result.save
end
result
end
@@ -188,13 +190,13 @@ describe PublicBodyController, "when listing bodies" do
end
it "should list bodies in alphabetical order with different locale" do
- I18n.default_locale = :es
- get :list
- response.should render_template('list')
- assigns[:public_bodies].should == [ public_bodies(:geraldine_public_body), public_bodies(:humpadink_public_body) ]
- assigns[:tag].should == "all"
- assigns[:description].should == ""
- I18n.default_locale = :en
+ with_default_locale(:es) do
+ get :list
+ response.should render_template('list')
+ assigns[:public_bodies].should == [ public_bodies(:geraldine_public_body), public_bodies(:humpadink_public_body) ]
+ assigns[:tag].should == "all"
+ assigns[:description].should == ""
+ end
end
it "should list a tagged thing on the appropriate list page, and others on the other page, and all still on the all page" do
@@ -250,6 +252,13 @@ describe PublicBodyController, "when listing bodies" do
response.code.should == '406'
end
+ it "should list authorities starting with a multibyte first letter" do
+ get :list, {:tag => "å", :show_locale => 'cs'}
+ response.should render_template('list')
+ assigns[:public_bodies].should == [ public_bodies(:accented_public_body) ]
+ assigns[:tag].should == "Å"
+ end
+
end
describe PublicBodyController, "when showing JSON version for API" do
@@ -266,41 +275,142 @@ describe PublicBodyController, "when showing JSON version for API" do
end
+describe PublicBodyController, "when asked to export public bodies as CSV" do
+
+ it "should return a valid CSV file with the right number of rows" do
+ get :list_all_csv
+ all_data = CSV.parse response.body
+ all_data.length.should == 8
+ # Check that the header has the right number of columns:
+ all_data[0].length.should == 11
+ # And an actual line of data:
+ all_data[1].length.should == 11
+ end
+
+end
+
describe PublicBodyController, "when showing public body statistics" do
- it "should render the right template with the right data" do
- config = MySociety::Config.load_default()
- config['MINIMUM_REQUESTS_FOR_STATISTICS'] = 1
- config['PUBLIC_BODY_STATISTICS_PAGE'] = true
- get :statistics
- response.should render_template('public_body/statistics')
- # There are 5 different graphs we're creating at the moment.
- assigns[:graph_list].length.should == 5
- # The first is the only one with raw values, the rest are
- # percentages with error bars:
- assigns[:graph_list].each_with_index do |graph, index|
- if index == 0
- graph['errorbars'].should be_false
- graph['x_values'].length.should == 4
- graph['x_values'].should == [0, 1, 2, 3]
- graph['y_values'].should == [1, 2, 2, 4]
- else
- graph['errorbars'].should be_true
- # Just check the first one:
- if index == 1
- graph['x_values'].should == [0, 1, 2, 3]
- graph['y_values'].should == [0, 50, 100, 100]
+ it "should render the right template with the right data" do
+ config = MySociety::Config.load_default()
+ config['MINIMUM_REQUESTS_FOR_STATISTICS'] = 1
+ config['PUBLIC_BODY_STATISTICS_PAGE'] = true
+ get :statistics
+ response.should render_template('public_body/statistics')
+ # There are 5 different graphs we're creating at the moment.
+ assigns[:graph_list].length.should == 5
+ # The first is the only one with raw values, the rest are
+ # percentages with error bars:
+ assigns[:graph_list].each_with_index do |graph, index|
+ if index == 0
+ graph['errorbars'].should be_false
+ graph['x_values'].length.should == 4
+ graph['x_values'].should == [0, 1, 2, 3]
+ graph['y_values'].should == [1, 2, 2, 4]
+ else
+ graph['errorbars'].should be_true
+ # Just check the first one:
+ if index == 1
+ graph['x_values'].should == [0, 1, 2, 3]
+ graph['y_values'].should == [0, 50, 100, 100]
+ end
+ # Check that at least every confidence interval value is
+ # a Float (rather than NilClass, say):
+ graph['cis_below'].each { |v| v.should be_instance_of(Float) }
+ graph['cis_above'].each { |v| v.should be_instance_of(Float) }
+ end
end
- # Check that at least every confidence interval value is
- # a Float (rather than NilClass, say):
- graph['cis_below'].each { |v| v.should be_instance_of(Float) }
- graph['cis_above'].each { |v| v.should be_instance_of(Float) }
- end
end
- end
end
+describe PublicBodyController, "when converting data for graphing" do
+
+ before(:each) do
+ @raw_count_data = PublicBody.get_request_totals(n=3,
+ highest=true,
+ minimum_requests=1)
+ @percentages_data = PublicBody.get_request_percentages(
+ column='info_requests_successful_count',
+ n=3,
+ highest=false,
+ minimum_requests=1)
+ end
+
+ it "should not include the real public body model instance" do
+ to_draw = controller.simplify_stats_for_graphs(@raw_count_data,
+ column='blah_blah',
+ percentages=false,
+ {} )
+ to_draw['public_bodies'][0].class.should == Hash
+ to_draw['public_bodies'][0].has_key?('request_email').should be_false
+ end
+
+ it "should generate the expected id" do
+ to_draw = controller.simplify_stats_for_graphs(@raw_count_data,
+ column='blah_blah',
+ percentages=false,
+ {:highest => true} )
+ to_draw['id'].should == "blah_blah-highest"
+ to_draw = controller.simplify_stats_for_graphs(@raw_count_data,
+ column='blah_blah',
+ percentages=false,
+ {:highest => false} )
+ to_draw['id'].should == "blah_blah-lowest"
+ end
+
+ it "should have exactly the expected keys" do
+ to_draw = controller.simplify_stats_for_graphs(@raw_count_data,
+ column='blah_blah',
+ percentages=false,
+ {} )
+ to_draw.keys.sort.should == ["errorbars", "id", "public_bodies",
+ "title", "tooltips", "totals",
+ "x_axis", "x_ticks", "x_values",
+ "y_axis", "y_max", "y_values"]
+
+ to_draw = controller.simplify_stats_for_graphs(@percentages_data,
+ column='whatever',
+ percentages=true,
+ {})
+ to_draw.keys.sort.should == ["cis_above", "cis_below",
+ "errorbars", "id", "public_bodies",
+ "title", "tooltips", "totals",
+ "x_axis", "x_ticks", "x_values",
+ "y_axis", "y_max", "y_values"]
+ end
+
+ it "should have values of the expected class and length" do
+ [controller.simplify_stats_for_graphs(@raw_count_data,
+ column='blah_blah',
+ percentages=false,
+ {}),
+ controller.simplify_stats_for_graphs(@percentages_data,
+ column='whatever',
+ percentages=true,
+ {})].each do |to_draw|
+ per_pb_keys = ["cis_above", "cis_below", "public_bodies",
+ "tooltips", "totals", "x_ticks", "x_values",
+ "y_values"]
+ # These should be all be arrays with one element per public body:
+ per_pb_keys.each do |key|
+ if to_draw.has_key? key
+ to_draw[key].class.should == Array
+ to_draw[key].length.should eq(3), "for key #{key}"
+ end
+ end
+ # Just check that the rest aren't of class Array:
+ to_draw.keys.each do |key|
+ unless per_pb_keys.include? key
+ to_draw[key].class.should_not eq(Array), "for key #{key}"
+ end
+ end
+ end
+ end
+
+end
+
+
describe PublicBodyController, "when doing type ahead searches" do
render_views
diff --git a/spec/controllers/track_controller_spec.rb b/spec/controllers/track_controller_spec.rb
index a16024828..57d084f6b 100644
--- a/spec/controllers/track_controller_spec.rb
+++ b/spec/controllers/track_controller_spec.rb
@@ -55,6 +55,39 @@ describe TrackController, "when making a new track on a request" do
end
+describe TrackController, "when unsubscribing from a track" do
+
+ before do
+ @track_thing = FactoryGirl.create(:track_thing)
+ end
+
+ it 'should destroy the track thing' do
+ get :update, {:track_id => @track_thing.id,
+ :track_medium => 'delete',
+ :r => 'http://example.com'},
+ {:user_id => @track_thing.tracking_user.id}
+ TrackThing.find(:first, :conditions => ['id = ? ', @track_thing.id]).should == nil
+ end
+
+ it 'should redirect to a URL on the site' do
+ get :update, {:track_id => @track_thing.id,
+ :track_medium => 'delete',
+ :r => '/'},
+ {:user_id => @track_thing.tracking_user.id}
+ response.should redirect_to('/')
+ end
+
+ it 'should not redirect to a url on another site' do
+ track_thing = FactoryGirl.create(:track_thing)
+ get :update, {:track_id => @track_thing.id,
+ :track_medium => 'delete',
+ :r => 'http://example.com/'},
+ {:user_id => @track_thing.tracking_user.id}
+ response.should redirect_to('/')
+ end
+
+end
+
describe TrackController, "when sending alerts for a track" do
render_views
diff --git a/spec/factories.rb b/spec/factories.rb
index 653525920..7d8f94ac1 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -137,4 +137,11 @@ FactoryGirl.define do
last_edit_comment "Making an edit"
end
+ factory :track_thing do
+ association :tracking_user, :factory => :user
+ track_medium 'email_daily'
+ track_type 'search_query'
+ track_query 'Example Query'
+ end
+
end
diff --git a/spec/fixtures/files/fake-authority-type.csv b/spec/fixtures/files/fake-authority-type.csv
index cb25050c6..a320941c7 100644
--- a/spec/fixtures/files/fake-authority-type.csv
+++ b/spec/fixtures/files/fake-authority-type.csv
@@ -2,3 +2,5 @@
,Scottish Fake Authority,scottish_foi@localhost
,Fake Authority of Northern Ireland,ni_foi@localhost
,Gobierno de Aragón,spain_foi@localhost
+,Nordic æøå,no_foi@localhost
+
diff --git a/spec/fixtures/outgoing_messages.yml b/spec/fixtures/outgoing_messages.yml
index 971ce0cc5..92de076c4 100644
--- a/spec/fixtures/outgoing_messages.yml
+++ b/spec/fixtures/outgoing_messages.yml
@@ -12,6 +12,8 @@
# last_sent_at :datetime
# incoming_message_followup_id :integer
# what_doing :string(255) not null
+# prominence :string(255) default("normal"), not null
+# prominence_reason :text
#
useless_outgoing_message:
diff --git a/spec/fixtures/public_bodies.yml b/spec/fixtures/public_bodies.yml
index 1fa016d3a..d0eb572b3 100644
--- a/spec/fixtures/public_bodies.yml
+++ b/spec/fixtures/public_bodies.yml
@@ -2,23 +2,27 @@
#
# Table name: public_bodies
#
-# id :integer not null, primary key
-# name :text not null
-# short_name :text not null
-# request_email :text not null
-# version :integer not null
-# last_edit_editor :string(255) not null
-# last_edit_comment :text not null
-# created_at :datetime not null
-# updated_at :datetime not null
-# url_name :text not null
-# home_page :text default(""), not null
-# notes :text default(""), not null
-# first_letter :string(255) not null
-# publication_scheme :text default(""), not null
-# api_key :string(255) not null
-# info_requests_count :integer default(0), not null
-# disclosure_log :text default(""), not null
+# id :integer not null, primary key
+# name :text not null
+# short_name :text not null
+# request_email :text not null
+# version :integer not null
+# last_edit_editor :string(255) not null
+# last_edit_comment :text not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# url_name :text not null
+# home_page :text default(""), not null
+# notes :text default(""), not null
+# first_letter :string(255) not null
+# publication_scheme :text default(""), not null
+# api_key :string(255) not null
+# info_requests_count :integer default(0), not null
+# disclosure_log :text default(""), not null
+# info_requests_successful_count :integer
+# info_requests_not_held_count :integer
+# info_requests_overdue_count :integer
+# info_requests_visible_classified_count :integer
#
geraldine_public_body:
@@ -35,6 +39,7 @@ geraldine_public_body:
created_at: 2007-10-24 10:51:01.161639
api_key: 1
info_requests_count: 4
+ info_requests_visible_classified_count: 4
info_requests_successful_count: 0
info_requests_not_held_count: 0
info_requests_overdue_count: 3
@@ -53,6 +58,7 @@ humpadink_public_body:
notes: An albatross told me!!!
api_key: 2
info_requests_count: 2
+ info_requests_visible_classified_count: 2
info_requests_successful_count: 1
info_requests_not_held_count: 0
info_requests_overdue_count: 1
@@ -71,6 +77,7 @@ forlorn_public_body:
notes: A very lonely public body that no one has corresponded with
api_key: 3
info_requests_count: 0
+ info_requests_visible_classified_count: 0
info_requests_successful_count: 0
info_requests_not_held_count: 0
info_requests_overdue_count: 0
@@ -89,6 +96,7 @@ silly_walks_public_body:
notes: You know the one.
api_key: 4
info_requests_count: 2
+ info_requests_visible_classified_count: 2
info_requests_successful_count: 2
info_requests_not_held_count: 0
info_requests_overdue_count: 0
@@ -107,6 +115,7 @@ sensible_walks_public_body:
created_at: 2008-10-25 10:51:01.161639
api_key: 5
info_requests_count: 1
+ info_requests_visible_classified_count: 1
info_requests_successful_count: 1
info_requests_not_held_count: 0
info_requests_overdue_count: 0
@@ -125,6 +134,26 @@ other_public_body:
created_at: 2008-10-25 10:51:01.161639
api_key: 6
info_requests_count: 0
+ info_requests_visible_classified_count: 0
+ info_requests_successful_count: 0
+ info_requests_not_held_count: 0
+ info_requests_overdue_count: 0
+accented_public_body:
+ id: 8
+ version: 1
+ name: 'Åčçèñtéd Authority'
+ first_letter: Å
+ request_email: accented@localhost
+ short_name: 'Åčçèñtéd Authority'
+ url_name: accented_authority
+ notes: This is to test unicode handling in body names
+ updated_at: 2008-10-25 10:51:01.161639
+ last_edit_comment: Another edit
+ last_edit_editor: louise
+ created_at: 2008-10-25 10:51:01.161639
+ api_key: 7
+ info_requests_count: 0
+ info_requests_visible_classified_count: 0
info_requests_successful_count: 0
info_requests_not_held_count: 0
info_requests_overdue_count: 0
diff --git a/spec/fixtures/public_body_translations.yml b/spec/fixtures/public_body_translations.yml
index de1bf2f18..2030804ac 100644
--- a/spec/fixtures/public_body_translations.yml
+++ b/spec/fixtures/public_body_translations.yml
@@ -115,3 +115,15 @@ humpadink_he_IL_public_body_translation:
publication_scheme: ""
disclosure_log: ""
+accented_public_body_translation:
+ id: 10
+ public_body_id: 8
+ locale: cs
+ name: "Åčçèñtéd Authority"
+ first_letter: 'Å'
+ request_email: accented@localhost
+ short_name: "Åčçèñtéd Authority"
+ url_name: accented_authority
+ notes: This is to test unicode handling in body names
+ publication_scheme: ""
+ disclosure_log: ""
diff --git a/spec/fixtures/users.yml b/spec/fixtures/users.yml
index d996fd31e..9eb91ee9c 100644
--- a/spec/fixtures/users.yml
+++ b/spec/fixtures/users.yml
@@ -20,8 +20,6 @@
# email_bounce_message :text default(""), not null
# no_limit :boolean default(FALSE), not null
# receive_email_alerts :boolean default(TRUE), not null
-# address :string(255)
-# dob :date
#
bob_smith_user:
diff --git a/spec/integration/cookie_stripping_spec.rb b/spec/integration/cookie_stripping_spec.rb
new file mode 100644
index 000000000..897899fd5
--- /dev/null
+++ b/spec/integration/cookie_stripping_spec.rb
@@ -0,0 +1,12 @@
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+require File.expand_path(File.dirname(__FILE__) + '/alaveteli_dsl')
+
+describe 'when making stripping cookies' do
+
+ it 'should not set a cookie when no significant session data is set' do
+ get 'country_message'
+ response.headers['Set-Cookie'].should be_blank
+ end
+
+end
+
diff --git a/spec/lib/theme_spec.rb b/spec/lib/theme_spec.rb
new file mode 100644
index 000000000..829c1a269
--- /dev/null
+++ b/spec/lib/theme_spec.rb
@@ -0,0 +1,25 @@
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+describe "theme_url_to_theme_name" do
+
+ it "should deal with a typical bare repo URL" do
+ url = 'git://wherever/blah-theme.git'
+ theme_url_to_theme_name(url).should == 'blah-theme'
+ end
+
+ it "should deal with a typical bare repo URL with trailing slashes" do
+ url = 'ssh://wherever/blah-theme.git//'
+ theme_url_to_theme_name(url).should == 'blah-theme'
+ end
+
+ it "should deal with a typical non-bare repo URL" do
+ url = '/home/whoever/themes/blah-theme'
+ theme_url_to_theme_name(url).should == 'blah-theme'
+ end
+
+ it "should deal with a typical non-bare repo URL with a trailing slash" do
+ url = '/home/whoever/themes/blah-theme/'
+ theme_url_to_theme_name(url).should == 'blah-theme'
+ end
+
+end
diff --git a/spec/lib/whatdotheyknow/strip_empty_sessions_spec.rb b/spec/lib/whatdotheyknow/strip_empty_sessions_spec.rb
index 9bd5ccb93..fcd729b48 100644
--- a/spec/lib/whatdotheyknow/strip_empty_sessions_spec.rb
+++ b/spec/lib/whatdotheyknow/strip_empty_sessions_spec.rb
@@ -1,71 +1,71 @@
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe WhatDoTheyKnow::StripEmptySessions do
-
+
def make_response(session_data, response_headers)
app = lambda do |env|
env['rack.session'] = session_data
- return [200, response_headers, ['content']]
+ return [200, response_headers, ['content']]
end
strip_empty_sessions = WhatDoTheyKnow::StripEmptySessions
app = strip_empty_sessions.new(app, {:key => 'mykey', :path => '', :httponly => true})
response = Rack::MockRequest.new(app).get('/', 'HTTP_ACCEPT' => 'text/html')
end
-
- it 'should not prevent a cookie being set if there is data in the session' do
- session_data = { :some_real_data => 'important',
- :session_id => 'my_session_id',
- :_csrf_token => 'hi_there' }
- application_response_headers = { 'Content-Type' => 'text/html',
+
+ it 'should not prevent a cookie being set if there is data in the session' do
+ session_data = { 'some_real_data' => 'important',
+ 'session_id' => 'my_session_id',
+ '_csrf_token' => 'hi_there' }
+ application_response_headers = { 'Content-Type' => 'text/html',
'Set-Cookie' => 'mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly'}
response = make_response(session_data, application_response_headers)
response.headers['Set-Cookie'].should == 'mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly'
end
- describe 'if there is no meaningful data in the session' do
+ describe 'if there is no meaningful data in the session' do
- before do
- @session_data = { :session_id => 'my_session_id',
- :_csrf_token => 'hi_there' }
+ before do
+ @session_data = { 'session_id' => 'my_session_id',
+ '_csrf_token' => 'hi_there' }
end
-
- it 'should not strip any other header' do
+
+ it 'should not strip any other header' do
application_response_headers = { 'Content-Type' => 'text/html',
'Set-Cookie' => 'mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly'}
response = make_response(@session_data, application_response_headers)
response.headers['Content-Type'].should == 'text/html'
end
-
- it 'should strip the session cookie setting header ' do
- application_response_headers = { 'Content-Type' => 'text/html',
+
+ it 'should strip the session cookie setting header ' do
+ application_response_headers = { 'Content-Type' => 'text/html',
'Set-Cookie' => 'mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly'}
response = make_response(@session_data, application_response_headers)
response.headers['Set-Cookie'].should == ""
end
-
- it 'should strip the session cookie setting header even with a locale' do
- @session_data[:locale] = 'en'
- application_response_headers = { 'Content-Type' => 'text/html',
+
+ it 'should strip the session cookie setting header even with a locale' do
+ @session_data['locale'] = 'en'
+ application_response_headers = { 'Content-Type' => 'text/html',
'Set-Cookie' => 'mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly'}
response = make_response(@session_data, application_response_headers)
response.headers['Set-Cookie'].should == ""
end
- it 'should not strip the session cookie setting for admins' do
- @session_data[:using_admin] = 1
- application_response_headers = { 'Content-Type' => 'text/html',
+ it 'should not strip the session cookie setting for admins' do
+ @session_data['using_admin'] = 1
+ application_response_headers = { 'Content-Type' => 'text/html',
'Set-Cookie' => 'mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly'}
response = make_response(@session_data, application_response_headers)
response.headers['Set-Cookie'].should == "mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly"
end
-
- it 'should strip the session cookie setting header (but no other cookie setting header) if there is more than one' do
- application_response_headers = { 'Content-Type' => 'text/html',
+
+ it 'should strip the session cookie setting header (but no other cookie setting header) if there is more than one' do
+ application_response_headers = { 'Content-Type' => 'text/html',
'Set-Cookie' => ['mykey=f274c61a35320c52d45e9f8d7d4e2649; path=/; HttpOnly',
'other=mydata']}
response = make_response(@session_data, application_response_headers)
response.headers['Set-Cookie'].should == ['other=mydata']
end
-
+
end
end
diff --git a/spec/models/info_request_spec.rb b/spec/models/info_request_spec.rb
index 7281b74b6..64ad1972e 100644
--- a/spec/models/info_request_spec.rb
+++ b/spec/models/info_request_spec.rb
@@ -770,6 +770,16 @@ describe InfoRequest do
end
end
+ describe 'when working out a subject for request emails' do
+
+ it 'should create a standard request subject' do
+ info_request = FactoryGirl.build(:info_request)
+ expected_text = "Freedom of Information request - #{info_request.title}"
+ info_request.email_subject_request.should == expected_text
+ end
+
+ end
+
describe 'when working out a subject for a followup emails' do
it "should not be confused by an nil subject in the incoming message" do
diff --git a/spec/models/outgoing_message_spec.rb b/spec/models/outgoing_message_spec.rb
index 8c000665b..bb270ca16 100644
--- a/spec/models/outgoing_message_spec.rb
+++ b/spec/models/outgoing_message_spec.rb
@@ -12,6 +12,8 @@
# last_sent_at :datetime
# incoming_message_followup_id :integer
# what_doing :string(255) not null
+# prominence :string(255) default("normal"), not null
+# prominence_reason :text
#
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb
index 582f1430e..23842ccff 100644
--- a/spec/models/public_body_spec.rb
+++ b/spec/models/public_body_spec.rb
@@ -3,23 +3,27 @@
#
# Table name: public_bodies
#
-# id :integer not null, primary key
-# name :text not null
-# short_name :text not null
-# request_email :text not null
-# version :integer not null
-# last_edit_editor :string(255) not null
-# last_edit_comment :text not null
-# created_at :datetime not null
-# updated_at :datetime not null
-# url_name :text not null
-# home_page :text default(""), not null
-# notes :text default(""), not null
-# first_letter :string(255) not null
-# publication_scheme :text default(""), not null
-# api_key :string(255) not null
-# info_requests_count :integer default(0), not null
-# disclosure_log :text default(""), not null
+# id :integer not null, primary key
+# name :text not null
+# short_name :text not null
+# request_email :text not null
+# version :integer not null
+# last_edit_editor :string(255) not null
+# last_edit_comment :text not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# url_name :text not null
+# home_page :text default(""), not null
+# notes :text default(""), not null
+# first_letter :string(255) not null
+# publication_scheme :text default(""), not null
+# api_key :string(255) not null
+# info_requests_count :integer default(0), not null
+# disclosure_log :text default(""), not null
+# info_requests_successful_count :integer
+# info_requests_not_held_count :integer
+# info_requests_overdue_count :integer
+# info_requests_visible_classified_count :integer
#
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
@@ -190,6 +194,17 @@ describe PublicBody, " when saving" do
@public_body.first_letter.should == 'T'
end
+ it "should update first letter, even if it's a multibyte character" do
+ pb = PublicBody.new(:name => 'åccents, lower-case',
+ :short_name => 'ALC',
+ :request_email => 'foo@localhost',
+ :last_edit_editor => 'test',
+ :last_edit_comment => '')
+ pb.first_letter.should be_nil
+ pb.save!
+ pb.first_letter.should == 'Å'
+ end
+
it "should save the name when renaming an existing public body" do
public_body = public_bodies(:geraldine_public_body)
public_body.name = "Mark's Public Body"
@@ -300,7 +315,7 @@ describe PublicBody, " when loading CSV files" do
errors.should == []
notes.size.should == 2
notes[0].should == "line 1: creating new authority 'aBody' (locale: en):\n\t{\"name\":\"aBody\"}"
- notes[1].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( [A-Za-z ]+\n)*You may want to delete them manually.\n/
+ notes[1].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
end
it "should do a dry run successfully" do
@@ -309,14 +324,15 @@ describe PublicBody, " when loading CSV files" do
csv_contents = normalize_string_to_utf8(load_file_fixture("fake-authority-type.csv"))
errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', true, 'someadmin') # true means dry run
errors.should == []
- notes.size.should == 5
- notes[0..3].should == [
+ notes.size.should == 6
+ notes[0..4].should == [
"line 1: creating new authority 'North West Fake Authority' (locale: en):\n\t\{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\"\}",
"line 2: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\"\}",
"line 3: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"\}",
"line 4: creating new authority 'Gobierno de Aragón' (locale: en):\n\t\{\"name\":\"Gobierno de Arag\\u00f3n\",\"request_email\":\"spain_foi@localhost\"}",
+ "line 5: creating new authority 'Nordic æøå' (locale: en):\n\t{\"name\":\"Nordic \\u00e6\\u00f8\\u00e5\",\"request_email\":\"no_foi@localhost\"}"
]
- notes[4].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( [A-Za-z ]+\n)*You may want to delete them manually.\n/
+ notes[5].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
PublicBody.count.should == original_count
end
@@ -327,16 +343,17 @@ describe PublicBody, " when loading CSV files" do
csv_contents = normalize_string_to_utf8(load_file_fixture("fake-authority-type.csv"))
errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', false, 'someadmin') # false means real run
errors.should == []
- notes.size.should == 5
- notes[0..3].should == [
+ notes.size.should == 6
+ notes[0..4].should == [
"line 1: creating new authority 'North West Fake Authority' (locale: en):\n\t\{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\"\}",
"line 2: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\"\}",
"line 3: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"\}",
"line 4: creating new authority 'Gobierno de Aragón' (locale: en):\n\t\{\"name\":\"Gobierno de Arag\\u00f3n\",\"request_email\":\"spain_foi@localhost\"}",
+ "line 5: creating new authority 'Nordic æøå' (locale: en):\n\t{\"name\":\"Nordic \\u00e6\\u00f8\\u00e5\",\"request_email\":\"no_foi@localhost\"}"
]
- notes[4].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( [A-Za-z ]+\n)*You may want to delete them manually.\n/
+ notes[5].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
- PublicBody.count.should == original_count + 4
+ PublicBody.count.should == original_count + 5
end
it "should do imports without a tag successfully" do
@@ -345,15 +362,16 @@ describe PublicBody, " when loading CSV files" do
csv_contents = normalize_string_to_utf8(load_file_fixture("fake-authority-type.csv"))
errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', false, 'someadmin') # false means real run
errors.should == []
- notes.size.should == 5
- notes[0..3].should == [
+ notes.size.should == 6
+ notes[0..4].should == [
"line 1: creating new authority 'North West Fake Authority' (locale: en):\n\t\{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\"\}",
"line 2: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\"\}",
"line 3: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"\}",
"line 4: creating new authority 'Gobierno de Aragón' (locale: en):\n\t\{\"name\":\"Gobierno de Arag\\u00f3n\",\"request_email\":\"spain_foi@localhost\"}",
+ "line 5: creating new authority 'Nordic æøå' (locale: en):\n\t{\"name\":\"Nordic \\u00e6\\u00f8\\u00e5\",\"request_email\":\"no_foi@localhost\"}"
]
- notes[4].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( [A-Za-z ]+\n)*You may want to delete them manually.\n/
- PublicBody.count.should == original_count + 4
+ notes[5].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
+ PublicBody.count.should == original_count + 5
end
it "should handle a field list and fields out of order" do
@@ -368,7 +386,7 @@ describe PublicBody, " when loading CSV files" do
"line 3: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\",\"home_page\":\"http://scottish.org\",\"tag_string\":\"scottish\"\}",
"line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\",\"tag_string\":\"fake aTag\"\}",
]
- notes[3].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( [A-Za-z ]+\n)*You may want to delete them manually.\n/
+ notes[3].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
PublicBody.count.should == original_count
end
@@ -425,7 +443,7 @@ describe PublicBody, " when loading CSV files" do
"line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\",\"tag_string\":\"fake aTag\"}",
"line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: es):\n\t{\"name\":\"Autoridad Irlandesa\"}",
]
- notes[6].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( [A-Za-z ]+\n)*You may want to delete them manually.\n/
+ notes[6].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
PublicBody.count.should == original_count + 3
@@ -451,7 +469,7 @@ describe PublicBody, " when loading CSV files" do
"line 3: creating new authority 'Scottish Fake Authority' (locale: en):\n\t{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\",\"home_page\":\"http://scottish.org\",\"tag_string\":\"scottish\"}",
"line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\",\"tag_string\":\"fake aTag\"}",
]
- notes[3].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( [A-Za-z ]+\n)*You may want to delete them manually.\n/
+ notes[3].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
PublicBody.count.should == original_count
end
@@ -512,3 +530,77 @@ describe PublicBody, " when override all public body request emails set" do
@geraldine.request_email.should == "catch_all_test_email@foo.com"
end
end
+
+describe PublicBody, "when calculating statistics" do
+
+ it "should not include unclassified or hidden requests in percentages" do
+ with_hidden_and_successful_requests do
+ totals_data = PublicBody.get_request_totals(n=3,
+ highest=true,
+ minimum_requests=1)
+ # For the total number of requests, we still include
+ # hidden or unclassified requests:
+ totals_data['public_bodies'][-1].name.should == "Geraldine Quango"
+ totals_data['totals'][-1].should == 4
+
+ # However, for percentages, don't include the hidden or
+ # unclassified requests. So, for the Geraldine Quango
+ # we've made sure that there are only two visible and
+ # classified requests, one of which is successful, so the
+ # percentage should be 50%:
+
+ percentages_data = PublicBody.get_request_percentages(column='info_requests_successful_count',
+ n=3,
+ highest=false,
+ minimum_requests=1)
+ geraldine_index = percentages_data['public_bodies'].index do |pb|
+ pb.name == "Geraldine Quango"
+ end
+
+ percentages_data['y_values'][geraldine_index].should == 50
+ end
+ end
+
+ it "should only return totals for those with at least a minimum number of requests" do
+ minimum_requests = 1
+ with_enough_info_requests = PublicBody.where(["info_requests_count >= ?",
+ minimum_requests]).length
+ all_data = PublicBody.get_request_totals 4, true, minimum_requests
+ all_data['public_bodies'].length.should == with_enough_info_requests
+ end
+
+ it "should only return percentages for those with at least a minimum number of requests" do
+ with_hidden_and_successful_requests do
+ # With minimum requests at 3, this should return nil
+ # (corresponding to zero public bodies) since the only
+ # public body with just more than 3 info requests (The
+ # Geraldine Quango) has a hidden and an unclassified
+ # request within this block:
+ minimum_requests = 3
+ with_enough_info_requests = PublicBody.where(["info_requests_visible_classified_count >= ?",
+ minimum_requests]).length
+ all_data = PublicBody.get_request_percentages(column='info_requests_successful_count',
+ n=10,
+ true,
+ minimum_requests)
+ all_data.should be_nil
+ end
+ end
+
+ it "should only return those with at least a minimum number of requests, but not tagged 'test'" do
+ hpb = PublicBody.find_by_name 'Department for Humpadinking'
+
+ original_tag_string = hpb.tag_string
+ hpb.add_tag_if_not_already_present 'test'
+
+ begin
+ minimum_requests = 1
+ with_enough_info_requests = PublicBody.where(["info_requests_count >= ?", minimum_requests])
+ all_data = PublicBody.get_request_totals 4, true, minimum_requests
+ all_data['public_bodies'].length.should == 3
+ ensure
+ hpb.tag_string = original_tag_string
+ end
+ end
+
+end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index f380f6f13..cbbf4b5ce 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -20,8 +20,6 @@
# email_bounce_message :text default(""), not null
# no_limit :boolean default(FALSE), not null
# receive_email_alerts :boolean default(TRUE), not null
-# address :string(255)
-# dob :date
#
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
diff --git a/spec/models/xapian_spec.rb b/spec/models/xapian_spec.rb
index c7c21e3a0..3c9fff784 100644
--- a/spec/models/xapian_spec.rb
+++ b/spec/models/xapian_spec.rb
@@ -406,28 +406,13 @@ describe InfoRequestEvent, " when faced with a race condition during xapian_mark
before(:each) do
load_raw_emails_data
get_fixtures_xapian_index
- # Use the before create job hook to simulate a race condition with another process
- # by creating an acts_as_xapian_job record for the same model
- class InfoRequestEvent
- def xapian_before_create_job_hook(action, model, model_id)
- ActsAsXapian::ActsAsXapianJob.create!(:model => model,
- :model_id => model_id,
- :action => action)
- end
- end
- end
-
- after(:each) do
- # Reset the before create job hook
- class InfoRequestEvent
- def xapian_before_create_job_hook(action, model, model_id)
- end
- end
end
it 'should not raise an error but should fail silently' do
- ir = info_requests(:naughty_chicken_request)
- ir.reindex_request_events
+ with_duplicate_xapian_job_creation do
+ ir = info_requests(:naughty_chicken_request)
+ ir.reindex_request_events
+ end
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 0d8f8fac5..d22f3c0ff 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -125,6 +125,25 @@ Spork.prefork do
rebuild_xapian_index
end
+ # Use the before create job hook to simulate a race condition with
+ # another process by creating an acts_as_xapian_job record for the
+ # same model:
+ def with_duplicate_xapian_job_creation
+ InfoRequestEvent.module_eval do
+ def xapian_before_create_job_hook(action, model, model_id)
+ ActsAsXapian::ActsAsXapianJob.create!(:model => model,
+ :model_id => model_id,
+ :action => action)
+ end
+ end
+ yield
+ ensure
+ InfoRequestEvent.module_eval do
+ def xapian_before_create_job_hook(action, model, model_id)
+ end
+ end
+ end
+
def with_env_tz(new_tz = 'US/Eastern')
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
yield
@@ -139,6 +158,39 @@ Spork.prefork do
ActiveRecord::Base.default_timezone = old_zone
end
+ # To test the statistics calculations, it's helpful to have the
+ # request fixtures in different states, but changing the fixtures
+ # themselves disrupts many other tests. This function takes a
+ # block, and runs that block with the info requests for the
+ # Geraldine Quango altered so that one is hidden and there's a
+ # successful one.
+ def with_hidden_and_successful_requests
+ external = info_requests(:external_request)
+ chicken = info_requests(:naughty_chicken_request)
+ old_external_prominence = external.prominence
+ old_chicken_described_state = chicken.described_state
+ begin
+ external.prominence = 'hidden'
+ external.save!
+ chicken.described_state = 'successful'
+ chicken.save!
+ yield
+ ensure
+ external.prominence = old_external_prominence
+ external.save!
+ chicken.described_state = old_chicken_described_state
+ chicken.save!
+ end
+ end
+
+ def with_default_locale(locale)
+ original_default_locale = I18n.default_locale
+ I18n.default_locale = locale
+ yield
+ ensure
+ I18n.default_locale = original_default_locale
+ end
+
def load_test_categories
PublicBodyCategories.add(:en, [
"Local and regional",
diff --git a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
index fcf7a778d..2e486f328 100644
--- a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
+++ b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
@@ -928,7 +928,7 @@ module ActsAsXapian
def xapian_create_job(action, model, model_id)
begin
- ActiveRecord::Base.transaction do
+ ActiveRecord::Base.transaction(:requires_new => true) do
ActsAsXapianJob.delete_all([ "model = ? and model_id = ?", model, model_id])
xapian_before_create_job_hook(action, model, model_id)
ActsAsXapianJob.create!(:model => model,