
$(function() {

  var Alt = false;
  var cache = {};
  //monkeypatch autocomplete item render
  $.ui.autocomplete.prototype._renderItem = function(ul, item) {
    var re = new RegExp($.ui.autocomplete.escapeRegex(this.term), 'gi');
    var t = item.label.replace(re, '<strong>' + this.term.toUpperCase() + '</strong>');
    Alt = !Alt;
    return $("<li></li>")
                .addClass(Alt ? "odd" : "even")
				.data("item.autocomplete", item)
				.append("<a>" + t + "</a>")
				.appendTo(ul);
  };


  function Matcher(reg) {
    return function(value) {
      return reg.test(value);
    }
  }

  function genList(func, data, term) {
    var priorityMatcher = new RegExp("(^|\\s|\\[)" + $.ui.autocomplete.escapeRegex(term), "i");
    var regMatcher = new RegExp("(^|\\[)" + $.ui.autocomplete.escapeRegex(term), "i");
    var crsMatcher = new RegExp("\\[" + $.ui.autocomplete.escapeRegex(term), "i");
    var arrHits = $.grep(data.priority, Matcher(priorityMatcher)).concat($.grep(data.regular, Matcher(regMatcher)));
    arrHits = $.grep(arrHits, Matcher(crsMatcher)).concat($.grep(arrHits, Matcher(crsMatcher), true));
    func(arrHits);
  };

  function setAuto(target, setname) {

    target.autocomplete({
      minLength: 2,
      source: function(request, response) {
        var self = $(this);
        if (!(setname in cache)) {
          $.getJSON('StationList.ashx?list=' + setname, function(data) {
            cache[setname] = data;
            genList(response, cache[setname], request.term);
          });
        }
        else {
          genList(response, cache[setname], request.term);
        }
      },
      focus: function(event, ui) {
        $(this).val(ui.item.value.replace(/\[.{3,4}\]/gi, ''));
        return false;
      },
      select: function(event, ui) {
        $(this).val(ui.item.value.replace(/\[.{3,4}\]/gi, ''));
        return false;
      }
    });
  };

  $('.autocompTTL').each(function() { setAuto($(this), 'TTL'); });
  $('.autocompNRES').each(function() { setAuto($(this), 'NRES'); });
  $('.autocompSWT').each(function() { setAuto($(this), 'SWT'); });

});



function setCal(name) {
    $(
	function() {
	    $(name).datepicker(
				{
				    showAnim: '',
				    showOn: 'button',
				    buttonImageOnly: true,
				    dateFormat: 'dd/mm/yy',
				    minDate: 0,
				    buttonImage: 'images/calendar.gif',
				    contrainInput: true,
				    duration: 'fast'
				}
			);
	}
	);
}

