/// <summary>
		/// Handles Load event for a control.
		/// </summary>
		/// <param name="e">Event args.</param>
		protected override void OnLoad (EventArgs e)
		{
			base.OnLoad (e);

            if (DotNetNuke.Framework.AJAX.IsInstalled ())
                DotNetNuke.Framework.AJAX.RegisterScriptManager ();
            
			try
			{
                // parse querystring parameters
				itemId = Utils.ParseToNullableInt (Request.QueryString ["employee_id"]);
      
				if (!IsPostBack)
				{
					// load the data into the control the first time we hit this page

					// check we have an item to lookup
					// ALT: if (!Null.IsNull (itemId) 
					if (itemId.HasValue)
					{
						// load the item
						var item = EmployeeController.Get<EmployeeInfo> (itemId.Value);

						if (item != null)
						{
							textLastName.Text = item.LastName;
							textFirstName.Text = item.FirstName;
							textOtherName.Text = item.OtherName;
							textPhone.Text = item.Phone;
							textCellPhone.Text = item.CellPhone;
							textFax.Text = item.Fax;
							textEmail.Text = item.Email;
							textSecondaryEmail.Text = item.SecondaryEmail;
							textWebSite.Text = item.WebSite;
							textWebSiteLabel.Text = item.WebSiteLabel;
							textMessenger.Text = item.Messenger;
							textWorkingPlace.Text = item.WorkingPlace;
							textBiography.Text = item.Biography;
							
							// load working hours
							WorkingHoursLogic.Load (comboWorkingHours, textWorkingHours, item.WorkingHours);

							if (!Null.IsNull (item.ExperienceYears))
								textExperienceYears.Text = item.ExperienceYears.ToString ();

							if (!Null.IsNull (item.ExperienceYearsBySpec))
								textExperienceYearsBySpec.Text = item.ExperienceYearsBySpec.ToString ();

							checkIsPublished.Checked = item.IsPublished;

							// set photo
                            if (!Utils.IsNull (item.PhotoFileID))
							{
								var photo = FileManager.Instance.GetFile (item.PhotoFileID.Value);
								if (photo != null)
								{
                                    pickerPhoto.FileID = photo.FileId;
								}
							}

							if (!Null.IsNull (item.UserID))
							{
								var user = UserController.GetUserById (this.PortalId, item.UserID.Value);
								if (user != null)
								{
									// add previously selected user to user list...
									comboUsers.AddItem (user.Username + " / " + user.Email, user.UserID.ToString ());
									// listUsers.Items.Add (new ListItem (user.Username + " / " + user.Email, user.UserID.ToString ()));
									// and select it
									// listUsers.SelectedIndex = 1;
									comboUsers.SelectedIndex = 1;
								}
							}

							// read OccupiedPositions data
							var occupiedPositionInfoExs = EmployeeController.GetObjects<OccupiedPositionInfoEx> (
						        "WHERE [EmployeeID] = @0 ORDER BY [IsPrime] DESC", itemId.Value);

							// fill view list
							var occupiedPositions = new List<OccupiedPositionView> ();
							foreach (var op in occupiedPositionInfoExs)
								occupiedPositions.Add (new OccupiedPositionView (op));

							// bind occupied positions
							ViewState ["occupiedPositions"] = occupiedPositions;
							gridOccupiedPositions.DataSource = OccupiedPositionsDataTable (occupiedPositions);
							gridOccupiedPositions.DataBind ();

							// read employee achievements
							var achievementInfos = EmployeeController.GetObjects<EmployeeAchievementInfo> (
						        CommandType.Text, 
                                "SELECT * FROM dbo.vw_University_EmployeeAchievements WHERE [EmployeeID] = @0", 
                                itemId.Value);

							// fill achievements list
							var achievements = new List<EmployeeAchievementView> ();
							foreach (var achievement in achievementInfos)
                            {
                                var achView = new EmployeeAchievementView (achievement);
                                achView.Localize (LocalResourceFile);
								achievements.Add (achView);
                            }

							// bind achievements
							ViewState ["achievements"] = achievements;
							gridAchievements.DataSource = AchievementsDataTable (achievements);
							gridAchievements.DataBind ();

                            // read employee educational programs 
                            var disciplineInfos = EmployeeController.GetObjects<EmployeeDisciplineInfoEx> (
                                "WHERE [EmployeeID] = @0", itemId.Value);

                            // fill disciplines list
                            var disciplines = new List<EmployeeDisciplineView> ();
                            foreach (var eduprogram in disciplineInfos)
                                disciplines.Add (new EmployeeDisciplineView (eduprogram));

                            // bind disciplines
                            ViewState ["disciplines"] = disciplines;
                            gridEduPrograms.DataSource = EduProgramsDataTable (disciplines);
                            gridEduPrograms.DataBind ();

                            // setup audit control
                            ctlAudit.Bind (item);
						}
						else
							Response.Redirect (Globals.NavigateURL (), true);
					}
					else
					{
						buttonDelete.Visible = false;
						ctlAudit.Visible = false;
					}

					// then edit / add from EmployeeList, divisionId query param
					// can be set to current division ID
					var divisionId = Request.QueryString ["division_id"];
					Utils.SelectAndExpandByValue (treeDivisions, divisionId);
				}
			}
			catch (Exception ex)
			{
				Exceptions.ProcessModuleLoadException (this, ex);
			}
		}
		protected void buttonAddAchievement_Command (object sender, CommandEventArgs e)
		{
			try
			{
				SelectedTab = EditEmployeeTab.Achievements;

				EmployeeAchievementView achievement;

				// get achievements list from viewstate
				var achievements = ViewState ["achievements"] as List<EmployeeAchievementView>;
				
				// creating new list, if none
				if (achievements == null)
					achievements = new List<EmployeeAchievementView>();

				var command = e.CommandArgument.ToString ();
				if (command == "Add")
				{
					achievement = new EmployeeAchievementView ();
				}
				else
				{
					// restore ItemID from hidden field
					var hiddenItemID = int.Parse (hiddenAchievementItemID.Value);
					achievement = achievements.Find (ach => ach.ItemID == hiddenItemID);
				}
	
				achievement.AchievementID = Utils.ParseToNullableInt (comboAchievements.SelectedValue);
				if (achievement.AchievementID == null)
				{
					achievement.Title = textAchievementTitle.Text.Trim();
					achievement.ShortTitle = textAchievementShortTitle.Text.Trim();
					achievement.AchievementType = (AchievementType)Enum.Parse (typeof(AchievementType), 
                        comboAchievementTypes.SelectedValue);
				}
				else
				{
					var ach = CommonAchievements.Find (a => a.AchievementID.ToString () == 
                        comboAchievements.SelectedValue);

					achievement.Title = ach.Title;
					achievement.ShortTitle = ach.ShortTitle;
					achievement.AchievementType = ach.AchievementType;
				}

				achievement.TitleSuffix = textAchievementTitleSuffix.Text.Trim();
				achievement.Description = textAchievementDescription.Text.Trim();
				achievement.IsTitle = checkIsTitle.Checked;
				achievement.YearBegin = Utils.ParseToNullableInt (textYearBegin.Text);
				achievement.YearEnd = Utils.ParseToNullableInt (textYearEnd.Text);
				achievement.DocumentURL = urlDocumentURL.Url;

                achievement.Localize (LocalResourceFile);

				if (command == "Add")
				{
					achievements.Add (achievement);
				}

				ResetEditAchievementForm ();

				// refresh viewstate
				ViewState ["achievements"] = achievements;

				// bind achievements to the gridview
				gridAchievements.DataSource = AchievementsDataTable (achievements);
				gridAchievements.DataBind ();
			}
			catch (Exception ex)
			{
				Exceptions.ProcessModuleLoadException (this, ex);
			}
		}