YAHOO.namespace("tracks.calendar");
// Init
YAHOO.tracks.calendar.init = function() {

  YAHOO.tracks.calendar.tracksCal = new YAHOO.widget.Calendar("tracksCal","calendarAPI",{"navigator":false,"multi_select":true});
  YAHOO.tracks.calendar.tracksCal.oNavigator = {
    setYear : function(year) {
      this.year = year;
    },
    setMonth : function(month) {
      this.month = month;
    },
    show : function() {
      YAHOO.tracks.calendar.jumpToMonth(this.year + '/' + (this.month + 1));
    }
  }

  // Correct formats for Japan: yyyy/mm/dd, mm/dd, yyyy/mm
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MDY_YEAR_POSITION", 1);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MDY_MONTH_POSITION", 2);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MDY_DAY_POSITION", 3);

  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MY_YEAR_POSITION", 1);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MY_MONTH_POSITION", 2);

  // Date labels for Japanese locale
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MONTHS_SHORT",   ["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"]);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MONTHS_LONG",    ["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"]);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("WEEKDAYS_1CHAR", ["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("WEEKDAYS_SHORT", ["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("WEEKDAYS_MEDIUM",["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("WEEKDAYS_LONG",  ["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"]);

  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MY_LABEL_YEAR_POSITION",  1);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MY_LABEL_MONTH_POSITION",  2);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MY_LABEL_YEAR_SUFFIX",  "\u5E74");
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MY_LABEL_MONTH_SUFFIX",  "");

  date_parts = YAHOO.tracks.calendar.preselect.split("/");
  YAHOO.tracks.calendar.tracksCal.setYear(date_parts[0]);
  YAHOO.tracks.calendar.tracksCal.setMonth(date_parts[1] - 1);
  YAHOO.tracks.calendar.tracksCal.select(YAHOO.tracks.calendar.preselect);

  // Set max and selected date
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MAXDATE", YAHOO.tracks.calendar.max_date);
  YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MINDATE", YAHOO.tracks.calendar.min_date);

  var tracksCalSelectHandler = function(type, args, obj) {
    YAHOO.tracks.calendar.tracksCal.selectEvent.unsubscribe(arguments.callee, YAHOO.tracks.calendar.tracksCal);

    selected = args[0];
    while (YAHOO.lang.isArray(selected[0])) {
      selected = selected[0];
    }
    var _date = this._toDate(selected);
    var date = _date.getFullYear() + "/" + (_date.getMonth() + 1) + "/" + _date.getDate();

    YAHOO.tracks.calendar.tracksCal.cfg.setProperty("MULTI_SELECT", false);
    YAHOO.tracks.calendar.tracksCal.clear();

    var date_parts = date.split("/");
    YAHOO.tracks.calendar.tracksCal.setYear(date_parts[0]);
    YAHOO.tracks.calendar.tracksCal.setMonth(date_parts[1] - 1);
    YAHOO.tracks.calendar.tracksCal.render();
    YAHOO.tracks.calendar.tracksCal.selectCell(YAHOO.tracks.calendar.tracksCal.getCellIndex(_date));

    location.href = YAHOO.tracks.calendar.base_url + "&date=" + date;
  };

  var tracksCalDeselectHandler = function(type, args, obj) {
    selected = args[0];
    while (YAHOO.lang.isArray(selected[0])) {
      selected = selected[0];
    }
    var _date = this._toDate(selected);
    var date = _date.getFullYear() + "/" + (_date.getMonth() + 1) + "/" + _date.getDate();
    YAHOO.tracks.calendar.tracksCal.select(date);
  };

  var tracksCalChangePageHandler = function(type, args, obj) {
    var _date = YAHOO.tracks.calendar.tracksCal.cfg.getProperty(YAHOO.widget.Calendar._DEFAULT_CONFIG.PAGEDATE.key);
    var check = _date.getFullYear() + "/" + (_date.getMonth() + 1);

    var left = false;
    var right = false;
    if (YAHOO.tracks.calendar.selectable_months.length > 1) {
      var i = 0;
      var x;
      for (x in YAHOO.tracks.calendar.selectable_months) {
        i++;
        if (YAHOO.tracks.calendar.selectable_months[x] == check) {
          break;
        }
      }
      if (i == 1) {
        right = true;
      } else if (i == YAHOO.tracks.calendar.selectable_months.length) {
        left = true;
      } else {
        right = true;
        left = true;
      }
    }

    var navleft = YAHOO.util.Dom.getElementsByClassName('calnavleft').shift();
    if (left) {
      YAHOO.util.Dom.setStyle(navleft, 'visibility', 'visible');
    } else {
      YAHOO.util.Dom.setStyle(navleft, 'visibility', 'hidden');
    }

    var navright = YAHOO.util.Dom.getElementsByClassName('calnavright').shift();
    if (right) {
      YAHOO.util.Dom.setStyle(navright, 'visibility', 'visible');
    } else {
      YAHOO.util.Dom.setStyle(navright, 'visibility', 'hidden');
    }
  }

  YAHOO.tracks.calendar.tracksCal.selectEvent.subscribe(tracksCalSelectHandler, YAHOO.tracks.calendar.tracksCal, true);
  YAHOO.tracks.calendar.tracksCal.deselectEvent.subscribe(tracksCalDeselectHandler, YAHOO.tracks.calendar.tracksCal, true);
  YAHOO.tracks.calendar.tracksCal.renderEvent.subscribe(tracksCalChangePageHandler, YAHOO.tracks.calendar.tracksCal, true);

  YAHOO.tracks.calendar.tracksCal.render();
}

YAHOO.util.Event.onDOMReady(YAHOO.tracks.calendar.init);

