/**
 * calendar_creator.js
 * カレンダーとRailsとのデータ受け渡しを行うjQueryプラグイン
 *
 * 前提条件
 * - jQuery 1.3.2
 * - jquery.calendar
 *
 * 使い方
 *  - カレンダーを表示させるHTMLタグを作成し#calendarというidを付与する
 *  - <header>内に下記のJavaScriptを記述する。
 *   <script type="text/javascript">
 *     $(function() {
 *         $('#calendar').calendarCreator({api_path:'<%=calendar_events_path%>', destination:'<%=go_events_path%>'});
 *
 *         // 表示させるHTML要素を指定する場合
 *         // $.fn.calendarCreator({api_path:'<%=calendar_events_path%>', destination:'<%=go_events_path%>', target:'.cal'});
 *     });
 *   </script>
 *
 * 引数:
 *   api_path: カレンダーデータを受け取るRailsのコントローラーメソッドのURI
 *   destination: カレンダー内の日付をクリックした際にリクエストが送られる先のコントローラーメソッドのURI
 * サーバーからのレスポンスJSONは以下のフォーマットの日付の配列になっていること
 * [{"event":{"date":"2009-12-16"}},{"event":{"date":"2009-12-11"}}]
 *
*/
(function($){
  $.fn.calendarCreator = function(opt){
    // 表示言語
    var lang = 'en';
    // 曜日表記
    var week = ['S','M','T','W','T','F','S'];
    // カレンダーデータを受け取るAIPへのURL
    var api_path = opt.api_path;
    // カレンダー内の日付をクリックした際にリクエストが送られるURI
    var destination = opt.destination;
    var destination = opt.destination;
    // カレンダーを表示させるHTML要素のID(指定が無い場合は#calendar)
    $target = opt.target == null ? $(this) : $(opt.target);
    // アニメーションを無効にする
    var moveTime = 0;
    // Ajaxリクエストのパラメーターオブジェクト
    param = {};
    // メインルーチン
    $.post(api_path, param, function(data){
      // イベント情報を表示
      showCalendar(getCalendarData(data));
    }, 'json');

    // カレンダーを表示させる関数
    function showCalendar(data){
      data.moveTime = 0;
      data.lang = lang;
      data.week = {};
      data.week.en = week
      $target.calendar(data);
    };

    // サーバーから受け取ったデータを基にカレンダーに渡すデータを生成する関数
    function getCalendarData(data){
      // カレンダーに渡すオブジェクトを初期化
      var calendarData = {};
      // イベント情報オブジェクトを初期化
      calendarData.events = {};
      // イベント情報オブジェクトの配列を生成
      $.each(data, function(){
        calendarData.events[this.event.date] = {'url':destination + '/' + this.event.date};
      });
      return calendarData;
    };
  }
})(jQuery);

