/// <summary>
		/// Handles Click event for Update button
		/// </summary>
		/// <param name='sender'>
		/// Sender.
		/// </param>
		/// <param name='e'>
		/// Event args.
		/// </param>
		protected void buttonUpdate_Click (object sender, EventArgs e)
		{
			try
			{
				DivisionInfo item;
		
				// determine if we are adding or updating
				// ALT: if (Null.IsNull (itemId))
				if (!itemId.HasValue)
				{
					// add new record
					item = new DivisionInfo ();
				}
				else
				{	
					// update existing record
					item = DivisionController.Get<DivisionInfo> (itemId.Value);
				}

				// fill the object
				item.Title = txtTitle.Text.Trim ();
				item.ShortTitle = txtShortTitle.Text.Trim ();
				item.Email = txtEmail.Text.Trim ().ToLowerInvariant ();
				item.SecondaryEmail = txtSecondaryEmail.Text.Trim ().ToLowerInvariant ();
				item.Phone = txtPhone.Text.Trim ();
				item.Fax = txtFax.Text.Trim ();
				item.Location = txtLocation.Text.Trim ();
				item.WebSite = txtWebSite.Text.Trim ();
				item.WebSiteLabel = textWebSiteLabel.Text.Trim ();
				item.ParentDivisionID = Utils.ParseToNullableInt (treeParentDivisions.SelectedValue);
				item.DivisionTermID = Utils.ParseToNullableInt (treeDivisionTerms.SelectedValue);
				item.HomePage = urlHomePage.Url;
				item.DocumentUrl = urlDocumentUrl.Url;

				// update working hours
				item.WorkingHours = WorkingHoursLogic.Update (comboWorkingHours, textWorkingHours.Text, checkAddToVocabulary.Checked);
				
				if (!itemId.HasValue)
				{
					// update audit info
					item.CreatedByUserID = item.LastModifiedByUserID = this.UserId;
					item.CreatedOnDate = item.LastModifiedOnDate = DateTime.Now;

					DivisionController.Add<DivisionInfo> (item);

					// then adding new division from Division module, 
					// set calling module to display new division info
					if (ModuleConfiguration.ModuleDefinition.DefinitionName == "R7.University.Division")
					{
						var mctrl = new ModuleController ();
						DivisionSettings.DivisionID = item.DivisionID;
					}
				}
				else
				{
					// update audit info
					item.LastModifiedByUserID = this.UserId;
					item.LastModifiedOnDate = DateTime.Now;

					DivisionController.Update<DivisionInfo> (item);
				}

				Utils.SynchronizeModule (this);

				Response.Redirect (Globals.NavigateURL (), true);
			}
			catch (Exception ex)
			{
				Exceptions.ProcessModuleLoadException (this, ex);
			}
		}
		protected void DisplayDivision (DivisionInfo division)
		{
			// division title
			var divisionTitle = division.Title;

			// add division short title
			if (division.HasUniqueShortTitle)
			{
				divisionTitle += string.Format (" ({0})", division.ShortTitle);
			}

			// home page 
			int homeTabId;
			if (int.TryParse (division.HomePage, out homeTabId) && TabId != homeTabId)
			{
				// has home page, display as link 
				linkHomePage.Text = divisionTitle;
				linkHomePage.NavigateUrl = Globals.NavigateURL (homeTabId);
				labelTitle.Visible = false;
			}
			else
			{
				// no home page, display as label
				labelTitle.Text = divisionTitle;
				linkHomePage.Visible = false;
			}

			// link to division resources
			var displaySearchByTerm = false;
			if (division.DivisionTermID != null)
			{
				var termCtrl = new TermController ();
				var term = termCtrl.GetTerm (division.DivisionTermID.Value);
				if (term != null)
				{
					// NOTE: Add raw tag to Globals.NavigateURL to allow search work 
					// independently of current friendly urls settings
					// linkSearchByTerm.NavigateUrl = "/Default.aspx?tabid=" + PortalSettings.SearchTabId + "&tag=" + term.Name;
					linkSearchByTerm.NavigateUrl = Globals.NavigateURL (PortalSettings.SearchTabId) + "?tag=" + term.Name;
					displaySearchByTerm = true;
				}
			}

			if (!displaySearchByTerm)
				linkSearchByTerm.Visible = false;

			// WebSite
			if (!string.IsNullOrWhiteSpace (division.WebSite))
			{
				linkWebSite.NavigateUrl = division.FormatWebSiteUrl;
				linkWebSite.Text = division.FormatWebSiteLabel;
			}
			else
				linkWebSite.Visible = false;
				
			// email
			if (!string.IsNullOrWhiteSpace (division.Email))
			{
				linkEmail.Text = division.Email;
				linkEmail.NavigateUrl = "mailto:" + division.Email;
			}
			else
				linkEmail.Visible = false;

			// secondary email
			if (!string.IsNullOrWhiteSpace (division.SecondaryEmail))
			{
				linkSecondaryEmail.Text = division.SecondaryEmail;
				linkSecondaryEmail.NavigateUrl = "mailto:" + division.SecondaryEmail;
			}
			else
				linkSecondaryEmail.Visible = false;

			// phone
			if (!string.IsNullOrWhiteSpace (division.Phone))
				labelPhone.Text = division.Phone;
			else
				labelPhone.Visible = false;

			// fax
			if (!string.IsNullOrWhiteSpace (division.Fax))
				labelFax.Text = string.Format (Localization.GetString ("Fax.Format", LocalResourceFile), division.Fax);
			else
				labelFax.Visible = false;

			// location
			if (!string.IsNullOrWhiteSpace (division.Location))
				labelLocation.Text = division.Location;
			else
				labelLocation.Visible = false;

			// working hours
			if (!string.IsNullOrWhiteSpace (division.WorkingHours))
				labelWorkingHours.Text = division.WorkingHours;
			else
				labelWorkingHours.Visible = false;

			// document
			if (!string.IsNullOrWhiteSpace (division.DocumentUrl))
			{
				// apply CSS class according to url type or file extension
				var urlType = Globals.GetURLType (division.DocumentUrl);
				if (urlType == TabType.File)
				{
					var file = FileManager.Instance.GetFile (int.Parse (division.DocumentUrl.Remove (0, "FileID=".Length)));
					linkDocumentUrl.CssClass += " " + file.Extension.ToLowerInvariant ();
				}
				else if (urlType == TabType.Tab)
					linkDocumentUrl.CssClass += " page";
				else 
					linkDocumentUrl.CssClass += " url";

				linkDocumentUrl.Text = LocalizeString ("DocumentUrl.Text");
				linkDocumentUrl.NavigateUrl = Globals.LinkClick (division.DocumentUrl, TabId, ModuleId);
				linkDocumentUrl.Target = "_blank";
			}
			else
				linkDocumentUrl.Visible = false;

			// barcode image test
			var barcodeWidth = DivisionSettings.BarcodeWidth;
            imageBarcode.ImageUrl = R7.University.Utilities.UrlUtils.FullUrl (string.Format (
                "/imagehandler.ashx?barcode=1&width={0}&height={1}&type=qrcode&encoding=UTF-8&content={2}",
				barcodeWidth, barcodeWidth, 
				Server.UrlEncode (division.VCard.ToString ()
						.Replace ("+", "%2b")) // fix for "+" signs in phone numbers
            ));

			imageBarcode.ToolTip = Localization.GetString ("imageBarcode.ToolTip", LocalResourceFile);
			imageBarcode.AlternateText = Localization.GetString ("imageBarcode.AlternateText", LocalResourceFile);

			// get & bind subdivisions
			var subDivisions = DivisionController.GetObjects<DivisionInfo> (
				                   "WHERE [ParentDivisionID] = @0 ORDER BY [Title]", division.DivisionID); 
			
            if (subDivisions.Any ())
			{
				repeatSubDivisions.DataSource = subDivisions;
				repeatSubDivisions.DataBind ();
			}
		}
		/// <summary>
		/// Imports a module from an XML
		/// </summary>
		/// <param name="ModuleID"></param>
		/// <param name="Content"></param>
		/// <param name="Version"></param>
		/// <param name="UserID"></param>
		public void ImportModule (int ModuleID, string Content, string Version, int UserID)
		{
			var infos = DotNetNuke.Common.Globals.GetContent (Content, "Divisions");
		
			foreach (XmlNode info in infos.SelectNodes("Division"))
			{
				var item = new DivisionInfo ();

				item.Title = info.SelectSingleNode ("content").InnerText;
				item.CreatedByUserID = UserID;

				Add<DivisionInfo> (item);
			}
		}