Uri: https%3A%2F%2Fchancentre.com%2Fevents%2Fopera-tea-sneak-peak-street-scene%2F

Page name: Response Code Error 424

Edit | Back

Date Scraped: 2026-06-18 01:21:37 -0400

Last Successful Refresh: 2026-06-18 01:21:31 -0400

Created: 2024-07-17 19:11:06 -0400

Updated: 2026-06-18 01:21:37 -0400

HTTP Response Code: 424

Html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
  <head>
    <title>UBC Opera</title>
    <meta name="description" content="UBC Opera Main Page" />
    <meta name="keywords" content="Opera" >
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta http-equiv="Imagetoolbar" content="no">
    <link rel="shortcut icon" href="../content/images/ubc_favicon.ico?_7.89.1" />
    <link rel="apple-touch-icon" href="branding/home-screen-icon.png?_7.89.1" />
    <!-- inclusion of bootstrap specific CSS -->
    <!-- http://twitter.github.com for documentation on bootstrap -->
    <link rel="Stylesheet" href="/lib/bootstrap/css/bootstrap.min.css?_7.89.1" />
    <!-- end of bootstrap specific CSS -->
    <!-- include the font awesome css for font icons-->
    <link rel="Stylesheet" href="/lib/fontawesome-free/css/all.min.css" />
    <!-- include material design icons-->
    <link rel="Stylesheet" href="/lib/material-design-icons/material-icons.css" />
    <link rel="stylesheet" href="../../content/images/branding/global.css?_=7.89.1" type="text/css"/>
    <!--[if lt IE 9]>
      <link rel="stylesheet" href="../../content/images/branding/global_IE.css?_7.89.1" type="text/css">
    <![endif]-->
    <script src="/lib/jquery/jquery.min.js?_=7.89.1" type="text/javascript"></script>
    <script language="Javascript"></script>
    <link rel="stylesheet" href="/content/Files/CSS/UBC_20260609-4.css?_=7.89.1" type="text/css" />
    <script  type="text/javascript" ></script>
    <script type="text/javascript">
      // Check whether cookies are enabled.
      	document.cookie = "TestCookie=1";
      	var testCookie = document.cookie;

      	// Try to retrieve the value we just set.
      	if (testCookie.indexOf("TestCookie=1") == -1)
      	{

      		    document.location = "error.asp?nocookie=";

        }
      	else
      		document.cookie = "TestCookie=;expires=Thu, 01-Jan-1970 00:00:00 GMT";
    </script>
    <script type="text/javascript">
      function setRSVPButtons(response, eventCode)
      {
                      var url = '/' + eventCode + '/invited?user=' + response.authResponse.userID + '&access_token=' + response.authResponse.accessToken;
                       FB.api(url, 'get',
                       function (response) {
                          if (!response || response.error) {
                            new showAlertPopup("Error occurred:" + response.error.message, "", "", "", "", "");
                          }
                          else
                          {
                              if (response.data[0].rsvp_status == "attending")
                              {
                                  var buttons = document.getElementsByName("attendingButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).disabled = true;
                                      buttons.item(x).style.display = "inline";
                                  }
                                  buttons = document.getElementsByName("maybeButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).style.display = "inline";
                                  }
                              }
                              else if (response.data[0].rsvp_status == "unsure")
                              {
                                  var buttons = document.getElementsByName("attendingButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).style.display = "inline";
                                  }
                                  buttons = document.getElementsByName("maybeButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).disabled = true;
                                      buttons.item(x).style.display = "inline";
                                  }
                              }
                              else
                              {
                                  var buttons = document.getElementsByName("attendingButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).style.display = "inline";
                                  }
                                  buttons = document.getElementsByName("maybeButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).style.display = "inline";
                                  }
                              }
                          }
                      });
      }
      function setRSVPButtonsLogin(eventCode)
      {
              FB.getLoginStatus(function (response) {
                  if (response.status == 'connected') {
                      setRSVPButtons(response, eventCode);
                  }
                  else {
                      FB.login(function (response) {
                          if (response.authResponse) {
                              setRSVPButtons(response, eventCode);
                          } else {
                          }
                      }, { scope: 'rsvp_event,email,user_groups,publish_stream' });
                  }
              });
              return true;
      }

      function rsvpToFBEvent(status, response, eventCode)
      {

                      var url = '/' + eventCode + '/' + status + '?access_token=' + response.authResponse.accessToken;

                       FB.api(url, 'post',
                       function (response) {
                          if (!response || response.error) {
                            new showAlertPopup("Error occurred:" + response.error.message, "", "", "", "", "");
                          }
                          else
                          {
                            gaTrackEvent('Facebook', 'RSVP to Event Success');

                              if (status == "attending")
                              {
                                  var buttons = document.getElementsByName("attendingButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).disabled = true;
                                  }
                                  buttons = document.getElementsByName("maybeButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).disabled = false;
                                  }
                              }
                              else if (status == "maybe")
                              {
                                  var buttons = document.getElementsByName("maybeButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).disabled = true;
                                  }
                                  buttons = document.getElementsByName("attendingButton" + eventCode);
                                  for (var x = 0; x < buttons.length; x++)
                                  {
                                      buttons.item(x).disabled = false;
                                  }
                              }
                          }
                       });
      }

      function rsvpToFBEventLogin(status, eventCode) {

              FB.getLoginStatus(function (response) {
                  if (response.status == 'connected') {
                      rsvpToFBEvent(status, response, eventCode);
                  }
                  else {
                      FB.login(function (response) {
                          if (response.authResponse) {
                              rsvpToFBEvent(status, response, eventCode);
                          } else {
                          }
                      }, { scope: 'rsvp_event,email,user_groups,publish_stream' });
                  }
              });
              return true;
      }
    </script>
    <script type="text/javascript" src="../Common/browser_detect.js?_=7.89.1"></script>
    <script type="text/javascript">
      var genericConfirmationMessage = "Are you sure? Press OK to continue.";
      var offerExpired = "Your order has expired.";
      var admissionsExpired = "An offer on one of your tickets has expired.";
      var alertHeaderText = "Attention";
      var termsHeaderText = "Terms and Conditions";
      var helpHeaderText = "Help";
      var sectionHeaderText = "More Information";

      var okayButtonText = "OK";
      var cancelButtonText = "Cancel";
      var acceptButtonText = "Accept";
      var declineButtonText = "Decline";
      var closeButtonText = "Close";

      var sTokenName = 'sToken';
      var sToken = '1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=';
    </script>
    <script type="text/javascript">
      var isNextGenCheckoutFFEnabled = 0 == 1;
      var isNewBuyFlowEnabled = "False" == "True";
    </script>
    <script type="text/javascript" src="../Common/online-jscript.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/online-navigation-jscript.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/widgetParent.js?_=7.89.1"></script>
    <script type="text/javascript">
      /*

      */
      function displayMessage(onClickEvent)
      {

      }

      function tsOrderChanged( url )
      {
        new showConfirmPopup( '', 'The current order has unsaved changes that may be lost. Continue anyway?', function () { document.location = url }, '' );
      }

      // Used for drop-down menu in IE 6
      <!--//--><![CDATA[//><!--
      function startList() {
      	if (document.all&&document.getElementById) {
      		navRoot = document.getElementById("menuTop");
      		for (i=0; i<navRoot.childNodes.length; i++) {
      			node = navRoot.childNodes[i];
      			if (node.id=="menuTopItem") {
      				node.onmouseover=function() {
      					this.className+=" over";
      				}

                      node.onfocus=function(){
                          this.className+=" over";
                      }

      				node.onmouseout=function() {
      					this.className=this.className.replace(" over", "");
      				}

                      node.onblur=function() {
      					this.className=this.className.replace(" over", "");
      				}
      			}
      		}
      	}
      }
      //--><!]]>

      var plusApi_loaded = false;
      var twitterApi_loaded = false;
      var fbApi_loaded = false;
    </script>
    <noscript>
      <meta http-equiv="refresh" content="0; URL=error.asp">
    </noscript>
    <script  type="text/javascript" >
      var longMonthsOfYear = new Array();
      longMonthsOfYear[ 0 ] = "January";
      longMonthsOfYear[ 1 ] = "February";
      longMonthsOfYear[ 2 ] = "March";
      longMonthsOfYear[ 3 ] = "April";
      longMonthsOfYear[ 4 ] = "May";
      longMonthsOfYear[ 5 ] = "June";
      longMonthsOfYear[ 6 ] = "July";
      longMonthsOfYear[ 7 ] = "August";
      longMonthsOfYear[ 8 ] = "September";
      longMonthsOfYear[ 9 ] = "October";
      longMonthsOfYear[ 10 ] = "November";
      longMonthsOfYear[ 11 ] = "December";
    </script>
    <script type="text/javascript" src="../Common/Widgets/articleWidgets.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/TabularSearchResultsWidget.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/SearchFilterWidget.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/LoginWidget.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/VideoWidget.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/Tk3DDVWidget.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/CalendarWidget.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/twitterWidgets.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/googleMapsWidget.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/facebookSocialWidgets.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/facebookEvent.js?_=7.89.1"></script>
    <script type="text/javascript" src="../Common/Widgets/instagramFeedWebWidget.js?_=7.89.1"></script>
    <script type="text/javascript">
      function loadLocalPage()
      {

      }

      var monthsOfYear = new Array();
      monthsOfYear[ 0 ] = "Jan";
      monthsOfYear[ 1 ] = "Feb";
      monthsOfYear[ 2 ] = "Mar";
      monthsOfYear[ 3 ] = "Apr";
      monthsOfYear[ 4 ] = "May";
      monthsOfYear[ 5 ] = "Jun";
      monthsOfYear[ 6 ] = "Jul";
      monthsOfYear[ 7 ] = "Aug";
      monthsOfYear[ 8 ] = "Sep";
      monthsOfYear[ 9 ] = "Oct";
      monthsOfYear[ 10 ] = "Nov";
      monthsOfYear[ 11 ] = "Dec";
      var longMonthsOfYear = new Array();
      longMonthsOfYear[ 0 ] = "January";
      longMonthsOfYear[ 1 ] = "February";
      longMonthsOfYear[ 2 ] = "March";
      longMonthsOfYear[ 3 ] = "April";
      longMonthsOfYear[ 4 ] = "May";
      longMonthsOfYear[ 5 ] = "June";
      longMonthsOfYear[ 6 ] = "July";
      longMonthsOfYear[ 7 ] = "August";
      longMonthsOfYear[ 8 ] = "September";
      longMonthsOfYear[ 9 ] = "October";
      longMonthsOfYear[ 10 ] = "November";
      longMonthsOfYear[ 11 ] = "December";
      var daysOfWeek = new Array();
      daysOfWeek[ 0 ] = "Sun";
      daysOfWeek[ 1 ] = "Mon";
      daysOfWeek[ 2 ] = "Tue";
      daysOfWeek[ 3 ] = "Wed";
      daysOfWeek[ 4 ] = "Thu";
      daysOfWeek[ 5 ] = "Fri";
      daysOfWeek[ 6 ] = "Sat";
      var longDaysOfWeek = new Array();
      longDaysOfWeek[ 0 ] = "Sunday";
      longDaysOfWeek[ 1 ] = "Monday";
      longDaysOfWeek[ 2 ] = "Tuesday";
      longDaysOfWeek[ 3 ] = "Wednesday";
      longDaysOfWeek[ 4 ] = "Thursday";
      longDaysOfWeek[ 5 ] = "Friday";
      longDaysOfWeek[ 6 ] = "Saturday";
      var timeIndicator = new Array();
      timeIndicator[ 0 ] = "AM";
      timeIndicator[ 1 ] = "PM";
      var articleContext = {  searchLabels: { no_results_message: "We\'re sorry, there are no events matching your search." },
        loginLabels: { pageTarget: "maintainAccount.asp", loginBoxClass: "login-required", forgotPassword: "true", formLoginName: "", accountLogin: "true" },
        contextId: "",
        articleId: "E26C40C1-8C61-4EB6-AE34-E818CCED5BEC",
        articleSearchId: "",
        salesType: "P",
        sToken: "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU="};

      createSearchMapping(articleContext);

      tsAddReadyEvent(function() {
          setCalendarWidgetDisplayMonth();
          drawWidgets(articleContext);
          insertToken(articleContext);
      });

      function setCalendarWidgetDisplayMonth()
      {
          // If a date has been selected from the calendar widget, we will receive a 'search_from' parameter.
          // Pass this back to the widget so that it redisplays the month that was previously visible

      }
    </script>
    <script type="text/javascript">
      function doGAClicks(selectedItem) {
          _gaq.push(['_trackEvent', selectedItem, 'Clicked']);
      };

      function gaTrackEvent(category, action) {
          _gaq.push(['_trackEvent', category, action]);
      };
    </script>
    <script type="text/javascript">
      var _gaq = _gaq || [];
    </script>
    <script type="text/javascript">
      (function () {
          var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.defer = true;
          ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
          var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
  </head>
  <body lang="en" onLoad="startList();loadLocalPage(); displayMessage(&quot;&quot;); displayOnOfferTimeout();" onUnload="closeChildren()">
    <div id="spinner" class="spinner"></div>
    <script>
      var spinnerDelayTimeout;

      var showSpinner = function(){};
      var spinnerElement = document.querySelector("body")

      function skipToMain() {
          let mainSection = document.querySelector("[role=\"main\"]");
          if (!mainSection) {
              mainSection = document.getElementById("content");
          }
          mainSection.tabIndex = -1; // Required for focus to work on a div
          mainSection.focus();
      }


      var spinnerDelay = 3;


      function stopSpinner() {
          spinnerElement.classList.remove('show-spinner');
          cancelSpinnerTimeouts();
          expandSpinner();
      }

      function startSpinner() {
          expandSpinner();
          spinnerElement.classList.add('show-spinner');
      }


      function cancelSpinnerTimeouts() {
          clearTimeout(spinnerDelayTimeout);
      }

      function expandSpinner() {
          spinnerElement.classList.remove('minimize-spinner');
      }

      function minimizeSpinner() {
          spinnerElement.classList.add('minimize-spinner');
      }

      // stop spinner if a JS error occurred
      window.addEventListener('error', stopSpinner);

      // Mimimize spinner if clicked
      spinnerElement.addEventListener('click', minimizeSpinner);

      // Shows the spinner if page takes long to load
      // pass true to allow spinner to show even with a popup open
      (showSpinner = function() {
          var overridePopupCheck = arguments[0] ? arguments[0] : false;
          if (overridePopupCheck || !document.querySelector("#popupDiv")) {
              spinnerDelayTimeout = setTimeout(startSpinner, spinnerDelay*1000);
          }
          return true;
      })();
    </script>
    <script type="text/javascript">
      /**
       * Returns the unique values for a given property from an array of items.
       * If there is only one unique value, returns that value directly.
       * If there are multiple unique values, returns an array of those values.
       *
       * @param {Array} items - The array of objects to extract unique values from.
       * @param {string} propertyToGet - The property name to extract unique values for.
       * @returns {Array|any} An array of unique values if more than one exists, otherwise the single unique value.
       */
      const getUniqueValues = (items, propertyToGet) => {
          if (!items || !Array.isArray(items) || items.length === 0) {
              return [];
          }
          const uniquesList = [...new Set(items.map(item => item[propertyToGet]))]
          return uniquesList.length > 1 ? uniquesList : uniquesList[0];
      };

      /**
      * Decodes a string containing numeric HTML entities (e.g., &#243; -> ó).
      * @param {string} encodedText - The string to decode.
      * @returns {string} The decoded (clean) string.
      */
      function decodeHtmlEntities(encodedText) {
      	if (typeof encodedText !== 'string' || !encodedText) return "";
      	var textarea = document.createElement('textarea');
      	textarea.innerHTML = encodedText;
      	return textarea.value;
      }

      /**
      * Normalizes a string for GTM: converts it to lowercase and replaces spaces with underscores.
      * Example: "Palco/Platea VR" -> "palco/platea_vr"
      * @param {string} str - The string to normalize.
      * @returns {string} The normalized string.
      */
      function tsNormalizeGtmString(value) {
      	if (value == null || typeof value === 'undefined' || value === "")
      	{
      		return "";
      	}
      	const str = value.toString();
      	const decodedStr = decodeHtmlEntities(str);
      	return decodedStr.toLowerCase().replace(/\s+/g, '_');
      }

      /**
      * Normalizes a string/Array for GTM: converts it to lowercase and replaces spaces with underscores.
      * Example: "Palco/Platea VR" -> "palco/platea_vr"
      * Example: ["Palco","Platea VR"] -> ["palco","platea_vr"]
      * @param {string|string[]}str - The string/array to normalize.
      * @returns {string|string[]} The normalized data.
      */
      function tsNormalizeGtmData(data) {
      	if (Array.isArray(data)) {
      		return data.map(item => tsNormalizeGtmString(item));
      	}

      	return tsNormalizeGtmString(data);
      }

      /**
       * Takes an array of admission objects and performs the following steps:
       * 1. Normalizes the string fields (price_type, section, promotion, price_zone) to lowercase and replaces spaces with underscores.
       * 2. Groups admissions that share the same item_id, price, price_type, price_zone, promotion, and section.
       * 3. Increments the quantity for grouped items.
       * 4. Returns an array of unique admissions, each with a quantity and value (quantity * price).
       *
       * @param {Array<Object>} admissions - The array of admission objects to normalize and group.
       * @returns {Array<Object>} An array of grouped and normalized admission objects, each with quantity and value.
       */
      const normalizeAndGroupAdmissions = (admissions) => {
          if (!admissions || !Array.isArray(admissions)) {
              return [];
          }
      	return admissions
      		.map(item => ({
      			...item,
      			item_name: tsNormalizeGtmData(item.item_name),
      			price_type: tsNormalizeGtmData(item.price_type),
      			section: tsNormalizeGtmData(item.section),
      			promotion: tsNormalizeGtmData(item.promotion),
      			price_zone: tsNormalizeGtmData(item.price_zone),
      		}))
      		.reduce((acc, item) => {
      			// Group items that have the same performance id, price, price_type, price_zone, promotion and section
      			const key = [item.item_id, item.price, item.price_type, item.price_zone, item.promotion, item.section].join('|');

      			const found = acc.find(i => i._groupKey === key);

      			if (found) found.quantity += 1
      			else acc.push({ ...item, quantity: item.quantity ?? 1, _groupKey: key });

      			return acc;
      		}, [])
              .map(({ _groupKey, quantity, price, ...rest }) => ({
                  ...rest,
                  quantity,
                  price,
      			value: quantity * price
              })); // Remove the internal _groupKey property
      }

      /**
       * Generates an object for the data layer representing a single performance for ecommerce tracking.
       *
       * @param {Object} performanceData - The performance data object. Should contain:
       *   - item_id: {string} Unique identifier for the performance.
       *   - show: {string} Name of the show.
       *   - performance_date: {string} Date of the performance.
       *   - availability: {string|number} Number of available seats.
       *   - availability_default: {string|number} Total number of seats.
       *   - booking_type_default: {string} Default booking type ("seatmap" or "bestseat").
       * @param {string} booking_type - The booking type for the performance.
       * @returns {Object} An object formatted for the data layer, including:
       *   - items: {Array<Object>} Array with a single item containing performance details.
       *   - show: {string} Name of the show.
       *   - performance_date: {string} Date of the performance.
       *   - availability: {string|number} Number of available seats.
       *   - availability_default: {string|number} Total number of seats.
       *   - booking_type: {string} Booking type.
       *   - booking_type_default: {string} Default booking type.
       *   - referrer_code: {string} Referrer code from the session.
       * Returns an empty object if performanceData is invalid or an error occurs.
       */
      function getPerformanceEcommerceObject(performanceData, booking_type) {
          try {
      		let dataLayerObject = {};

              if (performanceData && performanceData.item_id) {
                  const { item_id, show, performance_date, availability, availability_default, booking_type_default } = performanceData;
                  const session = getSessionObject()
                  dataLayerObject = {
                      items: [
                          {
                              item_id,
                              item_name: tsNormalizeGtmData(show),
                              performance_date,
                              availability,
                              availability_default,
                              booking_type,
                              booking_type_default
                          }
                      ],
                      show: tsNormalizeGtmData(show),
                      performance_date,
                      availability,
                      availability_default,
                      booking_type,
                      booking_type_default,
                      referrer_code: session.av.session.referrer
                  }
      		}
      		return dataLayerObject;
          } catch (error) {
              console.error("There was an issue getting the view item object", error);
              return {};
          }
      }

      /**
       * Returns a formatted and grouped list of admissions currently in the cart.
       *
       * @returns {Array<Object>} Array of grouped and formatted admission objects, each with a quantity.
       */
      function getAdmissionsInCartList() {
      	const admissions = [];
          return normalizeAndGroupAdmissions(admissions)
      }

      /**
       * Returns a formatted and grouped list of admissions currently in the created order.
       *
       * @returns {Array<Object>} Array of grouped and formatted admission objects, each with a quantity.
       */
      function getAdmissionsInOrderList() {
          const admissions = [];
          return normalizeAndGroupAdmissions(admissions)
      }

      /**
       * Collects and formats information about the current session and the admissions (cart items)
       * in the user's cart. It aggregates unique values for key properties (such as show, performance date, price zone, etc.)
       * and includes session-specific data like timeout and referrer code.
       *
       * @returns {Object} An object with the following properties:
       *   - items: {Array<Object>} The list of admissions currently in the cart, grouped and formatted.
       *   - show: {string|Array<string>} Unique show names in the cart.
       *   - performance_date: {string|Array<string>} Unique performance dates in the cart.
       *   - price_zone: {string|Array<string>} Unique price zones in the cart.
       *   - promotion: {string|Array<string>} Unique promotions in the cart.
       *   - availability: {string|Array<string>} Unique availability statuses in the cart.
       *   - availability_default: {string|Array<string>} Unique default availability values.
       *   - booking_type_default: {string} The default booking type for the cart items.
       *   - price_type: {string|Array<string>} Unique price types in the cart.
       *   - section: {string|Array<string>} Unique sections in the cart.
       *   - timeout: {string} The offer timeout value from the session.
       *   - referrer_code: {string} The referrer code from the session.
       */
      function getEcommerceObject(type = "cart") {
      	try {
              // type can only be "cart" or "order"
              if (!["cart", "order"].includes(type)) {
                  throw new Error("Invalid type provided. Expected 'cart' or 'order'.");
      		}



      		const typeMap = {
      			cart: getAdmissionsInCartList(),
      			order: getAdmissionsInOrderList()
      		}

      		const session = getSessionObject()
      		const admissions = typeMap[type]
      		const value = "0"

      		let dataLayerObj = {
      			items: admissions,
      			show: getUniqueValues(admissions, "item_name"),
      			performance_date: getUniqueValues(admissions, "performance_date"),
      			price_zone: getUniqueValues(admissions, "price_zone"),
      			promotion: getUniqueValues(admissions, "promotion"),
      			availability: getUniqueValues(admissions, "availability"),
      			availability_default: getUniqueValues(admissions, "availability_default"),
      			price_type: getUniqueValues(admissions, "price_type"),
      			section: getUniqueValues(admissions, "section"),
      			timeout: "+25m",
      			referrer_code: session.av.session.referrer,
      			currency: admissions.length > 0 ? admissions[0].currency : "",
      			quantity: admissions.reduce((total, item) => total + item.quantity, 0),
                  value: parseFloat(value.replace(",",".")),
      		}

              // If the order has been placed, add additional order-related properties


      		return dataLayerObj
          } catch (error) {
              console.error("There was an issue getting the ecommerce object", error);
          }
      }

      function testValue(value, pattern)
      {
        if(!value || !pattern)
          return false;

        if(pattern.constructor === RegExp)
          return pattern.test(value.toString());

        return value.toString() == pattern.toString();
      }

      function isGTM()
      {
      	return true;
      }

      function getSessionObject()
      {
      	return {av: {session: {language: "EN",
      role: "Chan Internet",
      referrer: null,
      user_id: undefined,
      promo_codes: []}}};
      }

      function getErrorObject()
      {

      	return null;

      }

      function getPageObject()
      {
      	return {av: {page: { page_script: "/online/default.asp",
       search: { total_records: null,
       total_pages: null,
       page_size: null,
       current_page: null,
       criteria: { search_from :null,
       search_to :null,
       search_criteria :null,
       category_filter :null,
       city_filter :null,
       venue_filter :null,
       month_filter :null,
       object_type_filter :null}},
       articles: [{article_name: "UBC Opera main", article_title: "UBC Opera", article_type: "2", article_id: "E26C40C1-8C61-4EB6-AE34-E818CCED5BEC"},
      {article_name: "", article_title: "UBC Opera Banner", article_type: "1", article_id: "DE8031D9-3A82-45C6-98E1-B37E49923E9E"},
      {article_name: "", article_title: "Login", article_type: "1", article_id: "32A04E6F-C8AF-4C15-8213-3F596EF5E28F"},
      {article_name: "", article_title: "default header", article_type: "1", article_id: "F8103D8C-7EA0-4B4B-A37E-9DE398B9313D"},
      {article_name: "", article_title: "ubc footer", article_type: "1", article_id: "5428AFF6-5014-4401-BC4E-8F5547F96446"}],

                articleExists: function (article_type, article_title)
                {
                  if (article_type == null && article_title == null)
                  {
                    if(this.articles.length)
                      return true;
                  }
                  else if (article_type == null)
                  {
                    for(var i = 0; i < this.articles.length; i++) {
                        if(testValue(this.articles[i].article_title, article_title))
                          return true;
                    }
                  }
                  else if (article_title == null)
                  {
                    for(var i = 0; i < this.articles.length; i++) {
                      if (testValue(this.articles[i].article_type, article_type))
                        return true;
                    }
                  }
                  else
                  {
                    for(var i = 0; i < this.articles.length; i++) {
                      if (testValue(this.articles[i].article_title, article_title) && testValue(this.articles[i].article_type, article_type))
                        return true;
                    }
                  }

                  return false;
                }
      	}}};
      }


      function getOrderEventObject()
      {
      	return {event: {av: {event: {order: {action: "" }}}, toString: function () { return "av.event.order-" + this.av.event.order.action;}}};
      }

      function getCartEventObject()
      {
      	return {event: {av: {event: {cart: {action: "" }}}, toString: function () { return "av.event.cart-" + this.av.event.cart.action;}}};
      }

      function admissionExists(object, product_name)
      {
      	var ids = new Array();
      	for (var i = 0; i < object.performances.length; i++)
      	{
      		if (testValue(object.performances[i].name, product_name) ||
      			testValue(object.performances[i].description, product_name) ||
      			testValue(object.performances[i].short_description, product_name))
      		{
      			ids.push(object.performances[i].performance_id);
      		}
      	}
      	if (ids.length > 0)
      	{
      		for (var i = 0; i < object.order_admissions.length; i++)
      		{
      			if (ids.indexOf(object.order_admissions[i].performance_id) != -1)
      			{
      				return true;
      			}
      		}
      	}
      	return false;
      }

      function bundleExists(object, product_name)
      {
      	var ids = new Array();
      	for (var i = 0; i < object.bundles.length; i++)
      	{
      		if (testValue(object.bundles[i].name, product_name) ||
      			testValue(object.bundles[i].description, product_name) ||
      			testValue(object.bundles[i].short_description, product_name))
      		{
      			ids.push(object.bundles[i].bundle_id);
      		}
      	}
      	if (ids.length > 0)
      	{
      		for (var i = 0; i < object.order_bundle.length; i++)
      		{
      			if (ids.indexOf(object.order_bundle[i].bundle_id) != -1)
      			{
      				return true;
      			}
      		}
      	}
      	return false;
      }

      function miscItemExists(object, product_name)
      {
      	var ids = new Array();
      	for (var i = 0; i < object.misc_items.length; i++)
      	{
      		if (testValue(object.misc_items[i].name, product_name) ||
      			testValue(object.misc_items[i].description, product_name) ||
      			testValue(object.misc_items[i].short_description, product_name))
      		{
      			ids.push(object.misc_items[i].miscellaneous_item_id);
      		}
      	}
      	if (ids.length > 0)
      	{
      		for (var i = 0; i < object.order_misc_items.length; i++)
      		{
      			if (ids.indexOf(object.order_misc_items[i].item_id) != -1)
      			{
      				return true;
      			}
      		}
      	}
      	return false;
      }

      function giftExists(object, product_name)
      {
      	var ids = new Array();
      	for (var i = 0; i < object.gifts.length; i++)
      	{
      		if (testValue(object.gifts[i].name, product_name) ||
      			testValue(object.gifts[i].description, product_name) ||
      			testValue(object.gifts[i].short_description, product_name))
      		{
      			ids.push(object.gifts[i].gift_id);
      		}
      	}
      	if (ids.length > 0)
      	{
      		for (var i = 0; i < object.order_gifts.length; i++)
      		{
      			if (ids.indexOf(object.order_gifts[i].gift_id) != -1)
      			{
      				return true;
      			}
      		}
      	}
      	return false;
      }

      function storeValueExists(object, product_name)
      {
      	var ids = new Array();
      	for (var i = 0; i < object.stored_values.length; i++)
      	{
      		if (testValue(object.stored_values[i].name, product_name) ||
      			testValue(object.stored_values[i].description, product_name) ||
      			testValue(object.stored_values[i].short_description, product_name))
      		{
      			ids.push(object.stored_values[i].stored_value_id);
      		}
      	}
      	if (ids.length > 0)
      	{
      		for (var i = 0; i < object.order_stored_values.length; i++)
      		{
      			if (ids.indexOf(object.order_stored_values[i].stored_value_id) != -1)
      			{
      				return true;
      			}
      		}
      	}
      	return false;
      }

      function productExists(object, product_type, product_name)
      {
      	var result = false;
      	if (product_name == null && product_type == null)
      	{
      		if (object.order_admissions.length || object.order_bundle.length || object.order_misc_items.length ||
      		object.order_gifts.length || object.order_stored_values.length)
      			result = true;
      	}
      	else if (product_name == null)
      	{
      		if (testValue(product_type, "admission") && object.order_admissions.length)
      			result = true;
      		if (testValue(product_type, "bundle") && object.order_bundle.length)
      			result = true;
      		if (testValue(product_type, "miscellaneous_item") && object.order_misc_items.length)
      			result = true;
      		if (testValue(product_type, "gift") && object.order_gifts.length)
      			result = true;
      		if (testValue(product_type, "stored_value") && object.order_stored_values.length)
      			result = true;
      	}
      	else if (product_type == null)
      	{
      		if (object.order_admissions.length)
      		{
      			result = admissionExists(object, product_name);
      		}
      		if (object.order_bundle.length)
      		{
      			result = bundleExists(object, product_name);
      		}
      		if (object.order_misc_items.length)
      		{
      			result = miscItemExists(object, product_name);
      		}
      		if (object.order_gifts.length)
      		{
      			result = giftExists(object, product_name);
      		}
      		if (object.order_stored_values.length)
      		{
      			result = storeValueExists(object, product_name);
      		}
      	}
      	else
      	{
      		if (testValue(product_type, "admission") && object.order_admissions.length)
      		{
      			result = admissionExists(object, product_name);
      		}
      		if (testValue(product_type, "bundle") && object.bundles.length)
      		{
      			result = bundleExists(object, product_name);
      		}
      		if (testValue(product_type, "miscellaneous_item") && object.misc_items.length)
      		{
      			result = miscItemExists(object, product_name);
      		}
      		if (testValue(product_type, "gift") && object.gifts.length)
      		{
      			result = giftExists(object, product_name);
      		}
      		if (testValue(product_type, "stored_value") && object.stored_values.length)
      		{
      			result = storeValueExists(object, product_name);
      		}
      	}
      	return result;
      }

      function admissionValue(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.performances.length; i++)
      	{
      		if (testValue(object.performances[i].name, product_name) ||
      			testValue(object.performances[i].description, product_name) ||
      			testValue(object.performances[i].short_description, product_name))
      		{
      			id.push(object.performances[i].performance_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_admissions.length; i++)
      		{
      			if (id.indexOf(object.order_admissions[i].performance_id) != -1)
      			{
      				result += object.order_admissions[i].amount.amount;
      			}
      		}
      	}
      	return result;
      }

      function bundleValue(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.bundles.length; i++)
      	{
      		if (testValue(object.bundles[i].name, product_name) ||
      			testValue(object.bundles[i].description, product_name) ||
      			testValue(object.bundles[i].short_description, product_name))
      		{
      			id.push(object.bundles[i].bundle_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_bundle_admissions.length; i++)
      		{
      			if (id.indexOf(object.order_bundle_admissions[i].bundle_id) != -1)
      			{
      				result += object.order_bundle_admissions[i].amount.amount;
      			}
      		}
      	}
      	return result;
      }

      function miscItemValue(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.misc_items.length; i++)
      	{
      		if (testValue(object.misc_items[i].name, product_name) ||
      			testValue(object.misc_items[i].description, product_name) ||
      			testValue(object.misc_items[i].short_description, product_name))
      		{
      			id.push(object.misc_items[i].miscellaneous_item_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_misc_items.length; i++)
      		{
      			if (id.indexOf(object.order_misc_items[i].item_id) != -1)
      			{
      				result += object.order_misc_items[i].amount.amount;
      			}
      		}
      	}
      	return result;
      }

      function giftValue(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.gifts.length; i++)
      	{
      		if (testValue(object.gifts[i].name, product_name) ||
      			testValue(object.gifts[i].description, product_name) ||
      			testValue(object.gifts[i].short_description, product_name))
      		{
      			id.push(object.gifts[i].gift_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_gifts.length; i++)
      		{
      			if (id.indexOf(object.order_gifts[i].gift_id) != -1)
      			{
      				result += object.order_gifts[i].pledge_amount.amount;
      			}
      		}
      	}
      	return result;
      }

      function storedValueValue(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.stored_values.length; i++)
      	{
      		if (testValue(object.stored_values[i].name, product_name) ||
      			testValue(object.stored_values[i].description, product_name) ||
      			testValue(object.stored_values[i].short_description, product_name))
      		{
      			id.push(object.stored_values[i].stored_value_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_stored_values.length; i++)
      		{
      			if (id.indexOf(object.order_stored_values[i].stored_value_id) != -1)
      			{
      				result += object.order_stored_values[i].amount.amount;
      			}
      		}
      	}
      	return result;
      }

      function productValue(object, product_type, product_name)
      {
      	var result = 0;
      	if (product_name == null && product_type == null)
      	{
      		if (object.order_admissions.length)
      		{
      			for (var i = 0; i < object.order_admissions.length; i++)
      			{
      				result += object.order_admissions[i].amount.amount;
      			}
      		}
      		if (object.order_bundle_admissions.length)
      		{
      			for (var i = 0; i < object.order_bundle_admissions.length; i++)
      			{
      				result += object.order_bundle_admissions[i].amount.amount;
      			}
      		}
      		if (object.order_misc_items.length)
      		{
      			for (var i = 0; i < object.order_misc_items.length; i++)
      			{
      				result += object.order_misc_items[i].amount.amount;
      			}
      		}
      		if (object.order_gifts.length)
      		{
      			for (var i = 0; i < object.order_gifts.length; i++)
      			{
      				result += object.order_gifts[i].pledge_amount.amount;
      			}
      		}
      		if (object.order_stored_values.length)
      		{
      			for (var i = 0; i < object.order_stored_values.length; i++)
      			{
      				result += object.order_stored_values[i].amount.amount;
      			}
      		}
      	}
      	else if (product_name == null)
      	{
      		if (testValue(product_type, "admission") && object.order_admissions.length)
      		{
      			for (var i = 0; i < object.order_admissions.length; i++)
      			{
      				result += object.order_admissions[i].amount.amount;
      			}
      		}
      		if (testValue(product_type, "bundle") && object.order_bundle_admissions.length)
      		{
      			for (var i = 0; i < object.order_bundle_admissions.length; i++)
      			{
      				result += object.order_bundle_admissions[i].amount.amount;
      			}
      		}
      		if (testValue(product_type, "miscellaneous_item") && object.order_misc_items.length)
      		{
      			for (var i = 0; i < object.order_misc_items.length; i++)
      			{
      				result += object.order_misc_items[i].amount.amount;
      			}
      		}
      		if (testValue(product_type, "gift") && object.order_gifts.length)
      		{
      			for (var i = 0; i < object.order_gifts.length; i++)
      			{
      				result += object.order_gifts[i].pledge_amount.amount;
      			}
      		}
      		if (testValue(product_type, "stored_value") && object.order_stored_values.length)
      		{
      			for (var i = 0; i < object.order_stored_values.length; i++)
      			{
      				result += object.order_stored_values[i].amount.amount;
      			}
      		}
      	}
      	else if (product_type == null)
      	{
      		if (object.order_admissions.length)
      		{
      			result += admissionValue(object, product_name);
      		}
      		if (object.order_bundle_admissions.length)
      		{
      			result += bundleValue(object, product_name);
      		}
      		if (object.order_misc_items.length)
      		{
      			result += miscItemValue(object, product_name);
      		}
      		if (object.order_gifts.length)
      		{
      			result += giftValue(object, product_name);
      		}
      		if (object.order_stored_values.length)
      		{
      			result += storedValueValue(object, product_name);
      		}
      	}
      	else
      	{
      		if (testValue(product_type, "admission") && object.order_admissions.length)
      		{
      			result += admissionValue(object, product_name);
      		}
      		else if (testValue(product_type, "bundle") && object.bundles.length)
      		{
      			result += bundleValue(object, product_name);
      		}
      		else if (testValue(product_type, "miscellaneous_item") && object.misc_items.length)
      		{
      			result += miscItemValue(object, product_name);
      		}
      		else if (testValue(product_type, "gift") && object.gifts.length)
      		{
      			result += giftValue(object, product_name);
      		}
      		else if (testValue(product_type, "stored_value") && object.stored_values.length)
      		{
      			result += storedValueValue(object, product_name);
      		}
      	}
      	return result;
      }

      function admissionCount(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.performances.length; i++)
      	{
      		if (testValue(object.performances[i].name, product_name) ||
      			testValue(object.performances[i].description, product_name) ||
      			testValue(object.performances[i].short_description, product_name))
      		{
      			id.push(object.performances[i].performance_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_admissions.length; i++)
      		{
      			if (id.indexOf(object.order_admissions[i].performance_id) != -1)
      			{
      				result ++;
      			}
      		}
      	}
      	return result;
      }

      function bundleCount(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.bundles.length; i++)
      	{
      		if (testValue(object.bundles[i].name, product_name) ||
      			testValue(object.bundles[i].description, product_name) ||
      			testValue(object.bundles[i].short_description, product_name))
      		{
      			id.push(object.bundles[i].bundle_id);
      		}
      	}
      	if (id.length > 0 && object.order_bundle_admissions.length)
      	{
      		for (var i = 0; i < object.order_bundle_admissions.length; i++)
      		{
      			if (id.indexOf(object.order_bundle_admissions[i].bundle_id) != -1)
      			{
      				result ++;
      			}
      		}
      	}
      	return result;
      }

      function miscItemCount(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.misc_items.length; i++)
      	{
      		if (testValue(object.misc_items[i].name, product_name) ||
      			testValue(object.misc_items[i].description, product_name) ||
      			testValue(object.misc_items[i].short_description, product_name))
      		{
      			id.push(object.misc_items[i].miscellaneous_item_id);
      		}
      	}
      	if (id.length > 0 && object.order_misc_items.length)
      	{
      		for (var i = 0; i < object.order_misc_items.length; i++)
      		{
      			if (id.indexOf(object.order_misc_items[i].item_id) != -1)
      			{
      				result += parseFloat(object.order_misc_items[i].quantity);
      			}
      		}
      	}
      	return result;
      }

      function giftCount(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.gifts.length; i++)
      	{
      		if (testValue(object.gifts[i].name, product_name) ||
      			testValue(object.gifts[i].description, product_name) ||
      			testValue(object.gifts[i].short_description, product_name))
      		{
      			id.push(object.gifts[i].gift_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_gifts.length; i++)
      		{
      			if (id.indexOf(object.order_gifts[i].gift_id) != -1)
      			{
      				result ++;
      			}
      		}
      	}
      	return result;
      }

      function storedValueCount(object, product_name)
      {
      	var id = new Array();
      	var result = 0;
      	for (var i = 0; i < object.stored_values.length; i++)
      	{
      		if (testValue(object.stored_values[i].name, product_name) ||
      			testValue(object.stored_values[i].description, product_name) ||
      			testValue(object.stored_values[i].short_description, product_name))
      		{
      			id.push(object.stored_values[i].stored_value_id);
      		}
      	}
      	if (id.length > 0)
      	{
      		for (var i = 0; i < object.order_stored_values.length; i++)
      		{
      			if (id.indexOf(object.order_stored_values[i].stored_value_id) != -1)
      			{
      				result ++;
      			}
      		}
      	}
      	return result;
      }

      function productCount(object, product_type, product_name)
      {
      	var result = 0;
      	if (product_name == null && product_type == null)
      	{
      		if (object.order_admissions.length)
      		{
      			result += object.order_admissions.length;
      		}
      		if (object.order_bundle_admissions.length)
      		{
      			result += object.order_bundle_admissions.length;
      		}
      		if (object.order_misc_items.length)
      		{
      			for (var i = 0; i < object.order_misc_items.length; i++)
      				result += parseFloat(object.order_misc_items[i].quantity);
      		}
      		if (object.order_gifts.length)
      		{
      			result += object.order_gifts.length;
      		}
      		if (object.order_stored_values.length)
      		{
      			result += object.order_stored_values.length;
      		}
      	}
      	else if (product_name == null)
      	{
      		if (testValue(product_type, "admission") && object.order_admissions.length)
      		{
      			result += object.order_admissions.length;
      		}
      		if (testValue(product_type, "bundle") && object.order_bundle_admissions.length)
      		{
      			result += object.order_bundle_admissions.length;
      		}
      		if (testValue(product_type, "miscellaneous_item") && object.order_misc_items.length)
      		{
      			for (var i = 0; i < object.order_misc_items.length; i++)
      				result += parseFloat(object.order_misc_items[i].quantity);
      		}
      		if (testValue(product_type, "gift") && object.order_gifts.length)
      		{
      			result += object.order_gifts.length;
      		}
      		if (testValue(product_type, "stored_value") && object.order_stored_values.length)
      		{
      			result += object.order_stored_values.length;
      		}
      	}
      	else if (product_type == null)
      	{
      		if (object.order_admissions.length)
      		{
      			result += admissionCount(object, product_name);
      		}
      		if (object.order_bundle_admissions.length)
      		{
      			result += bundleCount(object, product_name);
      		}
      		if (object.order_misc_items.length)
      		{
      			result += miscItemCount(object, product_name);
      		}
      		if (object.order_gifts.length)
      		{
      			result += giftCount(object, product_name);
      		}
      		if (object.stored_values.length)
      		{
      			result += storedValueCount(object, product_name);
      		}
      	}
      	else
      	{
      		if (testValue(product_type, "admission") && object.order_admissions.length)
      		{
      			result += admissionCount(object, product_name);
      		}
      		if (testValue(product_type, "bundle") && object.order_bundle_admissions.length)
      		{
      			result += bundleCount(object, product_name);
      		}
      		if (testValue(product_type, "miscellaneous_item") && object.order_misc_items.length)
      		{
      			result += miscItemCount(object, product_name);
      		}
      		if (testValue(product_type, "gift") && object.order_gifts.length)
      		{
      			result += giftCount(object, product_name);
      		}
      		if (testValue(product_type, "stored_value") && object.order_stored_values.length)
      		{
      			result += storedValueCount(object, product_name);
      		}
      	}
      	return result;
      }

      function getPerformance(object, performance_id)
      {
      	var result = null;

      	if (performance_id != null && object.performances.length)
      	{
      		for (var i = 0; i < object.performances.length; i++)
      		{
      			if (testValue(object.performances[i].performance_id, performance_id))
      			{
      				result = object.performances[i];
      				break;
      			}
      		}
      	}

      	return result;
      }

      function getBundle(object, bundle_id)
      {
      	var result = null;

      	if (bundle_id != null && object.bundles.length)
      	{
      		for (var i = 0; i < object.bundles.length; i++)
      		{
      			if (testValue(object.bundles[i].bundle_id, bundle_id))
      			{
      				result = object.bundles[i];
      				break;
      			}
      		}
      	}

      	return result;
      }

      function getMiscItem(object, miscitem_id)
      {
      	var result = null;

      	if (miscitem_id != null && object.misc_items.length)
      	{
      		for (var i = 0; i < object.misc_items.length; i++)
      		{
      			if (testValue(object.misc_items[i].miscellaneous_item_id, miscitem_id))
      			{
      				result = object.misc_items[i];
      				break;
      			}
      		}
      	}

      	return result;
      }

      function getGift(object, gift_id)
      {
      	var result = null;

      	if (gift_id != null && object.gifts.length)
      	{
      		for (var i = 0; i < object.gifts.length; i++)
      		{
      			if (testValue(object.gifts[i].gift_id, gift_id))
      			{
      				result = object.gifts[i];
      				break;
      			}
      		}
      	}

      	return result;
      }

      function getStoredValue(object, storedvalue_id)
      {
      	var result = null;

      	if (storedvalue_id != null && object.stored_values.length)
      	{
      		for (var i = 0; i < object.stored_values.length; i++)
      		{
      			if (testValue(object.stored_values[i].stored_value_id, storedvalue_id))
      			{
      				result = object.stored_values[i];
      				break;
      			}
      		}
      	}

      	return result;
      }

      function createGAAdmissions(object, transactionProducts, GA4ecommerceItems)
      {
      	if( object.order_admissions.length > 0 )
      	{
      		var admissionList = new Array();
      		var admissionPTList = new Array();
      		for (var i = 0; i < object.order_admissions.length; i++)
      		{
      			var perfID = object.order_admissions[i].performance_id;
      			if( admissionList[ perfID ] == undefined )
      			{
      				admissionList[ perfID ] = new Array();
      			}
      			admissionList[ perfID ].push( object.order_admissions[i] );

      			if( admissionPTList[ perfID ] == undefined )
      			{
      				admissionPTList[ perfID ] = new Array();
      			}
      			var curPTList = admissionPTList[ perfID ];
      			var admPTID = object.order_admissions[i].price_type;
      			if (curPTList[ admPTID ] == undefined )
      			{
      				curPTList[ admPTID ] = new Array();
      			}
      			curPTList[ admPTID ].push( object.order_admissions[i] );
      		}
      		for( var guid in admissionList )
      		{
      			var admNode = admissionList[ guid ][ 0 ];
      			var perfID = admNode.performance_id;
      			var perfNode;
      			for (var i = 0; i < object.performances.length; i++)
      			{
      				if (perfID == object.performances[i].performance_id)
      				{
      					perfNode = object.performances[i];
      					break;
      				}
      			}
      			var perfName = perfNode.name;
      			var perfDesc = perfNode.short_description;
      			if (perfDesc == "" || perfDesc == null) {
      				perfDesc = perfName;
      			}
      			var seriesName = perfNode.series_name;

      			var curPTList = admissionPTList[ perfID ];
      			for ( var guid in curPTList )
      			{
      				seatNode = curPTList[ guid ][ 0 ];
      				var admAmount = seatNode.amount.amount;
      				var priceTypeLabel = seatNode.price_type;
      				var priceZoneLabel = seatNode.price_zone;

      				var admissions = { "sku": perfName + " Admission " + priceTypeLabel + "-" + priceZoneLabel,
      				"name": perfDesc + " Admission",
      				"category": seriesName + " Admission",
      				"price": admAmount,
      				"quantity": curPTList[ guid ].length
      				};

      				var GA4admissions = {
      					"item_id": perfName,
      					"item_name": perfDesc,
      					"item_category": "Admission",
      					"item_category2": seriesName,
      					"item_category3": priceTypeLabel,
      					"item_category4": priceZoneLabel,
      					"price": admAmount,
      					"quantity": curPTList[ guid ].length
      				};

      				transactionProducts.push(admissions);
      				GA4ecommerceItems.push(GA4admissions);
      			}
      		}
      	}
      }

      function createGABundles(object, transactionProducts, GA4ecommerceItems)
      {
      	// roll up bundles by id and price
      	// object.order_bundle - data about the bundle on the order: amount, total
      	// object.bundles - data about the bundle item: name & description

      	if( object.bundles.length > 0 )
      	{
      		var bundleList = {};
      		for (var i = 0; i < object.order_bundle.length; i++)
      		{
      			var bundleID = object.order_bundle[i].bundle_id;
      			var bundleAmount = object.order_bundle[i].amount.amount;

      			if( bundleList[ bundleID ] == undefined )
      			{
      				bundleList[ bundleID ] = {};
      			}
      			if( bundleList[ bundleID ][ bundleAmount ] == undefined )
      			{
      				bundleList[ bundleID ][ bundleAmount ] = 0;
      			}
      			bundleList[ bundleID ][ bundleAmount ]++;
      		}

      		for (var i = 0; i < object.bundles.length; i++)
      		{
      			var bundleID = object.bundles[i].bundle_id;
      			var sku = object.bundles[i].name;
      			var name = object.bundles[i].description;
      			var shortDesc = object.bundles[i].short_description;
      			if (shortDesc == null) {
      				shortDesc = sku;
      			}

      			for(var amount in bundleList[bundleID])
      			{
      				transactionProducts.push(
      				{
      					"sku": sku,
      					"name": name,
      					"price": amount,
      					"quantity": bundleList[bundleID][amount]
      				});

      				GA4ecommerceItems.push(
      				{
      					"item_id": sku,
      					"name": shortDesc,
      					"item_category": "Bundle",
      					"price": amount,
      					"quantity": bundleList[bundleID][amount]
      				});
      			}
      		}
      	}
      }

      function createGAMiscItems(object, transactionProducts, GA4ecommerceItems)
      {
      	if( object.misc_items.length > 0 && object.order_misc_items.length > 0)
      	{
      		var itemList = new Array();
      		var itemAmountList = new Array();
      		for (var i = 0; i < object.order_misc_items.length; i++)
      		{
      			var itemID = object.order_misc_items[i].item_id;
      			if( itemList[ itemID ] == undefined )
                  {
                    itemList[ itemID ] = new Array();
                  }
                  itemList[ itemID ].push( object.order_misc_items[i] );
      			if( itemAmountList[ itemID ] == undefined )
                    itemAmountList[ itemID ] = parseFloat(object.order_misc_items[i].amount.amount);
      		}
      		for (var i = 0; i < object.misc_items.length; i++)
      		{
      			var miscItems = { "sku": object.misc_items[i].name,
      			"name": object.misc_items[i].description,
      			"category": object.misc_items[i].category,
      			"price": itemAmountList[object.misc_items[i].miscellaneous_item_id],
      			"quantity": itemList[object.misc_items[i].miscellaneous_item_id].length
      			};

      			var shortDesc = object.misc_items[i].short_description;
                  if (shortDesc == null) {
                      shortDesc = object.misc_items[i].name;
                  }

      			var GA4miscItems = {
      					"item_id": object.misc_items[i].name,
      					"item_name": shortDesc,
      					"item_category": "Miscellaneous Item",
      					"item_category2": object.misc_items[i].category,
      					"price": itemAmountList[object.misc_items[i].miscellaneous_item_id],
      					"quantity": itemList[object.misc_items[i].miscellaneous_item_id].length
      				};

      			transactionProducts.push(miscItems);
      			GA4ecommerceItems.push(GA4miscItems);
      		}
      	}
      }

      function createGAGifts(object, transactionProducts, GA4ecommerceItems)
      {
      	if( object.gifts.length > 0 && object.order_gifts.length > 0)
      	{
      		var giftList = new Array();
      		for (var i = 0; i < object.gifts.length; i++)
      		{
      			var giftID = object.gifts[i].gift_id;
      			if( giftList[ giftID ] == undefined )
      			{
      				giftList[ giftID ] = new Array();
      			}
      			giftList[ giftID ] = object.gifts[i].name;
      		}
      		for (var i = 0; i < object.order_gifts.length; i++)
      		{
      			var gifts = { "sku": giftList[object.order_gifts[i].gift_id],
      			"name": object.order_gifts[i].appeal_id,
      			"category": object.order_gifts[i].fund,
      			"price": object.order_gifts[i].pledge_paid_amount.amount,
      			"quantity": 1
      			};

      			var GA4gifts = {
      					"item_id": giftList[object.order_gifts[i].gift_id],
      					"item_name": object.order_gifts[i].appeal_id,
      					"item_category": "Gift",
      					"item_category2": object.order_gifts[i].fund,
      					"price": object.order_gifts[i].pledge_paid_amount.amount,
      					"quantity": 1
      				};

      			transactionProducts.push(gifts);
      			GA4ecommerceItems.push(GA4gifts);
      		}
      	}
      }

      function createGAStoredValueItems(object, transactionProducts, GA4ecommerceItems)
      {
      	if( object.stored_values.length > 0 )
      	{
      		var storedValueNameList = new Array();
      		var storedValueTypeList = new Array();
      		var storedValueDescList = new Array();
      		var storedValueShortDescList = new Array();
      		for (var i = 0; i < object.stored_values.length; i++)
      		{
      			var certID = object.stored_values[i].stored_value_id;
      			if( storedValueNameList[ certID ] == undefined )
      			{
      				storedValueNameList[ certID ] = new Array();
      				storedValueTypeList[ certID ] = new Array();
      				storedValueDescList[ certID ] = new Array();
      				storedValueShortDescList[ certID ] = new Array();
      			}
      			storedValueNameList[ certID ] = object.stored_values[i].name;
      			storedValueDescList[ certID ] = object.stored_values[i].description;
      			storedValueShortDescList[ certID ] = object.stored_values[i].short_description;
      			storedValueTypeList[ certID ] = object.stored_values[i].type;
      		}
      		for (var i = 0; i < object.order_stored_values.length; i++)
      		{
      			var storedValueItems = { "sku": storedValueNameList[object.order_stored_values[i].stored_value_id],
      			"name": storedValueDescList[object.order_stored_values[i].stored_value_id],
      			"category": storedValueTypeList[object.order_stored_values[i].stored_value_id],
      			"price": parseFloat(object.order_stored_values[i].amount.amount),
      			"quantity": 1
      			};

      			var shortDesc = storedValueShortDescList[object.order_stored_values[i].stored_value_id];
      			if (shortDesc == null) {
      				shortDesc = storedValueNameList[object.order_stored_values[i].stored_value_id];
      			}

      			var GA4storedValueItems = {
      					"item_id": storedValueNameList[object.order_stored_values[i].stored_value_id],
      					"item_name": shortDesc,
      					"item_category": "Stored Value Item",
      					"item_category2": storedValueTypeList[object.order_stored_values[i].stored_value_id],
      					"price": parseFloat(object.order_stored_values[i].amount.amount),
      					"quantity": 1
      				};

      			transactionProducts.push(storedValueItems);
      			GA4ecommerceItems.push(GA4storedValueItems);
      		}
      	}
      }

      function createGATransaction(object)
      {
      	var output;
      	var transactionProducts = new Array;
      	var GA4ecommerceItems = new Array;

      	createGAAdmissions(object, transactionProducts, GA4ecommerceItems);
      	createGABundles(object, transactionProducts, GA4ecommerceItems);
      	createGAMiscItems(object, transactionProducts, GA4ecommerceItems);
      	createGAGifts(object, transactionProducts, GA4ecommerceItems);
      	createGAStoredValueItems(object, transactionProducts, GA4ecommerceItems);

      	output = { "transactionId": object.order_number.toString(),
      				"transactionAffiliation": object.affiliation == null ? "" : object.affiliation.toString(),
      				"transactionTotal": object.grand_total.amount,
      				"transactionTax": object.total_tax.amount,
      				"transactionShipping": object.delivery_charges.amount,
      				"transactionCity": object.customer_city == null ? "" : object.customer_city.toString(),
      				"transactionState": object.customer_state == null ? "" : object.customer_state.toString(),
      				"transactionCountry": object.customer_country == null ? "" : object.customer_country.toString(),
      				"transactionProducts": transactionProducts,
      				"ecommerce": {
      					"transaction_id": object.order_number.toString(),
      					"value": object.grand_total.amount,
      					"tax": object.total_tax.amount,
      					"shipping": object.delivery_charges.amount,
      					"currency": object.grand_total.currency,
      					"items": GA4ecommerceItems
      				}
      			};

      	return output;
      }
    </script>
    <script type="text/javascript">
      var dataLayer = new Array();
      dataLayer.push(getSessionObject());
      dataLayer.push(getPageObject());
      var av_error = getErrorObject();
      if (av_error != null)
      	dataLayer.push(av_error);
    </script>
    <!-- Google Tag Manager -->
    <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-5RPFLM"
	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>
      (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
      	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
      	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
      	'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
      	})(window,document,'script','dataLayer','GTM-5RPFLM');
    </script>
    <!-- End Google Tag Manager -->
    <header class="online-timer"></header>
    <div role="banner" id="header">
      <button id="menuSkipToContent" onclick="skipToMain()" role="link">Skip to main content</button>
      <!-- customer/order information -->
      <div class="customer-options" id="customer-utilities">
        <!--ORDER DETAILS BOX-->
        <div id="orderInfo">
          <!-- This is the same information that displays in the grey navigation bar at the top, showing and formatted for the mobile view, when that bar is hidden. -->
          <!-- The order of the html elements is different between the two display cases, so we have some duplication of some of the elements.  -->
          <div id="customer-order-info">
            <div class="hide-when-window-large">
              <div class="form-group">
                <span class="greeting-message">Order for</span>
                <span class="greeting-name">Guest</span>
              </div>
            </div>
            <div class="customer-greeting">
            </div>
            <div class="customer-order shopping-cart-details order-message ">
              <span id="orderInfoEmptyMessage">Your shopping cart is empty.</span>
            </div>
            <div class="customer-buttons">
              <div class="cart-callout">
                <button title="Shopping Cart" onclick="submitNewForm(&quot;shoppingCart.asp?sToken=1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)" id="orderInfoCartLink" class="shopping-cart-link btn btn-secondary">
                  Shopping Cart
                </button>
              </div>
            </div>
            <script>
              var currentLanguage = "EN";

              function setLanguage(dropdown, language) {
                  var form = dropdown.closest('form');
                  form.querySelector(".sessionlanguage").value = language;
                  form.submit();
              }

              function updateDropdownDisplay(dropdown) {
                  var selectedOption = dropdown.options[dropdown.selectedIndex];
                  var displayText = selectedOption.value;
                  selectedOption.textContent = displayText; // Ensure the selected option shows the abbreviated version
                  if (displayText !== currentLanguage) {
                      setLanguage(dropdown, displayText);
                  }
              }

              function expandDropdown(dropdown) {
                  for (var i = 0; i < dropdown.options.length; i++) {
                      var option = dropdown.options[i];
                      option.textContent = option.getAttribute("data-full");
                  }
              }

              function collapseDropdown(dropdown) {
                  for (var i = 0; i < dropdown.options.length; i++) {
                      var option = dropdown.options[i];
                      option.textContent = option.value;
                  }
                  updateDropdownDisplay(dropdown);
              }

              window.addEventListener("DOMContentLoaded", function () {
                  var dropdowns = document.querySelectorAll('.languageDropdown');
                  dropdowns.forEach(function(dropdown) {
                      updateDropdownDisplay(dropdown);
                      // Add event listeners to expand and collapse the dropdown
                      dropdown.addEventListener("focus", function() { expandDropdown(dropdown); });
                      dropdown.addEventListener("blur", function() { collapseDropdown(dropdown); });
                  });
              });
            </script>
          </div>
        </div>
        <!-- This is the grey navigation bar at the top. Does not show when in mobile view. -->
        <div id="orderInfoSecondBar" class="hide-when-window-small">
          <div class="form-group">
            <span class="greeting-message">Order for</span>
            <span class="greeting-name">Guest</span>
          </div>
        </div>
        <div class="menuContainer utility-nav">
          <ul id="utility-menu" class="nav">
          </ul>
        </div>
      </div>
      <div class="header-content container">
        <div class="ubc-header mobile" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/"><a href="https://www.ubc.ca/" shape="rect"><img alt="UBC Logo" class="ubc-crest-logo" src="/content/Images/Branding/ubc-logo-2018-crest-blue-rgb72.png"/>
          </a>
          <p><a href="https://www.ubc.ca/" shape="rect">The University<br clear="none"/>
              of British Columbia</a>
          </p>
        </div>
        <div class="ubc-header desktop" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/"><a href="https://www.ubc.ca/" shape="rect"><img alt="UBC Logo" class="ubc-crest-logo" src="/content/Images/Branding/ubc-logo-2018-crest-blue-rgb72.png"/>
          </a>
          <p><a href="https://www.ubc.ca/" shape="rect">The University of British Columbia</a>
          </p>
        </div>
        <div class="ubc-tickets-header" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/"><a href="https://tickets.ubc.ca/Online/default.asp" shape="rect"><img alt="UBC Tickets Logo" class="ubc-tickets-logo" src="/content/Images/Branding/ubc-logo-2020-tickets-short-white-rgb300.png"/>
          </a>
        </div>
      </div>
      <button type="button" id="menuButton" class="menu-toggle menu-button btn btn-secondary" aria-controls="menu" aria-label="Main Navigation" aria-expanded="false">
        <span class="fas fa-align-justify"></span>
      </button>
      <button type="button" id="sidebarButton" class="menu-toggle sidebar-button btn btn-secondary" aria-controls="customer-utilities" aria-label="Shopping Cart" aria-expanded="false">
        <span class="fas fa-shopping-cart"></span>
      </button>
    </div>
    <div class="content-wrapper">
      <div aria-label="Main" role="navigation" id="menu">
        <div class="menuContainer main-nav">
          <ul id="menuTop" class="nav clearfix">
            <li class="menuTopItem  has-sub-menu clearfix dropdown" id="menuTopItem0">
              <a href="javascript:void(0);" class="menu_item empty-link-dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                <span class="menu-label">What's On</span>
                <span class="fas fa-chevron-down"></span>
                <span class="fas fa-chevron-up"></span>
              </a>
              <div class="menuSub dropdown-menu">
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  All Upcoming Events
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=D6DC0533-1D71-4EAE-A4F6-2D3590DF4BD2&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Chan Centre EXP
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=22049894-8D19-4D19-BF86-BF9717A555AA&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Chan Centre Insights
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=68B10353-7142-4519-87EA-57F2FD1417C3&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Chan Centre Presents
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=88E12C9D-8D90-45DA-9DAE-A32D01C5F7BD&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Chan Centre Presents: Nat Geo Live
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=F8804175-2CB5-43EF-858D-15BD24E7AEB1&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Inspired at the Chan
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=04428BC9-E786-4D35-954F-1BD4F3B64567&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Lind Initiative
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;login.asp?targetpage=default.asp%3FdoWork::WScontent::loadArticle=Load%26BOparam::WScontent::loadArticle::article_id=E26C40C1-8C61-4EB6-AE34-E818CCED5BEC&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  UBC Opera
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=5FB5233C-FCAF-40B2-AE68-82A2776B4625&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  UBC School of Music Large Ensembles
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=1E58513F-424C-46ED-AC2D-443DAA499F26&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  UBC Theatre
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=1FFA097A-7B56-4897-ACEE-5BFFDF160F0C&amp;menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Vancouver Symphony Orchestra
                </a>
              </div>
            </li>
            <li class="menuTopItem  has-sub-menu clearfix dropdown" id="menuTopItem1">
              <a href="javascript:void(0);" class="menu_item empty-link-dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                <span class="menu-label">Memberships</span>
                <span class="fas fa-chevron-down"></span>
                <span class="fas fa-chevron-up"></span>
              </a>
              <div class="menuSub dropdown-menu">
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;login.asp?targetpage=default.asp%3FdoWork::WScontent::loadArticle=Load%26BOparam::WScontent::loadArticle::article_id=43D58F5D-9A64-4F4D-9ADC-DE46BA0E4F9E&amp;menu_id=B7CCE05A-9592-4E12-9B1B-561DBEFEBE48&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Current Member Offerings
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=01A740B7-65A9-4CB2-B673-7CC51D7B0995&amp;menu_id=B7CCE05A-9592-4E12-9B1B-561DBEFEBE48&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  Purchase a Membership
                </a>
              </div>
            </li>
            <li class="menuTopItem  has-sub-menu clearfix dropdown" id="menuTopItem2">
              <a href="javascript:void(0);" class="menu_item empty-link-dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                <span class="menu-label">Visit Us</span>
                <span class="fas fa-chevron-down"></span>
                <span class="fas fa-chevron-up"></span>
              </a>
              <div class="menuSub dropdown-menu">
                <a class="menuSubItem dropdown-item btn" href="https://chancentre.com/accessibility/" target="_blank">
                  Accessibility
                </a>
                <a class="menuSubItem dropdown-item btn" href="https://chancentre.com/directions/" target="_blank">
                  Getting Here
                </a>
                <a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink(&quot;default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=B17C724A-D4F2-4BB5-9998-69096BA0DDE2&amp;menu_id=A335F5A2-69C6-45BE-A381-6EEF888809B0&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                  FAQ
                </a>
              </div>
            </li>
            <li class="menuTopItem " id="menuTopItem3">
              <a class="menu_item menu-link" href="javascript:void(0);" onclick="sTokenLink(&quot;maintainAccount.asp?menu_id=77E87883-30DD-49E0-A827-A639DF828E6C&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;)">
                <span class="menu-label">My Account</span>
              </a>
            </li>
            <li class="menuTopItem" id="menuTopItem-languageDropdown">
              <script>
                var currentLanguage = "EN";

                function setLanguage(dropdown, language) {
                    var form = dropdown.closest('form');
                    form.querySelector(".sessionlanguage").value = language;
                    form.submit();
                }

                function updateDropdownDisplay(dropdown) {
                    var selectedOption = dropdown.options[dropdown.selectedIndex];
                    var displayText = selectedOption.value;
                    selectedOption.textContent = displayText; // Ensure the selected option shows the abbreviated version
                    if (displayText !== currentLanguage) {
                        setLanguage(dropdown, displayText);
                    }
                }

                function expandDropdown(dropdown) {
                    for (var i = 0; i < dropdown.options.length; i++) {
                        var option = dropdown.options[i];
                        option.textContent = option.getAttribute("data-full");
                    }
                }

                function collapseDropdown(dropdown) {
                    for (var i = 0; i < dropdown.options.length; i++) {
                        var option = dropdown.options[i];
                        option.textContent = option.value;
                    }
                    updateDropdownDisplay(dropdown);
                }

                window.addEventListener("DOMContentLoaded", function () {
                    var dropdowns = document.querySelectorAll('.languageDropdown');
                    dropdowns.forEach(function(dropdown) {
                        updateDropdownDisplay(dropdown);
                        // Add event listeners to expand and collapse the dropdown
                        dropdown.addEventListener("focus", function() { expandDropdown(dropdown); });
                        dropdown.addEventListener("blur", function() { collapseDropdown(dropdown); });
                    });
                });
              </script>
            </li>
          </ul>
        </div>
      </div>
      <!-- CONTENT START -->
      <div id="content">
        <div class="container">
          <div class="bodyDetails article-UBCOperamain" id="default" >
            <div id="searchBox" class="search-box">
              <form role="search" id="searchItems" action="default.asp" method="post" class="form-inline">
                <input type="hidden" name="sToken" value="1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=" class="form-inline">
                <input type="hidden" name="BOset::WScontent::SearchCriteria::venue_filter" value="">
                <input type="hidden" name="BOset::WScontent::SearchCriteria::city_filter" value="">
                <input type="hidden" name="BOset::WScontent::SearchCriteria::month_filter" value="">
                <input type="hidden" name="BOset::WScontent::SearchCriteria::object_type_filter" value="">
                <input type="hidden" name="BOset::WScontent::SearchCriteria::category_filter" value="">
                <input type="hidden" name="BOset::WScontent::SearchCriteria::search_from" value="">
                <input type="hidden" name="BOset::WScontent::SearchCriteria::search_to" value="">
                <input type="hidden" name="doWork::WScontent::search" value="1">
                <input type="hidden" name="BOparam::WScontent::search::article_search_id" value="EE8716B4-0827-4B0D-9ACB-038A148DF966">
                <ul class="list-unstyled">
                  <li class="item-search-keyword">
                    <span id="keyword-item-search" class="searchBoxLabel field-label">Search Events</span>
                    <input type="text" name="BOset::WScontent::SearchCriteria::search_criteria" class=" form-control" aria-labelledby="keyword-item-search" value="" title="Search Criteria" id="BOset::WScontent::SearchCriteria::search_criteria" class="form-control">
                  </li>
                  <li class="item-search-start-date">
                    <span id="event-dates-search" class="searchBoxLabel field-label">Event Dates</span>
                    <span id="event-dates-from" class="visually-hidden">from</span>
                    <div class="input-group"><input type="text" name="BOset::WScontent::SearchCriteria::search_from" class=" form-control" aria-labelledby="event-dates-search event-dates-from" value="" title="Search From" id="BOset::WScontent::SearchCriteria::search_from::0" class="form-control">
                      <div class="input-group-append"><button type="button" class="btn-unstyled calIcon" title="Show date picker"  onClick="tsOpenCalendar( event, &quot;BOset::WScontent::SearchCriteria::search_from::0&quot;, &quot;0&quot;, &quot;false&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;);" id="cal::BOset::WScontent::SearchCriteria::search_from::0"></button>
                      </div>
                    </div>
                  </li>
                  <li class="item-search-end-date">
                    <span id="event-dates-to" class="searchBoxLabel field-label">to</span>
                    <div class="input-group"><input type="text" name="BOset::WScontent::SearchCriteria::search_to" class=" form-control" aria-labelledby="event-dates-to" value="" title="Search To" id="BOset::WScontent::SearchCriteria::search_to::0" class="form-control">
                      <div class="input-group-append"><button type="button" class="btn-unstyled calIcon" title="Show date picker"  onClick="tsOpenCalendar( event, &quot;BOset::WScontent::SearchCriteria::search_to::0&quot;, &quot;0&quot;, &quot;false&quot;, &quot;sToken&quot;, &quot;1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=&quot;);" id="cal::BOset::WScontent::SearchCriteria::search_to::0"></button>
                      </div>
                    </div>
                  </li>
                  <li class="item-search-submit">
                    <input type="submit" class="btn btn-secondary" value="Go" name="Go" onclick="performSearch(event)">
                  </li>
                </ul>
                <script type="text/javascript">
                  function performSearch(event){
                    event.preventDefault();
                    doGAClicks('Search');
                    let _form = document.getElementById("searchItems");
                    if (!!_form){
                      _form.method = "get";
                      _form.removeChild(_form.querySelector("input[name='sToken']"));
                      document.getElementById("searchItems").submit();
                    }
                  }
                </script>
              </form>
            </div>
            <div class="articles  has-primary-features has-secondary-features">
              <!-- top scrolling features included -->
              <div role="complementary" aria-label="Primary" class="article-container primary-feature-wrapper">
                <div id="feature-box" class="static-inner">
                  <div class='item item-0 static'><a href="https://tickets.ubc.ca/Online/default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=E26C40C1-8C61-4EB6-AE34-E818CCED5BEC" target="_blank" shape="rect" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/"><img alt="" src="/content/Images/features/2526operabanner.jpeg"/>
                    </a>
                  </div>
                </div>
              </div>
              <div class="article-body-container">
                <div role="main" class="article-container main-article-body">
                  <h1 xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/">UBC Opera Upcoming Events</h1>
                  <h4 xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/">Join us for an exciting season featuring celebrated guests, our incredible production team, amazing conductors and orchestras, and most of all, our wonderful UBC Opera Ensemble!</h4>
                  <a href="default.asp?doWork::WScontent::loadArticle=Load&amp;BOparam::WScontent::loadArticle::article_id=568EA029-CEFE-483E-858A-A0C3082ADFC2" shape="rect" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/">Subscribe</a> today to unlock early access and savings! <br clear="none" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/"/>
                    <br clear="none" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/"/>
                  <div name="avWidget" id="avWidget_E26C40C1-8C61-4EB6-AE34-E818CCED5BEC_ID243RUTICVJCKDUMZXZRWFUHNJEMHD103S2HLDOOVXPHZARCWDS2M" xmlns:av="http://www.audienceview.com/xml/email/" xmlns:xhtml="http://www.w3.org/1999/xhtml">
                    <script type="text/javascript">
                      registerWidget( "SearchWebWidget3", "avWidget_E26C40C1-8C61-4EB6-AE34-E818CCED5BEC_ID243RUTICVJCKDUMZXZRWFUHNJEMHD103S2HLDOOVXPHZARCWDS2M", {
                      "SearchWebWidget3": "",

                      "css_class": "",

                      "css_id": "",

                      "css_style": "",

                      "showPrice": "",

                      "showLegend": "",

                      "showNoResults": "",

                      "title": "",
                       "1": "1"});
                    </script></div>
                    
                  <p xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/"> </p>
                </div>
                <div role="complementary" aria-label="Secondary" class="article-container secondary-linked-features">
                  <div id="promoCodeBox" class="promotional-code-input">
                    <form role="form" aria-labelledby="promocode-title" method="POST" action="/online/default.asp">
                      <input type="hidden" name="sToken" value="1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=">
                      <input type="hidden" name="BOparam::WScontent::loadArticle::article_id" value="E26C40C1-8C61-4EB6-AE34-E818CCED5BEC">
                      <h4 id="promocode-title">
                        <span class="fas fa-tag promotag"></span> Promotional Code</h4>
                      <ul class="list-unstyled">
                        <li class="promotional-code-message">
                          If you have a promotion, please enter the Access Code here:
                        </li>
                        <li>
                          <div class="input-group">
                            <input id="promoCodeBoxInput" type="text" class="form-control" name="BOparam::WScontent::loadArticle::promocode_access_code" title="If you have a promotion, please enter the Access Code here:" >
                            <span class="input-group-append">
                              <input type="submit" class="btn btn-secondary" name="doWork::WScontent::loadArticle" value="Go" onclick="doGAClicks('Apply')" >
                            </span>
                          </div>
                        </li>
                      </ul>
                    </form>
                  </div>
                  <div class="secondary-linked-feature-div" id="secondary-linked-feature-0">
                    <h4 xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/">
                      Customer Login</h4>
                    <p xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/">
                      <div name="avWidget" id="avWidget_32A04E6F-C8AF-4C15-8213-3F596EF5E28F_ID2IFFCSREAFBUIWRVORG1GGVGYKREAT3G3TR2FDGU4N2I1EUXOJF" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="">
                        <script type="text/javascript">
                          registerWidget( "LoginWebWidget", "avWidget_32A04E6F-C8AF-4C15-8213-3F596EF5E28F_ID2IFFCSREAFBUIWRVORG1GGVGYKREAT3G3TR2FDGU4N2I1EUXOJF", {
                          "LoginWebWidget": "",

                          "css_style": "",

                          "css_class": "",

                          "css_id": "",

                          "forgot_password": "Forgot your password?",

                          "title": "",

                          "password": "Password",

                          "submit": "Submit",

                          "username": "Email",
                           "1": "1"});
                        </script></div>
                    </p>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <!--\\ .bodyDetails -->
      </div>
      <!--\\ .container -->
    </div>
    <!--\\ #content -->
    <div role="contentinfo" id="footer">
      <div class="footer-content container">
        <div class="row-fluid expand" id="ubc7-global-footer" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/">
          <div class="logo"><a href="https://www.arts.ubc.ca" shape="rect"><img alt="UBC Faculty of Arts Logo" src="/content/Images/Branding/9_2016_2UnitPromo_Arts_ReverseRGB300.png"/>
            </a>
          </div>
          <div class="span5" id="ubc7-signature">
            <h1><a href="https://www.chancentre.com" shape="rect">Chan Centre for the Performing Arts</a>
            </h1>
            <p>6265 Crescent Road, UBC Vancouver, BC V6T 1Z1</p>
            <p>Phone: 604-822-2697</p>
          </div>
        </div>
        <div class="links" xmlns="http://www.w3.org/1999/xhtml" xmlns:av="http://www.audienceview.com/xml/email/">
          <ul>
            <li><a href="https://cdn.ubc.ca/clf/ref/emergency" shape="rect">Emergency Procedures</a>
            </li>
            <li><a href="https://cdn.ubc.ca/clf/ref/terms" shape="rect">Terms of Use</a>
            </li>
            <li><a href="https://cdn.ubc.ca/clf/ref/copyright" shape="rect">Copyright</a>
            </li>
            <li><a href="https://cdn.ubc.ca/clf/ref/accessibility" shape="rect">Accessibility</a>
            </li>
          </ul>
        </div>
      </div>
    </div>
    <!--\\ .content-wrapper -->
    <div id="fade" class="black_overlay"></div>
    <!-- inclusion of bootstrap.js -->
    <!-- http://twitter.github.com for documentation on bootstrap -->
    <script src="/lib/bootstrap/js/bootstrap.bundle.min.js?_=7.89.1" type="text/javascript"></script>
    <!-- end of bootstrap.js -->
    <!-- Font Awesome for icons -->
    <script src="/lib/fontawesome-free/js/all.min.js"></script>
    <!-- contains bootstrap specific function declarations -->
    <script src="bootstrap-functions.js?_=7.89.1" type="text/javascript"></script>
    <!-- Logout Handler -->
    <script>
      $(document).ready(function() {
          var body = $("body");

          body
          .on("logged-out", function(e) {
              var targetPage = "default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=E26C40C1-8C61-4EB6-AE34-E818CCED5BEC";
              window.location.assign("login.asp?targetPage="+encodeURIComponent(targetPage));
          });

          // on pressing Enter key on an anchor trigger click
          $("a").keypress(function(e){
            if(e.keyCode == 13){
              $(this).trigger("click");
            }
          });

          // When page is loaded make sure the Page Load Spinner is not shown
          if (spinnerDelayTimeout) {
              cancelSpinnerTimeouts();
          }

          body.removeClass("show-spinner");

          // Show spinner when form submitted or link clicked
          var onSubmit;
          $("form").each(
            //Trigger the spinner after any other onsubmit functions for the form
            function(index)
            {
              onSubmit = $(this).attr("onsubmit");
              if ( onSubmit && onSubmit != "" ) {
                onSubmit = onSubmit.trim();
                // if the submit is "returning", we need to && showSpinner otherwise it won't be called
                var returnIndex = onSubmit.indexOf("return");
                if ( returnIndex != -1 ) {
                  // remove any trailing semi-colons
                  if ( onSubmit.indexOf(";") == onSubmit.length-1 )
                    onSubmit = onSubmit.substr(0, onSubmit.length-1);

                  // wrap the return in () in case it contains ||
                  // (add 6 to strip the original "return")
                  onSubmit = onSubmit.substr(0, returnIndex) + "return (" + onSubmit.substr(returnIndex + 6) + ")";

                  // and then append the call to the spinner
                  onSubmit += " && showSpinner()";
                }
                else {
                  onSubmit += ";showSpinner()";
                }
              }
              else {
                onSubmit = "showSpinner()";
              }
              $(this).attr("onsubmit", onSubmit);
            }
          );

          // attach an event listener to each <a> tag to show the spinner if needed
          // only do this if the <a> tag has an "href" attribute, so we don't show
          // the spinner if staying on the page.  If navigating away from the page
          // via an onClick, we are assuming the onClick handles the display of the spinner
          // (or submits the form with jQuery, so the spinner attached to the form.submit
          // is fired)
          $("a").click(function(e) {
            var href = $(this).attr("href") || "";
            var target = $(this).attr("target") || "";

            if ((target == "" || /^(_self|_top|_parent)/.test(href)) && href != "" && !/^(#|javascript:|mailto:|file:)/.test(href))
              showSpinner();
          });
      });
    </script>
    <!-- CONTENT END -->
    <script type="text/javascript">
      (function () {
          var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.defer = true;
          ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
          var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
    <script>
      (function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a0d7d9dd0d8c9acd',t:'MTc4MTc2MDA5MQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();
    </script></body>
</html>
<script>
  $(function(){

    // "Continue Shopping" and "Look for other events" buttons to redirect back to Brochure page user came from
    $("a[name=continue-shopping], a[name=continueShopping], input[name=startOver], a[name=error-StartOver], input[name=error-StartOver]").on("click", function(e) {
      var returnTo = getCookie('returnTo');
      if(returnTo){
        e.preventDefault();
        deleteCookie('returnTo');
        window.location.href = returnTo;
      }
    })

    // "New Order" button to redirect to EIF home page
    $("input.new-order,input[name=cancel-order]").on("click", function(e){
         var returnTo = getCookie('returnTo');
          if(returnTo){
            e.preventDefault();
            $("#popupDiv_okayButton").on("click", function(e){
               $.ajax({
                 url: 'clearOrder.asp',
                 complete: function() {
                    deleteCookie('returnTo');
                    window.location.href = returnTo;
                 }
                });

             });
          }
    })
  });

  //adding the returnTo to the cookie
  var returnTo = "undefined";

    if (returnTo) {
      var reffA = document.createElement('a');
      reffA.href = returnTo;

    if(reffA.host != window.location.host) {
      setCookie("returnTo", returnTo, 1);
    }
  }

  /*
    *****************************************************
    Cookie methods
    *****************************************************
  */
  function setCookie(cname, cvalue, exdays) {
      var d = new Date();
      d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
      var expires = "expires="+d.toUTCString();
      document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
  }

  function getCookie(cname) {
      var name = cname + "=";
      var ca = document.cookie.split(';');
      for(var i = 0; i < ca.length; i++) {
          var c = ca[i];
          while (c.charAt(0) == ' ') {
              c = c.substring(1);
          }
          if (c.indexOf(name) == 0) {
              return c.substring(name.length, c.length);
          }
      }
      return "";
  }

  function deleteCookie(cname) {
      setCookie(cname, "", -1);
  }
</script>