private void loadProject(long projectId)
    {
        ProjectModule projectModule = new ProjectModule();
        Project project = projectModule.getProjectById(projectId);

        project_id.Value = projectId.ToString();
        project_title.Text = project.PROJECT_TITLE;
        company_name.Text = project.PROJECT_OWNER.USERNAME;
        contact_name.Text = project.CONTACT_NAME;
        contact_number.Text = project.CONTACT_NUMBER;
        contact_email.Text = project.CONTACT_EMAIL;
        project_requirements.Text = project.PROJECT_REQUIREMENTS;
        uc_comments.Text = project.UC_REMARKS;
        allocated_slots.Text = project.RECOMMENDED_SIZE.ToString();

        //load categories
        IList<ProjectCategory> projectCategories = project.CATEGORIES;
        IList<Category> categories = new List<Category>();

        foreach (ProjectCategory projectCategory in projectCategories)
        {
            Category c = projectCategory.CATEGORY;
            categories.Add(c);
        }

        //load project applications
        IList<ProjectApplication> pendingApplications = new List<ProjectApplication>();
        foreach (ProjectApplication application in project.APPLICATIONS)
        {
            if (application.APPLICATION_STATUS == APPLICATION_STATUS.PENDING)
                pendingApplications.Add(application);
        }
        num_applications.Text = pendingApplications.Count.ToString();
        Session["applications"] = pendingApplications;
        project_application_list.DataSource = Session["applications"];
        project_application_list.DataBind();

        category_list.DataSource = categories;
        category_list.DataBind();

        //enable Apply button
        apply_button.Enabled = true;

        //If project has already been assigned, show a disabled overlay and the project members
        ProjectAssignment projectAssignment = null;

        if (project.ASSIGNED_TEAMS != null && project.ASSIGNED_TEAMS.Count > 0)
            projectAssignment = project.ASSIGNED_TEAMS.First(); //Because it is many-to-many, we use only the first result and assume that it will always have 1 team

        if (projectAssignment != null)
        {
            assigned_project_panel.Visible = true;
            IList<Student> projectMembers = new List<Student>();
            Team assignedTeam = projectAssignment.TEAM;

            foreach (TeamAssignment assignment in assignedTeam.TEAM_ASSIGNMENT)
            {
                Student member = assignment.STUDENT;
                projectMembers.Add(member);
            }
            assigned_project_members.DataSource = projectMembers;
            assigned_project_members.DataBind();

            apply_button.Enabled = false;
        }
        else
        {
            assigned_project_panel.Visible = false;
        }

        //get project documents
        FileModule fileModule = new FileModule();
        ProjectDocument projectDocument = fileModule.getProjectDocumentByProjectId(project.PROJECT_ID);
        if (projectDocument != null)
        {
            project_document_link.NavigateUrl = "#";
            string escapedPath = projectDocument.PROJECTFILE_PATH.Replace("\\","/");
            project_document_link.Attributes.Add("onclick", "window.open(\"../../" + escapedPath
                                               + "\",\"_blank\",\"menubar=no,height=600,width=800\");");
            project_document.Text = projectDocument.PROJECTFILE_NAME;
            project_document.Visible = true;
        }
        else
        {
            project_document_link.Attributes.Clear();
            project_document.Visible = false;
        }
    }