The error message is due to the unfortunate fact that PHP will implicitly declare an unknown token as a constant string of the same name.
That is, it's trying to interpret this (note the missing quote marks): 
$_POST[department]
The only valid way this would be valid syntax in PHP is if there was previously a constant department defined.  So sadly, rather than dying with a Fatal error at this point, it issues this Notice and acts as though a constant had been defined with the same name and value:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');  
There are various ways you can get this error message, but they all have the same root cause - a token that could be a constant.
Strings missing quotes:  $my_array[bad_key]
This is what the problem is in your case, and it's because you've got string array keys that haven't been quoted.  Fixing the string keys will fix the bug:
Change:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
To:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Variable missing dollar sign: var_without_dollar
Another reason you might see this error message is if you leave off the $ from a variable, or $this-> from a member.  Eg, either of the following would cause a similar error message:
my_local;   // should be $my_local
my_member;  // should be $this->my_member
Invalid character in variable name: $bad-variable-name
A similar but more subtle issue can result if you try to use a disallowed character in a  variable name - a hyphen (-) instead of an underscore _ would be a common case.
For example, this is OK, since underscores are allowed in variable names:
if (123 === $my_var) {
  do_something();
}
But this isn't:
if (123 === $my-var) {
  do_something();
}
It'll be interpreted the same as this:
if (123 === $my - var) {  // variable $my minus constant 'var'
  do_something();
}
Referring to a class constant without specifying the class scope
In order to refer to a class constant you need to specify the class scope with ::, if you miss this off PHP will think you're talking about a global define().
Eg:
class MyClass {
  const MY_CONST = 123;
  public function my_method() {
    return self::MY_CONST;  // This is fine
  }
  public function my_method() {
    return MyClass::MY_CONST;  // This is fine
  }
  public function my_bad_method() {
    return MY_CONST;  // BUG - need to specify class scope
  }
}
Using a constant that's not defined in this version of PHP, or is defined in an extension that's not installed
There are some system-defined constants that only exist in newer versions of PHP, for example the mode option constants for round() such as PHP_ROUND_HALF_DOWN only exist in PHP 5.3 or later.
So if you tried to use this feature in PHP 5.2, say:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
You'd get this error message:
Use of undefined constant PHP_ROUND_HALF_DOWN - assumed
  'PHP_ROUND_HALF_DOWN' Warning (2): Wrong parameter count for round()