Uri: https%3A%2F%2Fchancentre.com%2Fevents%2Fopera-tea-sneak-peak-street-scene%2F
Page name: Response Code Error 424
Edit | BackDate 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(""); 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., ó -> ó).
* @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("shoppingCart.asp?sToken=1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")" 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("default.asp?menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
All Upcoming Events
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=D6DC0533-1D71-4EAE-A4F6-2D3590DF4BD2&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
Chan Centre EXP
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=22049894-8D19-4D19-BF86-BF9717A555AA&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
Chan Centre Insights
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=68B10353-7142-4519-87EA-57F2FD1417C3&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
Chan Centre Presents
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=88E12C9D-8D90-45DA-9DAE-A32D01C5F7BD&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
Chan Centre Presents: Nat Geo Live
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=F8804175-2CB5-43EF-858D-15BD24E7AEB1&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
Inspired at the Chan
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=04428BC9-E786-4D35-954F-1BD4F3B64567&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
Lind Initiative
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("login.asp?targetpage=default.asp%3FdoWork::WScontent::loadArticle=Load%26BOparam::WScontent::loadArticle::article_id=E26C40C1-8C61-4EB6-AE34-E818CCED5BEC&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
UBC Opera
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=5FB5233C-FCAF-40B2-AE68-82A2776B4625&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
UBC School of Music Large Ensembles
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=1E58513F-424C-46ED-AC2D-443DAA499F26&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
UBC Theatre
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=1FFA097A-7B56-4897-ACEE-5BFFDF160F0C&menu_id=5A16B5CC-1FF7-4875-921B-4EA7D913F6D5", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
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("login.asp?targetpage=default.asp%3FdoWork::WScontent::loadArticle=Load%26BOparam::WScontent::loadArticle::article_id=43D58F5D-9A64-4F4D-9ADC-DE46BA0E4F9E&menu_id=B7CCE05A-9592-4E12-9B1B-561DBEFEBE48", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
Current Member Offerings
</a>
<a class="menuSubItem dropdown-item btn" href="javascript:void(0);" onclick="sTokenLink("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=01A740B7-65A9-4CB2-B673-7CC51D7B0995&menu_id=B7CCE05A-9592-4E12-9B1B-561DBEFEBE48", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
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("default.asp?doWork::WScontent::loadArticle=Load&BOparam::WScontent::loadArticle::article_id=B17C724A-D4F2-4BB5-9998-69096BA0DDE2&menu_id=A335F5A2-69C6-45BE-A381-6EEF888809B0", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
FAQ
</a>
</div>
</li>
<li class="menuTopItem " id="menuTopItem3">
<a class="menu_item menu-link" href="javascript:void(0);" onclick="sTokenLink("maintainAccount.asp?menu_id=77E87883-30DD-49E0-A827-A639DF828E6C", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=")">
<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, "BOset::WScontent::SearchCriteria::search_from::0", "0", "false", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=");" 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, "BOset::WScontent::SearchCriteria::search_to::0", "0", "false", "sToken", "1,606983c0,6a33805b,6F03B8C7-7752-41A5-8AEC-BD919DBE95D0,8xYmMMX6YP/yEl0smJ4s68oykfU=");" 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&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&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>