/**
 * metrics Data Set Selector
 * By Joe Turgeon [http://arithmetric.com]
 * 2/17/2010
 */

var metricsDateSelector = function () {
  var selector, active = false, responder, responderObj, startval, startdate, endval, enddate;

  function activate(func, obj, startmjd, endmjd) {
    responder = func;
    responderObj = obj || window;
    startval = startmjd;
    startdate = metricsDate.jd_to_ymd(startmjd);
    endval = endmjd;
    enddate = metricsDate.jd_to_ymd(endmjd);
    show();
  }

  function show() {
    if (!selector || !selector.length) {
      selector = $('<div id="selector" class="window"><div id="selector-wrapper"><div class="description">Select a range of dates to continue or <a href="#" onclick="metricsDateSelector.hide();return false;">cancel</a> this action.</div><div id="selector-range-start"><label>Start date:</label> <input id="selector-range-start-year" tabindex="1" size="4" value="' + startdate[0] + '" /> / <input id="selector-range-start-month" tabindex="2" size="2" value="' + startdate[1] + '" /> / <input id="selector-range-start-day" tabindex="3" size="2" value="' + startdate[2] + '" /></div><div id="selector-range-end"><label>End date:</label> <input id="selector-range-end-year" tabindex="4" size="4" value="' + enddate[0] + '" /> / <input id="selector-range-end-month" tabindex="5" size="2" value="' + enddate[1] + '" /> / <input id="selector-range-end-day" tabindex="6" size="2" value="' + enddate[2] + '" /></div> <div id="selector-range-submit-wrapper"><input type="button" id="selector-range-submit" tabindex="7" value="Apply" /></div> <div style="clear:both;" /></div></div>');
      selector.appendTo('body');
      $('#selector-range-submit').click(function (e) { metricsDateSelector.apply(); });
      $('#selector-range-start-year').focus();
    }
    else {
      $('#selector-range-start-year').val(startdate[0]);
      $('#selector-range-start-month').val(startdate[1]);
      $('#selector-range-start-day').val(startdate[2]);
      $('#selector-range-end-year').val(enddate[0]);
      $('#selector-range-end-month').val(enddate[1]);
      $('#selector-range-end-day').val(enddate[2]);
      $('#selector-range-start-year').focus();
      selector.show();
    }
    active = true;
  }

  function hide() {
    selector.hide();
    active = false;
  }

  function hasFocus() {
    return active;
  }

  function input(keycode) {
    var handled = false;
    var entry = '';

    switch (keycode) {
      case 9: // tab
//        handled = true;
        break;
      case 13: // enter
        apply();
        handled = true;
        break;
      case 27: // escape
        hide();
        handled = true;
        break;
    }
    return handled;
  }

  function apply() {
    startdate = [$('#selector-range-start-year').val(), $('#selector-range-start-month').val(), $('#selector-range-start-day').val()];
    startval = metricsDate.ymd_to_jd(parseInt(startdate[0], 10), parseInt(startdate[1], 10), parseInt(startdate[2], 10));
    enddate = [$('#selector-range-end-year').val(), $('#selector-range-end-month').val(), $('#selector-range-end-day').val()];
    endval = metricsDate.ymd_to_jd(parseInt(enddate[0], 10), parseInt(enddate[1], 10), parseInt(enddate[2], 10));
    responder.call(responderObj, startval, endval);
    hide();
  }

  return {
    activate: activate,
    apply: apply,
    input: input,
    hasFocus: hasFocus,
    hide: hide,
    show: show
  };
}();

