From 59911b4e979882624936ff508a05939b2773c513 Mon Sep 17 00:00:00 2001 From: ymatsumoto Date: Thu, 18 Apr 2013 10:04:15 +0900 Subject: [PATCH 1/1] =?utf8?q?=E7=AE=A1=E7=90=86=E7=94=BB=E9=9D=A2?= =?utf8?q?=E3=81=AE=E6=97=A5=E4=BB=98=E6=A4=9C=E7=B4=A2=E3=82=92javascrpt?= =?utf8?q?=E3=81=AE=E3=82=AB=E3=83=AC=E3=83=B3=E3=83=80=E3=83=BC=E3=81=A7?= =?utf8?q?=20=E9=81=B8=E6=8A=9E=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?utf8?q?=E3=81=86=E3=81=AA=E6=A9=9F=E8=83=BD=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- ChangeLog | 7 + app/controllers/admin/products_controller.rb | 4 +- app/helpers/admin/base_helper.rb | 27 + app/views/admin/campaigns/_form.html.erb | 14 +- app/views/admin/customers/_search.html.erb | 36 +- app/views/admin/mail_magazines/_form.html.erb | 36 +- app/views/admin/new_informations/_form.html.erb | 8 +- app/views/admin/orders/_search.html.erb | 49 +- app/views/admin/products/_form.html.erb | 37 +- app/views/admin/products/_search.html.erb | 38 +- app/views/admin/return_items/_form.html.erb | 6 +- .../admin/return_items/_history_search.html.erb | 12 +- app/views/admin/return_items/_search.html.erb | 12 +- app/views/admin/stock_histories/_search.html.erb | 12 +- app/views/admin/stock_in/_search.html.erb | 12 +- app/views/admin/stock_modify/_search.html.erb | 12 +- app/views/admin/totals/index.html.erb | 24 +- app/views/layouts/admin/base.html.erb | 3 + public/images/calendar/error.gif | Bin 0 -> 622 bytes public/images/calendar/icon_calendar.gif | Bin 0 -> 106 bytes public/images/calendar/metal/base_dark.gif | Bin 0 -> 1091 bytes public/images/calendar/metal/base_date.gif | Bin 0 -> 78 bytes public/images/calendar/metal/base_light.gif | Bin 0 -> 159 bytes public/images/calendar/metal/button_left_off.gif | Bin 0 -> 1192 bytes public/images/calendar/metal/button_left_on.gif | Bin 0 -> 1230 bytes public/images/calendar/metal/button_right_off.gif | Bin 0 -> 1254 bytes public/images/calendar/metal/button_right_on.gif | Bin 0 -> 1229 bytes public/images/calendar/metal/concept.jpg | Bin 0 -> 45478 bytes public/images/calendar/metal/concept2.gif | Bin 0 -> 31511 bytes public/images/calendar/paper/base.gif | Bin 0 -> 3545 bytes public/images/calendar/paper/base_body.gif | Bin 0 -> 167 bytes public/images/calendar/paper/base_date.gif | Bin 0 -> 59 bytes public/images/calendar/paper/base_footer.gif | Bin 0 -> 2662 bytes public/images/calendar/paper/base_header.gif | Bin 0 -> 784 bytes public/images/calendar/paper/base_line.gif | Bin 0 -> 266 bytes public/images/calendar/paper/button_left_off.gif | Bin 0 -> 719 bytes public/images/calendar/paper/button_left_on.gif | Bin 0 -> 705 bytes public/images/calendar/paper/button_right_off.gif | Bin 0 -> 725 bytes public/images/calendar/paper/button_right_on.gif | Bin 0 -> 500 bytes public/images/calendar/paper/check.gif | Bin 0 -> 294 bytes public/images/calendar/paper/concept.gif | Bin 0 -> 11908 bytes public/images/calendar/paper/concept2.gif | Bin 0 -> 14908 bytes public/images/calendar/paper/disabled.gif | Bin 0 -> 283 bytes public/images/calendar/paper/line.gif | Bin 0 -> 180 bytes public/images/calendar/simple/concept.gif | Bin 0 -> 9091 bytes public/images/calendar/simple/concept2.gif | Bin 0 -> 12291 bytes public/javascripts/calendar/lang_cs.js | 15 + public/javascripts/calendar/lang_de.js | 15 + public/javascripts/calendar/lang_en-GB.js | 3 + public/javascripts/calendar/lang_es.js | 15 + public/javascripts/calendar/lang_fr.js | 15 + public/javascripts/calendar/lang_hu.js | 15 + public/javascripts/calendar/lang_it.js | 15 + public/javascripts/calendar/lang_ja.js | 132 ++ public/javascripts/calendar/lang_pl.js | 15 + public/javascripts/calendar/lang_pt-BR.js | 15 + public/javascripts/calendar/lang_ro.js | 15 + public/javascripts/calendar/lang_ru.js | 15 + public/javascripts/calendar/lang_sk.js | 15 + public/javascripts/calendar/lang_zh-cn.js | 18 + public/javascripts/calendar/lang_zh-tw.js | 18 + public/javascripts/calendar/protocalendar.js | 1434 ++++++++++++++++++++ public/javascripts/calendar/protocalendar_min.js | 10 + public/stylesheets/calendar/ext-simple.css | 225 +++ public/stylesheets/calendar/jquery-calendar.css | 221 +++ public/stylesheets/calendar/metal.css | 246 ++++ public/stylesheets/calendar/paper.css | 277 ++++ public/stylesheets/calendar/simple.css | 194 +++ spec/helpers/admin/base_helper_spec.rb | 28 + 69 files changed, 3270 insertions(+), 50 deletions(-) create mode 100644 public/images/calendar/error.gif create mode 100644 public/images/calendar/icon_calendar.gif create mode 100644 public/images/calendar/metal/base_dark.gif create mode 100644 public/images/calendar/metal/base_date.gif create mode 100644 public/images/calendar/metal/base_light.gif create mode 100644 public/images/calendar/metal/button_left_off.gif create mode 100644 public/images/calendar/metal/button_left_on.gif create mode 100644 public/images/calendar/metal/button_right_off.gif create mode 100644 public/images/calendar/metal/button_right_on.gif create mode 100644 public/images/calendar/metal/concept.jpg create mode 100644 public/images/calendar/metal/concept2.gif create mode 100644 public/images/calendar/paper/base.gif create mode 100644 public/images/calendar/paper/base_body.gif create mode 100644 public/images/calendar/paper/base_date.gif create mode 100644 public/images/calendar/paper/base_footer.gif create mode 100644 public/images/calendar/paper/base_header.gif create mode 100644 public/images/calendar/paper/base_line.gif create mode 100644 public/images/calendar/paper/button_left_off.gif create mode 100644 public/images/calendar/paper/button_left_on.gif create mode 100644 public/images/calendar/paper/button_right_off.gif create mode 100644 public/images/calendar/paper/button_right_on.gif create mode 100644 public/images/calendar/paper/check.gif create mode 100644 public/images/calendar/paper/concept.gif create mode 100644 public/images/calendar/paper/concept2.gif create mode 100644 public/images/calendar/paper/disabled.gif create mode 100644 public/images/calendar/paper/line.gif create mode 100644 public/images/calendar/simple/concept.gif create mode 100644 public/images/calendar/simple/concept2.gif create mode 100644 public/javascripts/calendar/lang_cs.js create mode 100644 public/javascripts/calendar/lang_de.js create mode 100644 public/javascripts/calendar/lang_en-GB.js create mode 100644 public/javascripts/calendar/lang_es.js create mode 100644 public/javascripts/calendar/lang_fr.js create mode 100644 public/javascripts/calendar/lang_hu.js create mode 100644 public/javascripts/calendar/lang_it.js create mode 100644 public/javascripts/calendar/lang_ja.js create mode 100644 public/javascripts/calendar/lang_pl.js create mode 100644 public/javascripts/calendar/lang_pt-BR.js create mode 100644 public/javascripts/calendar/lang_ro.js create mode 100644 public/javascripts/calendar/lang_ru.js create mode 100644 public/javascripts/calendar/lang_sk.js create mode 100644 public/javascripts/calendar/lang_zh-cn.js create mode 100644 public/javascripts/calendar/lang_zh-tw.js create mode 100644 public/javascripts/calendar/protocalendar.js create mode 100644 public/javascripts/calendar/protocalendar_min.js create mode 100644 public/stylesheets/calendar/ext-simple.css create mode 100644 public/stylesheets/calendar/jquery-calendar.css create mode 100644 public/stylesheets/calendar/metal.css create mode 100644 public/stylesheets/calendar/paper.css create mode 100644 public/stylesheets/calendar/simple.css create mode 100644 spec/helpers/admin/base_helper_spec.rb diff --git a/ChangeLog b/ChangeLog index 783c08e..f4c7cd9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,11 @@ +2013-04-18 Matsumoto Yasuhito + + * 2.2.0 Release + * [管理画面] 日付検索をjavascriptのカレンダーでも選択できるようにしました + * [備考] 納品書・ビッキングリストのPDF作成機能も含まれます + 2013-04-03 Matsumoto Yasuhito + * 2.1.7 Release * [管理画面] コントローラーのテストが通る用に作り直しました diff --git a/app/controllers/admin/products_controller.rb b/app/controllers/admin/products_controller.rb index 29e112c..3f5d4da 100644 --- a/app/controllers/admin/products_controller.rb +++ b/app/controllers/admin/products_controller.rb @@ -37,8 +37,8 @@ class Admin::ProductsController < Admin::BaseController @product = Product.new @old_product.attributes.reject{ |key, value| key.to_s == "id" } else @product = Product.new(params[:product]) - @product.sale_end_at = Date.today + 3 * 365 #30年後 - @product.public_end_at = Date.today + 3 * 365 #30年後 + @product.sale_end_at = 3.years.since + @product.public_end_at = 3.years.since end end diff --git a/app/helpers/admin/base_helper.rb b/app/helpers/admin/base_helper.rb index 10f3312..8642c41 100644 --- a/app/helpers/admin/base_helper.rb +++ b/app/helpers/admin/base_helper.rb @@ -3,5 +3,32 @@ module Admin::BaseHelper date && date.strftime("%Y-%m-%d") end + def calendar_date_select(object,method,option= {},js_option= {}) + + tag = date_select object,method,option + tag = <<-EOS + #{date_select object,method,option} + #{image_tag("../images/calendar/icon_calendar.gif",:id => method)} + ' + + return tag + end end diff --git a/app/views/admin/campaigns/_form.html.erb b/app/views/admin/campaigns/_form.html.erb index dcfe236..ce20ddd 100644 --- a/app/views/admin/campaigns/_form.html.erb +++ b/app/views/admin/campaigns/_form.html.erb @@ -37,11 +37,21 @@ Event.observe(window, 'load', function() { 開始日時 ※ - <%= confirm_tag :datetime_select, :campaign, :opened_at, :use_month_numbers => true %> + + <%= confirm_tag :calendar_date_select, + :campaign,:opened_at, + {:start_year => 5.years.ago.year, + :end_year => Date.today.year} %> + 終了日時 ※ - <%= confirm_tag :datetime_select, :campaign, :closed_at, :use_month_numbers => true %> + + <%= confirm_tag :calendar_date_select, + :campaign,:closed_at, + {:start_year => 5.years.ago.year, + :end_year => Date.today.year} %> + 申込制限数 diff --git a/app/views/admin/customers/_search.html.erb b/app/views/admin/customers/_search.html.erb index d74283a..9004b84 100644 --- a/app/views/admin/customers/_search.html.erb +++ b/app/views/admin/customers/_search.html.erb @@ -21,8 +21,16 @@ 誕生日 - <%= f.birthday_select :birthday_from, :use_month_numbers => true, :include_blank=>true %> ã€œ  - <%= f.birthday_select :birthday_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"birthday_from", + {:start_year => 100.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> +  ã€œ  + <%= calendar_date_select(:condition,"birthday_to", + {:start_year => 100.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%> @@ -58,15 +66,31 @@ 登録・更新日 - <%= f.date_select :updated_at_from, :use_month_numbers => true, :include_blank=>true %> ã€œ  - <%= f.date_select :updated_at_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"updated_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> +  ã€œ  + <%= calendar_date_select(:condition,"updated_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%> 最終購入日 - <%= f.date_select :last_order_from, :use_month_numbers => true, :include_blank=>true %> ã€œ  - <%= f.date_select :last_order_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"last_order_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> +  ã€œ  + <%= calendar_date_select(:condition,"last_order_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%> diff --git a/app/views/admin/mail_magazines/_form.html.erb b/app/views/admin/mail_magazines/_form.html.erb index c78664b..aed826b 100644 --- a/app/views/admin/mail_magazines/_form.html.erb +++ b/app/views/admin/mail_magazines/_form.html.erb @@ -71,22 +71,46 @@ 誕生日 - <%= f.birthday_select :birthday_from, :use_month_numbers => true, :include_blank=>true %> ï½ž  - <%= f.birthday_select :birthday_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"birthday_from", + {:start_year => 100.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> +  ï½ž  + <%= calendar_date_select(:condition,"birthday_to", + {:start_year => 100.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%> 登録日 - <%= f.date_select :updated_at_from, :use_month_numbers => true, :include_blank=>true %> ï½ž  - <%= f.date_select :updated_at_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"updated_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> +  ï½ž  + <%= calendar_date_select(:condition,"updated_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%> 最終購入日 - <%= f.date_select :last_order_from, :use_month_numbers => true, :include_blank=>true %> ï½ž  - <%= f.date_select :last_order_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"last_order_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> +  ï½ž  + <%= calendar_date_select(:condition,"last_order_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%> diff --git a/app/views/admin/new_informations/_form.html.erb b/app/views/admin/new_informations/_form.html.erb index f3063cc..f639b2c 100644 --- a/app/views/admin/new_informations/_form.html.erb +++ b/app/views/admin/new_informations/_form.html.erb @@ -3,7 +3,13 @@ - + diff --git a/app/views/admin/orders/_search.html.erb b/app/views/admin/orders/_search.html.erb index 96c05a2..32d6660 100644 --- a/app/views/admin/orders/_search.html.erb +++ b/app/views/admin/orders/_search.html.erb @@ -5,9 +5,17 @@ @@ -33,7 +41,17 @@ + <%= calendar_date_select(:search,"search_birth_from", + {:start_year => 100.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + 〜 + <%= calendar_date_select(:search,"search_birth_to", + {:start_year => 100.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%> + @@ -54,7 +72,17 @@ @@ -72,7 +100,16 @@ diff --git a/app/views/admin/products/_form.html.erb b/app/views/admin/products/_form.html.erb index 259d084..6a899c6 100644 --- a/app/views/admin/products/_form.html.erb +++ b/app/views/admin/products/_form.html.erb @@ -64,21 +64,48 @@ diff --git a/app/views/admin/products/_search.html.erb b/app/views/admin/products/_search.html.erb index 9da2198..c467184 100644 --- a/app/views/admin/products/_search.html.erb +++ b/app/views/admin/products/_search.html.erb @@ -37,22 +37,46 @@ + <%=calendar_date_select(:search,"created_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true}) %> + ~ + <%=calendar_date_select(:search,"created_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true}) %> + diff --git a/app/views/admin/return_items/_form.html.erb b/app/views/admin/return_items/_form.html.erb index 6190047..ee2a902 100644 --- a/app/views/admin/return_items/_form.html.erb +++ b/app/views/admin/return_items/_form.html.erb @@ -9,7 +9,11 @@ diff --git a/app/views/admin/return_items/_history_search.html.erb b/app/views/admin/return_items/_history_search.html.erb index a75a997..aa455c3 100644 --- a/app/views/admin/return_items/_history_search.html.erb +++ b/app/views/admin/return_items/_history_search.html.erb @@ -24,8 +24,16 @@ diff --git a/app/views/admin/return_items/_search.html.erb b/app/views/admin/return_items/_search.html.erb index 5caa341..fe03709 100644 --- a/app/views/admin/return_items/_search.html.erb +++ b/app/views/admin/return_items/_search.html.erb @@ -30,8 +30,16 @@ diff --git a/app/views/admin/stock_histories/_search.html.erb b/app/views/admin/stock_histories/_search.html.erb index 43828a7..2d96f10 100644 --- a/app/views/admin/stock_histories/_search.html.erb +++ b/app/views/admin/stock_histories/_search.html.erb @@ -24,8 +24,16 @@ diff --git a/app/views/admin/stock_in/_search.html.erb b/app/views/admin/stock_in/_search.html.erb index 25c1d8a..93ff62d 100644 --- a/app/views/admin/stock_in/_search.html.erb +++ b/app/views/admin/stock_in/_search.html.erb @@ -30,8 +30,16 @@ diff --git a/app/views/admin/stock_modify/_search.html.erb b/app/views/admin/stock_modify/_search.html.erb index 25c1d8a..93ff62d 100644 --- a/app/views/admin/stock_modify/_search.html.erb +++ b/app/views/admin/stock_modify/_search.html.erb @@ -30,8 +30,16 @@ diff --git a/app/views/admin/totals/index.html.erb b/app/views/admin/totals/index.html.erb index 9c0d174..37f2a83 100644 --- a/app/views/admin/totals/index.html.erb +++ b/app/views/admin/totals/index.html.erb @@ -24,8 +24,17 @@
日付 ※<%= confirm_tag :datetime_select, :new_information, :date, :use_month_numbers => true %> + <%= confirm_tag :calendar_date_select, + :new_information,"date", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true} %> +
タイトル ※
受注日 - <%= f.date_select "created_at_from", - :use_month_numbers => true, :include_blank=>true %> - ~ <%= f.date_select "created_at_to", :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:search,"created_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :default => false, + :include_blank =>true}) %> + ~ + <%= calendar_date_select(:search,"created_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
生年月日 - <%= f.birthday_select "search_birth_from", :use_month_numbers => true, :include_blank=>true %>~ <%= f.birthday_select "search_birth_to", :use_month_numbers => true, :include_blank=>true %>
性別
登録・更新日 - <%= f.date_select "search_updated_at_from", :use_month_numbers => true, :include_blank=>true %>~ <%= f.date_select "search_updated_at_to", :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:search,"search_updated_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + + 〜 + <%= calendar_date_select(:search,"search_updated_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
発送日 - <%= f.date_select "shipped_at_from", :use_month_numbers => true, :include_blank=>true %>~ <%= f.date_select "shipped_at_to", :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:search,"shipped_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + 〜 + <%= calendar_date_select(:search,"shipped_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
入荷予定日 - <%= confirm_tag :date_select, :product, :arrival_expected_date, :use_month_numbers => true %> + <%= confirm_tag :calendar_date_select, + :product, + :arrival_expected_date, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true} %>
販売期間 - <%= confirm_tag :date_select, :product, :sale_start_at , :use_month_numbers => true%> ~ - <%= confirm_tag :date_select, :product, :sale_end_at , :use_month_numbers => true %> + <%= confirm_tag :calendar_date_select, + :product, + :sale_start_at, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true} %> + ~ + <%= confirm_tag :calendar_date_select, + :product, + :sale_end_at, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true} %>
公開期間 - <%= confirm_tag :date_select, :product, :public_start_at , :use_month_numbers => true%> ~ - <%= confirm_tag :date_select, :product, :public_end_at , :use_month_numbers => true %> + <%= confirm_tag :calendar_date_select, + :product, + :public_start_at, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true} %> + ~ + <%= confirm_tag :calendar_date_select, + :product, + :public_end_at, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true} %>
登録日 - <%= f.date_select :created_at_from ,:use_month_numbers => true, :include_blank=>true %>~ - <%= f.date_select :created_at_to, :use_month_numbers => true, :include_blank=>true %> -
更新日 - <%= f.date_select :updated_at_from ,:use_month_numbers => true, :include_blank=>true %>~ - <%= f.date_select :updated_at_to, :use_month_numbers => true, :include_blank=>true %> + <%=calendar_date_select(:search,"updated_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true}) %> + ~ + <%=calendar_date_select(:search,"updated_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true}) %>
販売開始日 - <%= f.date_select :sale_start_at_start ,:use_month_numbers => true, :include_blank => true %>~ - <%= f.date_select :sale_start_at_end, :use_month_numbers => true, :include_blank => true %> + <%=calendar_date_select(:search,"sale_start_at_start", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true}) %> + ~ + <%=calendar_date_select(:search,"sale_start_at_end", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true}) %>
返品日時 - <%= f.date_select :returned_at ,:use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:return_item,"returned_at", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%>
返品登録日 - <%= f.date_select :returned_at_from, :use_month_numbers => true, :include_blank => true %>〜 - <%= f.date_select :returned_at_to, :use_month_numbers => true, :include_blank => true %> + <%= calendar_date_select(:condition,"returned_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + 〜 + <%= calendar_date_select(:condition,"returned_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
登録日・更新日 - <%= f.date_select :updated_at_from ,:use_month_numbers => true, :include_blank=>true %>~ - <%= f.date_select :updated_at_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"updated_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + 〜 + <%= calendar_date_select(:condition,"updated_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
在庫移動日 - <%= f.date_select :moved_at_from ,:use_month_numbers => true, :include_blank=>true %>~ - <%= f.date_select :moved_at_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,"moved_at_from", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + 〜 + <%= calendar_date_select(:condition,"moved_at_to", + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
登録日・更新日 - <%= f.date_select :updated_at_from ,:use_month_numbers => true, :include_blank=>true %>~ - <%= f.date_select :updated_at_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,:updated_at_from, + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + 〜 + <%= calendar_date_select(:condition,:updated_at_to, + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
登録日・更新日 - <%= f.date_select :updated_at_from ,:use_month_numbers => true, :include_blank=>true %>~ - <%= f.date_select :updated_at_to, :use_month_numbers => true, :include_blank=>true %> + <%= calendar_date_select(:condition,:updated_at_from, + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true, + :include_blank =>true})%> + 〜 + <%= calendar_date_select(:condition,:updated_at_to, + {:start_year => 5.years.ago.year, + :end_year => Date.today.year, + :use_month_numbers => true})%>
販売開始期間 - <%= date_select 'search', 'sale_start_from', :use_month_numbers => true, :include_blank => true %>~ - <%= date_select 'search', 'sale_start_to', :use_month_numbers => true, :include_blank => true %> + <%= calendar_date_select(:search,:sale_start_from, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true, + :include_blank =>true}) %> + 〜 + <%= calendar_date_select(:search,:sale_start_to, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true, + :include_blank =>true}) %>
@@ -46,8 +55,15 @@ 期間集計 - <%= date_select 'search', 'date_from', :use_month_numbers => true %>~ - <%= date_select 'search', 'date_to', :use_month_numbers => true %>  + <%= calendar_date_select(:search,:date_from, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true}) %> + ~ + <%= calendar_date_select(:search,:date_to, + {:start_year => 5.years.ago.year, + :end_year => 5.years.since.year, + :use_month_numbers => true}) %> <%= submit_tag '期間で集計する', :name=>'search[by_date]', :class => "btn_s" %> diff --git a/app/views/layouts/admin/base.html.erb b/app/views/layouts/admin/base.html.erb index 2d4a8e5..24de4ce 100644 --- a/app/views/layouts/admin/base.html.erb +++ b/app/views/layouts/admin/base.html.erb @@ -9,7 +9,10 @@ <%= javascript_include_tag js_url(:action => "treemenu") %> <%= javascript_include_tag "rollover" %> <%= javascript_include_tag js_url(:action => "application") %> + <%= javascript_include_tag 'calendar/protocalendar' %> + <%= javascript_include_tag 'calendar/lang_ja' %> <%= stylesheet_link_tag "admin" %> + <%= stylesheet_link_tag 'calendar/simple' %> <%= yield :head %> diff --git a/public/images/calendar/error.gif b/public/images/calendar/error.gif new file mode 100644 index 0000000000000000000000000000000000000000..c93047d4b69feeb41b5bf91d28b640d70bd1ffa9 GIT binary patch literal 622 zcmZ?wbhEHb6l4%&c;?RV?%liZ-@o6#fB*UEGw08r|NHRKiw&EO9zFW{{Dt>Xaj(Oo z&z?Q|F*WO5Qu?Q~><`fiZ{EClcIx!==g)uKx%=V6ho?`UzJLGz@87@gFJJk3^VX-> zq>rhYzkdDt^y$;@-@m^Ul|Oj!;B#T=@#Du|Rn@InvEprQ!`ruSPo6w^;>3xK8#lgs z_3Fx%D|heSy>Q{ew{PEW-n@DH_U&!kwk=t*!8RY51NCr*M_8Sc3|h`2I4**UR&aAJ04xcFLDNcrQp_jVZ~8x@iy*g4F+6kZ$@ zIM~<9$Z@7B@rZMSf`oArPr{QUjjk*jqCySL2b35!J)ZnHxM^vRyiJl$lu9GR#Mu`4 RT{{dnFF!xOn~9OZ8UV=8@8JLd literal 0 HcmV?d00001 diff --git a/public/images/calendar/icon_calendar.gif b/public/images/calendar/icon_calendar.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf3375ecf9e80d14a3639c6a9dd0dc44c14712f1 GIT binary patch literal 106 zcmZ?wbhEHbgkEojG&H*x300|NjgO42nNlfFuKh4u}A$ zWnk9N2s?AZ=b+^DT{}FSt+qYb9@%6#!;K;9(Tb_hS8mGjmNu~JFVhHeU|Q>}bE%=1 Hg~1vCgf}I6 literal 0 HcmV?d00001 diff --git a/public/images/calendar/metal/base_dark.gif b/public/images/calendar/metal/base_dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..215ad188ba5df6f221ff21bf0686adbc39a416b8 GIT binary patch literal 1091 zcmds$?NizX0LOnYWMI>#=S-U;e3)+2Yu9F*uI7{ty>;Gfz&4r4jlpE%cIqyfD+n9I z2M`1lbbvfR|9FNU&j>gx)Ml1;*Im8PbzRrho36WRU3b;`Gy1;xy#L&Nz8x3ao0@4z zpdR=g08Fl^-JdkOqh@!^=#IFcZ0RfIY>vR>j)I|#&K`U)HZ>uc*E>Rw4dBoS7XSdg z1A)6U?M&7ZXSk_Hf>()%elZ&PT@baut!jYpPpf=O{zO`Tk2 zQtBP|A8<@yb|BhT`AyaOgZNpoA$vKV1?2bGX%0GJeC;-J4^q|$73_wxd_zVVv)o2Zw z+!r=)!sHChtM!Cyy@Mm%MT?Ka`CvhBALUJusSKSxbfm7f?nr|tvaDXz_A!|g5(N}r zCU*C}hOL4D0F}X_G6rUp+8$b;NUm}CQwv6yM5%R!vsPc?9Ik`h-7T8cboVkqC=*Gq zayVQLfBM$I@Vw5kvcCOld3p1hvn?$xN9&LCCufYV@P|Aee_ZrvdTv%@T{OA+?!M;^ zXAhK?Iz#Ehhil#bsMZ$zczr9Bd@?p6t*Jd4OXqC9#H`wK2vf~=%@93RxP~mPaVH?I{Ui~glfYjYzp(XSL9(wbo;4{2sGa0t$P zAN2=`jyiZjghXvV!?(j6vZf;J+SVEzg)SQvXAiW_k0Fuq&SD^=)M62A*p9+XYz5x> E2SVASv;Y7A literal 0 HcmV?d00001 diff --git a/public/images/calendar/metal/base_date.gif b/public/images/calendar/metal/base_date.gif new file mode 100644 index 0000000000000000000000000000000000000000..b394a0732330a23541035409aed5912f822a11f3 GIT binary patch literal 78 zcmZ?wbhEHb6k`x(XkcLYb@IW_y*CwqvM_*v4u}BBFfgh1^si)m&3S8fVNhoHS*hYJ cwF}gZmPkxnR<&el_dI!<(=xT2Js26R0k$6+EdT%j literal 0 HcmV?d00001 diff --git a/public/images/calendar/metal/base_light.gif b/public/images/calendar/metal/base_light.gif new file mode 100644 index 0000000000000000000000000000000000000000..243b321fa4ba698678d2e3b7e7fe540488b19385 GIT binary patch literal 159 zcmZ?wbhEHbWMg1sIKsg2>h;^_FJE82eEH40k5{f-xp)8J-Fx>RKYsG|{io~Kuid-< z;NrzgU%!3-`02~L_n+Q<`1JPu$G7i3zIpe7fjFS}lLf3$2SkGGWMGv^*dWrc!g#XL bW#VCzOP?Js2}p8@Tx4Q2<>S<5VXy`O1BpPx literal 0 HcmV?d00001 diff --git a/public/images/calendar/metal/button_left_off.gif b/public/images/calendar/metal/button_left_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..0fd0e5547b55a086268950749244d5a25ddc985e GIT binary patch literal 1192 zcmds#{Zo<$0D$Q(tL>_t)poXZ^GG*bdd~ERvD@0r)*Q9g=9QV>=!W74^Awh?%`U(c zL@k$^xh1F|AG+XesT3q8Ag_{hun-gtl@TeEmls}?4|Vl#?D^%ndwzbBai3#9#D}5Y zM3tdXXy4W?D3lx(gL=WsR`bGvMQ6ac6fiCark4GN=W8Z=AP`tzU-xSlf^#dud1!qe z3R)nqau$YRzu)gOF9r1Wz~n#v@p=FFg8%ViaBA71c(Ssx0^R+~ueJGxX8dDThj7ef zGTGRVd=KYV0liN)>)@zHMn>j-8CV0RR{0Za5`(=}4gkPx;~%R+otF)|=~B2tyvm=n zHA)2nfw@lNWowaErRSQ$RV;Fz=eRHTdvA}~825NQ-t^Tzq($v%RKP#qb7ptDNPWIx zv#YcZ{sC~)q)4;MN|SK8T+?NNr(xK`ka=ol?wSXlhM^6_7hG6zSM_^XL-Q1YuBhEr z^1G}24os0i`9038t~Ke@=H}*xd(9^|dAVAMAaIrTx(LGQw3bOin=_-!na&B$IReJ# z)2YqQ^iG&8M%qU=d_gF)8?L;&Zik_49)#!mH5Mp~3+3{?9Uzp`Gg;8)$`?U-!s&A@ zdg8BeF#r=K=FD5VvMzU})K%2`l+daEiG$Rs+?S*XQ>iVv&1-6RH-p|bEz+Pu8kFAV zF>m_>HH#z^3P(prSp^sW`Fv)AM&L{znRh(%;|ja5y*|PHtKTqp(syZs3zy z{0dfm!Ns$<(|9}{1VIErtX8X3Dy7ruL?SUiKc7S*F_}z}NTgIMEfz~K81#5NHk-|0 zFlaOyg+d{h%Vjc|TCLXW^^1#(FaP;puwxT-2}wy5vxjNh9*{!^w{VWpBM21q;1#N> zE-WGY3>!_W*%gt*Jb){Y40%m*hGn5rx#KNyIro)fdkZ5ps(i@|>S+@v52cC|@wDr^ zIzQ{k9i}FQq;y4vadOe%_HW)gRAQ{$^KQ*KO!`RC*eQuvbYVnk=Sj zTUvONkYDy_pm_J|d*!ym=$m);#{4$MI=|Ffm$V~u@M{aO=eRkpD6;u*1oq1V)$C&z za1q#=TS}^=Hv7nZvMrulD&Bo69U>aJNB$(0W+Xh*RYYx#J@xVS4rLW%hM#2?wM~JH z@a)|u1s2`l_4{l>odNd7}M#_M|a^m{%l z@_1bwP>cTVaGvJi>77{1m7TG`7tu{OVenups|>6TOReNo?}bmaJ)k$V52eR*^?2G<_HX!k^G$xQf1l>(o<36& zPdP#<0~u{%OR8#v+MYj0-sc%Y!IJbd*LI44h$QW5z`PnAlV&} zqI@aRBX)NIp-||Bm-KDyc%)lM?;_GCu{;sN0x)1l16H?%DRg%N=)kgPK^+PNF~LgE zO(5M1e%&s@T7(5l2nR$tASPHwdKQpw5jr59Ys;2(I}shpsRX9Vf^O_ud%Ule0+R! zbJK3O%Ve^V!66}c2;@&L@~6bSiLp*j%O4CnoeqMa)oL}H&4Yu39UUEQZEelX&8@Ai zOeT}ZRl3hD0X&onw!pV~@bp(@(n>|4jVoF9W0KL489)D!ZLge)B>b zwdk_G>_qZwt<-W@3!dD$bZ{i2+Lk}czL&(xDADUjY^!Ih+PMts)$@$pEIOMpKNhu~ zl|2s`)MLE0+=m&JDQT>Rjp$NX!dLX*}LICA?ENmslP5qRB*p79x6+vcYI(F#E-_-#0{LB$}#}i7x#kpPwthjvJUVv zE!Ld3H*P=I{>D!z_;FHDbuqDn_MTI`5)s=l;Hyae{M`3Pp@Rv9_AOOaCGQvMhiAIZ z{?J7`6w~9-dR#h9MEKpzy4fnk6W!D~8wygku0~xerZpY@Dym?pwdRIJB>5(m76V>7 zakt{jJZfP~!IfefBR~0Z*?e>gvogn6pVX9>l-zZv209*BT>PxAPZ{_6@jh+)b$Xxv zi|fflN+lz$o7M!T=cRJYO%LBFqNl}I8evkqtM&Y~{FIhM(aOTy%u{#5 R;=arIefv>KWH{yh{{Vrbn8g49 literal 0 HcmV?d00001 diff --git a/public/images/calendar/metal/button_right_off.gif b/public/images/calendar/metal/button_right_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f6c810652a381cfa952104104d5dd3c0374686f GIT binary patch literal 1254 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 CjhCDN literal 0 HcmV?d00001 diff --git a/public/images/calendar/metal/concept2.gif b/public/images/calendar/metal/concept2.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9aa1107cecf8e2989ec5fb5f7741eb117cc9880 GIT binary patch literal 31511 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 literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/base.gif b/public/images/calendar/paper/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..a5be3afee003269a1ebfa7da3447daf134e26b44 GIT binary patch literal 3545 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 Wp@wCgd2SWVPdD%NeWW28`2Bx9YU6$Y literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/base_body.gif b/public/images/calendar/paper/base_body.gif new file mode 100644 index 0000000000000000000000000000000000000000..963341969a5c3fab01625819a0c5f8453e0e53e7 GIT binary patch literal 167 zcmZ?wbhEHbJk7w!aD;*3$B!R>|Nedc{Q39q-~avl_x}C+U%!5xJ$v^2`SZ7L-(Iw6 z(SZX8{`~o~e*OB7A3y&5`SZ@5JOBUxXCN9V{$v5G)d7(pI~iD26drJ#6y#-QuwfHs gVG%rAl6${m-TRvN{|_uEm=SCu#?i4rfQi8x0E5IsZvX%Q literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/base_date.gif b/public/images/calendar/paper/base_date.gif new file mode 100644 index 0000000000000000000000000000000000000000..76a1cf3906f0b7ab71b114c9a1314bcbcc50a548 GIT binary patch literal 59 zcmZ?wbhEHb6k`x(XkcLYb@nj>1B2pE79h#MpaUX6G7L;YE&VG`zvW*%XUnbb&G+{F K=67Ocum%9Fc@Z}N literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/base_footer.gif b/public/images/calendar/paper/base_footer.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d42800faa4333711724084a56726c48e5141865 GIT binary patch literal 2662 zcmV-s3YqmsNk%w1Vaos=0QUd@`u_dp<>mMH_vz{B@9*#C=H~A1?(*{T=;-M7_V(@V z?dRv`>gwwA^YiTN?BwL+_4W1i^z`xZ@$2jB+1c6f@bKT?-{Ilm`~Uutk&)-+=HlYw zkCBk7s;b`J-ueCfp`oGJ*x1$8)xf~OySuy8)YRSG-ObI-*VosOkdolw;Lp#`oSK{4 z+uO>@%G%o6%*@Q4ot>_(uF}%d>*nO;tE;R3{r>*{|IN?N+}zym^zy;M!Rhbq(9qDcv$N>#?3R|6 z!^6YBzrU1}l<)2CzrDWK+1RzUwdU&Sy12Qhs;RH9uiD((<>~0>>FAf2mzCu(b2`l#pLMco}Qli`1!ZDx1*z@*3{MI>*#lTr=gsnbA$x2dVC;M&~a-rvW^$C{X##mC0(?Csy>T#>U34t*)}Lv6z>Y;OFx0 zmz9?I{QKkK;*gGyy}!Q3#l!OO@usGxqot(O*460o?&Rv|+9Us*yQc#@A&nhpP;Fp zqO7g2nUj^&)6?YX<;cdzsYtgNl9 z?DFvU_4eoEf$ay16MmRvVf&m2+7$8`{bpZkf6C4nT(1Qqx9Xx#wEO@l7+qZBn zX1s{6uHC!x@Ycm>x1V3ABuk=XX~2Qj0yh#}u%N=61#!A`=ui`b$U7Jmdj4b^x3lNZ z72{pxi!X0of2dRYlb2ea>$-U{3YeE5!pW2sSSoNZV8MgMZMIMdQAOXKVARkl;p%o3b%6GIk2d?UgI3`jtrjbMgJ6pucRcaeESsw%md@o@q&$N76}ZwnQnf45Vx6r4Q`0&kZ`zpn(QF z6cff1AjlAeCnZ==fC7bHo9)07b!)J!tL>E(R6?Rhl>`#BiKM!gB2d5s7(Z}>4+Us& z#Q>E^!AA#^K(PV^`!G-e1VPG3@XI$cD)Y>v{T0=1GD(1;0+p^i00I_g9Kg^Tba9I| zslf3Iv@oD>0Rj~qkU+~o(Kz$fSZA&E)?9bp+Fmw~YhiA>@yu&hKL5N`0YkS9Dk8OH zaLylEh#^f09t7Zk1Q5*sQ;)#ac`f+hgttcP;fN>BTCL)ysiwrc@#-_sKzGG<+dd3& z#VNbs0>Ux*=rKbJ`%F+lP5s~lIB11)x1Hj!$1Z#9chzqD?R|+`TbgT98hKW~R@~JB z1r*;l(OmeDjv%9S5RDQ!gs{N?21GD*J@Tyn*=n=Pj{EoEhcCXuO*QotV7#+r?(e}P zpf>Tv$A3BIOJu`L42m={!U_7QumHe)t4C?H=NZ$C?|bEAieDDUzy><-fe?(K1RIyW zN%0IT!K+y1;&;3bK7bgQ2m>YN&p5NCu$%K1<*kmM3I3< zfPe`3XweI%M}P(-z;F2QjsOmTfES#gK;TJAANl}|kf`x5^MK$E9q7Xa!qJoGi=&WM z$;wsUDgmurWjo{`hm`nY6;sG%D9)C__sMUGL!-eE+>wa~6rvi3c!DZAU+v7(*CN5CRV-Dg-AiA)?NN>r#)^{QCSDp8es)C_Qd14sR;Si#y=RAfL3 zUibnCI?#kD@IwS97}V)Pi9LUS=O6tzfCC;t0T_(H4>B0TA3*Sf7}(>mh)t|w7pqtn zAQlIZ#Q|d{OWDd=_Oh7GtY#70gC0ya4sl?CV=XIMd&D3cgD`{^{NPp*Ac2dl`l4OG zbC7!fB%lHaus{i1poAb;fekWPM+b&`kK!8lxX4Yea+k~8<~sMe(2cHir>opCNH+^$ z*hC}Lu?<;RfdprO0bKVn053vP9(O$mKIYK?0~Ejm`d9%!&M<-~h=Bwo$cKLS%isR` z_rCxRuz&|l-~t=?zz9w-7O>!7AOs;FjG%%NdNB6C0Sa1hfdXWB!=a=m zZ4u&+ddvd?5>NmF0^$3TA|xOHJIp?)rT_o{ literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/base_header.gif b/public/images/calendar/paper/base_header.gif new file mode 100644 index 0000000000000000000000000000000000000000..c37c8312dbc8c433df23d5ec0679323fb11f22ef GIT binary patch literal 784 zcmZ?wbhEHbJk7w(@Qi`s-@ku<|Ni~?^XIQ$zyAFB^Zonx&!0bk`}Xb6zrQbEzI^`t z`KM2xe*gac;>C-PA3uKi^5ymG*Eeq5c>n(W#`*Pq|tfBty)?%l(O4`01{b?)4`H*el--@g6Op+k=z zJzBbS>84GaR;^lf?b@}gSFi5gz5D+C`xh@>ymIBrv17;9ty_2M)TvvyZXG^+`14?n;bCEHYUb%=7hz-L=Hs(lw|>LMO`ErD-L`$l z&Rx6r?A^Cz4L2Ja1V#C72?E=bPHZvFxxAJkS zNNAWfG%$n+G>CkD(8$ceqG8Vvd2-Xz)6)%-PtEb%yzK03i{e*zG$$WtWfc>X5pa0W z&L}L~pu;72NX3gqtI}((*Va{6SBEi9$zXJD>|j5}_amc$(W8;6o2A63ZR^_G+Y53Z zpE|RU*}aR!j*n+SLZTDP=8XCkysBR79vlQYSiBWjSP}gj!X7{#_kLQK1 PaS&YW#4O*)z+epkL90IX literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/base_line.gif b/public/images/calendar/paper/base_line.gif new file mode 100644 index 0000000000000000000000000000000000000000..676611cbfd0bdbabf8aff67038b6fec276d5efcd GIT binary patch literal 266 zcmV+l0rmbzNk%w1Vaosl0K@htn=v-YCO z@MEX{|Nj6000000A^8LV00000EC2ui0LuUZ000GtU@%EY)dj&YILg9kU8lh^J;!&A z(*^IxoC{Fc2@a1%q7lQfbeK-)vpJ1YnTAe=lihYX8!cEI-j>H^vO3L1yU$_3SRS7X z2(i2#LP;DV4G$tDCMYT_E;fogj5>}zNJdGKN|lsVm{OWooK~J|Z=i6Zq-~>V00MD$ Q9jSP(da-%ih{{5+X%lEbCzs@=Kee0E9*Pne`a{9-QA78$F zS+{Q8r%#`L{rYw1&Yh1RKfZnY_WJefU%!6+@ZrOgCr`F+-Forj#Yc}GJ%0T7(4j*g z5|>@Qdi7=W{KJP2-#dL}!h{KH)~q>lNg)OYXR zEnT|wee$yT^XK2befvY%#+!Yc{=EG3ZOfI%Gxpp~o_nx#)`0^D_7qNC&^zsR!t8nT z=1rP3>FKO}>({S;|Ni~=CvQJiY`Rgk{MwW)JM$)eo_6SE?1I04|L)40{BH5_sZHH? zljprIT>W+P<^B8jPo6yaRnM-22M>N-b?#l_(qk=49%nB3n6>KD^3x|Wr@f9_bhL2h zn}o%`o_|sNFHSBhX!_w?EFggPDz;k)4gX!%vvE-@Ai@aqT)rjt* zu=Cf)Ppl1xd26_Y0ys8tMX!!v$azxHq}a&7q1;gNOC(D~N!v=SB-@3_nM2d%nc|~_ zCoNrk=eiuKA1pW~CS|PlP@ri^CzqOT3vbqi!;TzsIsr8n9~oJ@S!H#iE>vB4z}O}z rsiniPae)&Xx42(slN%EgE4!eXOMwF;)3Srj`(93-VKjNM1A{dH+>u2V literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/button_left_on.gif b/public/images/calendar/paper/button_left_on.gif new file mode 100644 index 0000000000000000000000000000000000000000..94259a5972b96468f064c92b006e0c0a0afaccdd GIT binary patch literal 705 zcmZ?wbhEHb6lD-)c*el+K62szAB+F|`Sbnz_s@-se(qWHedVIxzkmOGxA@nwML&Q3 z{QC9lk4=ldeEIV6ps zm%d3@eC6P&JF|9OK5+75?!wEZi_e@n^K{m}dy}^9-@pI=|Njg_4JiI(VPs%%VbB3N z926%E?Ef2Fnwpuon7MhmnYoyn`&x7qRT-w}DJb(X_x8K6%Nb5tIK{wGM3}vw-DC<2 zCkG=3C(9IVQSlW`Omb6r829aGUqnc9jlyD%v-uH9=4r1Z%c*Hs*{C%7q z%ani`k0(qHJ6oS$TKl>nK#(Kn){aW%3C;Hx2^uhHMBjKL$snknwnzBE1Ge=g`&t+S z1R2{cl+@(bBs}GsrsHLAabm`_)r>51RxCk63!9iHB+a&pZP?I!q%A-;XO4u@VX<|N w>{2!dCOA5=hzQE5q#Q_iwMLmyO~$4n;bAi?2ftD3(~z?QO0GQ?tV|5n0MMET&;S4c literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/button_right_off.gif b/public/images/calendar/paper/button_right_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..76e908f9c2005742eaef7e41255af311d6cabc70 GIT binary patch literal 725 zcmZ?wbhEHb6lD-)c*el+K62sj`>%ih{{5+X%lEbCzs@=Kee0E9*Pne`a{A7lJ72zh z`S|hUj~_pN{rdIk)2DUo);)Rhf8q)NL==5`RO0~Zr(e6({UE@9)2O z@#6dU?|&YlfB%642c|Xmye?dQqiXq|m!IAwEPgs`-`(VS zn+qr2PMH08#-5vfo7T-K7j}<>(0W!S( z(j6R(Yu7Pyba|Nk%w1VHE%s0M!5h?^&V$_@n&%{P*|w`Mjd@fui@RqWk;%_4W1s?xXm! zqT}P^`T6YvGJzLy}iB7f~L5*xcktfet}ohO_qL?Cf)`?sTu|p2GE&qVSTx&CSi^qQT{wzSDK1)4<8p!OHP% zq5uE?A^8LW002J#EC2ui02Kfg000L6z@Km^Uff@^C&_cn9stEZ10SZ(jAs1URV10fr1q6SBB0LrYKLQ&7 z1%L!pj(&3;6A(pH4S)eQoPG@eED;YzRBtN=v<4rk2~-jbM^t_WVqrdhR239Ru>rHS zw*Zd004OC%GXSN4sLrYY8pcXBn3}1c04cjmFdzVm0gRo203If;Ob|JIrhb9|EgYdu z7#_r6;|7i#Dmzq=cz_{~g9Rf*1f$}ig$f)C9Bk>5VL^`$EW&6=VS)pR1$WY1urMKl qgbFAsNQf}ufdf2G1Pp-iU;%{@5)>9ZfPi5mmr6#EC}F}S2mm`q_W9-j literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/check.gif b/public/images/calendar/paper/check.gif new file mode 100644 index 0000000000000000000000000000000000000000..c52ab8e2684f8b338f689959133bc41276dca8f2 GIT binary patch literal 294 zcmZ?wbhEHblw=TLI3mFCbJdz}y%T>QJMlR=%C%3SQU5-Ee6MBr zrLgSpifk^x-2a2OpR*{PAc%mdw~9BGcg*tg^wD!Jz4rfv)W|caDeB@0=vKS;D_$ z2%Oo#Fy&Rkp^1HM9({YKm*nuJmNW6OD)9x?DO>9c@G^EQv3X}(Ok&~U;8bSd>z>D+ z%2GKemXkTbuxNrk4=2Mi0d|hr!Ay+2yq4z5Y^Hq$YVHi&v$7|#bD!QeDTlY&L6N~4 E0Az(-#{d8T literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/concept.gif b/public/images/calendar/paper/concept.gif new file mode 100644 index 0000000000000000000000000000000000000000..82f83c5b693aecc18d2aa64a3e3a615187b3f275 GIT binary patch literal 11908 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 C6{MN~ literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/concept2.gif b/public/images/calendar/paper/concept2.gif new file mode 100644 index 0000000000000000000000000000000000000000..0586e3af4d28f95924817c6257c925dd4848c7cb GIT binary patch literal 14908 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 literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/disabled.gif b/public/images/calendar/paper/disabled.gif new file mode 100644 index 0000000000000000000000000000000000000000..db0d4643b64ffad681bc9bad091ffd9b52125d01 GIT binary patch literal 283 zcmZ?wbhEHblw=TLIKsg2``C%k$r(Rp&-=M*&95E1{#?2Ct#{(rhL%sEQC|wnK3LfQ z`}pyryU*XpkKf5Czt=MS|NlP&DM0Zj3nK%A0D}%l6Ua^m))@*aeJP$oo|X)0+Ipt~ z?N(+RnQGcJ`5N`LWiBXq62sP`D>NFUwU%^oF zW!tGuziwA(2=N^+S;u6@P*fwp%gLYQUX#wn@8aJiz{t;|#L&jiR^vBaIX#I{$F9^y rjg=$0LuD!#hZzG;8OsurhB$7|HA>8kuB=VG3j|nrm}2{t6&b7n==oWF literal 0 HcmV?d00001 diff --git a/public/images/calendar/paper/line.gif b/public/images/calendar/paper/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..22412a5393fb81c01bb1e0104d50e97ffba6c8de GIT binary patch literal 180 zcmZ?wbhEHbT*tt~u$hP9edNNAd27F~x$t%Rkv|XKe(Bx!xq0WmuRs63`uuItsZSM~ zKO`^z|NlP&3@H9&VPs(7VbB2yfXrZENes|Drn0s4+3Laz@}frFj#HO=u6i-c=y=cp zBirNUy_cDrb@s*=O#C3&do=#j3Ky%{0n17vRbWdJisq?fYKj(Qum%8rl2XF} literal 0 HcmV?d00001 diff --git a/public/images/calendar/simple/concept.gif b/public/images/calendar/simple/concept.gif new file mode 100644 index 0000000000000000000000000000000000000000..ff4e4db0e8e203419de499d56fc4da5b1c5b1f9b GIT binary patch literal 9091 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 BJAnWI literal 0 HcmV?d00001 diff --git a/public/images/calendar/simple/concept2.gif b/public/images/calendar/simple/concept2.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e9a563678129505684020fbc5724f6dca2c70bb GIT binary patch literal 12291 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 IAP}JbKb>fGMF0Q* literal 0 HcmV?d00001 diff --git a/public/javascripts/calendar/lang_cs.js b/public/javascripts/calendar/lang_cs.js new file mode 100644 index 0000000..f0e2fa9 --- /dev/null +++ b/public/javascripts/calendar/lang_cs.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['cs'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Leden','Únor','Bøezen','Duben','Kvìten','Èerven','Èervenec','Srpen','Záøí','Øíjen','Listopad','Prosinec'], + WEEKDAY_ABBRS: ['Ne','Po','Út','St','Èt','Pá','So'], + WEEKDAY_NAMES: ['Ne','Po','Út','St','Èt','Pá','So'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_de.js b/public/javascripts/calendar/lang_de.js new file mode 100644 index 0000000..ad0c448 --- /dev/null +++ b/public/javascripts/calendar/lang_de.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['de'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'], + WEEKDAY_ABBRS: ['So','Mo','Di','Mi','Do','Fr','Sa'], + WEEKDAY_NAMES: ['So','Mo','Di','Mi','Do','Fr','Sa'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_en-GB.js b/public/javascripts/calendar/lang_en-GB.js new file mode 100644 index 0000000..3a4d74c --- /dev/null +++ b/public/javascripts/calendar/lang_en-GB.js @@ -0,0 +1,3 @@ +(function() { + ProtoCalendar.LangFile['en-GB'] = Object.extend(ProtoCalendar.LangFile['en'], { }); + })(); diff --git a/public/javascripts/calendar/lang_es.js b/public/javascripts/calendar/lang_es.js new file mode 100644 index 0000000..fbb296a --- /dev/null +++ b/public/javascripts/calendar/lang_es.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['es'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], + WEEKDAY_ABBRS: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], + WEEKDAY_NAMES: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_fr.js b/public/javascripts/calendar/lang_fr.js new file mode 100644 index 0000000..56f7029 --- /dev/null +++ b/public/javascripts/calendar/lang_fr.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['fr'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + WEEKDAY_ABBRS: ['Di','Lu','Ma','Me','Je','Ve','Sa'], + WEEKDAY_NAMES: ['Di','Lu','Ma','Me','Je','Ve','Sa'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_hu.js b/public/javascripts/calendar/lang_hu.js new file mode 100644 index 0000000..d714225 --- /dev/null +++ b/public/javascripts/calendar/lang_hu.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['hu'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június','Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], + WEEKDAY_ABBRS: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], + WEEKDAY_NAMES: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_it.js b/public/javascripts/calendar/lang_it.js new file mode 100644 index 0000000..3a9685f --- /dev/null +++ b/public/javascripts/calendar/lang_it.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['it'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], + WEEKDAY_ABBRS: ['Do','Lu','Ma','Me','Gio','Ve','Sa'], + WEEKDAY_NAMES: ['Do','Lu','Ma','Me','Gio','Ve','Sa'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_ja.js b/public/javascripts/calendar/lang_ja.js new file mode 100644 index 0000000..bb4da98 --- /dev/null +++ b/public/javascripts/calendar/lang_ja.js @@ -0,0 +1,132 @@ +(function() { + ProtoCalendar.LangFile['ja'] = { + HOUR_MINUTE_ERROR: '時間が無効です。', + NO_DATE_ERROR: '日を選択して下さい。', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'yyyy/mm/dd', + LABEL_FORMAT: 'yyyyå¹´mm月dd日 ddddi', + MONTH_ABBRS: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], + WEEKDAY_ABBRS: ['日','月','火','æ°´','木','金','土'], + WEEKDAY_NAMES: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], + YEAR_LABEL: 'å¹´', + MONTH_LABEL: '月', + YEAR_AND_MONTH: true, + today: '今日', + tomorrow: '明日', + yesterday: '昨日', + + parseDate: function(inputValue) { + if (inputValue == '一昨日') { + var d = new Date(); + d.setDate(d.getDate() - 2); + return d; + } else if (inputValue == '明後日') { + var d = new Date(); + d.setDate(d.getDate() + 2); + return d; + } + }, + + getHolidays: function(calendar) { + var year = calendar.getYear(); + var month = calendar.getMonth(); + var lastDay = calendar.getNumDayOfMonth(); + + var temp; + if (year < 2000) { + temp = 2213; + } else { + temp = 2089; + } + var springDay = Math.floor((31 * year + temp)/128) - Math.floor(year/4) + Math.floor(year/100); + + if (year < 2000) { + temp = 2525; + } else { + temp = 2395; + } + var autumnDay = Math.floor((31 * year + temp)/128) - Math.floor(year/4) + Math.floor(year/100); + + var holidays = []; + var mondayIndex = 0; + for(var day = 1; day <= lastDay; day++) { + var dayOfWeek = new Date(year, month, day).getDay(); + holidays[day] = 0; + + if (dayOfWeek == ProtoCalendar.MONDAY) { + ++mondayIndex; + } + + /*祝日は削除するためにコメントアウト Edit by ymatsumoto + if (day == 1 && month == ProtoCalendar.JAN && 1949 <= year) { + holidays[day] = '元旦'; + } else if (day == 15 && month == ProtoCalendar.JAN && 1949 <= year && year < 2000) { + holidays[day] = '成人の日'; + } else if (dayOfWeek == ProtoCalendar.MONDAY && mondayIndex == 2 && month == 0 && 2000 <= year) { + holidays[day] = '成人の日'; + } else if (day == 11 && month == ProtoCalendar.FEB && 1967 <= year) { + holidays[day] = '建国記念の日'; + } else if (day == springDay && month == ProtoCalendar.MAR) { + holidays[day] = '春分の日'; + } else if (day == 29 && month == ProtoCalendar.APR && 1989 <= year && year < 2007) { + holidays[day] = 'みどりの日'; + } else if (day == 29 && month == ProtoCalendar.APR && 1949 <= year && year < 1989) { + holidays[day] = '天皇誕生日'; + } else if (day == 4 && month == ProtoCalendar.MAY && 2007 <= year) { + holidays[day] = 'みどりの日'; + } else if (day == 29 && month == ProtoCalendar.APR && 2007 <= year){ + holidays[day] = '昭和の日'; + } else if (day == 3 && month == ProtoCalendar.MAY && 1949 <= year) { + holidays[day] = '憲法記念日'; + } else if (day == 4 && month == ProtoCalendar.MAY && 1986 <= year && year < 2007) { + holidays[day] = '国民の休日'; + } else if (day == 5 && month == ProtoCalendar.MAY && 1949 <= year) { + holidays[day] = 'こどもの日'; + } else if (day == 20 && month == ProtoCalendar.JULY && 1996 <= year && year < 2003) { + holidays[day] = '海の日'; + } else if (mondayIndex == 3 && month == ProtoCalendar.JULY && dayOfWeek == ProtoCalendar.MONDAY && 2003 <= year) { + holidays[day] = '海の日'; + } else if (day == 15 && month == ProtoCalendar.SEPT && 1966 <= year && year < 2003) { + holidays[day] = '敬老の日'; + } else if (mondayIndex == 3 && month == ProtoCalendar.SEPT && dayOfWeek == ProtoCalendar.MONDAY && 2003 <= year) { + holidays[day] = '敬老の日'; + } else if (autumnDay == day && month == ProtoCalendar.SEPT) { + holidays[day] = '秋分の日'; + } else if (day == 10 && month == ProtoCalendar.OCT && 1966 <= year && year < 2001) { + holidays[day] = '体育の日'; + } else if (mondayIndex == 2 && month == ProtoCalendar.OCT && dayOfWeek == ProtoCalendar.MONDAY && 2000 <= year) { + holidays[day] = '体育の日'; + } else if (day == 3 && month == ProtoCalendar.NOV && 1948 <= year) { + holidays[day] = '文化の日'; + } else if (day == 23 && month == ProtoCalendar.NOV && 1948 <= year) { + holidays[day] = '勤労感謝の日'; + } else if (day == 23 && month == ProtoCalendar.DEC && 1989 <= year) { + holidays[day] = '天皇誕生日'; + } + } + var hasHoliday = year > 1973 || year == 1973 && month > ProtoCalendar.APR; + var hasKokuminHoliday = year >= 1988; + var oldRule = hasHoliday && year < 2006; + var curRule = hasHoliday && year >= 2006; + for(var day = 1; day <= lastDay; day++) { + var dayOfWeek = new Date(year, month, day).getDay(); + if (hasHoliday) { + if (dayOfWeek == ProtoCalendar.SUNDAY && holidays[day]) { + var next = day + 1; + if (oldRule) { + if (holidays[next]) continue; + } else if (curRule) { + for (; holidays[next]; next += 1) { } + } + holidays[next] = '振替休日'; + + } else if (hasKokuminHoliday && holidays[day - 1] && holidays[day + 1] && !holidays[day]) { + holidays[day] = '国民の休日'; + } + }*/ + } + calendar.holidays = holidays; + } + }; + + })(); diff --git a/public/javascripts/calendar/lang_pl.js b/public/javascripts/calendar/lang_pl.js new file mode 100644 index 0000000..2b7fbd9 --- /dev/null +++ b/public/javascripts/calendar/lang_pl.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['pl'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], + WEEKDAY_ABBRS: ['Pn','Wt','Śr','Czw','Pt','So','Nie'], + WEEKDAY_NAMES: ['Pn','Wt','Śr','Czw','Pt','So','Nie'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_pt-BR.js b/public/javascripts/calendar/lang_pt-BR.js new file mode 100644 index 0000000..a6aeca5 --- /dev/null +++ b/public/javascripts/calendar/lang_pt-BR.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['pt-BR'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], + WEEKDAY_ABBRS: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], + WEEKDAY_NAMES: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_ro.js b/public/javascripts/calendar/lang_ro.js new file mode 100644 index 0000000..6b74357 --- /dev/null +++ b/public/javascripts/calendar/lang_ro.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['ro'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Januarie', 'Februarie', 'Martie', 'Aprilie', 'Mai', 'Junie','Julie', 'August', 'Septembrie', 'Octombrie', 'Noiembrie', 'Decembrie'], + WEEKDAY_ABBRS: ['D', 'L', 'Ma', 'Mi', 'J', 'V', 'S'], + WEEKDAY_NAMES: ['D', 'L', 'Ma', 'Mi', 'J', 'V', 'S'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_ru.js b/public/javascripts/calendar/lang_ru.js new file mode 100644 index 0000000..3120c9b --- /dev/null +++ b/public/javascripts/calendar/lang_ru.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['ru'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], + WEEKDAY_ABBRS: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], + WEEKDAY_NAMES: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_sk.js b/public/javascripts/calendar/lang_sk.js new file mode 100644 index 0000000..7075331 --- /dev/null +++ b/public/javascripts/calendar/lang_sk.js @@ -0,0 +1,15 @@ +(function() { + ProtoCalendar.LangFile['sk'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'dddi mmm dd yyyy', + MONTH_ABBRS: ['Január','Február','Marec','Apríl','Máj','Jún','Júl','August','September','Október','November','December'], + WEEKDAY_ABBRS: ['Ne','Po','Ut','St','Å t','Pia','So'], + WEEKDAY_NAMES: ['Ne','Po','Ut','St','Å t','Pia','So'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + YEAR_AND_MONTH: false + }; + })(); diff --git a/public/javascripts/calendar/lang_zh-cn.js b/public/javascripts/calendar/lang_zh-cn.js new file mode 100644 index 0000000..01d4784 --- /dev/null +++ b/public/javascripts/calendar/lang_zh-cn.js @@ -0,0 +1,18 @@ +(function() { + ProtoCalendar.LangFile['zh-cn'] = { + HOUR_MINUTE_ERROR: '请输入正确的时间。', + NO_DATE_ERROR: '请选择日期。', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'yyyy/mm/dd', + LABEL_FORMAT: 'yyyyå¹´mm月dd日 ddddi', + MONTH_ABBRS: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], + WEEKDAY_ABBRS: ['日','一','二','三','四','五','六'], + WEEKDAY_NAMES: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + YEAR_LABEL: 'å¹´', + MONTH_LABEL: '月', + YEAR_AND_MONTH: true, + today: '今天', + tomorrow: '明天', + yesterday: '昨天' + }; + })(); diff --git a/public/javascripts/calendar/lang_zh-tw.js b/public/javascripts/calendar/lang_zh-tw.js new file mode 100644 index 0000000..495c27e --- /dev/null +++ b/public/javascripts/calendar/lang_zh-tw.js @@ -0,0 +1,18 @@ +(function() { + ProtoCalendar.LangFile['zh-tw'] = { + HOUR_MINUTE_ERROR: '請輸入正確的時間。', + NO_DATE_ERROR: '請選擇日期。', + OK_LABEL: '完成', + DEFAULT_FORMAT: 'yyyy/mm/dd', + LABEL_FORMAT: 'yyyyå¹´mm月dd日 ddddi', + MONTH_ABBRS: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], + WEEKDAY_ABBRS: ['日','一','二','三','四','五','六'], + WEEKDAY_NAMES: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + YEAR_LABEL: 'å¹´', + MONTH_LABEL: '月', + YEAR_AND_MONTH: true, + today: '今天', + tomorrow: '明天', + yesterday: '昨天' + }; + })(); diff --git a/public/javascripts/calendar/protocalendar.js b/public/javascripts/calendar/protocalendar.js new file mode 100644 index 0000000..a13d7c9 --- /dev/null +++ b/public/javascripts/calendar/protocalendar.js @@ -0,0 +1,1434 @@ +/* protocalendar.js + * (c) 2009 Spookies + * + * License : MIT-style license. + * Web site: http://labs.spookies.jp/product/protocalendar + * + * protocalendar.js - depends on prototype.js 1.6 or later + * http://www.prototypejs.org/ + * +/*--------------------------------------------------------------------------*/ + +var ProtoCalendar = Class.create(); +ProtoCalendar.Version = "1.1.8.2"; + +ProtoCalendar.LangFile = new Object(); +ProtoCalendar.LangFile['en'] = { + HOUR_MINUTE_ERROR: 'The time is not valid.', + NO_DATE_ERROR: 'No day has been selected.', + OK_LABEL: 'OK', + DEFAULT_FORMAT: 'mm/dd/yyyy', + LABEL_FORMAT: 'ddd mm/dd/yyyy', + MONTH_ABBRS: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], + MONTH_NAMES: ['January','February','March','April','May','June','July','August','September','October','November','December'], + YEAR_LABEL: ' ', + MONTH_LABEL: ' ', + WEEKDAY_ABBRS: ['Sun','Mon','Tue','Wed','Thr','Fri','Sat'], + WEEKDAY_NAMES: ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], + YEAR_AND_MONTH: false +}; + +ProtoCalendar.LangFile.defaultLang = 'en'; +ProtoCalendar.LangFile.defaultLangFile = function() { return ProtoCalendar.LangFile[defaultLang]; }; + +ProtoCalendar.newDate = function() { + var d = new Date(); + d.setDate(1); + return d; +} + +//Only check vertically +ProtoCalendar.withinViewport = function(element) { + var dimensions = ProtoCalendar.callWithVisibility(element, function() { return element.getDimensions(); }); + var width = dimensions.width; + var height = dimensions.height; + var offsets = ProtoCalendar.callWithVisibility(element, function() { return element.viewportOffset(); }); + var offsetX = offsets.left; + var offsetY = offsets.top; + return (offsetY >=0) && (offsetY + height <= document.viewport.getHeight()); +} + +ProtoCalendar.callWithVisibility = function(element, func) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) {// Safari bug + return func(); + } + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var result = func(); + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return result; +} + +Object.extend(ProtoCalendar, { + JAN: 0, + FEB: 1, + MAR: 2, + APR: 3, + MAY: 4, + JUNE: 5, + JULY: 6, + AUG: 7, + SEPT: 8, + OCT: 9, + NOV: 10, + DEC: 11, + + SUNDAY: 0, + MONDAY: 1, + TUESDAY: 2, + WEDNESDAY: 3, + THURSDAY: 4, + FRIDAY: 5, + SATURDAY: 6, + + getNumDayOfMonth: function(year, month){ + return 32 - new Date(year, month, 32).getDate(); + }, + + getDayOfWeek: function(year, month, day) { + return new Date(year, month, day).getDay(); + } + }); + +ProtoCalendar.prototype = { + initialize: function(options) { + var date = ProtoCalendar.newDate(); + this.options = Object.extend({ + month: date.getMonth(), + year: date.getFullYear(), + lang: ProtoCalendar.LangFile.defaultLang + }, options || { }); + var getHolidays = ProtoCalendar.LangFile[this.options.lang]['getHolidays']; + if (getHolidays) { + this.initializeHolidays = getHolidays.bind(top, this); + } else { + this.initializeHolidays = function() { this.holidays = []; }; + } + this.date = new Date(this.options.year, this.options.month, 1); + }, + + getMonth: function() { + return this.date.getMonth(); + }, + + getYear: function() { + return this.date.getFullYear(); + }, + + invalidate: function() { + this.holidays = undefined; + }, + + setMonth: function(month) { + if (month != this.getMonth()) { + this.invalidate(); + } + return this.date.setMonth(month); + }, + + setYear: function(year) { + if (year != this.getYear()) { + this.invalidate(); + } + return this.date.setFullYear(year); + }, + + getDate: function() { + return this.date; + }, + + setDate: function(date) { + this.invalidate(); + this.date = date; + }, + + setYearByOffset: function(offset) { + if (offset != 0) { + this.invalidate(); + } + this.date.setFullYear(this.date.getFullYear() + offset); + }, + + setMonthByOffset: function(offset) { + if (offset != 0) { + this.invalidate(); + } + this.date.setMonth(this.date.getMonth() + offset); + }, + + getNumDayOfMonth: function() { + return ProtoCalendar.getNumDayOfMonth(this.getYear(), this.getMonth()); + }, + + getDayOfWeek: function(day) { + return ProtoCalendar.getDayOfWeek(this.getYear(), this.getMonth(), day); + }, + + clone: function() { + return new ProtoCalendar({year: this.getYear(), month: this.getMonth()}); + }, + + getHoliday: function(day) { + if(!this.holidays) { this.initializeHolidays();} + var holiday = this.holidays[day]; + return holiday? holiday : false; + }, + + initializeHolidays: function() { + } +}; + +var AbstractProtoCalendarRender = Class.create(); +Object.extend(AbstractProtoCalendarRender, { + id: 1, + WEEK_DAYS_SUNDAY: [ 0, 1, 2, 3, 4, 5, 6 ], + WEEK_DAYS_MONDAY: [ 1, 2, 3, 4, 5, 6, 0 ], + WEEK_DAYS_INDEX_SUNDAY: [ 0, 1, 2, 3, 4, 5, 6 ], + WEEK_DAYS_INDEX_MONDAY: [ 6, 0, 1, 2, 3, 4, 5 ], + + getId: function() { + var id = AbstractProtoCalendarRender.id; + AbstractProtoCalendarRender.id += 1; + return id; + } + }); + +AbstractProtoCalendarRender.prototype = { + initialize: function(options) { + this.id = AbstractProtoCalendarRender.getId(); + this.options = Object.extend({ + weekFirstDay : ProtoCalendar.MONDAY, + containerClass: 'cal-container', + tableClass: 'cal-table', + headerTopClass: 'cal-header-top', + headerClass: 'cal-header', + headerBottomClass: 'cal-header-bottom', + bodyTopClass: 'cal-body-top', + bodyClass: 'cal-body', + bodyBottomClass: 'cal-body-bottom', + bodyId: this.getIdPrefix() + '-body', + footerTopClass: 'cal-footer-top', + footerClass: 'cal-footer', + footerBottomClass: 'cal-footer-bottom', + footerId: this.getIdPrefix() + '-footer', + yearSelectClass: 'cal-select-year', + yearSelectId: this.getIdPrefix() + '-select-year', + monthSelectClass: 'cal-select-month', + monthSelectId: this.getIdPrefix() + '-select-month', + borderClass: 'cal-border', + hourMinuteInputClass: 'cal-input-hour-minute', + hourMinuteInputId: this.getIdPrefix() + '-input-hour-minute', + hourInputClass: 'cal-input-hour', + hourInputId: this.getIdPrefix() + '-input-hour', + minuteInputClass: 'cal-input-minute', + minuteInputId: this.getIdPrefix() + '-input-minute', + secondInputClass: 'cal-input-second', + secondInputId: this.getIdPrefix() + '-input-second', + okButtonClass: 'cal-ok-button', + okButtonId: this.getIdPrefix() + '-ok-button', + errorDivClass: 'cal-error-list', + errorDivId: this.getIdPrefix() + '-error-list', + labelRowClass: 'cal-label-row', + labelCellClass: 'cal-label-cell', + nextButtonClass: 'cal-next-btn', + prevButtonClass: 'cal-prev-btn', + dayCellClass: 'cal-day-cell', + dayClass: 'cal-day', + weekdayClass: 'cal-weekday', + sundayClass: 'cal-sunday', + saturdayClass: 'cal-saturday', + holidayClass: 'cal-holiday', + otherdayClass: 'cal-otherday', + disabledDayClass: 'cal-disabled', + selectedDayClass: 'cal-selected', + nextBtnId: this.getIdPrefix() + '-next-btn', + prevBtnId: this.getIdPrefix() + '-prev-btn', + lang: ProtoCalendar.LangFile.defaultLang, + showEffect: 'Appear', + hideEffect: 'Fade', + ifInvisible: 'Flip', /* None | Scroll | Flip */ + scrollMargin: 20 + }, options || {}); + this.langFile = ProtoCalendar.LangFile[this.options.lang]; + this.weekFirstDay = this.options.weekFirstDay; + this.initWeekData(); + this.container = this.createContainer(); + this.alignTo = $(this.options.alignTo); + this.alignOrient = 'Below'; + if (navigator.appVersion.match(/\bMSIE\b/)) { + this.iframe = this.createIframe(); + } + this.resizeHandler = this.setPosition.bind(this); + }, + + createContainer: function() { + var container = $(document.createElement('div')); + container.addClassName(this.options.containerClass); + container.setStyle({position:'absolute', + top: "0px", + left: "0px", + zindex:1, + display: 'none'}); + container.hide(); + document.body.appendChild(container); + return container; + }, + + createIframe: function() { + var iframe = document.createElement("iframe"); + iframe.setAttribute("src", "javascript:false;"); + iframe.setAttribute("frameBorder", "0"); + iframe.setAttribute("scrolling", "no"); + Element.setStyle(iframe, { position:'absolute', + top: "0px", + left: "0px", + zindex:10, + display: 'none', + overflow: 'hidden', + filter: 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)' + }); + document.body.appendChild(iframe); + return $(iframe); + }, + + getWeekdayLabel: function(weekday) { + return this.langFile.WEEKDAY_ABBRS[weekday]; + }, + + getWeekdays: function() { + return this.weekdays; + }, + + initWeekData: function() { + if (this.weekFirstDay == ProtoCalendar.SUNDAY) { + this.weekLastDay = ProtoCalendar.SATURDAY; + this.weekdays = AbstractProtoCalendarRender.WEEK_DAYS_SUNDAY; + this.weekdaysIndex = AbstractProtoCalendarRender.WEEK_DAYS_INDEX_SUNDAY; + } else { + this.weekFirstDay == ProtoCalendar.MONDAY + this.weekLastDay = ProtoCalendar.SUNDAY; + this.weekdays = AbstractProtoCalendarRender.WEEK_DAYS_MONDAY; + this.weekdaysIndex = AbstractProtoCalendarRender.WEEK_DAYS_INDEX_MONDAY; + } + }, + + getCalendarBeginDay: function(calendar) { + var offset = this.getDayIndexOfWeek(calendar, 1); + var date = new Date(calendar.getYear(), calendar.getMonth(), 1 - offset); + return date; + }, + + getCalendarEndDay: function(calendar) { + var lastDayOfMonth = calendar.getNumDayOfMonth(); + var offset = 6 - this.getDayIndexOfWeek(calendar, lastDayOfMonth); + var date = new Date(calendar.getYear(), calendar.getMonth(), lastDayOfMonth + offset + 1); + return date; + }, + + getDayIndexOfWeek: function(calendar, day) { + return this.weekdaysIndex[ calendar.getDayOfWeek(day) ]; + }, + + getIdPrefix: function() { + return 'cal' + this.id; + }, + + getDayDivId: function(date) { + return this.getIdPrefix() + '-year' + date.getFullYear() + '-month' + date.getMonth() + '-day' + date.getDate(); + }, + + setPosition: function() { + if (!this.alignTo) return true; + this.setAlignment(this.alignTo, this.container, this.alignOrient); + var withinView = ProtoCalendar.withinViewport(this.container); + if (!withinView && this.options.ifInvisible == 'Flip') { + this.alignOrient = (this.alignOrient == 'Above' ? 'Below' : 'Above'); + this.setAlignment(this.alignTo, this.container, this.alignOrient); + } + if (this.iframe) { + var dimensions = Element.getDimensions(this.container); + this.iframe.setAttribute("width", dimensions.width); + this.iframe.setAttribute("height", dimensions.height); + this.setAlignment(this.alignTo, this.iframe, this.alignOrient); + } + if (this.options.ifInvisible == 'Scroll') this.scrollIfInvisible(); + return true; + }, + + setAlignment: function(alignTo, element, pos) { + var offsets = Position.cumulativeOffset(alignTo); + element.setStyle({left: offsets[0] + "px"}); + if (pos == 'Above') { + var elementHeight = ProtoCalendar.callWithVisibility(element, function() { return element.offsetHeight; }); + element.setStyle({top: (offsets[1] - elementHeight) + "px"}); + } else if (pos == 'Below') { + element.setStyle({top: (offsets[1] + alignTo.offsetHeight) + "px"}); + } else { + //Unknown option + } + }, + + show: function(option) { + Event.observe(window, 'resize', this.resizeHandler); + this.setPosition(); + if (typeof Effect != 'undefined') { + var effect = this.options['showEffect'] || 'Appear'; + if (!this._effect || this._effect.state == 'finished') { + this._effect = new Effect[effect](this.container, {duration: 0.5}); + } + } else { + this.container.show(); + } + if (this.iframe) this.iframe.show(); + }, + + scrollIfInvisible: function() { + var container = this.container; + var dimensions = ProtoCalendar.callWithVisibility(container, function() { return container.getDimensions(); }); + var width = dimensions.width; + var height = dimensions.height; + var offsets = ProtoCalendar.callWithVisibility(container, function() { return container.viewportOffset(); }); + var offsetX = offsets.left; + var offsetY = offsets.top; + var diff = offsetY + height - document.viewport.getHeight(); + if (diff > 0) { + window.scrollBy(0, diff + this.options.scrollMargin); + } + }, + + hide: function(option) { + Event.stopObserving(window, 'resize', this.resizeHandler); + if (!this.container.visible()) { + return ; + } + if (typeof Effect != 'undefined') { + var effect = this.options['hideEffect'] || 'Fade'; + if (!this._effect || this._effect.state == 'finished') { + this._effect = new Effect[effect](this.container, {duration: 0.3}); + } + } else { + this.container.hide(); + } + if (this.iframe) this.iframe.hide(); + }, + + hideImmediately: function(option) { + if (!this.container.visible()) { + return ; + } + this.container.hide(); + if (this.iframe) this.iframe.hide(); + }, + + toggle: function(element) { + this.container.visible() ? this.hide() : this.show(); + }, + + render: function(calendar) { }, + + rerender: function(calendar) { }, + + getContainer: function() { + return this.container; + }, + + getPrevButton: function() { + return $(this.options.prevBtnId); + }, + + getNextButton: function() { + return $(this.options.nextBtnId); + }, + + getYearSelect: function() { + return $(this.options.yearSelectId); + }, + + getMonthSelect: function() { + return $(this.options.monthSelectId); + }, + + getHourInput: function() { + return $(this.options.hourInputId); + }, + + getMinuteInput: function() { + return $(this.options.minuteInputId); + }, + + getSecondInput: function() { + return $(this.options.secondInputId); + }, + + getOkButton: function() { + return $(this.options.okButtonId); + }, + + getBody: function() { + return $(this.options.bodyId); + }, + + getDayDivs: function() { + //Good Performance for IE + var divEls = []; + var dayDivs = this.dayDivs; + for (var i = 0; i < dayDivs.length; i++) { + divEls.push(document.getElementById(dayDivs[i])); + } + return divEls; + //return this.container.getElementsBySelector("a." + this.options.dayClass); + }, + + getDateFromEl: function(el) { + var element = $(el); + return new Date(element.readAttribute('year'), element.readAttribute('month'), element.readAttribute('day')); + }, + + //Set hour minute (second) to date from the input, if invalid return undefined. + //The input date parameter will not be tainted even if it fails, because the return result is a copy. + injectHourMinute: function(date) { + if (!date || isNaN(date.getTime())) return undefined; + var rd = new Date(date.getFullYear(), date.getMonth(), date.getDate()); + rd.setHours(parseInt(this.getHourInput().value, 10)); + rd.setMinutes(this.getMinuteInput().value); + if (this.options.enableSecond) rd.setSeconds(this.getSecondInput().value); + return isNaN(rd.getTime()) ? undefined : rd; + }, + + selectDate: function(date) { + var dayEl = $(this.getDayDivId(date)); + if (dayEl) dayEl.addClassName(this.options.selectedDayClass); + }, + + selectTime: function(date) { + if (!date) return; + this.getHourInput().value = date.getHours(); + this.getMinuteInput().value = date.getMinutes(); + if (this.options.enableSecond) this.getSecondInput().value = date.getSeconds(); + }, + + deselectDate: function(date) { + if (date) { + var dateEl = $(this.getDayDivId(date)); + if (dateEl) dateEl.removeClassName(this.options.selectedDayClass); + } + }, + + evaluateWithOptions: function(html) { + var template = new Template(html); + return template.evaluate(this.options); + }, + + defaultOnError: function(msg) { + this.ensureErrorDiv(); + this.errorDiv.show(); + this.errorDiv.innerHTML += '
  • ' + this.langFile[msg] + '
  • '; + }, + + hideError: function() { + this.ensureErrorDiv(); + this.errorDiv.innerHTML = ''; + this.errorDiv.hide(); + }, + + ensureErrorDiv: function() { + if (!this.errorDiv) { + var errorDivHtml = '
      '; + new Insertion.Before($(this.options.footerId), this.evaluateWithOptions(errorDivHtml)); + this.errorDiv = $(this.options.errorDivId); + } + }, + + isSelectable: function(date) { + return (this.options.minDate - date) <= 0 && (date - this.options.maxDate) <= 0; + } + +}; + +var ProtoCalendarRender = Class.create(); +Object.extend(ProtoCalendarRender.prototype, AbstractProtoCalendarRender.prototype); + +Object.extend( + ProtoCalendarRender.prototype, + { + render: function(calendar) { + var html = ''; + html += this.renderHeader(calendar); + html += '
      '; + html += '
      '; + if (this.options.enableHourMinute) html += this.renderHourMinute(); + html += this.renderFooter(calendar); + this.container.innerHTML = this.evaluateWithOptions(html); + this.rerender(calendar); + }, + + rerender: function(calendar) { + this.getBody().innerHTML = this.evaluateWithOptions(this.renderBody(calendar)); + SelectCalendar.selectOption(this.getMonthSelect(), calendar.getMonth()); + SelectCalendar.selectOption(this.getYearSelect(), calendar.getYear()); + if (this.container.visible()) this.setPosition(); + }, + + renderHeader: function(calendar) { + var html = ''; + // required 'href' + html += '
      ' + + '<<' + + this.createSelect(calendar.getYear(), calendar.getMonth()) + + '>>' + + '
      '; + return html; + }, + + renderFooter: function(calendar) { + return '
      '; + }, + + renderHourMinute: function() { + if (!this.hourMinuteHtml) { + var html = '
      '; + html += '' + + ':'; + if (this.options.enableSecond) { + html += ':'; + } + html += ''; + html += '
      '; + this.hourMinuteHtml = html; + } + return this.hourMinuteHtml; + }, + + createSelect: function(year, month) { + var yearPart = this.createYearSelect(year) + this.langFile.YEAR_LABEL; + var monthPart = this.createMonthSelect(month) + this.langFile.MONTH_LABEL; + if (this.langFile.YEAR_AND_MONTH) { + return yearPart + monthPart; + } else { + return monthPart + yearPart; + } + }, + + createYearSelect: function(year) { + var html = ''; + html += ''; + return html; + }, + + createMonthSelect: function(month) { + if (!this.monthSelectHtml) { + var html = ''; + html += ''; + this.monthSelectHtml = html; + } + return this.monthSelectHtml; + }, + + renderBody: function(calendar) { + this.dayDivs = []; + var html = ''; + html += ''; + var othis = this; + if (!this.headHtml) { + this.headHtml = ''; + $A(this.getWeekdays()).each(function(weekday) { + var exClassName = ''; + if (weekday == ProtoCalendar.SUNDAY) { exClassName = ' #{sundayClass}'; } + if (weekday == ProtoCalendar.SATURDAY) { exClassName = ' #{saturdayClass}'; } + othis.headHtml += ''; + }); + } + html += this.headHtml; + var curDay = this.getCalendarBeginDay(calendar); + var calEndDay = this.getCalendarEndDay(calendar); + html += ''; + var dayNum = Math.round((calEndDay - curDay) / 1000 / 60 / 60 / 24); + for(var i = 0; i < dayNum; i += 1, curDay.setDate(curDay.getDate() + 1)) { + var divClassName; + var holiday = calendar.getHoliday(curDay.getDate()); + if(curDay.getMonth() != calendar.getMonth()) { + divClassName = this.options.otherdayClass; + } else if (holiday) { + divClassName = this.options.holidayClass; + } else if (curDay.getDay() == ProtoCalendar.SUNDAY) { + divClassName = this.options.sundayClass; + } else if (curDay.getDay() == ProtoCalendar.SATURDAY) { + divClassName = this.options.saturdayClass; + } else { + divClassName = this.options.weekdayClass; + } + + if (curDay.getDay() == this.weekFirstDay) { html += ''; } + var dayId = this.getDayDivId(curDay); + var dayHtml = ''; + if (this.isSelectable(curDay)) { + dayHtml = '' + curDay.getDate() + ''; + this.dayDivs.push(dayId); + } else { + divClassName += ' ' + this.options.disabledDayClass; + dayHtml = curDay.getDate(); + } + html += ''; + if (curDay.getDay() == this.weekLastDay) { html += ''; } + } + html += '
      ' + + othis.getWeekdayLabel(weekday) + + '
      ' + dayHtml + '
      '; + return html; + } + + }); + +var ProtoCalendarController = Class.create(); +ProtoCalendarController.prototype = { + initialize: function(calendarRender, options) { + this.options = Object.extend({ + onHourMinuteError: this.defaultOnHourMinuteError.bind(this), + onNoDateError: this.defaultOnNoDateError.bind(this) + }, options); + this.calendarRender = calendarRender; + this.initializeDate(); + this.calendar = new ProtoCalendar(this.options); + this.calendarRender.render(this.calendar); + if (options.year && options.month && options.day) { + var date = new Date(this.options.year, this.options.month, this.options.day); + if (options.hour && options.minute && options.second) { + date.setHours(options.hour, options.minute && options.second); + } + this.selectDate(date, true); + } else { + this.selectDate(null); + } + this.observeEventsOnce(); + this.observeEvents(); + this.onChangeHandlers = []; + }, + + initializeDate: function() { + var date = ProtoCalendar.newDate(); + if (!this.options.year) { + if (date.getFullYear() >= this.options.startYear && date.getFullYear() <= this.options.endYear) { + this.options.year = date.getFullYear(); + } else { + this.options.year = this.options.startYear; + } + } + if (!this.options.month) { + this.options.month = date.getMonth(); + } + if (!this.options.day) { + this.options.day = date.getDate(); + } + }, + + observeEventsOnce: function() { + var calrndr = this.calendarRender; + calrndr.getPrevButton().observe('click', this.showPrevMonth.bindAsEventListener(this)); + calrndr.getNextButton().observe('click', this.showNextMonth.bindAsEventListener(this)); + var othis = this; + var yearSelect = calrndr.getYearSelect(); + var monthSelect = calrndr.getMonthSelect(); + var year = this.calendar.getYear(); + var month = this.calendar.getMonth(); + yearSelect.observe('change', function() { + othis.setMonth(parseInt(yearSelect[yearSelect.selectedIndex].value, 10), parseInt(monthSelect[monthSelect.selectedIndex].value, 10)); + }); + monthSelect.observe('change', function() { + othis.setMonth(parseInt(yearSelect[yearSelect.selectedIndex].value, 10), parseInt(monthSelect[monthSelect.selectedIndex].value, 10)); + }); + // add auto focus + if (this.options.enableHourMinute) { + var hour = calrndr.getHourInput(); + var minute = calrndr.getMinuteInput(); + hour.observe('keyup', this._autoFocus.bindAsEventListener(hour, minute)); + hour.observe('keydown', this._disablePaste.bindAsEventListener(hour)); + hour.observe('contextmenu', this._disableContextMenu.bindAsEventListener(hour)); + var nextEl = this.options.enableSecond ? calrndr.getSecondInput() : calrndr.getOkButton(); + minute.observe('keyup', this._autoFocus.bindAsEventListener(minute, nextEl)); + minute.observe('keydown', this._disablePaste.bindAsEventListener(minute)); + minute.observe('contextmenu', this._disableContextMenu.bindAsEventListener(minute)); + if (navigator.appVersion.match(/\bMSIE\b/)) { + hour.setStyle({'imeMode': 'disabled'}); + minute.setStyle({'imeMode': 'disabled'}); + } + } + if (this.options.enableSecond) { + var second = calrndr.getSecondInput(); + second.observe('keyup', this._autoFocus.bindAsEventListener(second, calrndr.getOkButton())); + second.observe('keydown', this._disablePaste.bindAsEventListener(second)); + second.observe('contextmenu', this._disableContextMenu.bindAsEventListener(second)); + if (navigator.appVersion.match(/\bMSIE\b/)) { + second.setStyle({'imeMode': 'disabled'}); + } + } + if (this.options.enableHourMinute) calrndr.getOkButton().observe('click', this.onSubmit.bind(this)); + }, + _disableContextMenu: function(event) { + Event.stop(event); + return false; + }, + _disablePaste: function(event) { + // ctrl + v || shift + insert + if ((event.keyCode == 86 && event.ctrlKey) || (event.keyCode == 45 && event.shiftKey)) { + Event.stop(event); + return false; + } + }, + _autoFocus: function(event, nextEl) { + // shift || tab + if (event.keyCode == 16 || event.keyCode == 9 || (event.keyCode == 9 && event.shiftKey)) { + Event.stop(event); + return false; + } + var v = this.value; + if (v.length && v.length == 2) { + nextEl.focus(); + nextEl.select(); + } + return true; + }, + observeEvents: function() { + var othis = this; + this.calendarRender.getDayDivs().each(function(el) { + Event.observe(el, 'click', othis.onClickHandler.bindAsEventListener(othis)); + }); + }, + + onClickHandler: function(event) { + Event.stop(event); + var date = this.calendarRender.getDateFromEl(Event.element(event)); + if (date) { + this.selectDate(date); + if (!this.options.enableHourMinute) { + this.onChangeHandler(); + setTimeout(this.hideCalendar.bind(this), 150); + } + } + }, + + onSubmit: function() { + this.hideError(); + var date = this.selectedDate; + if (!date) return this.options.onNoDateError(); + date = this.calendarRender.injectHourMinute(date); + if (!date) { + this.options.onHourMinuteError(); + } else { + this.selectDate(date, true); + if (this.options.enableHourMinute) this.calendarRender.selectTime(date); + this.onChangeHandler(); + this.hideCalendar(); + } + }, + + selectDate: function(date, redraw) { + this.calendarRender.deselectDate(this.selectedDate); + this.selectedDate = date; + if (!date) return; + if (redraw && (date.getFullYear() != this.calendar.getYear() || date.getMonth() != this.calendar.getMonth())) { + this.setMonth(date.getFullYear(), date.getMonth()); + } + this.calendarRender.selectDate(this.selectedDate); + }, + + getSelectedDate: function() { + return this.selectedDate; + }, + + addChangeHandler: function(func) { + this.onChangeHandlers.push(func); + }, + + onChangeHandler: function() { + this.onChangeHandlers.each(function(f) { f(); }); + }, + + showCalendar: function() { + this.calendarRender.show(); + }, + + hideCalendar: function() { + this.calendarRender.hide(); + }, + + blurCalendar: function(event) { + if (event.keyCode == 9) { + this.hideImmediatelyCalendar(); + } + }, + + hideImmediatelyCalendar: function() { + this.calendarRender.hideImmediately(); + }, + + toggleCalendar: function() { + this.calendarRender.toggle(); + }, + + showPrevMonth: function(event) { + this.shiftMonthByOffset(-1); + if (event) Event.stop(event); + }, + + showNextMonth: function(event) { + this.shiftMonthByOffset(1); + if (event) Event.stop(event); + }, + + shiftMonthByOffset: function(offset) { + if (offset == 0) return; + var newDate = new Date(this.calendar.getDate().getTime()); + newDate.setMonth(newDate.getMonth() + offset); + if (this.options.startYear > newDate.getFullYear() || this.options.endYear < newDate.getFullYear()) return; + this.calendar.setMonthByOffset(offset); + this.afterSet(); + }, + + setMonth: function(year, month) { + if (this.calendar.getYear() == year && this.calendar.getMonth() == month) return; + this.calendar.setYear(year); + this.calendar.setMonth(month); + this.afterSet(); + }, + + afterSet: function() { + this.calendarRender.rerender(this.calendar); + this.selectDate(this.selectedDate); + this.observeEvents(); + }, + + getContainer: function() { + return this.calendarRender.getContainer(); + }, + + defaultOnHourMinuteError: function() { + this.calendarRender.defaultOnError('HOUR_MINUTE_ERROR'); + }, + + defaultOnNoDateError: function() { + this.calendarRender.defaultOnError('NO_DATE_ERROR'); + }, + + hideError: function() { + this.calendarRender.hideError(); + } +}; + +//Don't instantiate this, extend BaseCalendar +var BaseCalendar = Class.create(); +BaseCalendar.bindOnLoad = function(f) { + if (document.observe) { + document.observe('dom:loaded', f); + } else { + Event.observe(window, 'load', f); + } +}; + + +BaseCalendar.prototype = { + initialize: function(options) { + throw "Cannot instantiate BaseCalendar."; + }, + + initializeOptions: function(options) { + if (!options) options = {}; + this.options = Object.extend({ + startYear: ProtoCalendar.newDate().getFullYear() - 10, + endYear: ProtoCalendar.newDate().getFullYear() + 10, + minDate: new Date(1900, 0, 1), + maxDate: new Date(3000, 0, 1), + format: ProtoCalendar.LangFile[options.lang || ProtoCalendar.LangFile.defaultLang]['DEFAULT_FORMAT'], + enableHourMinute: false, + enableSecond: false, + lang: ProtoCalendar.LangFile.defaultLang, + triggers: [] + }, options); + }, + + initializeBase: function() { + this.calendarController = new ProtoCalendarController(new ProtoCalendarRender(this.options), this.options); + this.langFile = ProtoCalendar.LangFile[this.options.lang] || ProtoCalendar.LangFile.defaultLangFile(); + this.triggers = []; + this.options.triggers.each(this.addTrigger.bind(this)); + this.changeHandlers = []; + this.observeEvents(); + }, + + addTrigger: function(el) { + this.triggers.push($(el)); + $(el).setStyle({'cursor': 'pointer'}); + }, + + observeEvents: function() { + Event.observe(document.body, 'click', this.windowClickHandler.bindAsEventListener(this)); + this.calendarController.addChangeHandler(this.onCalendarChange.bind(this)); + this.doObserveEvents(); + }, + + doObserveEvents: function() { + //Override this + }, + + windowClickHandler: function(event) { + var target = $(Event.element(event)); + if (this.triggers.include(target)) { + this.calendarController.toggleCalendar(); + } else if (target != this.input && !Element.descendantOf(target, this.calendarController.getContainer())) { + this.calendarController.hideCalendar(); + } + }, + + addChangeHandler: function(f) { + this.changeHandlers.push(f); + }, + + onCalendarChange: function() { + this.changeHandlers.each(function(f) { f(); }); + } +}; + +var InputCalendar = Class.create(); +InputCalendar.createOnLoaded = function(input, options) { + BaseCalendar.bindOnLoad(function() { + new InputCalendar(input, options); + }); +}; +InputCalendar.initCalendars = function(inputs, options) { + if (document.observe) { + document.observe('dom:loaded', function() { + $$(inputs).each(function(input) { + new InputCalendar(input, options); + }); + }); + } else { + Event.observe(window, 'load', function() { + $$(inputs).each(function(input) { + new InputCalendar(input, options); + }); + }); + } +}; +Object.extend(InputCalendar.prototype, BaseCalendar.prototype); +Object.extend( + InputCalendar.prototype, + { + initialize: function(input, options) { + this.input = $(input); // used in doObserveEvents() + this.initializeOptions(options); + this.options = Object.extend({ + alignTo: input, + inputReadOnly: false, + labelFormat: undefined, + labelEl: undefined + }, this.options); + this.initializeBase(); + this.initializeInput(); + this.initializeLabel(); + }, + + initializeInput: function() { + this.dateFormat = new ProtoCalendar.DateFormat(this.options.format); + if (this.input.value && this.dateFormat.parse(this.input.value)) { + this.onInputChange(); + } else { + this.onCalendarChange(); + } + if (this.options.enableHourMinute) { + this.calendarController.calendarRender.selectTime(this.calendarController.selectedDate); + } + if (this.options.inputReadOnly) { + this.input.setAttribute('readOnly', this.options.inputReadOnly); + } + }, + + initializeLabel: function() { + this.labelFormat = new ProtoCalendar.DateFormat(this.options.labelFormat || this.langFile['LABEL_FORMAT']); + var labelElm = $(this.options.labelEl); + if ((! labelElm) && this.options.labelFormat) { + var labelId = this.input.id + '_label'; + new Insertion.After(this.input, "
      "); + labelElm = $(labelId); + } + this.labelEl = labelElm; + this.changeLabel(); + }, + + changeLabel: function() { + if (!this.labelEl) return; + if (this.calendarController.getSelectedDate()) { + this.labelEl.innerHTML = this.labelFormat.format(this.calendarController.getSelectedDate(), this.options.lang); + } + }, + + doObserveEvents: function() { + this.input.observe('change', this.onInputChange.bind(this)); + this.input.observe('focus', this.calendarController.showCalendar.bind(this.calendarController)); + this.input.observe('keydown', this.calendarController.blurCalendar.bindAsEventListener(this.calendarController)); + this.addChangeHandler(this.changeInputValue.bind(this)); + this.addChangeHandler(this.changeLabel.bind(this)); + }, + + onInputChange: function() { + var date = this.dateFormat.parse(this.input.value); + if (date) { + this.calendarController.selectDate(date, true); + if (this.options.enableHourMinute) this.calendarController.calendarRender.selectTime(date); + } else { + var inputValue = this.input.value.toLowerCase(); + var date; + if (this.langFile['today'] && this.langFile['today'] == inputValue || inputValue == 'today') { + date = ProtoCalendar.newDate(); + } else if (this.langFile['tomorrow'] && this.langFile['tomorrow'] == inputValue || inputValue == 'tomorrow') { + date = ProtoCalendar.newDate(); + date.setDate(date.getDate() + 1); + } else if (this.langFile['yesterday'] && this.langFile['yesterday'] == inputValue || inputValue == 'yesterday') { + date = ProtoCalendar.newDate(); + date.setDate(date.getDate() - 1); + } else if (this.langFile.parseDate && (date = this.langFile.parseDate(inputValue))) { + //done is parseDate + } else { + date = undefined; + } + this.calendarController.selectDate(date, true); + this.onCalendarChange(); + } + this.changeLabel(); + }, + + changeInputValue: function() { + this.input.value = this.dateFormat.format(this.calendarController.getSelectedDate(), this.options.lang); + } + }); + + +ProtoCalendar.DateFormat = Class.create(); +Object.extend(ProtoCalendar.DateFormat, + { + MONTH_ABBRS: ProtoCalendar.LangFile.en.MONTH_ABBRS, + MONTH_NAMES: ProtoCalendar.LangFile.en.MONTH_NAMES, + WEEKDAY_ABBRS: ProtoCalendar.LangFile.en.WEEKDAY_ABBRS, + WEEKDAY_NAMES: ProtoCalendar.LangFile.en.WEEKDAY_NAMES, + formatRegexp: /(?:d{3,4}i|d{1,4}|m{1,4}|yy(?:yy)?|([hHMs])\1?|TT|tt|[lL])|.+?/g, + zeroize: function (value, length) { + if (!length) length = 2; + value = String(value); + for (var i = 0, zeros = ''; i < (length - value.length); i++) { + zeros += '0'; + } + return zeros + value; + } + }); + +ProtoCalendar.DateFormat.prototype = { + initialize: function(format) { + this.dateFormat = format; + this.parserInited = false; + this.formatterInited = false; + }, + + format: function(date, lang) { + if (!this.formatterInited) this.initFormatter(); + if (!date) return ''; + var langFile = ProtoCalendar.LangFile[lang || ProtoCalendar.LangFile.defaultLang]; + var str = ''; + this.formatHandlers.each(function(f) { + str += f(date, langFile); + }); + return str; + }, + + initFormatter: function() { + var handlers = []; + var matches = this.dateFormat.match(ProtoCalendar.DateFormat.formatRegexp); + for (var i = 0, n = matches.length; i < n; i++) { + switch(matches[i]) { + case 'd': handlers.push(function(date, lf) { return date.getDate(); }); break; + case 'dd': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.zeroize(date.getDate()) }); break; + case 'ddd': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.WEEKDAY_ABBRS[date.getDay()]; }); break; + case 'dddd': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.WEEKDAY_NAMES[date.getDay()]; }); break; + case 'dddi': handlers.push(function(date, lf) { return lf.WEEKDAY_ABBRS[date.getDay()]; }); break; + case 'ddddi': handlers.push(function(date, lf) { return lf.WEEKDAY_NAMES[date.getDay()]; }); break; + case 'm': handlers.push(function(date, lf) { return date.getMonth() + 1; }); break; + case 'mm': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.zeroize(date.getMonth() + 1); }); break; + case 'mmm': handlers.push(function(date, lf) { return lf.MONTH_ABBRS[date.getMonth()]; }); break; + case 'mmmm': handlers.push(function(date, lf) { return (lf.MONTH_NAMES || ProtoCalendar.DateFormat)[date.getMonth()]; }); break; + case 'yy': handlers.push(function(date, lf) { return String(date.getFullYear()).substr(2); }); break; + case 'yyyy': handlers.push(function(date, lf) { return date.getFullYear(); }); break; + case 'h': handlers.push(function(date, lf) { return date.getHours() % 12 || 12; }); break; + case 'hh': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.zeroize(date.getHours() % 12 || 12); }); break; + case 'H': handlers.push(function(date, lf) { return date.getHours(); }); break; + case 'HH': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.zeroize(date.getHours()); }); break; + case 'M': handlers.push(function(date, lf) { return date.getMinutes(); }); break; + case 'MM': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.zeroize(date.getMinutes()); }); break; + case 's': handlers.push(function(date, lf) { return date.getSeconds(); }); break; + case 'ss': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.zeroize(date.getSeconds()); }); break; + case 'l': handlers.push(function(date, lf) { return ProtoCalendar.DateFormat.zeroize(date.getMilliseconds(), 3); }); break; + case 'tt': handlers.push(function(date, lf) { return date.getHours() < 12 ? 'am' : 'pm'; }); break; + case 'TT': handlers.push(function(date, lf) { return date.getHours() < 12 ? 'AM' : 'PM'; }); break; + default: handlers.push(ProtoCalendar.createIdentity(matches[i])); + } + }; + this.formatHandlers = handlers; + this.formatterInited = true; + }, + + parse: function(str) { + if (!this.parserInited) this.initParser(); + if (!str) return undefined; + var results = str.match(this.parserRegexp); + if (!results) return undefined; + var date = ProtoCalendar.newDate(); + for (var i = 0, n = this.parseHandlers.length; i < n; i++) { + if (this.parseHandlers[i] != undefined) { + (this.parseHandlers[i])(date, results[i+1]); + } + } + this.parseCallback(date); + return date; + }, + + initParser: function() { + var handlers = []; + var regstr = ''; + var matches = this.dateFormat.match(ProtoCalendar.DateFormat.formatRegexp); + var hour, ampm; + + for (var i = 0, n = matches.length; i < n; i++) { + regstr += '('; + switch(matches[i]) { + case 'd': + case 'dd': regstr += '\\d{1,2}'; + handlers.push(function(date, value) { date.setDate(value); }); + break; + case 'm': + case 'mm': regstr += '\\d{1,2}'; + handlers.push(function(date, value) { + var m = parseInt(value, 10) - 1; + date.setMonth(m); + }); + break; +// case 'mmm': regstr += ProtoCalendar.DateFormat.MONTH_ABBRS.join('|'); +// handlers.push(function(date, value) { +// date.setMonth(ProtoCalendar.DateFormat.MONTH_ABBRS.indexOf(value)); }); +// break; +// case 'mmmm': regstr += ProtoCalendar.DateFormat.MONTH_NAMES.join('|'); +// handlers.push(function(date, value) { +// date.setMonth(ProtoCalendar.DateFormat.MONTH_NAMES.indexOf(value)); }); +// break; + case 'yy': regstr += '\\d{2}'; + handlers.push(function(date, value) { + var year = parseInt(value, 10); + year = year < 70 ? 2000 + year : 1900 + year; + date.setFullYear(year); }); + break; + case 'yyyy': regstr += '\\d{4}'; + handlers.push(function(date, value) { date.setFullYear(value); }); + break; + case 'h': + case 'hh': hour = true; + regstr += '\\d{1,2}'; + handlers.push(function(date, value) { + value = value % 12 || 0; + date.setHours(value); + }); + break; + case 'H': + case 'HH': regstr += '\\d{1,2}'; + handlers.push(function(date, value) { date.setHours(value); }); + break; + case 'M': + case 'MM': regstr += '\\d{1,2}'; + handlers.push(function(date, value) { date.setMinutes(value); }); + break; + case 's': + case 'ss': regstr += '\\d{1,2}'; + handlers.push(function(date, value) { date.setSeconds(value); }); + break; + case 'l': regstr += '\\d{1,3}'; + handlers.push(function(date, value) { date.setMilliSeconds(value); }); + break; + case 'tt': regstr += 'am|pm'; + handlers.push(function(date, value) { ampm = value; }); + break; + case 'TT': regstr += 'AM|PM'; + handlers.push(function(date, value) { ampm = value.toLowerCase(); }); + break; + case 'mmm': + case 'mmmm': + case 'ddd': + case 'dddd': + case 'dddi': + case 'ddddi': regstr += '.+?'; + handlers.push(undefined); + break; + + default: regstr += matches[i]; + handlers.push(undefined); + } + regstr += ')'; + } + this.parserRegexp = new RegExp(regstr); + this.parseHandlers = handlers; + + if (ampm == 'pm' && hour) { + this.parseCallback = this.normalizeHour.bind(this); + } else { + this.parseCallback = function() {}; + } + this.parserInited = true; + }, + + normalizeHour: function(date) { + var hour = date.getHours(); + hour = hour == 12 ? 0 : hour + 12; + date.setHours(hour); + } +}; + +ProtoCalendar.createIdentity = function(v) { + return function() { return v; } +} + +var SelectCalendar = Class.create(); +SelectCalendar.selectTimeOption = function(select, value) { + var newValue = value - 0; + newValue = newValue < 10 ? "0" + newValue : newValue; + SelectCalendar.selectOption(select, newValue); +} + +SelectCalendar.selectOption = function(select, value) { + var selectEl = $(select); + var options = selectEl.options; + for (var i = 0; i < options.length; i++) { + if (options[i].value === value.toString()) { + options[i].selected = true; + return; + } + } +} + +SelectCalendar.createOnLoaded = function(select, options) { + BaseCalendar.bindOnLoad(function() { new SelectCalendar(select, options); }); +}; +Object.extend(SelectCalendar.prototype, BaseCalendar.prototype); +Object.extend( + SelectCalendar.prototype, + { + initialize: function(select, options) { + this.yearSelect = $(select.yearSelect); + this.monthSelect = $(select.monthSelect); + this.daySelect = $(select.daySelect); + this.initializeOptions(options); + if (this.options.enableHourMinute) { + this.hourSelect = $(select.hourSelect); + this.minuteSelect = $(select.minuteSelect); + if (this.options.enableSecond) { + this.secondSelect = $(select.secondSelect); + } + } + this.options = Object.extend({alignTo: select.yearSelect}, this.options); + this.initializeBase(); + this.initializeSelect(); + }, + + initializeSelect: function() { + if (this.getSelectedDate()) { + this.onSelectChange(); + } else { + this.onCalendarChange(); + } + }, + + doObserveEvents: function() { + this.yearSelect.observe('change', this.onSelectChange.bind(this)); + this.monthSelect.observe('change', this.onSelectChange.bind(this)); + this.daySelect.observe('change', this.onSelectChange.bind(this)); + if (this.options.enableHourMinute) { + this.hourSelect.observe('change', this.onSelectChange.bind(this)); + this.minuteSelect.observe('change', this.onSelectChange.bind(this)); + if (this.options.enableSecond) { + this.secondSelect.observe('change', this.onSelectChange.bind(this)); + } + } + this.addChangeHandler(this.changeSelectValue.bind(this)); + }, + + onSelectChange: function() { + var date = this.getSelectedDate(); + if (!date) return; + this.calendarController.selectDate(date, true); + if (this.options.enableHourMinute) { + this.calendarController.calendarRender.selectTime(date); + } + this.onCalendarChange(); + }, + + changeSelectValue: function() { + var date = this.calendarController.getSelectedDate(); + if (date) { + SelectCalendar.selectOption(this.yearSelect, date.getFullYear()); + SelectCalendar.selectOption(this.monthSelect, date.getMonth() + 1); + SelectCalendar.selectOption(this.daySelect, date.getDate()); + if (this.options.enableHourMinute) { + SelectCalendar.selectTimeOption(this.hourSelect, date.getHours()); + SelectCalendar.selectTimeOption(this.minuteSelect, date.getMinutes()); + if (this.options.enableSecond) { + SelectCalendar.selectTimeOption(this.secondSelect, date.getSeconds()); + } + } + } + }, + + getSelectedDate: function() { + if (this.yearSelect.value == '' + || this.monthSelect.value == '' + || this.daySelect.value == '') { + return undefined; + } + var d = ProtoCalendar.newDate(); + d.setFullYear(this.yearSelect.value); + d.setMonth(this.monthSelect.value - 1); + d.setDate(this.daySelect.value); + if (this.options.enableHourMinute) { + if (this.hourSelect.value == '' || this.minuteSelect.value == '') { + return undefined; + } + d.setHours(this.hourSelect.value - 0); + d.setMinutes(this.minuteSelect.value - 0); + if (this.options.enableSecond) { + if (this.secondSelect.value == '') { + return undefined; + } + d.setSeconds(this.secondSelect.value - 0); + } + } + if (isNaN(d.getTime())) { + return undefined; + } else { + return d; + } + } + }); + diff --git a/public/javascripts/calendar/protocalendar_min.js b/public/javascripts/calendar/protocalendar_min.js new file mode 100644 index 0000000..2ff02a5 --- /dev/null +++ b/public/javascripts/calendar/protocalendar_min.js @@ -0,0 +1,10 @@ +/* protocalendar.js + * (c) 2009 Spookies + * + * License : MIT-style license. + * Web site: http://labs.spookies.jp/product/protocalendar + * + * protocalendar.js - depends on prototype.js 1.6 or later + * http://www.prototypejs.org/ + */ +var ProtoCalendar=Class.create();ProtoCalendar.Version="1.1.8.2";ProtoCalendar.LangFile=new Object();ProtoCalendar.LangFile.en={HOUR_MINUTE_ERROR:"The time is not valid.",NO_DATE_ERROR:"No day has been selected.",OK_LABEL:"OK",DEFAULT_FORMAT:"mm/dd/yyyy",LABEL_FORMAT:"ddd mm/dd/yyyy",MONTH_ABBRS:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],MONTH_NAMES:["January","February","March","April","May","June","July","August","September","October","November","December"],YEAR_LABEL:" ",MONTH_LABEL:" ",WEEKDAY_ABBRS:["Sun","Mon","Tue","Wed","Thr","Fri","Sat"],WEEKDAY_NAMES:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],YEAR_AND_MONTH:false};ProtoCalendar.LangFile.defaultLang="en";ProtoCalendar.LangFile.defaultLangFile=function(){return ProtoCalendar.LangFile[defaultLang]};ProtoCalendar.newDate=function(){var a=new Date();a.setDate(1);return a};ProtoCalendar.withinViewport=function(c){var f=ProtoCalendar.callWithVisibility(c,function(){return c.getDimensions()});var d=f.width;var b=f.height;var e=ProtoCalendar.callWithVisibility(c,function(){return c.viewportOffset()});var a=e.left;var g=e.top;return(g>=0)&&(g+b<=document.viewport.getHeight())};ProtoCalendar.callWithVisibility=function(d,f){d=$(d);var h=$(d).getStyle("display");if(h!="none"&&h!=null){return f()}var c=d.style;var g=c.visibility;var e=c.position;var b=c.display;c.visibility="hidden";c.position="absolute";c.display="block";var a=f();c.display=b;c.position=e;c.visibility=g;return a};Object.extend(ProtoCalendar,{JAN:0,FEB:1,MAR:2,APR:3,MAY:4,JUNE:5,JULY:6,AUG:7,SEPT:8,OCT:9,NOV:10,DEC:11,SUNDAY:0,MONDAY:1,TUESDAY:2,WEDNESDAY:3,THURSDAY:4,FRIDAY:5,SATURDAY:6,getNumDayOfMonth:function(a,b){return 32-new Date(a,b,32).getDate()},getDayOfWeek:function(b,c,a){return new Date(b,c,a).getDay()}});ProtoCalendar.prototype={initialize:function(c){var b=ProtoCalendar.newDate();this.options=Object.extend({month:b.getMonth(),year:b.getFullYear(),lang:ProtoCalendar.LangFile.defaultLang},c||{});var a=ProtoCalendar.LangFile[this.options.lang]["getHolidays"];if(a){this.initializeHolidays=a.bind(top,this)}else{this.initializeHolidays=function(){this.holidays=[]}}this.date=new Date(this.options.year,this.options.month,1)},getMonth:function(){return this.date.getMonth()},getYear:function(){return this.date.getFullYear()},invalidate:function(){this.holidays=undefined},setMonth:function(a){if(a!=this.getMonth()){this.invalidate()}return this.date.setMonth(a)},setYear:function(a){if(a!=this.getYear()){this.invalidate()}return this.date.setFullYear(a)},getDate:function(){return this.date},setDate:function(a){this.invalidate();this.date=a},setYearByOffset:function(a){if(a!=0){this.invalidate()}this.date.setFullYear(this.date.getFullYear()+a)},setMonthByOffset:function(a){if(a!=0){this.invalidate()}this.date.setMonth(this.date.getMonth()+a)},getNumDayOfMonth:function(){return ProtoCalendar.getNumDayOfMonth(this.getYear(),this.getMonth())},getDayOfWeek:function(a){return ProtoCalendar.getDayOfWeek(this.getYear(),this.getMonth(),a)},clone:function(){return new ProtoCalendar({year:this.getYear(),month:this.getMonth()})},getHoliday:function(a){if(!this.holidays){this.initializeHolidays()}var b=this.holidays[a];return b?b:false},initializeHolidays:function(){}};var AbstractProtoCalendarRender=Class.create();Object.extend(AbstractProtoCalendarRender,{id:1,WEEK_DAYS_SUNDAY:[0,1,2,3,4,5,6],WEEK_DAYS_MONDAY:[1,2,3,4,5,6,0],WEEK_DAYS_INDEX_SUNDAY:[0,1,2,3,4,5,6],WEEK_DAYS_INDEX_MONDAY:[6,0,1,2,3,4,5],getId:function(){var a=AbstractProtoCalendarRender.id;AbstractProtoCalendarRender.id+=1;return a}});AbstractProtoCalendarRender.prototype={initialize:function(a){this.id=AbstractProtoCalendarRender.getId();this.options=Object.extend({weekFirstDay:ProtoCalendar.MONDAY,containerClass:"cal-container",tableClass:"cal-table",headerTopClass:"cal-header-top",headerClass:"cal-header",headerBottomClass:"cal-header-bottom",bodyTopClass:"cal-body-top",bodyClass:"cal-body",bodyBottomClass:"cal-body-bottom",bodyId:this.getIdPrefix()+"-body",footerTopClass:"cal-footer-top",footerClass:"cal-footer",footerBottomClass:"cal-footer-bottom",footerId:this.getIdPrefix()+"-footer",yearSelectClass:"cal-select-year",yearSelectId:this.getIdPrefix()+"-select-year",monthSelectClass:"cal-select-month",monthSelectId:this.getIdPrefix()+"-select-month",borderClass:"cal-border",hourMinuteInputClass:"cal-input-hour-minute",hourMinuteInputId:this.getIdPrefix()+"-input-hour-minute",hourInputClass:"cal-input-hour",hourInputId:this.getIdPrefix()+"-input-hour",minuteInputClass:"cal-input-minute",minuteInputId:this.getIdPrefix()+"-input-minute",secondInputClass:"cal-input-second",secondInputId:this.getIdPrefix()+"-input-second",okButtonClass:"cal-ok-button",okButtonId:this.getIdPrefix()+"-ok-button",errorDivClass:"cal-error-list",errorDivId:this.getIdPrefix()+"-error-list",labelRowClass:"cal-label-row",labelCellClass:"cal-label-cell",nextButtonClass:"cal-next-btn",prevButtonClass:"cal-prev-btn",dayCellClass:"cal-day-cell",dayClass:"cal-day",weekdayClass:"cal-weekday",sundayClass:"cal-sunday",saturdayClass:"cal-saturday",holidayClass:"cal-holiday",otherdayClass:"cal-otherday",disabledDayClass:"cal-disabled",selectedDayClass:"cal-selected",nextBtnId:this.getIdPrefix()+"-next-btn",prevBtnId:this.getIdPrefix()+"-prev-btn",lang:ProtoCalendar.LangFile.defaultLang,showEffect:"Appear",hideEffect:"Fade",ifInvisible:"Flip",scrollMargin:20},a||{});this.langFile=ProtoCalendar.LangFile[this.options.lang];this.weekFirstDay=this.options.weekFirstDay;this.initWeekData();this.container=this.createContainer();this.alignTo=$(this.options.alignTo);this.alignOrient="Below";if(navigator.appVersion.match(/\bMSIE\b/)){this.iframe=this.createIframe()}this.resizeHandler=this.setPosition.bind(this)},createContainer:function(){var a=$(document.createElement("div"));a.addClassName(this.options.containerClass);a.setStyle({position:"absolute",top:"0px",left:"0px",zindex:1,display:"none"});a.hide();document.body.appendChild(a);return a},createIframe:function(){var a=document.createElement("iframe");a.setAttribute("src","javascript:false;");a.setAttribute("frameBorder","0");a.setAttribute("scrolling","no");Element.setStyle(a,{position:"absolute",top:"0px",left:"0px",zindex:10,display:"none",overflow:"hidden",filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"});document.body.appendChild(a);return $(a)},getWeekdayLabel:function(a){return this.langFile.WEEKDAY_ABBRS[a]},getWeekdays:function(){return this.weekdays},initWeekData:function(){if(this.weekFirstDay==ProtoCalendar.SUNDAY){this.weekLastDay=ProtoCalendar.SATURDAY;this.weekdays=AbstractProtoCalendarRender.WEEK_DAYS_SUNDAY;this.weekdaysIndex=AbstractProtoCalendarRender.WEEK_DAYS_INDEX_SUNDAY}else{this.weekFirstDay==ProtoCalendar.MONDAY;this.weekLastDay=ProtoCalendar.SUNDAY;this.weekdays=AbstractProtoCalendarRender.WEEK_DAYS_MONDAY;this.weekdaysIndex=AbstractProtoCalendarRender.WEEK_DAYS_INDEX_MONDAY}},getCalendarBeginDay:function(b){var c=this.getDayIndexOfWeek(b,1);var a=new Date(b.getYear(),b.getMonth(),1-c);return a},getCalendarEndDay:function(c){var a=c.getNumDayOfMonth();var d=6-this.getDayIndexOfWeek(c,a);var b=new Date(c.getYear(),c.getMonth(),a+d+1);return b},getDayIndexOfWeek:function(b,a){return this.weekdaysIndex[b.getDayOfWeek(a)]},getIdPrefix:function(){return"cal"+this.id},getDayDivId:function(a){return this.getIdPrefix()+"-year"+a.getFullYear()+"-month"+a.getMonth()+"-day"+a.getDate()},setPosition:function(){if(!this.alignTo){return true}this.setAlignment(this.alignTo,this.container,this.alignOrient);var b=ProtoCalendar.withinViewport(this.container);if(!b&&this.options.ifInvisible=="Flip"){this.alignOrient=(this.alignOrient=="Above"?"Below":"Above");this.setAlignment(this.alignTo,this.container,this.alignOrient)}if(this.iframe){var a=Element.getDimensions(this.container);this.iframe.setAttribute("width",a.width);this.iframe.setAttribute("height",a.height);this.setAlignment(this.alignTo,this.iframe,this.alignOrient)}if(this.options.ifInvisible=="Scroll"){this.scrollIfInvisible()}return true},setAlignment:function(d,a,e){var c=Position.cumulativeOffset(d);a.setStyle({left:c[0]+"px"});if(e=="Above"){var b=ProtoCalendar.callWithVisibility(a,function(){return a.offsetHeight});a.setStyle({top:(c[1]-b)+"px"})}else{if(e=="Below"){a.setStyle({top:(c[1]+d.offsetHeight)+"px"})}else{}}},show:function(b){Event.observe(window,"resize",this.resizeHandler);this.setPosition();if(typeof Effect!="undefined"){var a=this.options.showEffect||"Appear";if(!this._effect||this._effect.state=="finished"){this._effect=new Effect[a](this.container,{duration:0.5})}}else{this.container.show()}if(this.iframe){this.iframe.show()}},scrollIfInvisible:function(){var c=this.container;var f=ProtoCalendar.callWithVisibility(c,function(){return c.getDimensions()});var d=f.width;var b=f.height;var e=ProtoCalendar.callWithVisibility(c,function(){return c.viewportOffset()});var a=e.left;var h=e.top;var g=h+b-document.viewport.getHeight();if(g>0){window.scrollBy(0,g+this.options.scrollMargin)}},hide:function(b){Event.stopObserving(window,"resize",this.resizeHandler);if(!this.container.visible()){return}if(typeof Effect!="undefined"){var a=this.options.hideEffect||"Fade";if(!this._effect||this._effect.state=="finished"){this._effect=new Effect[a](this.container,{duration:0.3})}}else{this.container.hide()}if(this.iframe){this.iframe.hide()}},hideImmediately:function(a){if(!this.container.visible()){return}this.container.hide();if(this.iframe){this.iframe.hide()}},toggle:function(a){this.container.visible()?this.hide():this.show()},render:function(a){},rerender:function(a){},getContainer:function(){return this.container},getPrevButton:function(){return $(this.options.prevBtnId)},getNextButton:function(){return $(this.options.nextBtnId)},getYearSelect:function(){return $(this.options.yearSelectId)},getMonthSelect:function(){return $(this.options.monthSelectId)},getHourInput:function(){return $(this.options.hourInputId)},getMinuteInput:function(){return $(this.options.minuteInputId)},getSecondInput:function(){return $(this.options.secondInputId)},getOkButton:function(){return $(this.options.okButtonId)},getBody:function(){return $(this.options.bodyId)},getDayDivs:function(){var b=[];var a=this.dayDivs;for(var c=0;c"},hideError:function(){this.ensureErrorDiv();this.errorDiv.innerHTML="";this.errorDiv.hide()},ensureErrorDiv:function(){if(!this.errorDiv){var a='
        ';new Insertion.Before($(this.options.footerId),this.evaluateWithOptions(a));this.errorDiv=$(this.options.errorDivId)}},isSelectable:function(a){return(this.options.minDate-a)<=0&&(a-this.options.maxDate)<=0}};var ProtoCalendarRender=Class.create();Object.extend(ProtoCalendarRender.prototype,AbstractProtoCalendarRender.prototype);Object.extend(ProtoCalendarRender.prototype,{render:function(b){var a="";a+=this.renderHeader(b);a+='
        ';a+='
        ';if(this.options.enableHourMinute){a+=this.renderHourMinute()}a+=this.renderFooter(b);this.container.innerHTML=this.evaluateWithOptions(a);this.rerender(b)},rerender:function(a){this.getBody().innerHTML=this.evaluateWithOptions(this.renderBody(a));SelectCalendar.selectOption(this.getMonthSelect(),a.getMonth());SelectCalendar.selectOption(this.getYearSelect(),a.getYear());if(this.container.visible()){this.setPosition()}},renderHeader:function(b){var a="";a+='
        <<'+this.createSelect(b.getYear(),b.getMonth())+'>>
        ';return a},renderFooter:function(a){return'
        '},renderHourMinute:function(){if(!this.hourMinuteHtml){var a='
        ';a+=':';if(this.options.enableSecond){a+=':'}a+='';a+="
        ";this.hourMinuteHtml=a}return this.hourMinuteHtml},createSelect:function(c,d){var b=this.createYearSelect(c)+this.langFile.YEAR_LABEL;var a=this.createMonthSelect(d)+this.langFile.MONTH_LABEL;if(this.langFile.YEAR_AND_MONTH){return b+a}else{return a+b}},createYearSelect:function(b){var a="";a+='";return a},createMonthSelect:function(c){if(!this.monthSelectHtml){var b="";b+='";this.monthSelectHtml=b}return this.monthSelectHtml},renderBody:function(g){this.dayDivs=[];var j='';j+='';var b=this;if(!this.headHtml){this.headHtml="";$A(this.getWeekdays()).each(function(m){var i="";if(m==ProtoCalendar.SUNDAY){i=" #{sundayClass}"}if(m==ProtoCalendar.SATURDAY){i=" #{saturdayClass}"}b.headHtml+='"})}j+=this.headHtml;var e=this.getCalendarBeginDay(g);var a=this.getCalendarEndDay(g);j+="";var c=Math.round((a-e)/1000/60/60/24);for(var h=0;h"}var l=this.getDayDivId(e);var d="";if(this.isSelectable(e)){d=''+e.getDate()+"";this.dayDivs.push(l)}else{k+=" "+this.options.disabledDayClass;d=e.getDate()}j+='";if(e.getDay()==this.weekLastDay){j+=""}}j+="
        '+b.getWeekdayLabel(m)+"
        '+d+"
        ";return j}});var ProtoCalendarController=Class.create();ProtoCalendarController.prototype={initialize:function(c,b){this.options=Object.extend({onHourMinuteError:this.defaultOnHourMinuteError.bind(this),onNoDateError:this.defaultOnNoDateError.bind(this)},b);this.calendarRender=c;this.initializeDate();this.calendar=new ProtoCalendar(this.options);this.calendarRender.render(this.calendar);if(b.year&&b.month&&b.day){var a=new Date(this.options.year,this.options.month,this.options.day);if(b.hour&&b.minute&&b.second){a.setHours(b.hour,b.minute&&b.second)}this.selectDate(a,true)}else{this.selectDate(null)}this.observeEventsOnce();this.observeEvents();this.onChangeHandlers=[]},initializeDate:function(){var a=ProtoCalendar.newDate();if(!this.options.year){if(a.getFullYear()>=this.options.startYear&&a.getFullYear()<=this.options.endYear){this.options.year=a.getFullYear()}else{this.options.year=this.options.startYear}}if(!this.options.month){this.options.month=a.getMonth()}if(!this.options.day){this.options.day=a.getDate()}},observeEventsOnce:function(){var g=this.calendarRender;g.getPrevButton().observe("click",this.showPrevMonth.bindAsEventListener(this));g.getNextButton().observe("click",this.showNextMonth.bindAsEventListener(this));var c=this;var i=g.getYearSelect();var d=g.getMonthSelect();var j=this.calendar.getYear();var h=this.calendar.getMonth();i.observe("change",function(){c.setMonth(parseInt(i[i.selectedIndex].value,10),parseInt(d[d.selectedIndex].value,10))});d.observe("change",function(){c.setMonth(parseInt(i[i.selectedIndex].value,10),parseInt(d[d.selectedIndex].value,10))});if(this.options.enableHourMinute){var f=g.getHourInput();var e=g.getMinuteInput();f.observe("keyup",this._autoFocus.bindAsEventListener(f,e));f.observe("keydown",this._disablePaste.bindAsEventListener(f));f.observe("contextmenu",this._disableContextMenu.bindAsEventListener(f));var b=this.options.enableSecond?g.getSecondInput():g.getOkButton();e.observe("keyup",this._autoFocus.bindAsEventListener(e,b));e.observe("keydown",this._disablePaste.bindAsEventListener(e));e.observe("contextmenu",this._disableContextMenu.bindAsEventListener(e));if(navigator.appVersion.match(/\bMSIE\b/)){f.setStyle({imeMode:"disabled"});e.setStyle({imeMode:"disabled"})}}if(this.options.enableSecond){var a=g.getSecondInput();a.observe("keyup",this._autoFocus.bindAsEventListener(a,g.getOkButton()));a.observe("keydown",this._disablePaste.bindAsEventListener(a));a.observe("contextmenu",this._disableContextMenu.bindAsEventListener(a));if(navigator.appVersion.match(/\bMSIE\b/)){a.setStyle({imeMode:"disabled"})}}if(this.options.enableHourMinute){g.getOkButton().observe("click",this.onSubmit.bind(this))}},_disableContextMenu:function(a){Event.stop(a);return false},_disablePaste:function(a){if((a.keyCode==86&&a.ctrlKey)||(a.keyCode==45&&a.shiftKey)){Event.stop(a);return false}},_autoFocus:function(c,a){if(c.keyCode==16||c.keyCode==9||(c.keyCode==9&&c.shiftKey)){Event.stop(c);return false}var b=this.value;if(b.length&&b.length==2){a.focus();a.select()}return true},observeEvents:function(){var a=this;this.calendarRender.getDayDivs().each(function(b){Event.observe(b,"click",a.onClickHandler.bindAsEventListener(a))})},onClickHandler:function(b){Event.stop(b);var a=this.calendarRender.getDateFromEl(Event.element(b));if(a){this.selectDate(a);if(!this.options.enableHourMinute){this.onChangeHandler();setTimeout(this.hideCalendar.bind(this),150)}}},onSubmit:function(){this.hideError();var a=this.selectedDate;if(!a){return this.options.onNoDateError()}a=this.calendarRender.injectHourMinute(a);if(!a){this.options.onHourMinuteError()}else{this.selectDate(a,true);if(this.options.enableHourMinute){this.calendarRender.selectTime(a)}this.onChangeHandler();this.hideCalendar()}},selectDate:function(a,b){this.calendarRender.deselectDate(this.selectedDate);this.selectedDate=a;if(!a){return}if(b&&(a.getFullYear()!=this.calendar.getYear()||a.getMonth()!=this.calendar.getMonth())){this.setMonth(a.getFullYear(),a.getMonth())}this.calendarRender.selectDate(this.selectedDate)},getSelectedDate:function(){return this.selectedDate},addChangeHandler:function(a){this.onChangeHandlers.push(a)},onChangeHandler:function(){this.onChangeHandlers.each(function(a){a()})},showCalendar:function(){this.calendarRender.show()},hideCalendar:function(){this.calendarRender.hide()},blurCalendar:function(a){if(a.keyCode==9){this.hideImmediatelyCalendar()}},hideImmediatelyCalendar:function(){this.calendarRender.hideImmediately()},toggleCalendar:function(){this.calendarRender.toggle()},showPrevMonth:function(a){this.shiftMonthByOffset(-1);if(a){Event.stop(a)}},showNextMonth:function(a){this.shiftMonthByOffset(1);if(a){Event.stop(a)}},shiftMonthByOffset:function(b){if(b==0){return}var a=new Date(this.calendar.getDate().getTime());a.setMonth(a.getMonth()+b);if(this.options.startYear>a.getFullYear()||this.options.endYear");b=$(a)}this.labelEl=b;this.changeLabel()},changeLabel:function(){if(!this.labelEl){return}if(this.calendarController.getSelectedDate()){this.labelEl.innerHTML=this.labelFormat.format(this.calendarController.getSelectedDate(),this.options.lang)}},doObserveEvents:function(){this.input.observe("change",this.onInputChange.bind(this));this.input.observe("focus",this.calendarController.showCalendar.bind(this.calendarController));this.input.observe("keydown",this.calendarController.blurCalendar.bindAsEventListener(this.calendarController));this.addChangeHandler(this.changeInputValue.bind(this));this.addChangeHandler(this.changeLabel.bind(this))},onInputChange:function(){var b=this.dateFormat.parse(this.input.value);if(b){this.calendarController.selectDate(b,true);if(this.options.enableHourMinute){this.calendarController.calendarRender.selectTime(b)}}else{var a=this.input.value.toLowerCase();var b;if(this.langFile.today&&this.langFile.today==a||a=="today"){b=ProtoCalendar.newDate()}else{if(this.langFile.tomorrow&&this.langFile.tomorrow==a||a=="tomorrow"){b=ProtoCalendar.newDate();b.setDate(b.getDate()+1)}else{if(this.langFile.yesterday&&this.langFile.yesterday==a||a=="yesterday"){b=ProtoCalendar.newDate();b.setDate(b.getDate()-1)}else{if(this.langFile.parseDate&&(b=this.langFile.parseDate(a))){}else{b=undefined}}}}this.calendarController.selectDate(b,true);this.onCalendarChange()}this.changeLabel()},changeInputValue:function(){this.input.value=this.dateFormat.format(this.calendarController.getSelectedDate(),this.options.lang)}});ProtoCalendar.DateFormat=Class.create();Object.extend(ProtoCalendar.DateFormat,{MONTH_ABBRS:ProtoCalendar.LangFile.en.MONTH_ABBRS,MONTH_NAMES:ProtoCalendar.LangFile.en.MONTH_NAMES,WEEKDAY_ABBRS:ProtoCalendar.LangFile.en.WEEKDAY_ABBRS,WEEKDAY_NAMES:ProtoCalendar.LangFile.en.WEEKDAY_NAMES,formatRegexp:/(?:d{3,4}i|d{1,4}|m{1,4}|yy(?:yy)?|([hHMs])\1?|TT|tt|[lL])|.+?/g,zeroize:function(d,c){if(!c){c=2}d=String(d);for(var b=0,a="";b<(c-d.length);b++){a+="0"}return a+d}});ProtoCalendar.DateFormat.prototype={initialize:function(a){this.dateFormat=a;this.parserInited=false;this.formatterInited=false},format:function(a,d){if(!this.formatterInited){this.initFormatter()}if(!a){return""}var b=ProtoCalendar.LangFile[d||ProtoCalendar.LangFile.defaultLang];var c="";this.formatHandlers.each(function(e){c+=e(a,b)});return c},initFormatter:function(){var a=[];var c=this.dateFormat.match(ProtoCalendar.DateFormat.formatRegexp);for(var b=0,d=c.length;b