String.prototype.capitalize = function(){
  return this.split(/_/).join(' ').replace(/\w+/g, function(a){
    return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
  });
};

var $filter_form = null;
var $program_levels = null;

function setFilterAction() {
  var selected_level = $('#filter_by_level')[0].value;
  if (selected_level != "") {
    $filter_form.action = "/programs/" + $program_levels[selected_level];
  } else {
    $filter_form.action = "/programs";
  }
}

function filterPrograms() {
  setFilterAction();

  $.getJSON('/programs',
    $($filter_form).serialize(),
    function(data){
      var fs = $('select#filter_by_subject')[0];
      fs.options.length = 0;
      fs.options[0] = new Option("view all", "");
      fs.disabled = true;

      $.each(data, function(i,item) {
        fs.options[fs.options.length] = new Option(item.name, item.permalink);
      });

      if (fs.options.length > 1) {
        fs.disabled = false
      }
    }
  );
}

function contactErrorHandler(request,error) {
  if (request.status == 409) {
    var validationErrors = eval(request.responseText);
    var errorMessage = '<div class="errorExplanation" id="errorExplanation"><h2>' +
      validationErrors.length +
      ' errors prohibited this contact from being saved</h2><p>There were problems with the following fields:</p><ul>';

    $.each(validationErrors, function(index, value) {
      var field = value[0];
      var message = value[1];

      $('#contact_'+field).wrap('<span class="validation_error"></span>');
      errorMessage += '<ul>' + field.capitalize() + ' ' + message + '</ul>';
    });

    errorMessage += '</div>';

    $('#error_message_wrapper').html(errorMessage);

  }
}

$(document).ready(function(){
  $('a.toggle_hidden_content').click(function(e) {
    $('#'+this.id.replace(/^toggle_/, '')).slideDown("slow");
    e.preventDefault();
  });

  $filter_form = $('#filter_programs')[0];

  $('.filter').change(function(e) {
    filterPrograms()
  });

  $('#filter_by_subject').change(function(e) {
    var selected_subject = $('#filter_by_subject')[0].value;

    if (selected_subject != "") {
      $filter_form.action = "/programs/" + selected_subject;
    } else {
      setFilterAction();
    }
  });
});
