
    /**
     * Assignee DTO
     *
     */
    function Assignee()
    {
        this.id;
        this.name;
        this.nick;
    }

    
    /**
     * Assignee Manager - manages assignees (handles for forks?)
     *
     */
    function AssigneeManager()
    {
        this.assignees = new Array();
    
        /**
         * Adds assignees, ensures uniqueness
         *
         */
        this.addAssignee = function(newAssignee)
        {
            // See if we already have an assignee with the same ID
            for (var i=this.assignees.length-1; i>=0; i--)
            {
                if (this.assignees[i].id == newAssignee.id)
                {
                    // This assignee already exists so do nothing
                    return false;
                }
            }
            
            // Add the new assignee
            this.assignees.push(newAssignee);
            
            return true;
        }
        
        /**
         * Removes an assignee
         *
         */
        this.removeAssignee = function(assignee)
        {
            // See if we have an assignee with the same ID
            for (var i=this.assignees.length-1; i>=0; i--)
            {
                if (this.assignees[i].id == assignee.id)
                {
                    this.assignees.splice(i,1);
                    
                    // No need to keep on looking
                    return true;
                }
            }
            
            // Not found
            return false;
        }
        
        this.removeAssigneeById = function (id)
        {
            var assignee = new Assignee();
            assignee.id = id;
            
            return this.removeAssignee(assignee);
        }
    }
    
    
    
    // Instantiate new AssigneeManager
    var assigneeManager = new AssigneeManager();
    
    // Create DOM elements for assignees
    function createAssigneeElements()
    {
        var ids = '';
    
        $('#assignedStudentsBox ul').html("");
        
        for (var i=assigneeManager.assignees.length-1; i>=0; i--)
        {
            var assignee = assigneeManager.assignees[i];
        
            $('#assignedStudentsBox ul').append("<li><strong>"+assignee.name+"</strong>("+assignee.nick+")<a href=\"\" onclick=\"assigneeManager.removeAssigneeById("+assignee.id+"); createAssigneeElements(); return false;\">remove</a></li>");
            
            ids = ids + assignee.id.toString() + ',';
        }
        
        $('#classmateIds').val(ids);
    }
    
    // Read AJAX data and create new elements
    function readAssigneeData(data)
    {
        for (var i=data.length-1; i>=0; i--)
        {
            var newAssignee = new Assignee();
            newAssignee.id   = data[i].id;
            newAssignee.name = data[i].name;
            newAssignee.nick = data[i].nick;
            
            assigneeManager.addAssignee(newAssignee);
        }
    }
    
    // Calls the server for a list of students in the given class
    function getClassMembers(classId)
    {
        var dataToSend = new Object();
        dataToSend.show = 'getEduClassStudents';
        dataToSend.classId = classId;
    
        $.ajax({
            url: '/@ajax.php',
            data: dataToSend,
            dataType: 'json',
            success:  function(data){
                readAssigneeData(data);
                createAssigneeElements();
            }
        });
    }
    
    // Calls the server for a given student
    function getStudent(studentId)
    {
        var dataToSend = new Object();
        dataToSend.show = 'getEduStudent';
        dataToSend.studentId = studentId;
    
        $.ajax({
            url: '/@ajax.php',
            data: dataToSend,
            dataType: 'json',
            success:  function(data){
                readAssigneeData(data);
                createAssigneeElements();
            }
        });
    }
    
    
    /* Test
    $(document).ready(function(){
        getClassMembers(104);
        
    });
    */
