function isDefined(object, variable) {
	return (typeof(eval(object)[variable]) == 'undefined')? false: true;
}

function contains(arr, e) {
  for (var i = 0; i < arr.length; i++) {
		if (arr[i] == e) {
			return true;
    }
  }
  return false;
}

function parseDate(s) {
  var parts = s.split(".");
  return new Date(parts[2], parts[1], parts[0]);
}

function compare(a,b) {
  if (!isDefined(a,"dates")) {
		return -1;
	}
  if (!isDefined(b,"dates")) {
		return 1;
	}
  var pa = parseDate(a.dates[0].day), pb = parseDate(b.dates[0].day);
  return pa - pb;
}

function courseId(course) {
  var input = course.name;
  if (isDefined(course,"dates")) {
		input += "_" + course.dates[0].day;
	}
	return hex_md5(input);
}

function getCourse(courses, cid) {
  var match = null;
	$.each(courses, function(i,course) {
    if (courseId(course) == cid) {
      match = course;
    } 
  });
  return match;
}

function getDate(a) {
	var result = "";
	if (!isDefined(a,"dates")) {
		result += "Nach Vereinbarung";
	} else {
    for(i=0; i < a.dates.length-1; ++i) {
      result += a.dates[i].day + "\n"
    }
    result += a.dates[a.dates.length-1].day;
	}
  return result;
}

function parse(text){
    return text.replace(new RegExp( "\\n", "g" ), "");
}

function schedule(target, cols, filter) {
	$.getJSON("http://www.neurologos.de/courses.json",
      function(data) {
				var sorted = data.sort(compare);
        $.each(sorted, function(i,course){
					if (filter == null || filter(course)) {
						var row = $('<tr>');
						for (var i = 0; i < cols.length; i++) {
							var c = cols[i];
							if (c == "name") {
								row.append($('<td>').append($('<a>').attr('href','/course-details.shtml?cid=' + courseId(course)).text(course.name)));
							} else if (c == "dates") {
								row.append($('<td>').text(getDate(course)));
							} else {
								row.append($('<td>').text(course[c]));
							}
						}
		        $(target).append(row);
          }
        }) 
      });
}

