function updateCourseSearchFieldVisibility(newvalue) {
  switch(newvalue) {
    case "all":
    case "current":
    case "former":
      $('searchyear').hide();
      $('searchyear').value = '';
      break;
    case "year":
      $('searchyear').show();
      break;
    }
}

function updateCourseReportFieldVisibility(newvalue, type) {
  switch(newvalue) {
    case "course_progress":
      $('aps_id').hide();
      $('student_id').hide();
      $('pr_sort_type').hide();
      $('sk_sort_type').hide();
      break;
    case "problem_set_progress":
      $('aps_id').show();
      $('student_id').hide();
      $('sk_sort_type').hide();
			$('pr_sort_type').show();
      $('pr_sort_type').options[0].update("Group by Student");
      break;
    case "problem_set_skills":
      $('aps_id').show();
      $('student_id').hide();
      $('pr_sort_type').hide();
      $('sk_sort_type').show();
      $('sk_sort_type').options[0].update("Group by Student");
      break;
    case "student_progress":
      $('aps_id').hide();
      if (type == "student") {$('student_id').hide();} else {$('student_id').show();}
      $('sk_sort_type').hide();
      $('pr_sort_type').show();
			$('pr_sort_type').options[0].update("Group by Problem Set");
      break;
    case "student_skills":
      $('aps_id').hide();
      if (type == "student") {$('student_id').hide();} else {$('student_id').show();}
      $('pr_sort_type').hide();
      $('sk_sort_type').show();
      $('sk_sort_type').options[0].update("Group by Problem Set");
      break;
    }
}

function updateCourseStudentSearchFieldVisibility(newvalue) {
  switch(newvalue) {
    case "all":
      $('rostersearchname').hide();
      $('rosternameclear').hide();
      break;
    case "name":
      $('rostersearchname').show();
      $('rosternameclear').show();
      break;
    }
}

function updateClassworkSearchFieldVisibility(newvalue) {
  switch(newvalue) {
    case "all":
    case "upcoming":
    case "past":
      $('searchname').hide();
      break;
    case "name":
      $('searchname').show();
      break;
    }
}

function updateProblemSetSearchFieldVisibility(newvalue) {
  switch(newvalue) {
    case "all":
      $('searchname').hide();
      $('strandsearch').hide();
      $('searchgrade').hide();
      $('searchname').value = '';
      $('strandsearch').value = 'all';
      $('searchgrade').value = 'all';
      break;
    case "name":
      $('searchname').show();
      $('strandsearch').hide();
      $('searchgrade').hide();
      break;
    case "strand":
      $('searchname').hide();
      $('strandsearch').show();
      $('searchgrade').hide();
      break;
    case "grade":
      $('searchname').hide();
      $('strandsearch').hide();
      $('searchgrade').show();
      break;
    }
}

function updatePrintListLink() {
	updatePrintLink('printlistlink', 'searchform');
}

function updatePrintWorkLink() {
  updatePrintLink('printworklink', 'worksearchform');
}

function updatePrintRosterLink() {
	updatePrintLink('printrosterlink', 'rostersearchform');
}

function updatePrintReportLink() {
	updatePrintLink('printreportlink', 'report_controls');
}

function updatePrintLink(linkName, formName) {
	if (formName == '') return;
	$(linkName).href = $(linkName).href.split('?')[0] + '?' + Form.serializeElements($(formName).getElements());
}

function encodeElements(elements, object) {
	object = typeof(object) == 'undefined' ? '' : object + '_';
	return elements.map(function(element) {return element + '=' + encodeURIComponent($(object + element).value)}).join('&');
}

function show_problems_i(sa_id) {
  var report_table = $('report_table');
  var problem_rows = report_table.select('[title=\"sa_' + sa_id + '\"]');
  for (var i = 0; i < problem_rows.length; i++) Effect.BlindDown(problem_rows[i].id, {duration: 1.0});
  var link_image = $('sa_link_image_' + sa_id);
  link_image.src='/images/icons/triangle_open.png';
  var link = $('sa_link_' + sa_id);
  link.href='javascript:hide_problems(\'' + sa_id + '\')';
  link.title="open";
}

function show_problems(sa_id) {
  show_problems_i(sa_id);
  update_open_problem_sets();
}

function hide_problems_i(sa_id) {
  var report_table = $('report_table');
  var problem_rows = report_table.select('[title=\"' + 'sa_' + sa_id + '\"]');
  for (var i = 0; i < problem_rows.length; i++) Effect.BlindUp(problem_rows[i].id, {duration: 1.0});
  var link = $('sa_link_' + sa_id);
  link.href='javascript:show_problems(\'' + sa_id + '\')';
  link.title="closed";
  var link_image = $('sa_link_image_' + sa_id);
  link_image.src='/images/icons/triangle_closed.png';
}

function hide_problems(sa_id) {
  hide_problems_i(sa_id);
  update_open_problem_sets();
}

function hide_all_problems() {
  var sa_links = $$('a[id^="sa_link_"]');
  for (var i = 0; i < sa_links.length; i++) {
    var sa_id = sa_links[i].id.substring(8);
    hide_problems_i(sa_id);
  }
  update_open_problem_sets();
}

function show_all_problems() {
  var sa_links = $$('a[id^="sa_link_"]');
  for (var i = 0; i < sa_links.length; i++) {
    var sa_id = sa_links[i].id.substring(8);
    show_problems_i(sa_id);
  }
  update_open_problem_sets();
}

function update_open_problem_sets() {
  var sa_str = "";
  var sa_links = $$('a[id^="sa_link_"]');
  for (i = 0; i < sa_links.length; i++) if (sa_links[i].title == 'open') sa_str = sa_str + sa_links[i].id.substring(8) + '_';
  $('open_student_assignments').value = sa_str;
  updatePrintReportLink();
}

function toggleVisibility(elementID) {
	elementObject = document.getElementById(elementID);
 	elementObject.style.visibility = elementObject.style.visibility != 'visible' ? 'visible' : 'hidden';
}

function toggle_element_from_checkbox(el_name, cb) {
  el = document.getElementById(el_name);
  if (el == null || cb == null) return;
  el.style.display = cb.checked ? "none" : "block";
}

function toggle_disabled_from_checkbox(el_name, cb) {
  el = document.getElementById(el_name);
  if (el == null || cb == null) return;
  el.disabled = cb.checked ? true : false;
}

function checked_problem_set_string () {
  var cbs = document.getElementsByName("problem_set");
  var cbstring = "";
  for (var i = 0; i < cbs.length; i++) {
    if (cbs[i].checked) {
      if (cbstring.length > 0) cbstring = cbstring + "_";
      cbstring = cbstring + cbs[i].value
    }
  }
  $('checked_problem_set_ids').value = cbstring;
  return cbstring;
}

function sorted_problem_set_string () {
  var pss = $$('li.ps');
  var psstring = "";
  for (var i = 0; i < pss.length; i++) {
    if (psstring.length > 0) psstring = psstring + "_";
    psstring = psstring + pss[i].id.substring(3);
  }
  $('checked_problem_set_ids').value = psstring;
  return psstring;
}

function student_check () {
  var cbs = document.getElementsByName("assigned_student_ids[]");
  for (var i = 0; i < cbs.length; i++) if (cbs[i].checked) return true;
  alert("Please select at least 1 student");
  return false;
}

function problem_set_check () {
  var cbs = document.getElementsByName("problem_set");
  for (var i = 0; i < cbs.length; i++) if (cbs[i].checked) return true;
  alert("Please select at least 1 problem set");
  return false;
}

function change_student_checkboxes(show) {
  var cbs = document.getElementsByName("assigned_student_ids[]");
  for (var i = 0; i < cbs.length; i++) cbs[i].checked = show;
}

function change_problem_set_checkboxes(show) {
  var cbs = document.getElementsByName("problem_set");
  for (var i = 0; i < cbs.length; i++) cbs[i].checked = show;
}

function add_available_problem_set(name, id) {
  if (check_for_ps(id)) {
    alert('Problem Set has already been selected.');
    return;
  }
  var list = $('assignments');
  var idstr = 'ps_'+id;
  var li = new Element('li', {"id": idstr});
  li.addClassName('ps');
  li.addClassName('sortable');
  var outerdiv = new Element('div');
  outerdiv.addClassName('item');
  outerdiv.addClassName('brightblue_bg');
  var nobr = new Element('nobr');
  var icondiv = new Element('div').update("");
  icondiv.addClassName('left');
  icondiv.addClassName('column_icon');
  var namediv = new Element('div').update(name);
  namediv.addClassName('left');
  namediv.addClassName('column_problemSet_narrow');
  var clearerdiv = new Element('div');
  clearerdiv.addClassName('clearer')
  var removelink = new Element('a').update("<img src=\"/images/icons/delete.png\" alt=\"Remove\" title=\"Remove Problem Set\" />");
  removelink.href="javascript:remove_available_problem_set(\'ps_" + id + "\');"
  icondiv.appendChild(removelink);
  nobr.appendChild(icondiv);
  nobr.appendChild(namediv);
  nobr.appendChild(clearerdiv);
  outerdiv.appendChild(nobr);
  li.appendChild(outerdiv);
  list.appendChild(li);
  Sortable.create('assignments', {onUpdate:function() {sorted_problem_set_string();}});
  sorted_problem_set_string();
}

/**
function add_available_problem_set(name, id) {
  if (check_for_ps(id)) {
    alert('Problem Set has already been selected.');
    return;
  }
  var list = $('assignments');
  var liHTML = "<li class=ps id=ps_"+id+"><div class='item brightblue_bg'><nobr>"+
    "<div class='left column_icon'>&uarr;&darr;</div>"+
    "<div class='left column_ps_name'>"+name+"</div>"+
    "<div class='right column_actions1'><a href=\"javascript:remove_available_problem_set('ps_"+id+"')\">Remove</a></div>"+
    "<div class='clearer'></div></nobr></div></li>";
  list.innerHTML = list.innerHTML+liHTML;

  alert("list.innerHTML = " + list.innerHTML);
  
  Sortable.create('assignments', {onUpdate:function(){sorted_problem_set_string();}});
  sorted_problem_set_string();
}
**/

function remove_available_problem_set(id) {
  var li = $(id);
  var list = li.parentNode;
  list.removeChild(li);
  Sortable.create('assignments', {onUpdate:function() {sorted_problem_set_string();}});
  sorted_problem_set_string();
}

function check_for_ps(id) {
  var idstr = 'ps_' + id;
  var pss = $$('li.ps');
  for (var i = 0; i < pss.length; i++) {
    if (pss[i].id == idstr) return true;
  }
  return false;
}

function show_messages_in_sidebar() {
  var err = $('flasherrorbox')
  if (err) {
    var text = err.innerHTML.strip();
    if (text.length > 0) Effect.BlindDown("flasherror");
  }
  var note = $('flashnoticebox')
  if (note) {
    var text = note.innerHTML.strip();
    if (text.length > 0) Effect.BlindDown("flashnotice");
  }
  var warn = $('flashwarnbox')
  if (warn) {
    var text = warn.innerHTML.strip();
    if (text.length > 0) Effect.BlindDown("flashwarn");
  }
	var ann = $('announcementbox')
	if (ann) {
	  var text = ann.innerHTML.strip();
	  if (text.length > 0) Effect.BlindDown("announcement", {duration: 0.25});
	}
}

var oldonload2 = window.onload;
if (typeof(oldonload2) == 'function')
  window.onload = function() {oldonload2(); show_messages_in_sidebar()};
else
	window.onload = function() {show_messages_in_sidebar()};

// define settings for NiftyCornersCube

NiftyLoad = function() {
	Nifty("div.rounded_tr","tr big");
	Nifty("div.rounded_br","br big");
	Nifty("div.rounded_bl","bl big");
	Nifty("div.rounded_tl","tl big");
}

// define settings for Highslide JS

if (typeof hs != "undefined") {
  hs.showCredits = false;
  hs.graphicsDir = '/images/highslide/';
  hs.align = 'center';
	hs.transitions = ['fade'];
  hs.lang.loadingText = '';
	hs.lang.closeText = '';
	hs.lang.closeTitle = 'Close';
	hs.lang.moveText = '';
	hs.lang.moveTitle = 'Move';
	hs.wrapperClassName = 'controls-in-heading';
	hs.outlineType = 'rounded-blue-2';
  hs.outlineWhileAnimating = true; 
  hs.fadeInOut = false;
  hs.dimmingOpacity = 0.66;
  hs.minHeight = 480;
  hs.minWidth = 640;
  hs.allowHeightReduction = false;
  hs.allowWidthReduction = false;
  hs.preserveContent = false;
  hs.objectLoadTime = 'after';
  hs.objectType = 'iframe';
	hs.useControls = true;
}

// patch to scriptaculous for problem involving a
// sortable inside a scrollable div 

Droppables.isAffected = function(point, element, drop) {
  return ((drop.element != element) &&
          ((!drop._containers) || this.isContained(element, drop)) &&
          ((!drop.accept) || (Element.classNames(element).detect(function(v) {return drop.accept.include(v)}))) &&
          Position.withinIncludingScrolloffsets(drop.element, point[0], point[1]));
}
 
Droppables.show = function(point, element) {
  if (!this.drops.length) return;
  var drop, affected = [];
  this.drops.each(function(drop) {if (Droppables.isAffected(point, element, drop)) affected.push(drop);});
  if (affected.length>0) drop = Droppables.findDeepestChild(affected);
  if (this.last_active && this.last_active != drop) this.deactivate(this.last_active);
  if (drop) {
    Position.withinIncludingScrolloffsets(drop.element, point[0], point[1]);
    if (drop.onHover) drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
    if (drop != this.last_active) Droppables.activate(drop);
  }
}
