Skip to content

Instantly share code, notes, and snippets.

@johan
Last active February 4, 2017 08:36
Show Gist options
  • Select an option

  • Save johan/d7309c8c5e7dcd7ce160e88803aa29ab to your computer and use it in GitHub Desktop.

Select an option

Save johan/d7309c8c5e7dcd7ce160e88803aa29ab to your computer and use it in GitHub Desktop.
HAI 2017 events, as of 2016-12-22
'use strict';var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"])_i["return"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}();var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}else{return Array.from(arr);}}var deQuery=function deQuery(){var q=arguments.length>0&&arguments[0]!==undefined?arguments[0]:location.search;var o=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var d=arguments.length>2&&arguments[2]!==undefined?arguments[2]:decodeURIComponent;return q.replace(/[?&]([^&=]*)(?:=([^&]*))?/g,function(a,k,v){return o[d(k)]=d(v||'');}),o;};var query=deQuery();var eventUrl=query.e||'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/5f0411c2f93d4cbd894833b9c9629a7c2f49a2aa/events.json';var leaderUrl=query.l||'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/bd8ef78c433e1253a7b4978bb69551663bd62636/leaders.json';var regions=null;var center={aus:[-32.7278575,151.2604738,'Australia','Hunter Valley'],ca:[43.9888232,-80.0262646,'Canada','Ecology Retreat Centre'],de:[52.0668495,7.2107544,'Germany','Seminarhof'],east:[42.4965698,-72.9462321,'US East Coast','Earthdance'],midwest:[40.1591988,-85.2805088,'US Midwest','Oakwood Retreat Center'],norcal:[38.5369205,-123.0701147,'US Northern California','Wildwood'],socal:[34.1349793,-116.3599965,'US Southern California','Joshua Tree Retreat Center'],uk:[51.2727283,-2.4157968,'United Kingdom','Ammerdown']};var places=Object.keys(center);var prereqs={"Any":"*","None":0,"HAI 1":1,"HAI 2":2,"HAI 3":3,"HAI 4":4,"HAI 5":5,"On Team":"t"};var levels={"HAI Mini":0,"-":null,"HAI 1":1,"HAI 2":2,"HAI 3":3,"HAI 4":4,"HAI 5":5,"HAI 6":6,"HAI 7":7,"HAI 8":8,"HAI 9":9,"--":null,"Couples 1":"c1","Couples 2":"c2","---":"Team Related","Assistant Training":"at","Active Listening Training":"alt","Team Workshop":"tw","Intern Workshop":"iw","----":null,"Others":""};var defaultPrereqs={"(team|intern).*(workshop|meeting)":"t","mystery upper level":5,"loving sex":5,"assistant training":2,"active listening":1,"community (night|weekend)":1,"(monthly|hai).*connect":1,"support group":1};var defaultLevels={"mini":0,"assistant training":"at","active listening":"alt","lc1":"c1","igniting your love":"c1","lc2":"c2","heart to heart":"c2","team.*workshop":"tw","intern.*workshop":"iw"};var events=document.querySelector('#events');var byRegion=document.querySelector('#byregion');var byPrereq=document.querySelector('#byprereq');var byLevels=document.querySelector('#bylevels');var byLeader=document.querySelector('#byleader');var now=Date.now();var eventInFuture=function eventInFuture(_ref){var end=_ref.end;return end>now;};var decodeEvent=function decodeEvent(_ref2){var title=_ref2.title,start=_ref2.start,end=_ref2.end,url=_ref2.url,className=_ref2.className,geo=_ref2.geo,uid=_ref2.uid,level=_ref2.level,prereq=_ref2.prereq,region=_ref2.region,facilitators=_ref2.facilitators;title=title.replace(/\s+/g,' ').trim().replace(/[,.]+$/,'');title=title.replace(/(.*), Level (\d+)$/,function(all,name,num){if(level===undefined)level=num;return num?'HAI '+num+': '+name:name;});if(level===undefined){for(var re in defaultLevels){if(level!=null)break;if(title.match(new RegExp(re,'i'))){level=defaultLevels[re];}}}if(prereq===undefined){prereq=level&&(level>5?5:level-1)||null;for(var _re in defaultPrereqs){if(prereq)break;if(title.match(new RegExp(_re,'i'))){prereq=defaultPrereqs[_re];}}}if(/^\//.test(url||'')){url='http://www.hai.org'+url.replace('EventDetail?','EventDetail_pub?');}if(region===undefined){region=className.split('-')[1].toLowerCase();}if(geo===undefined)geo=region;if(uid===undefined)uid=(url.match(/id=([^&]+)/)||[])[1];if(!title.match(/ [-@] /))title+=' @ '+center[region][2];return{title:title,url:url,className:className,facilitators:facilitators,region:region,level:level,prereq:prereq,geo:geo,start:parseDate(start),end:parseDate(end)};};var initEventList=function initEventList(allevents,pos){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=allevents[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var event=_step.value;var className=event.className,region=event.region,prereq=event.prereq,title=event.title,start=event.start,end=event.end,url=event.url;var t=iso(start);var e=document.createElement('li');e.className=className;var a=document.createElement('a');a.href=url;a.textContent=t+': '+title;e.appendChild(gcalLink(event));e.appendChild(a);a.style.marginLeft='8px';events.appendChild(e);}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}};var initFilterList=function initFilterList(regions,facilitators){function input(_ref3){var text=_ref3.text,title=_ref3.title,id=_ref3.id,type=_ref3.type,name=_ref3.name,value=_ref3.value,checked=_ref3.checked,onclick=_ref3.onclick;var li=document.createElement('li');var label=document.createElement('label');var input=document.createElement('input');if(id)input.id=id;if(name)input.name=name;if(value!=null)input.value=value;input.checked=!!checked;input.type=type||'checkbox';input.onclick=onclick||filterEvents;if(title)label.title=title;li.appendChild(label);label.appendChild(input);label.appendChild(document.createTextNode(' '+text));return li;}if(initFilterList.done)return;initFilterList.done=true;var unit={de:'km',ca:'km'}[regions[0].region]||'mi';byRegion.appendChild(input({text:'All',onclick:function onclick(e){var checked=e.target.checked;regions.forEach(function(_ref4){var region=_ref4.region;return document.getElementById(region).checked=checked;});filterEvents();}}));regions.forEach(function(_ref5,nth){var className=_ref5.className,region=_ref5.region,name=_ref5.name,site=_ref5.site,km=_ref5.km,mi=_ref5.mi;var dist={km:km,mi:mi}[unit]+{km:'km',mi:'mi'}[unit],info=void 0;if(location.hash==='#debug')console.log(info=km+'km / '+mi+'mi to '+region+' ('+site+')');else console.log(info=dist+' to '+region+' ('+site+')');var li=input({text:name,id:region,checked:!nth,title:'~'+info});byRegion.appendChild(li);});for(var text in prereqs){var prereq=prereqs[text];byPrereq.appendChild(input({text:text,type:'radio',name:'prereq',value:prereq||'',id:'p'+prereq,checked:!prereq}));}byLevels.appendChild(input({text:'All',checked:true,onclick:function onclick(e){var checked=e.target.checked;for(var _text in levels){if(/^-+$/.test(_text))continue;var level=levels[_text];document.getElementById('l'+level).checked=checked;}filterEvents();}}));var $menu=$(byLevels);for(var _text2 in levels){var level=levels[_text2];if(/^-+$/.test(_text2)){$menu.append('<li class="divider" role="separator"></li>');if(level){$menu.append('<li class="dropdown-header">'+level+'</li>');}}else{byLevels.appendChild(input({text:_text2,value:level,id:'l'+level,checked:true}));}}byLeader.appendChild(input({text:'All',checked:true,onclick:function onclick(e){var checked=e.target.checked;var checks=Object.assign({"":"Other"},facilitators);for(var id in checks){var f=facilitators[id];if(f?f.facilitator:!id){document.querySelector('#byleader input[value="'+id+'"]').checked=checked;}}filterEvents();}}));$menu=$(byLeader);for(var id in facilitators){var leader=facilitators[id];if(!leader.facilitator){continue;$menu.append('<li class="divider" role="separator"></li>');}else{byLeader.appendChild(input({text:leader.name,value:id,checked:true}));}}byLeader.appendChild(input({text:"Other",value:'',checked:true}));};var filterEvents=function filterEvents(){var visibleRegions=regions.map(function(_ref6){var region=_ref6.region;return region;}).filter(function(region){return(document.getElementById(region)||{}).checked;});var prereq=Array.from(document.querySelectorAll('input[name=prereq]')).find(function(_ref7){var checked=_ref7.checked;return checked;}).value||null;var level={},leader={};Array.from(document.querySelectorAll('#bylevels input')).forEach(function(_ref8){var value=_ref8.value,checked=_ref8.checked;return level[value]=checked;});Array.from(document.querySelectorAll('#byleader input')).forEach(function(_ref9){var value=_ref9.value,checked=_ref9.checked;return leader[value]=checked;});var otherFacs=byLeader.querySelector('input[value=""]').checked;var shownEvents=[];Array.from(events.children).forEach(function(e,n){var event=allevents[n];var showRegion=visibleRegions.indexOf(event.region)!==-1;var showPrereq=event.prereq==prereq||prereq=='*';var showLevels=level[event.level===0?0:event.level||''];var facs=event.facilitators;var picks=facs.filter(function(id){return leader[id];});var mainfacs=facs.filter(function(id){return id&&id in leader;});var showLeader=!!picks.length||otherFacs&&(!event.facilitators.length||picks.length!==mainfacs.length);var show=showRegion&&showPrereq&&showLevels&&showLeader;e.style.display=show?'block':'none';if(show)shownEvents.push(event);});var showDLC=!!shownEvents.length;document.querySelector('#fetch').style.display=showDLC?'block':'none';if(showDLC){var dlc=document.getElementById('dlc');var text=dlc.textContent,className=dlc.className;var name='2017 HAI events in '+visibleRegions.join('/');var filename='2017-hai-events-'+visibleRegions.join('+');if(prereq!=='*'){filename+='-'+(prereq?prereq.replace(/\s+/g,''):'public');var desc=document.querySelector('#p'+prereq);if(desc)desc=desc.nextSibling.nodeValue.trim();name+=prereq?' requiring '+desc:' open to the public';}filename+='.ics';var a=icalLink({text:text,name:name,filename:filename,events:shownEvents});a.id='dlc';a.className=className;dlc.parentNode.replaceChild(a,dlc);}};var fetchJSON=function fetchJSON(url){return new Promise(function(resolve,reject){fetch(url).catch(reject).then(function(res){return res.text().catch(reject).then(function(j){return resolve(JSON.parse(j));});});});};var cached=function cached(as,promiseFunc){var ms=arguments.length>2&&arguments[2]!==undefined?arguments[2]:3600e3;return new Promise(function(resolve,reject){var _JSON$parse=JSON.parse(localStorage[as]||'{}'),from=_JSON$parse.from,data=_JSON$parse.data;if(data&&Date.now()-(from||0)<ms){console.log('Cached '+as+' from last '+ms/3600e3+'h');resolve(data);}else{console.log('Fetching '+as+' from source');promiseFunc().catch(function(){return data?resolve(data):reject();}).then(function(data){localStorage[as]=JSON.stringify({from:Date.now(),data:data});resolve(data);});}});};var cacheJSON=function cacheJSON(url){return cached(url,function(){return fetchJSON(url);});};var geoLocate=function geoLocate(){return new Promise(function(resolve,reject){var _navigator=navigator,geolocation=_navigator.geolocation;if(geolocation){geolocation.getCurrentPosition(resolve,reject);}else{reject();}});};var geoLocateOrNorcal=function geoLocateOrNorcal(){return new Promise(function(resolve,reject){var resolveFallback=function resolveFallback(){return resolve({fallback:true,coords:{latitude:37.4,longitude:-122.1}});};var resolveJSONable=function resolveJSONable(_ref10){var coords=_ref10.coords;var latitude=coords.latitude,longitude=coords.longitude;resolve({coords:{latitude:latitude,longitude:longitude}});};geoLocate().then(resolveJSONable).catch(resolveFallback);});};var cachedGeo=function cachedGeo(){return cached('geo',geoLocateOrNorcal);};var ical=function ical(_ref11){var name=_ref11.name,desc=_ref11.desc,domain=_ref11.domain,events=_ref11.events;function vevent(_ref12){var summary=_ref12.summary,title=_ref12.title,start=_ref12.start,end=_ref12.end,uid=_ref12.uid,geo=_ref12.geo,url=_ref12.url,description=_ref12.description;start=date(start);end=date(end);var now=date(new Date());var name=summary||title||'';var slug=name.replace(/\W+/g,'-');if(!uid)uid=start+'-'+slug;var props=['UID:'+uid+'@'+domain,'DTSTAMP:'+now,'DTSTART:'+start,'DTEND:'+end];if(name)props.push('SUMMARY:'+name);if(geo)props.push('GEO:'+geo);if(url)props.push('URL:'+url);if(description)props.push('DESCRIPTION:'+description);return['BEGIN:VEVENT'].concat(props,['END:VEVENT']).join('\r\n');}domain=domain||location.hostname;var optionals=[];if(name){optionals.push('X-WR-CALNAME:'+name);}if(desc){optionals.push('X-WR-CALDESC:'+desc);}return['BEGIN:VCALENDAR','VERSION:2.0','METHOD:PUBLISH','PRODID:-//'+domain+'//iCal Events'].concat(optionals,_toConsumableArray(events.map(vevent)),['END:VCALENDAR','']).join('\r\n');};var icalLink=function icalLink(_ref13){var text=_ref13.text,name=_ref13.name,filename=_ref13.filename,domain=_ref13.domain,events=_ref13.events;var ics=ical({name:name,domain:domain,events:events});var a=document.createElement('a');a.href='data:text/calendar,'+encodeURIComponent(ics);a.download=filename||'calendar.ics';a.textContent=text||name;return a;};var gcalUrl=function gcalUrl(event){var summary=event.summary,title=event.title,start=event.start,end=event.end,url=event.url,description=event.description;var calurl='https://www.google.com/calendar/render';var query={action:'TEMPLATE',text:summary||title,dates:date(start)+'/'+date(end),details:description,location:url,sf:'true',output:'xml'};var sep='?';for(var key in query){var val=query[key];if(val)calurl+=''+sep+key+'='+encodeURIComponent(val);sep='&';}return calurl;};var gcalLink=function gcalLink(event){var a=document.createElement('a');var i=document.createElement('img');i.src='https://i.imgur.com/QlbTNwa.png';i.width=i.height=32;i.border=0;a.appendChild(i);a.href=gcalUrl(event);a.target='_blank';var n=event.summary||event.title;if(n)a.title=i.alt='Add "'+n+'" to Google Calendar';return a;};var parseDate=function parseDate(t){if((typeof t==='undefined'?'undefined':_typeof(t))!=='object'||!(t instanceof Date)){if(typeof t!=='number'){t=Date.parse(t);}t=new Date(t);}return t;};var date=function date(t){return parseDate(t).toISOString().replace(/[-:]|\.\d*/g,'');};var iso=function iso(t){function p(n,c){return('0000'+n).slice(-(c||2));}return[t.getFullYear(),'-',p(t.getMonth()+1),'-',p(t.getDate()),' ',p(t.getHours()),':',p(t.getMinutes())].join('');};var toRadians=function toRadians(n){return n*Math.PI/180;};var toDegrees=function toDegrees(n){return n/Math.PI*180;};var haversineAngularDistance=function haversineAngularDistance(_ref14,_ref15){var _ref17=_slicedToArray(_ref14,2),lat1=_ref17[0],lng1=_ref17[1];var _ref16=_slicedToArray(_ref15,2),lat2=_ref16[0],lng2=_ref16[1];var φ1=toRadians(lat1);var φ2=toRadians(lat2);var Δφ=toRadians(lat2-lat1);var Δλ=toRadians(lng2-lng1);var a=Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2);return toDegrees(2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)));};var getClosestSite=function getClosestSite(_ref18,center){var latitude=_ref18.latitude,longitude=_ref18.longitude;var me=[latitude,longitude];var site=null;var closest=Infinity;window.regions=regions=[];for(var region in center){var distance=haversineAngularDistance(me,center[region]);var kilometers=6371*toRadians(distance);var km=Math.round(kilometers);var mi=Math.round(kilometers/1.60934);var name=center[region][2];var _site=center[region][3];regions.push({region:region,name:name,site:_site,km:km,mi:mi,className:'event-'+region});if(distance<closest){closest=distance;_site=region;}}return{regions:regions,region:site};};var narrowToClosestSite=function narrowToClosestSite(_ref19,events){var coords=_ref19.coords;var _getClosestSite=getClosestSite(coords,center),regions=_getClosestSite.regions,region=_getClosestSite.region;window.region=region;window.regions=regions=regions.sort(function(a,b){return a.km-b.km;});return{region:region,regions:regions,events:events.filter(function(event){return event.region===region;})};};Promise.all([cachedGeo(),cacheJSON(eventUrl),cacheJSON(leaderUrl)]).then(function(_ref20){var _ref21=_slicedToArray(_ref20,3),pos=_ref21[0],allevents=_ref21[1],facilitators=_ref21[2];window.allevents=allevents=allevents.map(decodeEvent).filter(eventInFuture);var _narrowToClosestSite=narrowToClosestSite(pos,allevents),region=_narrowToClosestSite.region,regions=_narrowToClosestSite.regions,events=_narrowToClosestSite.events;window.haievents=events;initEventList(allevents);initFilterList(regions,window.facilitators=facilitators);filterEvents();});
const deQuery = (q = location.search, o = {}, d = decodeURIComponent) =>
(q.replace(/[?&]([^&=]*)(?:=([^&]*))?/g,
(a, k, v) => o[d(k)] = d(v||'')
), o);
const query = deQuery();
// calendar of events; an array of events, at minimum:
// {title, start, end, url, className: "event-norcal"}
// but also supported and preferred (will be inferred)
// {region, level, prereq, geo, uid}
const eventUrl = query.e || 'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/5f0411c2f93d4cbd894833b9c9629a7c2f49a2aa/events.json';
const leaderUrl = query.l || 'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/bd8ef78c433e1253a7b4978bb69551663bd62636/leaders.json';
let regions = null;
const center =
{ aus: [-32.7278575, 151.2604738, 'Australia', 'Hunter Valley']
, ca: [43.9888232, -80.0262646, 'Canada', 'Ecology Retreat Centre']
, de: [52.0668495, 7.2107544, 'Germany', 'Seminarhof']
, east: [42.4965698, -72.9462321, 'US East Coast', 'Earthdance']
, midwest: [40.1591988, -85.2805088, 'US Midwest', 'Oakwood Retreat Center']
, norcal: [38.5369205, -123.0701147, 'US Northern California', 'Wildwood']
, socal: [34.1349793, -116.3599965, 'US Southern California', 'Joshua Tree Retreat Center']
, uk: [51.2727283, -2.4157968, 'United Kingdom', 'Ammerdown']
};
const places = Object.keys(center);
const prereqs =
{ "Any": "*"
, "None": 0
, "HAI 1": 1
, "HAI 2": 2
, "HAI 3": 3
, "HAI 4": 4
, "HAI 5": 5
, "On Team": "t"
};
const levels =
{ "HAI Mini": 0
, "-": null
, "HAI 1": 1
, "HAI 2": 2
, "HAI 3": 3
, "HAI 4": 4
, "HAI 5": 5
, "HAI 6": 6
, "HAI 7": 7
, "HAI 8": 8
, "HAI 9": 9
, "--": null
, "Couples 1": "c1"
, "Couples 2": "c2"
, "---": "Team Related"
, "Assistant Training": "at"
, "Active Listening Training": "alt"
, "Team Workshop": "tw"
, "Intern Workshop": "iw"
, "----": null
, "Others": ""
};
const defaultPrereqs =
{ "(team|intern).*(workshop|meeting)": "t"
, "mystery upper level": 5
, "loving sex": 5
, "assistant training": 2
, "active listening": 1
, "community (night|weekend)": 1
, "(monthly|hai).*connect": 1
, "support group": 1
};
const defaultLevels =
{ "mini": 0
, "assistant training": "at"
, "active listening": "alt"
, "lc1": "c1"
, "igniting your love": "c1"
, "lc2": "c2"
, "heart to heart": "c2"
, "team.*workshop": "tw"
, "intern.*workshop": "iw"
};
const events = document.querySelector('#events');
const byRegion = document.querySelector('#byregion');
const byPrereq = document.querySelector('#byprereq');
const byLevels = document.querySelector('#bylevels');
const byLeader = document.querySelector('#byleader');
const now = Date.now();
const eventInFuture = ({end}) => end > now;
const decodeEvent = ({title, start, end, url, className, geo, uid, level, prereq, region, facilitators}) => {
title = title.replace(/\s+/g, ' ').trim().replace(/[,.]+$/, '');
title = title.replace(/(.*), Level (\d+)$/, (all, name, num) => {
if (level === undefined) level = num;
return num ? `HAI ${num}: ${name}` : name
});
if (level === undefined) {
for (let re in defaultLevels) {
if (level != null) break;
if (title.match(new RegExp(re, 'i'))) {
level = defaultLevels[re];
}
}
}
if (prereq === undefined) {
prereq = level && (level > 5 ? 5 : level - 1) || null;
for (let re in defaultPrereqs) {
if (prereq) break;
if (title.match(new RegExp(re, 'i'))) {
prereq = defaultPrereqs[re];
}
}
}
if (/^\//.test(url || '')) {
url = 'http://www.hai.org' + url.replace('EventDetail?', 'EventDetail_pub?');
}
if (region === undefined) {
region = className.split('-')[1].toLowerCase();
}
if (geo === undefined) geo = region;
if (uid === undefined) uid = (url.match(/id=([^&]+)/) || [])[1];
if (!title.match(/ [-@] /)) title += ' @ ' + center[region][2];
return (
{ title, url, className
, facilitators
, region
, level
, prereq
, geo
, start: parseDate(start)
, end: parseDate(end)
}
);
};
const initEventList = (allevents, pos) => {
for (const event of allevents) {
const {className, region, prereq, title, start, end, url} = event;
const t = iso(start);
const e = document.createElement('li');
e.className = className;
let a = document.createElement('a');
a.href = url;
a.textContent = `${t}: ${title}`;
e.appendChild(gcalLink(event));
e.appendChild(a);
a.style.marginLeft = '8px';
events.appendChild(e);
}
};
const initFilterList = (regions, facilitators) => {
function input({ text, title, id, type, name, value, checked, onclick }) {
const li = document.createElement('li');
let label = document.createElement('label');
let input = document.createElement('input');
if (id) input.id = id;
if (name) input.name = name;
if (value != null) input.value = value;
input.checked = !!checked;
input.type = type || 'checkbox';
input.onclick = onclick || filterEvents;
if (title) label.title = title;
li.appendChild(label);
label.appendChild(input);
label.appendChild(document.createTextNode(' ' + text));
return li;
}
if (initFilterList.done) return;
initFilterList.done = true;
// in Germany and Canada, show units as km instead of miles
let unit = ({de: 'km', ca: 'km'})[regions[0].region] || 'mi';
byRegion.appendChild(input({ text: 'All', onclick: (e) => {
const {checked} = e.target;
regions.forEach(({region}) => document.getElementById(region).checked = checked);
filterEvents();
} }));
regions.forEach(({ className, region, name, site, km, mi }, nth) => {
let dist = ({km, mi})[unit] + ({km:'km', mi:'mi'})[unit], info;
if (location.hash === '#debug')
console.log(info = `${km}km / ${mi}mi to ${region} (${site})`);
else
console.log(info = `${dist} to ${region} (${site})`);
let li = input({text: name, id: region, checked: !nth, title: `~${info}`});
byRegion.appendChild(li);
});
for (const text in prereqs) {
const prereq = prereqs[text];
byPrereq.appendChild(input(
{ text
, type: 'radio'
, name: 'prereq'
, value: prereq || ''
, id: `p${prereq}`
, checked: !prereq
}
));
}
// "All levels" toggle
byLevels.appendChild(input({ text: 'All', checked: true, onclick: (e) => {
const {checked} = e.target;
for (const text in levels) {
if (/^-+$/.test(text)) continue;
const level = levels[text];
document.getElementById(`l${level}`).checked = checked;
}
filterEvents();
} }));
let $menu = $(byLevels);
for (const text in levels) {
const level = levels[text];
if (/^-+$/.test(text)) {
$menu.append('<li class="divider" role="separator"></li>');
if (level) {
$menu.append(`<li class="dropdown-header">${level}</li>`);
}
} else {
byLevels.appendChild(input(
{ text
, value: level
, id: `l${level}`
, checked: true
}
));
}
}
// "All facilitators" toggle
byLeader.appendChild(input({ text: 'All', checked: true, onclick: (e) => {
const {checked} = e.target;
const checks = Object.assign({"": "Other"}, facilitators);
for (const id in checks) {
const f = facilitators[id];
if (f ? f.facilitator : !id) {
document.querySelector(`#byleader input[value="${id}"]`).checked = checked;
}
}
filterEvents();
} }));
$menu = $(byLeader);
for (const id in facilitators) {
const leader = facilitators[id];
if (!leader.facilitator) {
continue;
$menu.append('<li class="divider" role="separator"></li>');
} else {
byLeader.appendChild(input(
{ text: leader.name
, value: id
, checked: true
}
));
}
}
byLeader.appendChild(input(
{ text: "Other"
, value: ''
, checked: true
}
));
};
const filterEvents = () => {
const visibleRegions = regions.map(({region}) => region).filter(region =>
(document.getElementById(region) || {}).checked
);
const prereq = Array.from(document.querySelectorAll('input[name=prereq]')).find(
({ checked }) => checked
).value || null;
const level = {}, leader = {};
Array.from(document.querySelectorAll('#bylevels input')).forEach(
({ value, checked }) => level[value] = checked
);
Array.from(document.querySelectorAll('#byleader input')).forEach(
({ value, checked }) => leader[value] = checked
);
const otherFacs = byLeader.querySelector('input[value=""]').checked;
const shownEvents = [];
Array.from(events.children).forEach((e, n) => {
const event = allevents[n];
const showRegion = visibleRegions.indexOf(event.region) !== -1;
const showPrereq = event.prereq == prereq || prereq == '*';
const showLevels = level[event.level === 0 ? 0 : event.level || ''];
const facs = event.facilitators;
const picks = facs.filter(id => leader[id]);
const mainfacs = facs.filter(id => id && (id in leader));
const showLeader = !!picks.length || otherFacs &&
(!event.facilitators.length || picks.length !== mainfacs.length);
const show = showRegion && showPrereq && showLevels && showLeader;
e.style.display = show ? 'block' : 'none';
if (show) shownEvents.push(event);
});
// update ical link
const showDLC = !!shownEvents.length;
document.querySelector('#fetch').style.display = showDLC ? 'block' : 'none';
if (showDLC) {
const dlc = document.getElementById('dlc');
const text = dlc.textContent, {className} = dlc;
let name = `2017 HAI events in ${visibleRegions.join('/')}`;
let filename = `2017-hai-events-${visibleRegions.join('+')}`;
if (prereq !== '*') {
filename += '-' + (prereq ? prereq.replace(/\s+/g, '') : 'public');
let desc = document.querySelector(`#p${prereq}`);
if (desc) desc = desc.nextSibling.nodeValue.trim();
name += prereq ? ` requiring ${desc}` : ' open to the public';
}
filename += '.ics';
const a = icalLink({text, name, filename, events: shownEvents});
a.id = 'dlc';
a.className = className;
dlc.parentNode.replaceChild(a, dlc);
}
};
const fetchJSON = (url) => new Promise((resolve, reject) => {
fetch(url).catch(reject).then(
(res) => res.text().catch(reject).then(
(j) => resolve(JSON.parse(j))
)
);
});
const cached = (as, promiseFunc, ms = 3600e3) => new Promise((resolve, reject) => {
let {from, data} = JSON.parse(localStorage[as] || '{}');
if (data && Date.now() - (from || 0) < ms) {
console.log(`Cached ${as} from last ${ms/3600e3}h`);
resolve(data);
} else {
console.log(`Fetching ${as} from source`);
promiseFunc().catch(
() => data ? resolve(data) : reject()
).then(
(data) => {
localStorage[as] = JSON.stringify({from: Date.now(), data});
resolve(data);
}
);
}
});
const cacheJSON = (url) => cached(url, () => fetchJSON(url));
const geoLocate = () => new Promise((resolve, reject) => {
const {geolocation} = navigator;
if (geolocation) {
geolocation.getCurrentPosition(resolve, reject);
} else {
reject();
}
});
const geoLocateOrNorcal = () => new Promise((resolve, reject) => {
const resolveFallback = () => resolve(
{ fallback: true
, coords:
{ latitude: 37.4
, longitude: -122.1
}
}
);
const resolveJSONable = ({coords}) => {
const {latitude, longitude} = coords;
resolve({coords: {latitude, longitude}});
};
geoLocate().then(resolveJSONable).catch(resolveFallback);
});
const cachedGeo = () => cached('geo', geoLocateOrNorcal);
const ical = ({name, desc, domain, events}) => {
function vevent({summary, title, start, end, uid, geo, url, description}) {
start = date(start);
end = date(end);
const now = date(new Date);
const name = summary || title || '';
const slug = name.replace(/\W+/g, '-');
if (!uid) uid = `${start}-${slug}`;
const props =
[ `UID:${uid}@${domain}`
, `DTSTAMP:${now}`
, `DTSTART:${start}`
, `DTEND:${end}`
];
if (name) props.push(`SUMMARY:${name}`);
if (geo) props.push(`GEO:${geo}`);
if (url) props.push(`URL:${url}`);
if (description) props.push(`DESCRIPTION:${description}`);
return ['BEGIN:VEVENT', ...props, 'END:VEVENT'].join('\r\n');
}
domain = domain || location.hostname;
const optionals = [];
if (name) { optionals.push(`X-WR-CALNAME:${name}`); }
if (desc) { optionals.push(`X-WR-CALDESC:${desc}`); }
return [ 'BEGIN:VCALENDAR'
, 'VERSION:2.0'
, 'METHOD:PUBLISH'
, `PRODID:-//${domain}//iCal Events`
, ...optionals
, ...events.map(vevent)
, 'END:VCALENDAR', ''
].join('\r\n');
};
// caniuse.com/#search=download - covered mostly everywhere
const icalLink = ({text, name, filename, domain, events}) => {
var ics = ical({name, domain, events});
var a = document.createElement('a');
//a.href = `data:text/calendar;base64,${btoa(ics)}`;
a.href = `data:text/calendar,${encodeURIComponent(ics)}`;
a.download = filename || 'calendar.ics';
a.textContent = text || name;
return a;
}
const gcalUrl = (event) => {
let {summary, title, start, end, url, description} = event;
let calurl = 'https://www.google.com/calendar/render';
let query =
{ action: 'TEMPLATE'
, text: summary || title
, dates: date(start) + '/' + date(end)
, details: description
, location: url
, sf: 'true'
, output: 'xml'
};
let sep = '?';
for (let key in query) {
let val = query[key];
if (val) calurl += `${sep}${key}=${encodeURIComponent(val)}`;
sep = '&';
}
return calurl;
}
const gcalLink = (event) => {
var a = document.createElement('a');
var i = document.createElement('img');
i.src = 'https://i.imgur.com/QlbTNwa.png';
i.width = i.height = 32;
i.border = 0;
a.appendChild(i);
a.href = gcalUrl(event);
a.target = '_blank';
var n = event.summary || event.title;
if (n) a.title = i.alt = `Add "${n}" to Google Calendar`;
return a;
}
const parseDate = (t) => {
if (typeof t !== 'object' || !(t instanceof Date)) {
if (typeof t !== 'number') { t = Date.parse(t); }
t = new Date(t);
}
return t;
}
const date = (t) => parseDate(t).toISOString().replace(/[-:]|\.\d*/g, '');
const iso = (t) => {
function p(n, c) {
return ('0000' + n).slice(-(c || 2));
}
return [ t.getFullYear(), '-'
, p(t.getMonth() + 1), '-'
, p(t.getDate()), ' '
, p(t.getHours()), ':'
, p(t.getMinutes())
].join('');
}
const toRadians = (n) => n * Math.PI / 180;
const toDegrees = (n) => n / Math.PI * 180;
const haversineAngularDistance = ([lat1, lng1], [lat2, lng2]) => {
const φ1 = toRadians(lat1);
const φ2 = toRadians(lat2);
const Δφ = toRadians(lat2 - lat1);
const Δλ = toRadians(lng2 - lng1);
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
Math.cos(φ1) * Math.cos(φ2) *
Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
return toDegrees(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)));
};
const getClosestSite = ({latitude, longitude}, center) => {
const me = [latitude, longitude];
let site = null;
let closest = Infinity;
window.regions = regions = [];
for (let region in center) {
let distance = haversineAngularDistance(me, center[region]);
let kilometers = 6371 * toRadians(distance);
let km = Math.round(kilometers);
let mi = Math.round(kilometers / 1.60934);
let name = center[region][2];
let site = center[region][3];
regions.push({region, name, site, km, mi, className: `event-${region}` });
if (distance < closest) {
closest = distance;
site = region;
}
}
return {regions, region: site};
};
const narrowToClosestSite = ({coords}, events) => {
let {regions, region} = getClosestSite(coords, center);
window.region = region;
window.regions = regions = regions.sort((a, b) => a.km - b.km);
return {region, regions, events: events.filter(
(event) => event.region === region
)};
}
Promise.all(
[ cachedGeo()
, cacheJSON(eventUrl)
, cacheJSON(leaderUrl)
])
.then(([pos, allevents, facilitators]) => {
window.allevents = allevents = allevents.map(decodeEvent).filter(eventInFuture);
const {region, regions, events} = narrowToClosestSite(pos, allevents);
window.haievents = events;
initEventList(allevents);
initFilterList(regions, window.facilitators = facilitators);
filterEvents();
});
[ {"title":"Free Mini Workshop-Theme: Creating Authentic Connections","start":"2016-11-02T23:45:00.000Z","end":"2016-11-03T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6mdZEAR","className":"event-midwest","facilitators":["005i0000002EAGMAA4"]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2016-11-03T02:30:00.000Z","end":"2016-11-03T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0xYEAT","className":"event-norcal","facilitators":[]}
, {"title":"Loving Sex","start":"2016-11-04T22:00:00.000Z","end":"2016-11-06T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRuQEEA1","className":"event-east","facilitators":["005i0000001nIiIAAU","005i0000002EGXGAA4"]}
, {"title":"Sacred Energy Exchange, Level 8","start":"2016-11-05T02:00:00.000Z","end":"2016-11-07T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPXNEA5","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002E85yAAC"]}
, {"title":"Midwest HAI Connect in Livonia","start":"2016-11-10T00:00:00.000Z","end":"2016-11-10T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3iHfEAJ","className":"event-midwest","facilitators":["005i0000002d8AWAAY","005i0000002d91XAAQ"]}
, {"title":"MONTHLY CONNECT - SoCal","start":"2016-11-10T03:30:00.000Z","end":"2016-11-10T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UycIvEAJ","className":"event-socal","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Awakening to Love -- A Beginning @ Santa Cruz","start":"2016-11-10T03:30:00.000Z","end":"2016-11-10T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRzCHEA1","className":"event-norcal","facilitators":["005i0000002bBetAAE"]}
, {"title":"Free Workshop: Opening to Love","start":"2016-11-10T23:45:00.000Z","end":"2016-11-11T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6mdPEAR","className":"event-midwest","facilitators":["005i0000002EAGMAA4"]}
, {"title":"Free Mini Workshop - Theme: Finding Love – An Evening Exploration @ Cotati","start":"2016-11-11T03:30:00.000Z","end":"2016-11-11T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz97EAD","className":"event-norcal","facilitators":["005i0000002Drc7AAC"]}
, {"title":"Sacred Energy Exchange, Level 8","start":"2016-11-11T06:30:00.000Z","end":"2016-11-13T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRfBsEAL","className":"event-aus","facilitators":[]}
, {"title":"Free Mini Workshop","start":"2016-11-11T13:00:00.000Z","end":"2016-11-13T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSfpoEAD","className":"event-east","facilitators":[]}
, {"title":"Living at Choice, Level 3","start":"2016-11-12T00:00:00.000Z","end":"2016-11-13T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QO21JEAT","className":"event-midwest","facilitators":["005i0000002EGXGAA4","005i0000002E85yAAC"]}
, {"title":"Loving Yourself, Level 2","start":"2016-11-12T03:00:00.000Z","end":"2016-11-14T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPVlEAP","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]}
, {"title":"Know your No, Vitalize Your Yes!","start":"2016-11-12T18:00:00.000Z","end":"2016-11-13T00:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6lO8EAJ","className":"event-norcal","facilitators":["005i0000002EChFAAW"]}
, {"title":"Ontario Mini,","start":"2016-11-12T19:00:00.000Z","end":"2016-11-12T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U75haEAB","className":"event-ca","facilitators":[]}
, {"title":"Boston Area Completion Party for the Loving Sex Workshop","start":"2016-11-12T23:00:00.000Z","end":"2016-11-13T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6ys8EAB","className":"event-east","facilitators":[]}
, {"title":"MONTHLY CONNECT - Vista","start":"2016-11-13T01:00:00.000Z","end":"2016-11-13T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6qa2EAB","className":"event-socal","facilitators":[]}
, {"title":"Community Night in San Jose","start":"2016-11-13T03:00:00.000Z","end":"2016-11-13T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U78SnEAJ","className":"event-norcal","facilitators":["005i0000002bbv0AAA","005i0000002bBetAAE"]}
, {"title":"First Sunday Marin County HAI Connect (Support Group)","start":"2016-11-13T22:00:00.000Z","end":"2016-11-14T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3jOnEAJ","className":"event-norcal","facilitators":[]}
, {"title":"Starlight in the East Bay Community Events Team Meeting","start":"2016-11-16T02:15:00.000Z","end":"2016-11-16T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U30dtEAB","className":"event-norcal","facilitators":[]}
, {"title":"Third Tuesday Monthly HAI Connect (Support Group) – San Jose","start":"2016-11-16T03:30:00.000Z","end":"2016-11-16T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRq6DEAT","className":"event-norcal","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Opening Your Heart to Intimacy","start":"2016-11-18T03:30:00.000Z","end":"2016-11-18T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz5yEAD","className":"event-norcal","facilitators":["005i0000002D4iTAAS"]}
, {"title":"Love is a Miracle, Level 1","start":"2016-11-18T06:30:00.000Z","end":"2016-11-20T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRfBJEA1","className":"event-aus","facilitators":[]}
, {"title":"Living at Choice, Level 3","start":"2016-11-19T03:00:00.000Z","end":"2016-11-21T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Q17wlEAB","className":"event-socal","facilitators":["005i0000002EChFAAW","005i0000001nIiIAAU"]}
, {"title":"Living at Choice, Level 3","start":"2016-11-19T03:00:00.000Z","end":"2016-11-21T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPW5EAP","className":"event-norcal","facilitators":["005i0000002E85yAAC","005i0000002EGDBAA4"]}
, {"title":"Ontario Mini,","start":"2016-11-19T19:00:00.000Z","end":"2016-11-19T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U71XKEAZ","className":"event-ca","facilitators":[]}
, {"title":"Free Mini Workshop-Theme: Creating Love and Connection","start":"2016-11-19T22:30:00.000Z","end":"2016-11-20T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3FJ9EAN","className":"event-midwest","facilitators":["005i0000002d8UfAAI"]}
, {"title":"East Bay Weekend HAI Connect (Support Group)","start":"2016-11-20T22:00:00.000Z","end":"2016-11-21T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U739bEAB","className":"event-norcal","facilitators":[]}
, {"title":"Midwest HAI Connect - Online on Zoom","start":"2016-11-22T02:00:00.000Z","end":"2016-11-22T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U73gXEAR","className":"event-midwest","facilitators":[]}
, {"title":"Midwest HAI Connect in Berkley","start":"2016-11-23T00:00:00.000Z","end":"2016-11-23T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3iIEEAZ","className":"event-midwest","facilitators":["005i0000002cJZ9AAM","005i0000002d8AWAAY"]}
, {"title":"Loving Yourself, Level 2","start":"2016-11-25T23:00:00.000Z","end":"2016-11-27T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QOCuzEAH","className":"event-ca","facilitators":["005i0000001nIiIAAU","005i0000002EGXGAA4"]}
, {"title":"The Dance Between Surrender & Control, Level 5","start":"2016-11-26T03:00:00.000Z","end":"2016-11-28T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPWyEAP","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]}
, {"title":"Saturday Night HAI","start":"2016-11-26T23:30:00.000Z","end":"2016-11-27T04:15:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U71xMEAR","className":"event-midwest","facilitators":[]}
, {"title":"Saturday Night HAI - Dance Party","start":"2016-11-27T02:15:00.000Z","end":"2016-11-27T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U723hEAB","className":"event-midwest","facilitators":[]}
, {"title":"Loving Yourself, Level 2","start":"2016-12-02T23:00:00.000Z","end":"2016-12-04T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRQAIEA5","className":"event-east","facilitators":["005i0000002EChFAAW","005i0000002E85yAAC"]}
, {"title":"Love is a Miracle, Level 1","start":"2016-12-03T00:00:00.000Z","end":"2016-12-04T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QOAxzEAH","className":"event-midwest","facilitators":["005i0000002EGXGAA4","005i0000002EcbeAAC"]}
, {"title":"Love is a Miracle, Level 1","start":"2016-12-03T03:00:00.000Z","end":"2016-12-05T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPTpEAP","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]}
, {"title":"South Bay Saturday Monthly HAI Connect - Portola Valley","start":"2016-12-03T22:00:00.000Z","end":"2016-12-04T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0yWEAT","className":"event-norcal","facilitators":[]}
, {"title":"Monthly Connect and Holiday Gathering-SoCal","start":"2016-12-03T22:30:00.000Z","end":"2016-12-04T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UycJ0EAJ","className":"event-socal","facilitators":[]}
, {"title":"Community Night in Petaluma","start":"2016-12-04T03:00:00.000Z","end":"2016-12-04T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U75LEEAZ","className":"event-norcal","facilitators":["005i0000002EbiSAAS","005i0000002bWLFAA2"]}
, {"title":"Free Mini Workshop - Theme: Finding Love – An Exploration @ Topanga","start":"2016-12-04T21:00:00.000Z","end":"2016-12-05T00:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPZEA1","className":"event-socal","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Communicating With Loved Ones @ San Jose","start":"2016-12-06T03:30:00.000Z","end":"2016-12-06T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz9bEAD","className":"event-norcal","facilitators":["005i0000002bBetAAE"]}
, {"title":"NYC Area Level 2 Completion Party and Support Group","start":"2016-12-08T00:00:00.000Z","end":"2016-12-08T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6ysIEAR","className":"event-east","facilitators":[]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2016-12-08T03:30:00.000Z","end":"2016-12-08T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0xdEAD","className":"event-norcal","facilitators":[]}
, {"title":"Livingston NJ Support Group","start":"2016-12-09T00:00:00.000Z","end":"2016-12-09T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSpHKEA1","className":"event-east","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Relational Intimacy – An Evening Exploration","start":"2016-12-09T03:30:00.000Z","end":"2016-12-09T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz89EAD","className":"event-norcal","facilitators":["005i0000002Drc7AAC"]}
, {"title":"Free Mini Workshop-Theme: Be Love, Find Joy!","start":"2016-12-10T00:00:00.000Z","end":"2016-12-10T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRydWEAT","className":"event-midwest","facilitators":["005i0000002d8UfAAI"]}
, {"title":"Boston Area Level 2 Completion Party","start":"2016-12-10T23:00:00.000Z","end":"2016-12-11T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6ysNEAR","className":"event-east","facilitators":[]}
, {"title":"MONTHLY CONNECT - Encinitas","start":"2016-12-11T01:00:00.000Z","end":"2016-12-11T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6qZxEAJ","className":"event-socal","facilitators":[]}
, {"title":"Holiday Party 2016","start":"2016-12-11T03:00:00.000Z","end":"2016-12-11T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRnTXEA1","className":"event-norcal","facilitators":[]}
, {"title":"First Sunday Marin County HAI Connect (Support Group)","start":"2016-12-11T22:00:00.000Z","end":"2016-12-12T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3jOsEAJ","className":"event-norcal","facilitators":[]}
, {"title":"Starlight in the East Bay Community Events Team Meeting","start":"2016-12-14T02:15:00.000Z","end":"2016-12-14T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U30dyEAB","className":"event-norcal","facilitators":[]}
, {"title":"Midwest HAI Connect in Livonia","start":"2016-12-15T00:00:00.000Z","end":"2016-12-15T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3iHkEAJ","className":"event-midwest","facilitators":["005i0000003TBx7AAG"]}
, {"title":"Free Mini Workshop - Theme: Exploring Relational Intimacy @ Culver City","start":"2016-12-15T03:00:00.000Z","end":"2016-12-15T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPeEAL","className":"event-socal","facilitators":[]}
, {"title":"East Bay Weekend HAI Connect (Support Group)","start":"2016-12-18T22:00:00.000Z","end":"2016-12-19T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U74j1EAB","className":"event-norcal","facilitators":[]}
, {"title":"Midwest HAI Connect - Online on Zoom","start":"2016-12-20T01:00:00.000Z","end":"2016-12-20T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSm0bEAD","className":"event-midwest","facilitators":[]}
, {"title":"Third Tuesday Monthly HAI Connect (Support Group) – San Jose","start":"2016-12-21T03:30:00.000Z","end":"2016-12-21T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRq6IEAT","className":"event-norcal","facilitators":[]}
, {"title":"Concert: Heather Katz & Friends","start":"2016-12-31T00:00:00.000Z","end":"2016-12-31T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSfSUEA1","className":"event-midwest","facilitators":[]}
, {"title":"South Bay Saturday Monthly HAI Connect - Portola Valley","start":"2016-12-31T22:00:00.000Z","end":"2017-01-01T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0ybEAD","className":"event-norcal","facilitators":[]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-01-05T03:30:00.000Z","end":"2017-01-05T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790gEAB","className":"event-norcal","facilitators":[]}
, {"title":"YES! Ignite your Heart's Desires","start":"2017-01-07T03:00:00.000Z","end":"2017-01-08T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U75N0EAJ","className":"event-norcal","facilitators":[]}
, {"title":"Spirituality and Sexuality, Level 4","start":"2017-01-07T03:00:00.000Z","end":"2017-01-09T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6wFVEAZ","className":"event-socal","facilitators":[]}
, {"title":"MONTHLY CONNECT - Encinitas","start":"2017-01-15T01:00:00.000Z","end":"2017-01-15T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPUEA1","className":"event-socal","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Deepening Intimacy – Introduction to the Tools @ Santa Barbara","start":"2017-01-15T03:00:00.000Z","end":"2017-01-15T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPjEAL","className":"event-socal","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Finding Love – An Exploration @ Encinitas","start":"2017-01-15T23:00:00.000Z","end":"2017-01-16T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPyEAL","className":"event-socal","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City","start":"2017-01-15T23:00:00.000Z","end":"2017-01-16T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPoEAL","className":"event-socal","facilitators":[]}
, {"title":"Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City","start":"2017-01-15T23:00:00.000Z","end":"2017-01-16T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPtEAL","className":"event-socal","facilitators":[]}
, {"title":"Team Workshop","start":"2017-01-21T03:00:00.000Z","end":"2017-01-23T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0lpEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002baZGAAY","005i0000002EChFAAW","005i0000001nIiIAAU","005i0000002EGXGAA4","005i0000002EcbeAAC","005i0000002E85yAAC","005i0000002EGDBAA4"]}
, {"title":"Team Workshop","start":"2017-01-27T18:00:00.000Z","end":"2017-01-29T16:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j5tEAB","className":"event-de","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-01-28T03:00:00.000Z","end":"2017-01-30T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11JEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EcbeAAC"]}
, {"title":"Free Mini Workshop - Theme: Exploring Relational Intimacy @ Vista","start":"2017-01-29T23:00:00.000Z","end":"2017-01-30T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkQ3EAL","className":"event-socal","facilitators":[]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-02-02T03:30:00.000Z","end":"2017-02-02T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790lEAB","className":"event-norcal","facilitators":[]}
, {"title":"Team Workshop","start":"2017-02-10T18:00:00.000Z","end":"2016-02-12T18:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhKEAT","className":"event-uk","facilitators":[]}
, {"title":"Team Workshop","start":"2017-02-10T23:00:00.000Z","end":"2017-02-12T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U72ArEAJ","className":"event-aus","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-02-11T03:00:00.000Z","end":"2017-02-13T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6wGiEAJ","className":"event-socal","facilitators":[]}
, {"title":"Igniting Your Love: A Couples Weekend Retreat for Deepening Intimacy and Communication","start":"2017-02-11T03:00:00.000Z","end":"2017-02-13T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0kWEAR","className":"event-norcal","facilitators":["005i0000002E85yAAC","005i0000002EGDBAA4"]}
, {"title":"Loving Yourself, Level 2","start":"2017-02-18T03:00:00.000Z","end":"2017-02-20T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13YEAR","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]}
, {"title":"Creating Community, Level 6","start":"2017-02-25T03:00:00.000Z","end":"2017-02-27T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0jJEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000001nIiIAAU"]}
, {"title":"Assistant Training Feb 2017 @ San Rafael","start":"2017-02-25T18:00:00.000Z","end":"2017-02-26T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZBEA1","className":"event-norcal","facilitators":["005i0000002baZGAAY"]}
, {"title":"Active Listening Feb 2017 @ San Rafael","start":"2017-02-26T18:00:00.000Z","end":"2017-02-27T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZQEA1","className":"event-norcal","facilitators":["005i0000002baZGAAY"]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-03-02T03:30:00.000Z","end":"2017-03-02T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790qEAB","className":"event-norcal","facilitators":[]}
, {"title":"Team Workshop","start":"2017-03-03T22:00:00.000Z","end":"2017-03-05T21:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0TEAV","className":"event-east","facilitators":["005i0000002EChFAAW","005i0000002EDDGAA4"]}
, {"title":"Loving Yourself, Level 2","start":"2017-03-04T03:00:00.000Z","end":"2017-03-06T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6wHMEAZ","className":"event-socal","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-03-10T06:30:00.000Z","end":"2017-03-12T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U72ADEAZ","className":"event-aus","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-03-17T18:00:00.000Z","end":"2017-03-19T17:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j5yEAB","className":"event-de","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-03-18T02:00:00.000Z","end":"2017-03-20T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11YEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EDDGAA4"]}
, {"title":"Love is a Miracle, Level 1","start":"2017-03-31T16:00:00.000Z","end":"2017-04-02T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhFEAT","className":"event-uk","facilitators":[]}
, {"title":"Living at Choice, Level 3","start":"2017-04-01T02:00:00.000Z","end":"2017-04-03T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl147EAB","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000002EcbeAAC"]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-04-06T02:30:00.000Z","end":"2017-04-06T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790vEAB","className":"event-norcal","facilitators":[]}
, {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-04-07T22:00:00.000Z","end":"2017-04-09T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0OEAV","className":"event-east","facilitators":["005i0000002EcbeAAC","005i0000002EGDBAA4"]}
, {"title":"Being the Source of Love, Level 7","start":"2017-04-08T02:00:00.000Z","end":"2017-04-10T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0jYEAR","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000001nIiIAAU"]}
, {"title":"EC Assistant Training Day","start":"2017-04-15T14:00:00.000Z","end":"2017-04-15T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSmmDEAT","className":"event-east","facilitators":["005i0000002bqxPAAQ","005i0000002d1OnAAI","005i0000002cORnAAM"]}
, {"title":"Creating Community, Level 6","start":"2017-04-21T17:00:00.000Z","end":"2017-04-23T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j68EAB","className":"event-de","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-04-21T22:30:00.000Z","end":"2017-04-23T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzEEAR","className":"event-ca","facilitators":["005i0000001nIiIAAU","005i0000002EGDBAA4"]}
, {"title":"Spirituality and Sexuality, Level 4","start":"2017-04-29T02:00:00.000Z","end":"2017-05-01T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14gEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-05-04T02:30:00.000Z","end":"2017-05-04T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U7910EAB","className":"event-norcal","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-05-05T22:00:00.000Z","end":"2017-05-07T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0EEAV","className":"event-east","facilitators":["005i0000002baZGAAY","005i0000002EDDGAA4"]}
, {"title":"Team Workshop Ontario","start":"2017-05-05T22:30:00.000Z","end":"2017-05-07T20:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzOEAR","className":"event-ca","facilitators":["005i0000002EChFAAW"]}
, {"title":"Loving Sex","start":"2017-05-06T02:00:00.000Z","end":"2017-05-08T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6npcEAB","className":"event-norcal","facilitators":["005i0000001nIiIAAU","005i0000002EGXGAA4"]}
, {"title":"Love is a Miracle, Level 1","start":"2017-05-06T02:00:00.000Z","end":"2017-05-08T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11dEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]}
, {"title":"Loving Yourself, Level 2","start":"2017-05-12T17:00:00.000Z","end":"2017-05-14T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhPEAT","className":"event-uk","facilitators":[]}
, {"title":"Loving Yourself, Level 2","start":"2017-05-19T17:00:00.000Z","end":"2017-05-21T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6DEAR","className":"event-de","facilitators":[]}
, {"title":"Loving Yourself, Level 2","start":"2017-05-20T02:00:00.000Z","end":"2017-05-22T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13dEAB","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EDDGAA4"]}
, {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-05-27T02:00:00.000Z","end":"2017-05-29T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0ipEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]}
, {"title":"Community Weekend @ Seminarhof, Germany","start":"2017-06-02T17:00:00.000Z","end":"2017-06-05T11:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6cEAB","className":"event-de","facilitators":[]}
, {"title":"Assistant Training Jun 2017 @ Scotts Valley","start":"2017-06-03T17:00:00.000Z","end":"2017-06-04T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZGEA1","className":"event-norcal","facilitators":["005i0000002E85yAAC"]}
, {"title":"Active Listening Jun 2017 @ Scotts Valley","start":"2017-06-04T17:00:00.000Z","end":"2017-06-05T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZVEA1","className":"event-norcal","facilitators":["005i0000002E85yAAC"]}
, {"title":"Reclaiming Your Authentic Self","start":"2017-06-05T03:30:00.000Z","end":"2017-06-09T18:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSiGUEA1","className":"event-norcal","facilitators":["005i0000002bTz2AAE"]}
, {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-06-08T02:30:00.000Z","end":"2017-06-08T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U7915EAB","className":"event-norcal","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-06-10T02:00:00.000Z","end":"2017-06-12T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11nEAB","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EcbeAAC"]}
, {"title":"Living at Choice, Level 3","start":"2017-06-17T02:00:00.000Z","end":"2017-06-19T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14MEAR","className":"event-norcal","facilitators":["005i0000002EGXGAA4","005i0000002EcbeAAC"]}
, {"title":"Spirituality & Sexuality, Level 4","start":"2017-06-23T17:00:00.000Z","end":"2017-06-25T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6IEAR","className":"event-de","facilitators":[]}
, {"title":"Creating Community, Level 6","start":"2017-06-23T22:30:00.000Z","end":"2017-06-25T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yrjEAB","className":"event-ca","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]}
, {"title":"Team Workshop","start":"2017-07-08T02:00:00.000Z","end":"2017-07-10T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0lfEAB","className":"event-norcal","facilitators":[]}
, {"title":"Spirituality and Sexuality, Level 4","start":"2017-07-15T02:00:00.000Z","end":"2017-07-17T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14REAR","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000001nIiIAAU"]}
, {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-07-22T02:00:00.000Z","end":"2017-07-24T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSldfEAD","className":"event-socal","facilitators":[]}
, {"title":"Living at Choice, Level 3","start":"2017-07-28T17:00:00.000Z","end":"2017-07-30T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhUEAT","className":"event-uk","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-07-29T02:00:00.000Z","end":"2017-07-31T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11sEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]}
, {"title":"Mystery Upper Level Workshop","start":"2017-08-05T02:00:00.000Z","end":"2017-08-07T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSezFEAT","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000001nIiIAAU"]}
, {"title":"Creating Community, Level 6","start":"2017-08-11T07:30:00.000Z","end":"2017-08-13T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U7392EAB","className":"event-aus","facilitators":[]}
, {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-08-12T02:00:00.000Z","end":"2017-08-14T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0j4EAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]}
, {"title":"Love is a Miracle, Level 1","start":"2017-08-19T02:00:00.000Z","end":"2017-08-21T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSldVEAT","className":"event-socal","facilitators":[]}
, {"title":"Loving Yourself, Level 2","start":"2017-08-19T02:00:00.000Z","end":"2017-08-21T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13iEAB","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000002EcbeAAC"]}
, {"title":"Loving Yourself, Level 2","start":"2017-08-25T22:00:00.000Z","end":"2017-08-27T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6nVhEAJ","className":"event-midwest","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-08-25T22:30:00.000Z","end":"2017-08-27T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzdEAB","className":"event-ca","facilitators":["005i0000002baZGAAY","005i0000001nIiIAAU"]}
, {"title":"Spirituality and Sexuality, Level 4","start":"2017-09-08T17:00:00.000Z","end":"2017-09-10T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhZEAT","className":"event-uk","facilitators":[]}
, {"title":"Being the Source of Love, Level 7","start":"2017-09-08T22:00:00.000Z","end":"2017-09-10T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0dEAF","className":"event-east","facilitators":[]}
, {"title":"Living at Choice, Level 3","start":"2017-09-09T02:00:00.000Z","end":"2017-09-11T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13xEAB","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000002E85yAAC"]}
, {"title":"Love is a Miracle, Level 1","start":"2017-09-15T17:00:00.000Z","end":"2017-09-17T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6NEAR","className":"event-de","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-09-16T02:00:00.000Z","end":"2017-09-18T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl139EAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]}
, {"title":"Radical Intimacy: Creating Vibrant Connections, Level 9","start":"2017-09-22T22:30:00.000Z","end":"2017-09-24T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yziEAB","className":"event-ca","facilitators":["005i0000002EChFAAW","005i0000002EcbeAAC"]}
, {"title":"Sacred Energy Exchange, Level 8","start":"2017-09-23T02:00:00.000Z","end":"2017-09-25T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0jnEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]}
, {"title":"Living at Choice, Level 3","start":"2017-10-06T17:00:00.000Z","end":"2017-10-08T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6SEAR","className":"event-de","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-10-06T22:00:00.000Z","end":"2017-10-08T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK09EAF","className":"event-east","facilitators":[]}
, {"title":"Spirituality and Sexuality, Level 4","start":"2017-10-07T02:00:00.000Z","end":"2017-10-09T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14lEAB","className":"event-norcal","facilitators":["005i0000002EGXGAA4","005i0000002EcbeAAC"]}
, {"title":"Assistant Training Oct 2017 @ Northern California","start":"2017-10-21T17:00:00.000Z","end":"2017-10-22T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZLEA1","className":"event-norcal","facilitators":["005i0000001nIiIAAU"]}
, {"title":"Active Listening Oct 2017 @ Northern California","start":"2017-10-22T17:00:00.000Z","end":"2017-10-23T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZaEAL","className":"event-norcal","facilitators":["005i0000001nIiIAAU"]}
, {"title":"Being the Source of Love, Level 7","start":"2017-10-27T17:00:00.000Z","end":"2017-10-29T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdheEAD","className":"event-uk","facilitators":[]}
, {"title":"Loving Yourself, Level 2","start":"2017-10-27T22:30:00.000Z","end":"2017-10-29T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yznEAB","className":"event-ca","facilitators":["005i0000002baZGAAY","005i0000002EcbeAAC"]}
, {"title":"Love is a Miracle, Level 1","start":"2017-10-28T02:00:00.000Z","end":"2017-10-30T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13EEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002E85yAAC"]}
, {"title":"Sacred Energy eXchange, Level 8","start":"2017-11-03T22:00:00.000Z","end":"2017-11-05T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0iEAF","className":"event-east","facilitators":[]}
, {"title":"Intern Workshop","start":"2017-11-04T02:00:00.000Z","end":"2017-11-06T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0lVEAR","className":"event-norcal","facilitators":[]}
, {"title":"Spirituality & Sexuality, Level 4","start":"2017-11-10T06:30:00.000Z","end":"2017-11-12T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U739REAR","className":"event-aus","facilitators":[]}
, {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-11-11T03:00:00.000Z","end":"2017-11-13T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0j9EAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002E85yAAC"]}
, {"title":"Love is a Miracle, Level 1","start":"2017-11-17T06:30:00.000Z","end":"2017-11-19T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U739WEAR","className":"event-aus","facilitators":[]}
, {"title":"Living at Choice, Level 3","start":"2017-11-17T23:30:00.000Z","end":"2017-11-19T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzsEAB","className":"event-ca","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]}
, {"title":"Loving Yourself, Level 2","start":"2017-11-18T03:00:00.000Z","end":"2017-11-20T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13nEAB","className":"event-norcal","facilitators":["005i0000001nIiIAAU","005i0000002EGDBAA4"]}
, {"title":"Community Weekend @ Seminarhof, Germany","start":"2017-11-24T18:00:00.000Z","end":"2017-11-26T12:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6mEAB","className":"event-de","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-11-25T03:00:00.000Z","end":"2017-11-27T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSldaEAD","className":"event-socal","facilitators":[]}
, {"title":"Spirituality & Sexuality, Level 4","start":"2017-12-01T23:00:00.000Z","end":"2017-12-03T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSgTREA1","className":"event-midwest","facilitators":[]}
, {"title":"Loving Yourself, Level 2","start":"2017-12-01T23:00:00.000Z","end":"2017-12-03T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0JEAV","className":"event-east","facilitators":[]}
, {"title":"Love is a Miracle, Level 1","start":"2017-12-02T03:00:00.000Z","end":"2017-12-04T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13OEAR","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]}
]
{
"regions": [
{
"id": "de",
"name": "Germany",
"site": "Seminarhof",
"lat": 52.0668495,
"lng": 7.2107544
},
{
"id": "uk",
"name": "United Kingdom",
"site": "Ammerdown",
"lat": 51.2727283,
"lng": -2.4157968
},
{
"id": "east",
"name": "US East Coast",
"site": "Earthdance",
"lat": 42.4965698,
"lng": -72.9462321
},
{
"id": "ca",
"name": "Canada",
"site": "Ecology Retreat Centre",
"lat": 43.9888232,
"lng": -80.0262646
},
{
"id": "midwest",
"name": "US Midwest",
"site": "Oakwood Retreat Center",
"lat": 40.1591988,
"lng": -85.2805088
},
{
"id": "norcal",
"name": "US Northern California",
"site": "Wildwood",
"lat": 38.5369205,
"lng": -123.0701147
},
{
"id": "socal",
"name": "US Southern California",
"site": "Joshua Tree Retreat Center",
"lat": 34.1349793,
"lng": -116.3599965
},
{
"id": "aus",
"name": "Australia",
"site": "Hunter Valley",
"lat": -32.7278575,
"lng": 151.2604738
}
],
"levels": [
{
"id": 0,
"name": "HAI Mini",
"prereq": null
},
{
"id": 1,
"name": "HAI 1",
"prereq": null
},
{
"id": 2,
"name": "HAI 2",
"prereq": 1
},
{
"id": 3,
"name": "HAI 3",
"prereq": 2
},
{
"id": 4,
"name": "HAI 4",
"prereq": 3
},
{
"id": 5,
"name": "HAI 5",
"prereq": 4
},
{
"id": 6,
"name": "HAI 6",
"prereq": 5
},
{
"id": 7,
"name": "HAI 7",
"prereq": 5
},
{
"id": 8,
"name": "HAI 8",
"prereq": 5
},
{
"id": 9,
"name": "HAI 9",
"prereq": 5
},
{
"id": "hc",
"name": "HAI Connect",
"prereq": 1
},
{
"id": "c1",
"name": "Couples 1",
"prereq": 1
},
{
"id": "c2",
"name": "Couples 2",
"prereq": 1
},
{
"id": "alt",
"name": "Active Listening Training",
"prereq": 1
},
{
"id": "at",
"name": "Assistant Training",
"prereq": 2
},
{
"id": "tw",
"name": "Team Workshop",
"prereq": "t"
},
{
"id": "iw",
"name": "Intern Workshop",
"prereq": "t"
},
{
"id": "",
"name": "Others",
"prereq": null
}
],
"facilitators": [
{
"id": "005i0000002bTz2AAE",
"name": "Anne Watts",
"img": "http://www.hai.org/angels/profilephoto/729i0000000dvaP/F"
},
{
"id": "005i0000002baZGAAY",
"name": "Donna Rengel",
"img": "http://www.hai.org/angels/profilephoto/729i00000001NpS/F"
},
{
"id": "005i0000002EChFAAW",
"name": "Felicia Cosey",
"img": "http://www.hai.org/angels/profilephoto/729i0000000dqtK/F"
},
{
"id": "005i0000001nIiIAAU",
"name": "Jason Weston",
"img": "http://www.hai.org/angels/profilephoto/729i0000000QXog/F"
},
{
"id": "005i0000002EGXGAA4",
"name": "Marci Graham",
"img": "http://www.hai.org/angels/profilephoto/729i0000000dr54/F"
},
{
"id": "005i0000002EcbeAAC",
"name": "Peter Rengel",
"img": "http://www.hai.org/angels/profilephoto/729i00000001NpN/F"
},
{
"id": "005i0000002E85yAAC",
"name": "Peter Sandhill",
"img": "http://www.hai.org/angels/profilephoto/729i0000000dvXJ/F"
},
{
"id": "005i0000002EDDGAA4",
"name": "Rich Walkden",
"img": "http://www.hai.org/angels/profilephoto/729i0000000dqwJ/F"
},
{
"id": "005i0000002EGDBAA4",
"name": "Sarah Sandhill",
"img": "http://www.hai.org/angels/profilephoto/729i00000001NpI/F"
}
],
"events": [
{
"title": "Free Mini Workshop-Theme: Creating Authentic Connections @ Tribe Healing Arts in Chicago, IL",
"start": "2016-11-02T23:45:00.000Z",
"end": "2016-11-03T02:00:00.000Z",
"region": "midwest",
"geo": "1819-21 W. Belmont Ave., Chicago, IL 60657, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Pauline Valvo"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6mdZEAR",
"id": "a0Oi000000U6mdZEAR"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2016-11-03T02:30:00.000Z",
"end": "2016-11-03T04:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0xYEAT",
"id": "a0Oi000000QS0xYEAT"
},
{
"title": "Loving Sex @ Earthdance",
"start": "2016-11-04T22:00:00.000Z",
"end": "2016-11-06T23:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": 5,
"facilitators": [
"Jason Weston",
"Marci Graham"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRuQEEA1",
"id": "a0Oi000000QRuQEEA1"
},
{
"title": "HAI 8: Sacred Energy Exchange @ NorCal - Wildwood",
"start": "2016-11-05T02:00:00.000Z",
"end": "2016-11-07T04:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 5,
"level": 8,
"facilitators": [
"Anne Watts",
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPXNEA5",
"id": "a0Oi000000OKPXNEA5"
},
{
"title": "Midwest HAI Connect in Livonia @ Livonia at Gregg Havlick's",
"start": "2016-11-10T00:00:00.000Z",
"end": "2016-11-10T02:30:00.000Z",
"region": "midwest",
"geo": "32536 Lyndon St., Livonia, MI 48154, USA",
"prereq": 1,
"level": "hc",
"facilitators": [
"Laura Machida",
"Patrick Day"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3iHfEAJ",
"id": "a0Oi000000U3iHfEAJ"
},
{
"title": "MONTHLY CONNECT @ SoCal Monthly Connect - Location TBA",
"start": "2016-11-10T03:30:00.000Z",
"end": "2016-11-10T05:30:00.000Z",
"region": "socal",
"geo": "CA, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UycIvEAJ",
"id": "a0Oi000000UycIvEAJ"
},
{
"title": "Free Mini Workshop - Theme: Awakening to Love -- A Beginning @ Marsha's home",
"start": "2016-11-10T03:30:00.000Z",
"end": "2016-11-10T05:30:00.000Z",
"region": "norcal",
"geo": "114 Los Altos Court, Santa Cruz, CA 95060, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Wahila Wilkie"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRzCHEA1",
"id": "a0Oi000000QRzCHEA1"
},
{
"title": "Free Workshop: Opening to Love @ Private Residence, Indianapolis, IN",
"start": "2016-11-10T23:45:00.000Z",
"end": "2016-11-11T02:00:00.000Z",
"region": "midwest",
"geo": "5240 Byram Ave, Indianapolis, IN 46208, USA",
"prereq": null,
"facilitators": [
"Pauline Valvo"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6mdPEAR",
"id": "a0Oi000000U6mdPEAR"
},
{
"title": "Free Mini Workshop - Theme: Finding Love – An Evening Exploration @ Songbird Healing Center, Cotati",
"start": "2016-11-11T03:30:00.000Z",
"end": "2016-11-11T05:30:00.000Z",
"region": "norcal",
"geo": "8297 Old Redwood Hwy, Cotati, CA 94931, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Phoenix Singer"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz97EAD",
"id": "a0Oi000000QRz97EAD"
},
{
"title": "HAI 8: Sacred Energy Exchange @ Australia - Hunter Valley",
"start": "2016-11-11T06:30:00.000Z",
"end": "2016-11-13T07:00:00.000Z",
"region": "aus",
"geo": "NSW Australia",
"prereq": 5,
"level": 8,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRfBsEAL",
"id": "a0Oi000000QRfBsEAL"
},
{
"title": "Free Mini Workshop @ Best Western Royal Plaza Trade Center",
"start": "2016-11-11T13:00:00.000Z",
"end": "2016-11-13T22:00:00.000Z",
"region": "east",
"geo": "181 Boston Post Rd W, Marlborough, MA 01752, USA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSfpoEAD",
"id": "a0Oi000000ZSfpoEAD"
},
{
"title": "HAI 3: Living at Choice @ Michigan at Ronora Retreat",
"start": "2016-11-12T00:00:00.000Z",
"end": "2016-11-13T23:00:00.000Z",
"region": "midwest",
"geo": "9325 Dwight Boyer Rd, Watervliet, MI 49098, USA",
"prereq": 2,
"level": 3,
"facilitators": [
"Marci Graham",
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QO21JEAT",
"id": "a0Oi000000QO21JEAT"
},
{
"title": "HAI 2: Loving Yourself @ NorCal - Camp Navarro",
"start": "2016-11-12T03:00:00.000Z",
"end": "2016-11-14T04:00:00.000Z",
"region": "norcal",
"geo": "901 Masonite Industrial Rd, Navarro, CA 95466",
"prereq": 1,
"level": 2,
"facilitators": [
"Anne Watts",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPVlEAP",
"id": "a0Oi000000OKPVlEAP"
},
{
"title": "Know your No, Vitalize Your Yes! @ Heart and Soul Center of Light",
"start": "2016-11-12T18:00:00.000Z",
"end": "2016-11-13T00:00:00.000Z",
"region": "norcal",
"geo": "1001 42nd Street, Oakland, CA 94608, USA",
"prereq": null,
"facilitators": [
"Felicia Cosey"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6lO8EAJ",
"id": "a0Oi000000U6lO8EAJ"
},
{
"title": "Ontario Mini @ Local private residence",
"start": "2016-11-12T19:00:00.000Z",
"end": "2016-11-12T22:00:00.000Z",
"region": "ca",
"geo": "Toronto, ON, Canada",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U75haEAB",
"id": "a0Oi000000U75haEAB"
},
{
"title": "Boston Area Completion Party for the Loving Sex Workshop @ Hollis NH - Sterling & Laura Eanes' Home",
"start": "2016-11-12T23:00:00.000Z",
"end": "2016-11-13T04:00:00.000Z",
"region": "east",
"geo": "207 Depot Rd, Hollis, NH 03049, USA",
"prereq": 5,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6ys8EAB",
"id": "a0Oi000000U6ys8EAB"
},
{
"title": "MONTHLY CONNECT @ Vista",
"start": "2016-11-13T01:00:00.000Z",
"end": "2016-11-13T05:00:00.000Z",
"region": "socal",
"geo": "Vista, CA, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6qa2EAB",
"id": "a0Oi000000U6qa2EAB"
},
{
"title": "Community Night in San Jose @ John N’s home",
"start": "2016-11-13T03:00:00.000Z",
"end": "2016-11-13T07:00:00.000Z",
"region": "norcal",
"geo": "2641 Media Way, San Jose, CA 95125",
"prereq": 1,
"level": "",
"facilitators": [
"John Nadler",
"Wahila Wilkie"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U78SnEAJ",
"id": "a0Oi000000U78SnEAJ"
},
{
"title": "First Sunday Marin County HAI Connect (Support Group) @ Marin Connect - Longfellow Rd",
"start": "2016-11-13T22:00:00.000Z",
"end": "2016-11-14T02:00:00.000Z",
"region": "norcal",
"geo": "60 Longfellow Road, Mill Valley, CA 94941, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3jOnEAJ",
"id": "a0Oi000000U3jOnEAJ"
},
{
"title": "Starlight in the East Bay Community Events Team Meeting @ Starlight East Bay Meeting Location",
"start": "2016-11-16T02:15:00.000Z",
"end": "2016-11-16T05:30:00.000Z",
"region": "norcal",
"geo": "East Bay, CA",
"prereq": "t",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U30dtEAB",
"id": "a0Oi000000U30dtEAB"
},
{
"title": "Third Tuesday Monthly HAI Connect (Support Group) – San Jose @ San Jose Support Group Location",
"start": "2016-11-16T03:30:00.000Z",
"end": "2016-11-16T05:30:00.000Z",
"region": "norcal",
"geo": "2641 Media Way, San Jose, CA, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRq6DEAT",
"id": "a0Oi000000QRq6DEAT"
},
{
"title": "Free Mini Workshop @ Four Points Sheraton - Emeryville",
"start": "2016-11-18T03:30:00.000Z",
"end": "2016-11-18T05:30:00.000Z",
"region": "norcal",
"geo": "1603 Powell St, Emeryville, CA 94608, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Karen Goldberg"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz5yEAD",
"id": "a0Oi000000QRz5yEAD"
},
{
"title": "HAI 1: Love is a Miracle @ Australia - Hunter Valley",
"start": "2016-11-18T06:30:00.000Z",
"end": "2016-11-20T08:00:00.000Z",
"region": "aus",
"geo": "NSW Australia",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRfBJEA1",
"id": "a0Oi000000QRfBJEA1"
},
{
"title": "HAI 3: Living at Choice @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA",
"start": "2016-11-19T03:00:00.000Z",
"end": "2016-11-21T02:00:00.000Z",
"region": "socal",
"geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA",
"prereq": 2,
"level": 3,
"facilitators": [
"Felicia Cosey",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Q17wlEAB",
"id": "a0Oi000000Q17wlEAB"
},
{
"title": "HAI 3: Living at Choice @ NorCal - Wildwood",
"start": "2016-11-19T03:00:00.000Z",
"end": "2016-11-21T04:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 2,
"level": 3,
"facilitators": [
"Peter Sandhill",
"Sarah Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPW5EAP",
"id": "a0Oi000000OKPW5EAP"
},
{
"title": "Ontario Mini @ Local private residence",
"start": "2016-11-19T19:00:00.000Z",
"end": "2016-11-19T22:30:00.000Z",
"region": "ca",
"geo": "Toronto, ON, Canada",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U71XKEAZ",
"id": "a0Oi000000U71XKEAZ"
},
{
"title": "Free Mini Workshop-Theme: Creating Love and Connection @ Ann Arbor at Crazy Wisdom",
"start": "2016-11-19T22:30:00.000Z",
"end": "2016-11-20T01:00:00.000Z",
"region": "midwest",
"geo": "114 S. Main St, Ann Arbor, MI 48104, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Dave Tuscany"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3FJ9EAN",
"id": "a0Oi000000U3FJ9EAN"
},
{
"title": "East Bay Weekend HAI Connect (Support Group) @ East Bay Connect - Cotter St Oakland",
"start": "2016-11-20T22:00:00.000Z",
"end": "2016-11-21T02:00:00.000Z",
"region": "norcal",
"geo": "10812 Cotter St, Oakland, CA 94605, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U739bEAB",
"id": "a0Oi000000U739bEAB"
},
{
"title": "Midwest HAI Connect @ Zoom Conference",
"start": "2016-11-22T02:00:00.000Z",
"end": "2016-11-22T03:00:00.000Z",
"region": "midwest",
"geo": "",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U73gXEAR",
"id": "a0Oi000000U73gXEAR"
},
{
"title": "Midwest HAI Connect in Berkley @ Berkley at Cheryl Linck's",
"start": "2016-11-23T00:00:00.000Z",
"end": "2016-11-23T02:30:00.000Z",
"region": "midwest",
"geo": "2812 Robina Ave, Berkley, MI 48072, USA",
"prereq": 1,
"level": "hc",
"facilitators": [
"Dana Piper",
"Laura Machida"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3iIEEAZ",
"id": "a0Oi000000U3iIEEAZ"
},
{
"title": "HAI 2: Loving Yourself @ Ecology Retreat Centre",
"start": "2016-11-25T23:00:00.000Z",
"end": "2016-11-27T23:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": 1,
"level": 2,
"facilitators": [
"Jason Weston",
"Marci Graham"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QOCuzEAH",
"id": "a0Oi000000QOCuzEAH"
},
{
"title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Camp Navarro",
"start": "2016-11-26T03:00:00.000Z",
"end": "2016-11-28T04:00:00.000Z",
"region": "norcal",
"geo": "901 Masonite Industrial Rd, Navarro, CA 95466",
"prereq": 4,
"level": 5,
"facilitators": [
"Anne Watts",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPWyEAP",
"id": "a0Oi000000OKPWyEAP"
},
{
"title": "Saturday Night HAI @ Berkley at Cheryl Linck's",
"start": "2016-11-26T23:30:00.000Z",
"end": "2016-11-27T04:15:00.000Z",
"region": "midwest",
"geo": "2812 Robina Ave, Berkley, MI 48072, USA",
"prereq": null,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U71xMEAR",
"id": "a0Oi000000U71xMEAR"
},
{
"title": "Saturday Night HAI @ Berkley at Cheryl Linck's",
"start": "2016-11-27T02:15:00.000Z",
"end": "2016-11-27T04:00:00.000Z",
"region": "midwest",
"geo": "2812 Robina Ave, Berkley, MI 48072, USA",
"prereq": null,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U723hEAB",
"id": "a0Oi000000U723hEAB"
},
{
"title": "HAI 2: Loving Yourself @ Earthdance",
"start": "2016-12-02T23:00:00.000Z",
"end": "2016-12-04T23:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": 1,
"level": 2,
"facilitators": [
"Felicia Cosey",
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRQAIEA5",
"id": "a0Oi000000QRQAIEA5"
},
{
"title": "HAI 1: Love is a Miracle @ Indiana at Oakwood Retreat Center",
"start": "2016-12-03T00:00:00.000Z",
"end": "2016-12-04T23:00:00.000Z",
"region": "midwest",
"geo": "3801 S 575 E Rd, Selma, IN 47383, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Marci Graham",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QOAxzEAH",
"id": "a0Oi000000QOAxzEAH"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal - Wildwood",
"start": "2016-12-03T03:00:00.000Z",
"end": "2016-12-05T04:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Anne Watts",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPTpEAP",
"id": "a0Oi000000OKPTpEAP"
},
{
"title": "South Bay Saturday Monthly HAI Connect @ Portola Valley Connect Location",
"start": "2016-12-03T22:00:00.000Z",
"end": "2016-12-04T02:00:00.000Z",
"region": "norcal",
"geo": "90 Hayfields Road, Portola Valley, CA 94028, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0yWEAT",
"id": "a0Oi000000QS0yWEAT"
},
{
"title": "Monthly Connect and Holiday Gathering-SoCal @ SoCal Event - Topanga",
"start": "2016-12-03T22:30:00.000Z",
"end": "2016-12-04T06:00:00.000Z",
"region": "socal",
"geo": "Topanga, CA, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UycJ0EAJ",
"id": "a0Oi000000UycJ0EAJ"
},
{
"title": "Community Night in Petaluma @ La Cresta House",
"start": "2016-12-04T03:00:00.000Z",
"end": "2016-12-04T06:00:00.000Z",
"region": "norcal",
"geo": "11 La Cresta Dr., Petaluma, CA 94952, USA",
"prereq": 1,
"level": "",
"facilitators": [
"Erin Gilligan",
"Jim Dawson"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U75LEEAZ",
"id": "a0Oi000000U75LEEAZ"
},
{
"title": "Free Mini Workshop - Theme: Finding Love – An Exploration @ Topanga Mini-Workshop",
"start": "2016-12-04T21:00:00.000Z",
"end": "2016-12-05T00:00:00.000Z",
"region": "socal",
"geo": "Topanga, CA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPZEA1",
"id": "a0Oi000000ZSkPZEA1"
},
{
"title": "Free Mini Workshop - Theme: Communicating With Loved Ones @ John's home",
"start": "2016-12-06T03:30:00.000Z",
"end": "2016-12-06T05:30:00.000Z",
"region": "norcal",
"geo": "2641 Media Way, San Jose, CA 95125, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Wahila Wilkie"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz9bEAD",
"id": "a0Oi000000QRz9bEAD"
},
{
"title": "NYC Area Level 2 Completion Party and Support Group @ Brooklyn NY - Murray and Lee's Home",
"start": "2016-12-08T00:00:00.000Z",
"end": "2016-12-08T03:00:00.000Z",
"region": "east",
"geo": "110 Livingston St, Apt 2G, Brooklyn, NY 11201, USA",
"prereq": 2,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6ysIEAR",
"id": "a0Oi000000U6ysIEAR"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2016-12-08T03:30:00.000Z",
"end": "2016-12-08T05:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0xdEAD",
"id": "a0Oi000000QS0xdEAD"
},
{
"title": "Livingston NJ Support Group @ Livingston NJ - Rob Blau's home",
"start": "2016-12-09T00:00:00.000Z",
"end": "2016-12-09T03:00:00.000Z",
"region": "east",
"geo": "1000 Town Center Way, Apt 310, Livingston, NJ, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSpHKEA1",
"id": "a0Oi000000ZSpHKEA1"
},
{
"title": "Free Mini Workshop @ Four Points Sheraton - Emeryville",
"start": "2016-12-09T03:30:00.000Z",
"end": "2016-12-09T05:30:00.000Z",
"region": "norcal",
"geo": "1603 Powell St, Emeryville, CA 94608, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Phoenix Singer"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz89EAD",
"id": "a0Oi000000QRz89EAD"
},
{
"title": "Free Mini Workshop-Theme: Be Love, Find Joy! @ Royal Oak at Life Learning Center",
"start": "2016-12-10T00:00:00.000Z",
"end": "2016-12-10T02:30:00.000Z",
"region": "midwest",
"geo": "3121 Rochester Road, Royal Oak, MI 48073, USA",
"prereq": null,
"level": 0,
"facilitators": [
"Dave Tuscany"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRydWEAT",
"id": "a0Oi000000QRydWEAT"
},
{
"title": "Boston Area Level 2 Completion Party @ Hollis NH - Sterling & Laura Eanes' Home",
"start": "2016-12-10T23:00:00.000Z",
"end": "2016-12-11T04:00:00.000Z",
"region": "east",
"geo": "207 Depot Rd, Hollis, NH 03049, USA",
"prereq": null,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6ysNEAR",
"id": "a0Oi000000U6ysNEAR"
},
{
"title": "MONTHLY CONNECT @ Encinitas",
"start": "2016-12-11T01:00:00.000Z",
"end": "2016-12-11T05:00:00.000Z",
"region": "socal",
"geo": "Encinitas, CA, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6qZxEAJ",
"id": "a0Oi000000U6qZxEAJ"
},
{
"title": "Holiday Party 2016 @ Mill Valley Community Center",
"start": "2016-12-11T03:00:00.000Z",
"end": "2016-12-11T07:00:00.000Z",
"region": "norcal",
"geo": "180 Camino Alto, Mill Valley, CA 94941, USA",
"prereq": null,
"level": "",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRnTXEA1",
"id": "a0Oi000000XRnTXEA1"
},
{
"title": "First Sunday Marin County HAI Connect (Support Group) @ Marin Connect - Longfellow Rd",
"start": "2016-12-11T22:00:00.000Z",
"end": "2016-12-12T02:00:00.000Z",
"region": "norcal",
"geo": "60 Longfellow Road, Mill Valley, CA 94941, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3jOsEAJ",
"id": "a0Oi000000U3jOsEAJ"
},
{
"title": "Starlight in the East Bay Community Events Team Meeting @ Starlight East Bay Meeting Location",
"start": "2016-12-14T02:15:00.000Z",
"end": "2016-12-14T05:30:00.000Z",
"region": "norcal",
"geo": "East Bay, CA",
"prereq": "t",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U30dyEAB",
"id": "a0Oi000000U30dyEAB"
},
{
"title": "Midwest HAI Connect in Livonia @ Livonia at Gregg Havlick's",
"start": "2016-12-15T00:00:00.000Z",
"end": "2016-12-15T02:30:00.000Z",
"region": "midwest",
"geo": "32536 Lyndon St., Livonia, MI 48154, USA",
"prereq": 1,
"level": "hc",
"facilitators": [
"Christine Fodor"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3iHkEAJ",
"id": "a0Oi000000U3iHkEAJ"
},
{
"title": "Free Mini Workshop - Theme: Exploring Relational Intimacy @ Culver City",
"start": "2016-12-15T03:00:00.000Z",
"end": "2016-12-15T06:00:00.000Z",
"region": "socal",
"geo": "Culver City, CA, USA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPeEAL",
"id": "a0Oi000000ZSkPeEAL"
},
{
"title": "East Bay Weekend HAI Connect (Support Group) @ East Bay Connect - Cotter St Oakland",
"start": "2016-12-18T22:00:00.000Z",
"end": "2016-12-19T02:00:00.000Z",
"region": "norcal",
"geo": "10812 Cotter St, Oakland, CA 94605, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U74j1EAB",
"id": "a0Oi000000U74j1EAB"
},
{
"title": "Midwest HAI Connect @ Zoom Conference",
"start": "2016-12-20T01:00:00.000Z",
"end": "2016-12-20T02:00:00.000Z",
"region": "midwest",
"geo": "",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSm0bEAD",
"id": "a0Oi000000ZSm0bEAD"
},
{
"title": "Third Tuesday Monthly HAI Connect (Support Group) – San Jose @ San Jose Support Group Location",
"start": "2016-12-21T03:30:00.000Z",
"end": "2016-12-21T05:30:00.000Z",
"region": "norcal",
"geo": "2641 Media Way, San Jose, CA, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRq6IEAT",
"id": "a0Oi000000QRq6IEAT"
},
{
"title": "Concert: Heather Katz & Friends @ Unity of Royal Oak",
"start": "2016-12-31T00:00:00.000Z",
"end": "2016-12-31T03:00:00.000Z",
"region": "midwest",
"geo": "2500 Crooks Rd, Royal Oak, MI 48073, USA",
"prereq": null,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSfSUEA1",
"id": "a0Oi000000ZSfSUEA1"
},
{
"title": "South Bay Saturday Monthly HAI Connect @ Portola Valley Connect Location",
"start": "2016-12-31T22:00:00.000Z",
"end": "2017-01-01T02:00:00.000Z",
"region": "norcal",
"geo": "90 Hayfields Road, Portola Valley, CA 94028, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0ybEAD",
"id": "a0Oi000000QS0ybEAD"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2017-01-05T03:30:00.000Z",
"end": "2017-01-05T05:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790gEAB",
"id": "a0Oi000000U790gEAB"
},
{
"title": "YES! Ignite your Heart's Desires @ NorCal- Saratoga Springs, Upper Lake CA",
"start": "2017-01-07T03:00:00.000Z",
"end": "2017-01-08T23:00:00.000Z",
"region": "norcal",
"geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA",
"prereq": null,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U75N0EAJ",
"id": "a0Oi000000U75N0EAJ"
},
{
"title": "HAI 4: Spirituality and Sexuality @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA",
"start": "2017-01-07T03:00:00.000Z",
"end": "2017-01-09T02:00:00.000Z",
"region": "socal",
"geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA",
"prereq": 3,
"level": 4,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6wFVEAZ",
"id": "a0Oi000000U6wFVEAZ"
},
{
"title": "MONTHLY CONNECT @ Encinitas",
"start": "2017-01-15T01:00:00.000Z",
"end": "2017-01-15T05:00:00.000Z",
"region": "socal",
"geo": "Encinitas, CA, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPUEA1",
"id": "a0Oi000000ZSkPUEA1"
},
{
"title": "Free Mini Workshop - Theme: Deepening Intimacy – Introduction to the Tools @ Santa Barbara",
"start": "2017-01-15T03:00:00.000Z",
"end": "2017-01-15T06:00:00.000Z",
"region": "socal",
"geo": "Santa Barbara, CA, USA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPjEAL",
"id": "a0Oi000000ZSkPjEAL"
},
{
"title": "Free Mini Workshop - Theme: Finding Love – An Exploration @ Encinitas",
"start": "2017-01-15T23:00:00.000Z",
"end": "2017-01-16T02:00:00.000Z",
"region": "socal",
"geo": "Encinitas, CA, USA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPyEAL",
"id": "a0Oi000000ZSkPyEAL"
},
{
"title": "Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City",
"start": "2017-01-15T23:00:00.000Z",
"end": "2017-01-16T02:00:00.000Z",
"region": "socal",
"geo": "Culver City, CA, USA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPoEAL",
"id": "a0Oi000000ZSkPoEAL"
},
{
"title": "Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City",
"start": "2017-01-15T23:00:00.000Z",
"end": "2017-01-16T02:00:00.000Z",
"region": "socal",
"geo": "Culver City, CA, USA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPtEAL",
"id": "a0Oi000000ZSkPtEAL"
},
{
"title": "Team Workshop @ NorCal- Saratoga Springs, Upper Lake CA",
"start": "2017-01-21T03:00:00.000Z",
"end": "2017-01-23T04:00:00.000Z",
"region": "norcal",
"geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA",
"prereq": "t",
"level": "tw",
"facilitators": [
"Anne Watts",
"Donna Rengel",
"Felicia Cosey",
"Jason Weston",
"Marci Graham",
"Peter Rengel",
"Peter Sandhill",
"Sarah Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0lpEAB",
"id": "a0Oi000000Wl0lpEAB"
},
{
"title": "Team Workshop @ Germany - Seminarhof",
"start": "2017-01-27T18:00:00.000Z",
"end": "2017-01-29T16:00:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": "t",
"level": "tw",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j5tEAB",
"id": "a0Oi000000U6j5tEAB"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal- Saratoga Springs, Upper Lake CA",
"start": "2017-01-28T03:00:00.000Z",
"end": "2017-01-30T02:00:00.000Z",
"region": "norcal",
"geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Felicia Cosey",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11JEAR",
"id": "a0Oi000000Wl11JEAR"
},
{
"title": "Free Mini Workshop - Theme: Exploring Relational Intimacy @ Vista",
"start": "2017-01-29T23:00:00.000Z",
"end": "2017-01-30T02:00:00.000Z",
"region": "socal",
"geo": "Vista, CA, USA",
"prereq": null,
"level": 0,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkQ3EAL",
"id": "a0Oi000000ZSkQ3EAL"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2017-02-02T03:30:00.000Z",
"end": "2017-02-02T05:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790lEAB",
"id": "a0Oi000000U790lEAB"
},
{
"title": "Team Workshop @ UK Earth Spirit",
"start": "2017-02-10T18:00:00.000Z",
"end": "2016-02-12T18:30:00.000Z",
"region": "uk",
"geo": "Peak Lane, Compton Dundon, Somerton, Somerset, TA11 6PE, UK",
"prereq": "t",
"level": "tw",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhKEAT",
"id": "a0Oi000000XRdhKEAT"
},
{
"title": "Team Workshop @ NSW Sydney",
"start": "2017-02-10T23:00:00.000Z",
"end": "2017-02-12T05:00:00.000Z",
"region": "aus",
"geo": "Sydney, NSW Australia",
"prereq": "t",
"level": "tw",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U72ArEAJ",
"id": "a0Oi000000U72ArEAJ"
},
{
"title": "HAI 1: Love is a Miracle @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA",
"start": "2017-02-11T03:00:00.000Z",
"end": "2017-02-13T02:00:00.000Z",
"region": "socal",
"geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6wGiEAJ",
"id": "a0Oi000000U6wGiEAJ"
},
{
"title": "Igniting Your Love: A Couples Weekend Retreat for Deepening Intimacy and Communication @ NorCal- Saratoga Springs, Upper Lake CA",
"start": "2017-02-11T03:00:00.000Z",
"end": "2017-02-13T02:00:00.000Z",
"region": "norcal",
"geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA",
"prereq": 1,
"level": "c1",
"facilitators": [
"Peter Sandhill",
"Sarah Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0kWEAR",
"id": "a0Oi000000Wl0kWEAR"
},
{
"title": "HAI 2: Loving Yourself @ NorCal- Saratoga Springs, Upper Lake CA",
"start": "2017-02-18T03:00:00.000Z",
"end": "2017-02-20T02:00:00.000Z",
"region": "norcal",
"geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA",
"prereq": 1,
"level": 2,
"facilitators": [
"Anne Watts",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13YEAR",
"id": "a0Oi000000Wl13YEAR"
},
{
"title": "HAI 6: Creating Community @ NorCal - Wildwood",
"start": "2017-02-25T03:00:00.000Z",
"end": "2017-02-27T02:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 5,
"level": 6,
"facilitators": [
"Felicia Cosey",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0jJEAR",
"id": "a0Oi000000Wl0jJEAR"
},
{
"title": "Assistant Training Feb 2017 @ San Anselmo",
"start": "2017-02-25T18:00:00.000Z",
"end": "2017-02-26T02:30:00.000Z",
"region": "norcal",
"geo": "San Anselmo, CA, USA",
"prereq": 2,
"level": "at",
"facilitators": [
"Donna Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZBEA1",
"id": "a0Oi000000ZShZBEA1"
},
{
"title": "Active Listening Feb 2017 @ San Anselmo",
"start": "2017-02-26T18:00:00.000Z",
"end": "2017-02-27T02:30:00.000Z",
"region": "norcal",
"geo": "San Anselmo, CA, USA",
"prereq": 1,
"level": "alt",
"facilitators": [
"Donna Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZQEA1",
"id": "a0Oi000000ZShZQEA1"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2017-03-02T03:30:00.000Z",
"end": "2017-03-02T05:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790qEAB",
"id": "a0Oi000000U790qEAB"
},
{
"title": "Team Workshop @ Earthdance",
"start": "2017-03-03T22:00:00.000Z",
"end": "2017-03-05T21:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": "t",
"level": "tw",
"facilitators": [
"Felicia Cosey",
"Rich Walkden"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0TEAV",
"id": "a0Oi000000UyK0TEAV"
},
{
"title": "HAI 2: Loving Yourself @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA",
"start": "2017-03-04T03:00:00.000Z",
"end": "2017-03-06T02:00:00.000Z",
"region": "socal",
"geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA",
"prereq": 1,
"level": 2,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6wHMEAZ",
"id": "a0Oi000000U6wHMEAZ"
},
{
"title": "HAI 1: Love is a Miracle @ Australia - Hunter Valley",
"start": "2017-03-10T06:30:00.000Z",
"end": "2017-03-12T08:00:00.000Z",
"region": "aus",
"geo": "NSW Australia",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U72ADEAZ",
"id": "a0Oi000000U72ADEAZ"
},
{
"title": "HAI 1: Love is a Miracle @ Germany - Seminarhof",
"start": "2017-03-17T18:00:00.000Z",
"end": "2017-03-19T17:30:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j5yEAB",
"id": "a0Oi000000U6j5yEAB"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal - Wildwood",
"start": "2017-03-18T02:00:00.000Z",
"end": "2017-03-20T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Felicia Cosey",
"Rich Walkden"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11YEAR",
"id": "a0Oi000000Wl11YEAR"
},
{
"title": "HAI 1: Love is a Miracle @ UK Oxon Hoath",
"start": "2017-03-31T16:00:00.000Z",
"end": "2017-04-02T17:00:00.000Z",
"region": "uk",
"geo": "Oxenhoath Road, off Carpenters Lane, Hadlow, TN11 9SS, UK",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhFEAT",
"id": "a0Oi000000XRdhFEAT"
},
{
"title": "HAI 3: Living at Choice @ NorCal - Wildwood",
"start": "2017-04-01T02:00:00.000Z",
"end": "2017-04-03T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 2,
"level": 3,
"facilitators": [
"Donna Rengel",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl147EAB",
"id": "a0Oi000000Wl147EAB"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2017-04-06T02:30:00.000Z",
"end": "2017-04-06T04:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790vEAB",
"id": "a0Oi000000U790vEAB"
},
{
"title": "HAI 5: The Dance Between Surrender & Control @ Earthdance",
"start": "2017-04-07T22:00:00.000Z",
"end": "2017-04-09T22:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": 4,
"level": 5,
"facilitators": [
"Peter Rengel",
"Sarah Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0OEAV",
"id": "a0Oi000000UyK0OEAV"
},
{
"title": "HAI 7: Being the Source of Love @ NorCal - Wildwood",
"start": "2017-04-08T02:00:00.000Z",
"end": "2017-04-10T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 5,
"level": 7,
"facilitators": [
"Donna Rengel",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0jYEAR",
"id": "a0Oi000000Wl0jYEAR"
},
{
"title": "EC Assistant Training Day @ Hollis NH - Sterling & Laura Eanes' Home",
"start": "2017-04-15T14:00:00.000Z",
"end": "2017-04-15T22:00:00.000Z",
"region": "east",
"geo": "207 Depot Rd, Hollis, NH 03049, USA",
"prereq": 2,
"level": "at",
"facilitators": [
"Karen Glover",
"Lydia Carbone",
"Robyn Vogel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSmmDEAT",
"id": "a0Oi000000ZSmmDEAT"
},
{
"title": "HAI 6: Creating Community @ Germany - Seminarhof",
"start": "2017-04-21T17:00:00.000Z",
"end": "2017-04-23T16:30:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": 5,
"level": 6,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j68EAB",
"id": "a0Oi000000U6j68EAB"
},
{
"title": "HAI 1: Love is a Miracle @ Ecology Retreat Centre",
"start": "2017-04-21T22:30:00.000Z",
"end": "2017-04-23T22:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": null,
"level": 1,
"facilitators": [
"Jason Weston",
"Sarah Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzEEAR",
"id": "a0Oi000000U6yzEEAR"
},
{
"title": "HAI 4: Spirituality and Sexuality @ NorCal - Wildwood",
"start": "2017-04-29T02:00:00.000Z",
"end": "2017-05-01T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 3,
"level": 4,
"facilitators": [
"Anne Watts",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14gEAB",
"id": "a0Oi000000Wl14gEAB"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2017-05-04T02:30:00.000Z",
"end": "2017-05-04T04:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U7910EAB",
"id": "a0Oi000000U7910EAB"
},
{
"title": "HAI 1: Love is a Miracle @ Earthdance",
"start": "2017-05-05T22:00:00.000Z",
"end": "2017-05-07T22:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Donna Rengel",
"Rich Walkden"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0EEAV",
"id": "a0Oi000000UyK0EEAV"
},
{
"title": "Team Workshop Ontario @ Ecology Retreat Centre",
"start": "2017-05-05T22:30:00.000Z",
"end": "2017-05-07T20:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": "t",
"level": "tw",
"facilitators": [
"Felicia Cosey"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzOEAR",
"id": "a0Oi000000U6yzOEAR"
},
{
"title": "Loving Sex @ NorCal - Wildwood",
"start": "2017-05-06T02:00:00.000Z",
"end": "2017-05-08T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 5,
"facilitators": [
"Jason Weston",
"Marci Graham"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6npcEAB",
"id": "a0Oi000000U6npcEAB"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal - Happy Valley",
"start": "2017-05-06T02:00:00.000Z",
"end": "2017-05-08T01:00:00.000Z",
"region": "norcal",
"geo": "2159 Branciforte Drive, Santa Cruz, CA 95065, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Anne Watts",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11dEAB",
"id": "a0Oi000000Wl11dEAB"
},
{
"title": "HAI 2: Loving Yourself @ UK Ammerdown",
"start": "2017-05-12T17:00:00.000Z",
"end": "2017-05-14T17:00:00.000Z",
"region": "uk",
"geo": "The Ammerdown Centre, Ammerdown Park, Radstock, Somerset, BA3 5SW, UK",
"prereq": 1,
"level": 2,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhPEAT",
"id": "a0Oi000000XRdhPEAT"
},
{
"title": "HAI 2: Loving Yourself @ Germany - Seminarhof",
"start": "2017-05-19T17:00:00.000Z",
"end": "2017-05-21T16:30:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": 1,
"level": 2,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6DEAR",
"id": "a0Oi000000U6j6DEAR"
},
{
"title": "HAI 2: Loving Yourself @ NorCal - Wildwood",
"start": "2017-05-20T02:00:00.000Z",
"end": "2017-05-22T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 1,
"level": 2,
"facilitators": [
"Felicia Cosey",
"Rich Walkden"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13dEAB",
"id": "a0Oi000000Wl13dEAB"
},
{
"title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Wildwood",
"start": "2017-05-27T02:00:00.000Z",
"end": "2017-05-29T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 4,
"level": 5,
"facilitators": [
"Anne Watts",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0ipEAB",
"id": "a0Oi000000Wl0ipEAB"
},
{
"title": "Community Weekend @ Germany - Seminarhof",
"start": "2017-06-02T17:00:00.000Z",
"end": "2017-06-05T11:00:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": 1,
"level": "",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6cEAB",
"id": "a0Oi000000U6j6cEAB"
},
{
"title": "Assistant Training Jun 2017 @ Scotts Valley",
"start": "2017-06-03T17:00:00.000Z",
"end": "2017-06-04T01:30:00.000Z",
"region": "norcal",
"geo": "Scotts Valley, CA, USA",
"prereq": 2,
"level": "at",
"facilitators": [
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZGEA1",
"id": "a0Oi000000ZShZGEA1"
},
{
"title": "Active Listening Jun 2017 @ Scotts Valley",
"start": "2017-06-04T17:00:00.000Z",
"end": "2017-06-05T01:30:00.000Z",
"region": "norcal",
"geo": "Scotts Valley, CA, USA",
"prereq": 1,
"level": "alt",
"facilitators": [
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZVEA1",
"id": "a0Oi000000ZShZVEA1"
},
{
"title": "Reclaiming Your Authentic Self @ Esalen Institute",
"start": "2017-06-05T03:30:00.000Z",
"end": "2017-06-09T18:30:00.000Z",
"region": "norcal",
"geo": "55000 Highway 1, Big Sur, CA 93920, USA",
"prereq": null,
"facilitators": [
"Anne Watts"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSiGUEA1",
"id": "a0Oi000000ZSiGUEA1"
},
{
"title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location",
"start": "2017-06-08T02:30:00.000Z",
"end": "2017-06-08T04:30:00.000Z",
"region": "norcal",
"geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA",
"prereq": 1,
"level": "hc",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U7915EAB",
"id": "a0Oi000000U7915EAB"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal - Wildwood",
"start": "2017-06-10T02:00:00.000Z",
"end": "2017-06-12T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Felicia Cosey",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11nEAB",
"id": "a0Oi000000Wl11nEAB"
},
{
"title": "HAI 3: Living at Choice @ NorCal - Wildwood",
"start": "2017-06-17T02:00:00.000Z",
"end": "2017-06-19T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 2,
"level": 3,
"facilitators": [
"Marci Graham",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14MEAR",
"id": "a0Oi000000Wl14MEAR"
},
{
"title": "HAI 4: Spirituality & Sexuality @ Germany - Seminarhof",
"start": "2017-06-23T17:00:00.000Z",
"end": "2017-06-25T16:30:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": 3,
"level": 4,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6IEAR",
"id": "a0Oi000000U6j6IEAR"
},
{
"title": "HAI 6: Creating Community @ Ecology Retreat Centre",
"start": "2017-06-23T22:30:00.000Z",
"end": "2017-06-25T22:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": 5,
"level": 6,
"facilitators": [
"Anne Watts",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yrjEAB",
"id": "a0Oi000000U6yrjEAB"
},
{
"title": "Team Workshop @ NorCal - Wildwood",
"start": "2017-07-08T02:00:00.000Z",
"end": "2017-07-10T03:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": "t",
"level": "tw",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0lfEAB",
"id": "a0Oi000000Wl0lfEAB"
},
{
"title": "HAI 4: Spirituality and Sexuality @ NorCal - Wildwood",
"start": "2017-07-15T02:00:00.000Z",
"end": "2017-07-17T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 3,
"level": 4,
"facilitators": [
"Donna Rengel",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14REAR",
"id": "a0Oi000000Wl14REAR"
},
{
"title": "HAI 5: The Dance Between Surrender & Control @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA",
"start": "2017-07-22T02:00:00.000Z",
"end": "2017-07-24T01:00:00.000Z",
"region": "socal",
"geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA",
"prereq": 4,
"level": 5,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSldfEAD",
"id": "a0Oi000000ZSldfEAD"
},
{
"title": "HAI 3: Living at Choice @ UK Oxon Hoath",
"start": "2017-07-28T17:00:00.000Z",
"end": "2017-07-30T17:00:00.000Z",
"region": "uk",
"geo": "Oxenhoath Road, off Carpenters Lane, Hadlow, TN11 9SS, UK",
"prereq": 2,
"level": 3,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhUEAT",
"id": "a0Oi000000XRdhUEAT"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal - Wildwood",
"start": "2017-07-29T02:00:00.000Z",
"end": "2017-07-31T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Anne Watts",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11sEAB",
"id": "a0Oi000000Wl11sEAB"
},
{
"title": "Mystery Upper Level Workshop @ NorCal - Wildwood",
"start": "2017-08-05T02:00:00.000Z",
"end": "2017-08-07T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 5,
"facilitators": [
"Felicia Cosey",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSezFEAT",
"id": "a0Oi000000ZSezFEAT"
},
{
"title": "HAI 6: Creating Community @ Australia - Hunter Valley",
"start": "2017-08-11T07:30:00.000Z",
"end": "2017-08-13T08:00:00.000Z",
"region": "aus",
"geo": "NSW Australia",
"prereq": 5,
"level": 6,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U7392EAB",
"id": "a0Oi000000U7392EAB"
},
{
"title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Wildwood",
"start": "2017-08-12T02:00:00.000Z",
"end": "2017-08-14T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 4,
"level": 5,
"facilitators": [
"Anne Watts",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0j4EAB",
"id": "a0Oi000000Wl0j4EAB"
},
{
"title": "HAI 1: Love is a Miracle @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA",
"start": "2017-08-19T02:00:00.000Z",
"end": "2017-08-21T01:00:00.000Z",
"region": "socal",
"geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSldVEAT",
"id": "a0Oi000000ZSldVEAT"
},
{
"title": "HAI 2: Loving Yourself @ NorCal - Wildwood",
"start": "2017-08-19T02:00:00.000Z",
"end": "2017-08-21T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 1,
"level": 2,
"facilitators": [
"Donna Rengel",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13iEAB",
"id": "a0Oi000000Wl13iEAB"
},
{
"title": "HAI 2: Loving Yourself @ Michigan at Ronora Retreat",
"start": "2017-08-25T22:00:00.000Z",
"end": "2017-08-27T22:00:00.000Z",
"region": "midwest",
"geo": "9325 Dwight Boyer Rd, Watervliet, MI 49098, USA",
"prereq": 1,
"level": 2,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6nVhEAJ",
"id": "a0Oi000000U6nVhEAJ"
},
{
"title": "HAI 1: Love is a Miracle @ Ecology Retreat Centre",
"start": "2017-08-25T22:30:00.000Z",
"end": "2017-08-27T22:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": null,
"level": 1,
"facilitators": [
"Donna Rengel",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzdEAB",
"id": "a0Oi000000U6yzdEAB"
},
{
"title": "HAI 4: Spirituality and Sexuality @ UK Oxon Hoath",
"start": "2017-09-08T17:00:00.000Z",
"end": "2017-09-10T17:00:00.000Z",
"region": "uk",
"geo": "Oxenhoath Road, off Carpenters Lane, Hadlow, TN11 9SS, UK",
"prereq": 3,
"level": 4,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhZEAT",
"id": "a0Oi000000XRdhZEAT"
},
{
"title": "HAI 7: Being the Source of Love @ Earthdance",
"start": "2017-09-08T22:00:00.000Z",
"end": "2017-09-10T22:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": 5,
"level": 7,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0dEAF",
"id": "a0Oi000000UyK0dEAF"
},
{
"title": "HAI 3: Living at Choice @ NorCal - Wildwood",
"start": "2017-09-09T02:00:00.000Z",
"end": "2017-09-11T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 2,
"level": 3,
"facilitators": [
"Donna Rengel",
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13xEAB",
"id": "a0Oi000000Wl13xEAB"
},
{
"title": "HAI 1: Love is a Miracle @ Germany - Seminarhof",
"start": "2017-09-15T17:00:00.000Z",
"end": "2017-09-17T16:30:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6NEAR",
"id": "a0Oi000000U6j6NEAR"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal - Happy Valley",
"start": "2017-09-16T02:00:00.000Z",
"end": "2017-09-18T01:00:00.000Z",
"region": "norcal",
"geo": "2159 Branciforte Drive, Santa Cruz, CA 95065, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Anne Watts",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl139EAB",
"id": "a0Oi000000Wl139EAB"
},
{
"title": "HAI 9: Radical Intimacy: Creating Vibrant Connections @ Ecology Retreat Centre",
"start": "2017-09-22T22:30:00.000Z",
"end": "2017-09-24T22:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": 5,
"level": 9,
"facilitators": [
"Felicia Cosey",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yziEAB",
"id": "a0Oi000000U6yziEAB"
},
{
"title": "HAI 8: Sacred Energy Exchange @ NorCal - Wildwood",
"start": "2017-09-23T02:00:00.000Z",
"end": "2017-09-25T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 5,
"level": 8,
"facilitators": [
"Anne Watts",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0jnEAB",
"id": "a0Oi000000Wl0jnEAB"
},
{
"title": "HAI 3: Living at Choice @ Germany - Seminarhof",
"start": "2017-10-06T17:00:00.000Z",
"end": "2017-10-08T16:30:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": 2,
"level": 3,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6SEAR",
"id": "a0Oi000000U6j6SEAR"
},
{
"title": "HAI 1: Love is a Miracle @ Earthdance",
"start": "2017-10-06T22:00:00.000Z",
"end": "2017-10-08T22:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK09EAF",
"id": "a0Oi000000UyK09EAF"
},
{
"title": "HAI 4: Spirituality and Sexuality @ NorCal - Wildwood",
"start": "2017-10-07T02:00:00.000Z",
"end": "2017-10-09T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 3,
"level": 4,
"facilitators": [
"Marci Graham",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14lEAB",
"id": "a0Oi000000Wl14lEAB"
},
{
"title": "Assistant Training Oct 2017 @ Northern California - TBD",
"start": "2017-10-21T17:00:00.000Z",
"end": "2017-10-22T01:30:00.000Z",
"region": "norcal",
"geo": "NorCal, USA",
"prereq": 2,
"level": "at",
"facilitators": [
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZLEA1",
"id": "a0Oi000000ZShZLEA1"
},
{
"title": "Active Listening Oct 2017 @ Northern California - TBD",
"start": "2017-10-22T17:00:00.000Z",
"end": "2017-10-23T01:30:00.000Z",
"region": "norcal",
"geo": "NorCal, USA",
"prereq": 1,
"level": "alt",
"facilitators": [
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZaEAL",
"id": "a0Oi000000ZShZaEAL"
},
{
"title": "HAI 7: Being the Source of Love @ UK Ammerdown",
"start": "2017-10-27T17:00:00.000Z",
"end": "2017-10-29T17:00:00.000Z",
"region": "uk",
"geo": "The Ammerdown Centre, Ammerdown Park, Radstock, Somerset, BA3 5SW, UK",
"prereq": 5,
"level": 7,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdheEAD",
"id": "a0Oi000000XRdheEAD"
},
{
"title": "HAI 2: Loving Yourself @ Ecology Retreat Centre",
"start": "2017-10-27T22:30:00.000Z",
"end": "2017-10-29T22:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": 1,
"level": 2,
"facilitators": [
"Donna Rengel",
"Peter Rengel"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yznEAB",
"id": "a0Oi000000U6yznEAB"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal - Wildwood",
"start": "2017-10-28T02:00:00.000Z",
"end": "2017-10-30T01:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Felicia Cosey",
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13EEAR",
"id": "a0Oi000000Wl13EEAR"
},
{
"title": "HAI 8: Sacred Energy eXchange @ Earthdance",
"start": "2017-11-03T22:00:00.000Z",
"end": "2017-11-05T23:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": 5,
"level": 8,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0iEAF",
"id": "a0Oi000000UyK0iEAF"
},
{
"title": "Intern Workshop @ NorCal - Wildwood",
"start": "2017-11-04T02:00:00.000Z",
"end": "2017-11-06T02:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": "t",
"level": "iw",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0lVEAR",
"id": "a0Oi000000Wl0lVEAR"
},
{
"title": "HAI 4: Spirituality & Sexuality @ Australia - Hunter Valley",
"start": "2017-11-10T06:30:00.000Z",
"end": "2017-11-12T07:00:00.000Z",
"region": "aus",
"geo": "NSW Australia",
"prereq": 3,
"level": 4,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U739REAR",
"id": "a0Oi000000U739REAR"
},
{
"title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Wildwood",
"start": "2017-11-11T03:00:00.000Z",
"end": "2017-11-13T02:00:00.000Z",
"region": "norcal",
"geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA",
"prereq": 4,
"level": 5,
"facilitators": [
"Anne Watts",
"Peter Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0j9EAB",
"id": "a0Oi000000Wl0j9EAB"
},
{
"title": "HAI 1: Love is a Miracle @ Australia - Hunter Valley",
"start": "2017-11-17T06:30:00.000Z",
"end": "2017-11-19T08:00:00.000Z",
"region": "aus",
"geo": "NSW Australia",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U739WEAR",
"id": "a0Oi000000U739WEAR"
},
{
"title": "HAI 3: Living at Choice @ Ecology Retreat Centre",
"start": "2017-11-17T23:30:00.000Z",
"end": "2017-11-19T23:00:00.000Z",
"region": "ca",
"geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada",
"prereq": 2,
"level": 3,
"facilitators": [
"Anne Watts",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzsEAB",
"id": "a0Oi000000U6yzsEAB"
},
{
"title": "HAI 2: Loving Yourself @ NorCal- Saratoga Springs, Upper Lake CA",
"start": "2017-11-18T03:00:00.000Z",
"end": "2017-11-20T02:00:00.000Z",
"region": "norcal",
"geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA",
"prereq": 1,
"level": 2,
"facilitators": [
"Jason Weston",
"Sarah Sandhill"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13nEAB",
"id": "a0Oi000000Wl13nEAB"
},
{
"title": "Community Weekend @ Germany - Seminarhof",
"start": "2017-11-24T18:00:00.000Z",
"end": "2017-11-26T12:00:00.000Z",
"region": "de",
"geo": "Heven 54, 48624 Schöppingen, Germany",
"prereq": 1,
"level": "",
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6mEAB",
"id": "a0Oi000000U6j6mEAB"
},
{
"title": "HAI 1: Love is a Miracle @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA",
"start": "2017-11-25T03:00:00.000Z",
"end": "2017-11-27T02:00:00.000Z",
"region": "socal",
"geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA",
"prereq": null,
"level": 1,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSldaEAD",
"id": "a0Oi000000ZSldaEAD"
},
{
"title": "HAI 4: Spirituality & Sexuality @ Indiana at Oakwood Retreat Center",
"start": "2017-12-01T23:00:00.000Z",
"end": "2017-12-03T23:00:00.000Z",
"region": "midwest",
"geo": "3801 S 575 E Rd, Selma, IN 47383, USA",
"prereq": 3,
"level": 4,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSgTREA1",
"id": "a0Oi000000ZSgTREA1"
},
{
"title": "HAI 2: Loving Yourself @ Earthdance",
"start": "2017-12-01T23:00:00.000Z",
"end": "2017-12-03T23:30:00.000Z",
"region": "east",
"geo": "252 Prospect St, Plainfield, MA 01070, USA",
"prereq": 1,
"level": 2,
"facilitators": [],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0JEAV",
"id": "a0Oi000000UyK0JEAV"
},
{
"title": "HAI 1: Love is a Miracle @ NorCal- Saratoga Springs, Upper Lake CA",
"start": "2017-12-02T03:00:00.000Z",
"end": "2017-12-04T02:00:00.000Z",
"region": "norcal",
"geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA",
"prereq": null,
"level": 1,
"facilitators": [
"Anne Watts",
"Jason Weston"
],
"url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13OEAR",
"id": "a0Oi000000Wl13OEAR"
}
]
}
<!doctype html>
<html lang="en"><head>
<meta name="referrer" content="no-referrer">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script>(function(l){for (var u in l)if(l[u])document.write('<script src="'+u+'"><\/script>')})(
{"https://cdnjs.cloudflare.com/ajax/libs/promiz/1.0.6/promiz.min.js":typeof Promise !== 'function' || !Promise.resolve || Object.prototype.toString.call(Promise.resolve()) !== '[object Promise]'
,"https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js":typeof fetch!=='function'
});if (!Array.from) Array.from = function(a) {
for (var l = a.length, A = new Array(l), i = 0; i < l; i++)
A[i] = a[i];
return A;
};if (![].find) Array.prototype.find = function(f) {
for (var i = 0; i < this.length; i++)
if (f(this[i])) return this[i];
};</script>
<style>
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 60px;
background-color: #f5f5f5;
}
body > .container {
padding-top: 60px;
}
.dropdown-menu > li > label {
display: block;
padding: 3px 10px;
clear: both;
font-weight: 400;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
}
.navbar-inverse .dropdown-menu > li > label {
color: #ccc;
}
ul {
padding-left: 0;
}
</style></head><body>
<nav class="navbar navbar-default navbar-fixed-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<button aria-controls="navbar" aria-expanded="false" class="navbar-toggle collapsed" data-target="#navbar" data-toggle="collapse" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" id="dlc">Calendar of HAI Events by…</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<ul class="nav navbar-nav">
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Regions
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="byregion"></ul>
</li>
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Prerequisites
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="byprereq"></ul>
</li>
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Levels
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="bylevels"></ul>
</li>
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Facilitators
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="byleader"></ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<ul id="events"></ul>
</div>
<footer class="footer" id="fetch">
<div class="container">
<p class="text-muted">
Tip: click the "Calendar" link to save your event selection as a calendar to your device's calendar
</p>
</div>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="events.es5.js"></script>
</body></html>
{"005i0000002bTz2AAE":{"name":"Anne Watts","id":"005i0000002bTz2AAE","img":"/angels/profilephoto/729i0000000dvaP/F","facilitator":true}
,"005i0000002baZGAAY":{"name":"Donna Rengel","id":"005i0000002baZGAAY","img":"/angels/profilephoto/729i00000001NpS/F","facilitator":true}
,"005i0000002EChFAAW":{"name":"Felicia Cosey","id":"005i0000002EChFAAW","img":"/angels/profilephoto/729i0000000dqtK/F","facilitator":true}
,"005i0000001nIiIAAU":{"name":"Jason Weston","id":"005i0000001nIiIAAU","img":"/angels/profilephoto/729i0000000QXog/F","facilitator":true}
,"005i0000002EGXGAA4":{"name":"Marci Graham","id":"005i0000002EGXGAA4","img":"/angels/profilephoto/729i0000000dr54/F","facilitator":true}
,"005i0000002EcbeAAC":{"name":"Peter Rengel","id":"005i0000002EcbeAAC","img":"/angels/profilephoto/729i00000001NpN/F","facilitator":true}
,"005i0000002E85yAAC":{"name":"Peter Sandhill","id":"005i0000002E85yAAC","img":"/angels/profilephoto/729i0000000dvXJ/F","facilitator":true}
,"005i0000002EDDGAA4":{"name":"Rich Walkden","id":"005i0000002EDDGAA4","img":"/angels/profilephoto/729i0000000dqwJ/F","facilitator":true}
,"005i0000002EGDBAA4":{"name":"Sarah Sandhill","id":"005i0000002EGDBAA4","img":"/angels/profilephoto/729i00000001NpI/F","facilitator":true}
,"005i0000002EAGMAA4":{"name":"Pauline Valvo","id":"005i0000002EAGMAA4","img":"/angels/profilephoto/729i0000000QStl/F"}
,"005i0000002d8AWAAY":{"name":"Laura Machida","id":"005i0000002d8AWAAY","img":"/angels/profilephoto/729i0000000eCCr/F"}
,"005i0000002d91XAAQ":{"name":"Patrick Day","id":"005i0000002d91XAAQ","img":"/angels/profilephoto/005/F"}
,"005i0000002bBetAAE":{"name":"Wahila Wilkie","id":"005i0000002bBetAAE","img":"/angels/profilephoto/729i0000000fysF/F"}
,"005i0000002Drc7AAC":{"name":"Phoenix Singer","id":"005i0000002Drc7AAC","img":"/angels/profilephoto/729i0000000QZOz/F"}
,"005i0000002bbv0AAA":{"name":"John Nadler","id":"005i0000002bbv0AAA","img":"/angels/profilephoto/729i0000000eFky/F"}
,"005i0000002D4iTAAS":{"name":"Karen Goldberg","id":"005i0000002D4iTAAS","img":"/angels/profilephoto/729i0000000doQv/F"}
,"005i0000002d8UfAAI":{"name":"Dave Tuscany","id":"005i0000002d8UfAAI","img":"/angels/profilephoto/729i0000000e1E5/F"}
,"005i0000002cJZ9AAM":{"name":"Dana Piper","id":"005i0000002cJZ9AAM","img":"/angels/profilephoto/729i0000000QT8R/F"}
,"005i0000002EbiSAAS":{"name":"Erin Gilligan","id":"005i0000002EbiSAAS","img":"/angels/profilephoto/729i0000000dveJ/F"}
,"005i0000002bWLFAA2":{"name":"Jim Dawson","id":"005i0000002bWLFAA2","img":"/angels/profilephoto/729i0000000QYCO/F"}
,"005i0000003TBx7AAG":{"name":"Christine Fodor","id":"005i0000003TBx7AAG","img":"/angels/profilephoto/729i0000000eGME/F"}
,"005i0000002bqxPAAQ":{"name":"Karen Glover","id":"005i0000002bqxPAAQ","img":"/angels/profilephoto/005/F"}
,"005i0000002d1OnAAI":{"name":"Lydia Carbone","id":"005i0000002d1OnAAI","img":"/angels/profilephoto/729i0000000e3ko/F"}
,"005i0000002cORnAAM":{"name":"Robyn Vogel","id":"005i0000002cORnAAM","img":"/angels/profilephoto/729i0000000MDGX/F"}
}
// delete?!
let old_filterEvents = (regions) => {
const visibleRegions = regions.map(({region}) => region).filter(region =>
(document.getElementById(region) || {}).checked
);
const prereq = Array.from(document.querySelectorAll('input[name=prereq]')).find(
({ checked }) => checked
).value || null;
const level = {}, leader = {};
Array.from(document.querySelectorAll('#bylevels input')).forEach(
({ value, checked }) => level[value] = checked
);
Array.from(document.querySelectorAll('#byleader input')).forEach(
({ value, checked }) => leader[value] = checked
);
const otherFacs = byLeader.querySelector('input[value=""]').checked;
const shownEvents = [];
console.log('lst', eventLst, eventLst && eventLst.children.length);
Array.from(eventLst.children).forEach((e, n) => {
const event = events[n];
const showRegion = visibleRegions.indexOf(event.region) !== -1;
const showPrereq = event.prereq == prereq || prereq == '*';
const showLevels = level[event.level === 0 ? 0 : event.level || ''];
const facs = event.facilitators;
const picks = facs.filter(id => leader[id]);
const mainfacs = facs.filter(id => id && (id in leader));
const showLeader = !!picks.length || otherFacs &&
(!event.facilitators.length || picks.length !== mainfacs.length);
const show = showRegion && showPrereq && showLevels && showLeader;
e.style.display = show ? 'block' : 'none';
console.info(n, show ? 'show' : 'hide');
if (show) shownEvents.push(event);
});
// update ical link
const showDLC = !!shownEvents.length;
document.querySelector('#fetch').style.display = showDLC ? 'block' : 'none';
if (showDLC) {
const dlc = document.getElementById('dlc');
const text = dlc.textContent, {className} = dlc;
let name = `2017 HAI events in ${visibleRegions.join('/')}`;
let filename = `2017-hai-events-${visibleRegions.join('+')}`;
if (prereq !== '*') {
filename += '-' + (prereq ? prereq.replace(/\s+/g, '') : 'public');
let desc = document.querySelector(`#p${prereq}`);
if (desc) desc = desc.nextSibling.nodeValue.trim();
name += prereq ? ` requiring ${desc}` : ' open to the public';
}
filename += '.ics';
const a = icalLink({text, name, filename, events: shownEvents});
a.id = 'dlc';
a.className = className;
dlc.parentNode.replaceChild(a, dlc);
}
};
// OLD; drop, after verifying getEventFiter works right:
const old_renderFilters = (regions, levels, facilitators) => {
function input({ text, title, id, type, name, value, checked, onclick }) {
const li = document.createElement('li');
let label = document.createElement('label');
let input = document.createElement('input');
if (id) input.id = id;
if (name) input.name = name;
if (value != null) input.value = value;
input.checked = !!checked;
input.type = type || 'checkbox';
input.onclick = onclick; // FIXME?! || filterEvents;
if (title) label.title = title;
li.appendChild(label);
label.appendChild(input);
label.appendChild(document.createTextNode(' ' + text));
return li;
}
// "All regions" toggle
byRegion.appendChild(input({ text: 'All', onclick: (e) => {
const {checked} = e.target;
regions.forEach(
({region}) => document.getElementById(region).checked = checked
);
filterEvents();
} }));
// in Germany and Canada, show units as km instead of miles
let unit = getUnitByRegion(regions[0].id);
const units = ({ km:'km', mi: 'mi' });
regions.forEach(({ className, region, name, site, km, mi }, nth) => {
let dist = region[unit] + units[unit], info;
console.log(info = `${dist} to ${region} (${site})`);
let li = input({text: name, id: region, checked: !nth, title: `~${info}`});
byRegion.appendChild(li);
});
for (const text in prereqs) {
const prereq = prereqs[text];
byPrereq.appendChild(input(
{ text
, type: 'radio'
, name: 'prereq'
, value: prereq || ''
, id: `p${prereq}`
, checked: !prereq
}
));
}
// "All levels" toggle
byLevels.appendChild(input({ text: 'All', checked: true, onclick: (e) => {
const {checked} = e.target;
for (const text in levels) {
if (/^-+$/.test(text)) continue;
const level = levels[text];
document.getElementById(`l${level}`).checked = checked;
}
filterEvents();
} }));
let $menu = $(byLevels);
for (const text in levels) {
const level = levels[text];
if (/^-+$/.test(text)) {
$menu.append('<li class="divider" role="separator"></li>');
if (level) {
$menu.append(`<li class="dropdown-header">${level}</li>`);
}
} else {
byLevels.appendChild(input(
{ text
, value: level
, id: `l${level}`
, checked: true
}
));
}
}
// "All facilitators" toggle
byLeader.appendChild(input({ text: 'All', checked: true, onclick: (e) => {
const {checked} = e.target;
const checks = Object.assign({"": "Other"}, facilitators);
for (const id in checks) {
const f = facilitators[id];
if (f ? f.facilitator : !id) {
document.querySelector(`#byleader input[value="${id}"]`).checked = checked;
}
}
filterEvents();
} }));
$menu = $(byLeader);
for (const id in facilitators) {
const leader = facilitators[id];
if (!leader.facilitator) {
continue;
$menu.append('<li class="divider" role="separator"></li>');
} else {
byLeader.appendChild(input(
{ text: leader.name
, value: id
, checked: true
}
));
}
}
byLeader.appendChild(input(
{ text: "Other"
, value: ''
, checked: true
}
));
};
{ "name": "hai-events-page"
, "scripts":
{ "build": "./node_modules/babili/node_modules/.bin/babel --no-babelrc --presets es2015 --plugins transform-es2015-template-literals --compact true --no-comments < events.es6.js > events.es5.js"
}
, "dependencies":
{ "babili": "*"
, "babel-preset-es2015": "*"
, "babel-plugin-transform-es2015-template-literals": "*"
}
}
// WIP – needs testing and some extra "magic" filters for "Other"
// facilitators / levels / prereq / regions, where those do exist
const deQuery = (q = location.search, o = {}, d = decodeURIComponent) =>
(q.replace(/[?&]([^&=]*)(?:=([^&]*))?/g,
(a, k, v) => o[d(k)] = d(v||'')
), o);
const query = deQuery();
const eventUrl = query.e || 'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/71ea321097ef2cae79992de9e64579cc18fde522/everything.json';
const eventLst = document.querySelector('#events');
const byRegion = document.querySelector('#byregion');
const byPrereq = document.querySelector('#byprereq');
const byLevels = document.querySelector('#bylevels');
const byLeader = document.querySelector('#byleader');
const getUnitByRegion = (id) => ({de: 'km', ca: 'km'})[region.id] || 'mi';
const prereqs =
{ "Any": "*"
, "None": 0
, "HAI 1": 1
, "HAI 2": 2
, "HAI 3": 3
, "HAI 4": 4
, "HAI 5": 5
, "On Team": "t"
};
const levels =
{ "HAI Mini": 0
, "-": null
, "HAI 1": 1
, "HAI 2": 2
, "HAI 3": 3
, "HAI 4": 4
, "HAI 5": 5
, "HAI 6": 6
, "HAI 7": 7
, "HAI 8": 8
, "HAI 9": 9
, "--": null
, "Couples 1": "c1"
, "Couples 2": "c2"
, "---": "Team Related"
, "Assistant Training": "at"
, "Active Listening Training": "alt"
, "Team Workshop": "tw"
, "Intern Workshop": "iw"
, "----": null
, "Others": ""
};
// render (all-invisible) event list
const renderEventList = (events) => {
for (const event of events) {
const {region, prereq, title, start, end, url} = event;
const e = document.createElement('li');
let a = document.createElement('a');
a.href = url;
a.textContent = `${iso(start)}: ${title}`;
e.appendChild(gcalLink(event));
e.appendChild(a);
a.style.marginLeft = '8px';
e.style.display = 'none';
eventLst.appendChild(e);
}
};
// returns a function(event) that checks if it is visible, per current filters
const getEventFilter = ({regions, levels, facilitators}) => {
// if a checkbox is checked, accept events having its correspondign property
function testProp(event) {
return this.inputs.find(i => i.checked && i.value == event[this.property]);
}
let prereqs = // TODO: derive from levels:
[ { name: "None", id: 0 }
, { name: "HAI 1", id: 1 }
, { name: "HAI 2", id: 2 }
, { name: "HAI 3", id: 3 }
, { name: "HAI 4", id: 4 }
, { name: "HAI 5", id: 5 }
, { name: "On Team", id: "t" }
];
class Filter {
constructor({
property, list, root, all, selectMultiple, test = testProp, checked
}) {
this.test = test;
this.root = root;
this.property = property;
const text = all;
console.info('new', {test, root, property, checked});
this.setupFilters(list, text, selectMultiple, checked);
// this.init(); - made redundant, by storing references in setupFilters
}
updateAllStateOnCheckboxToggle() {
const checkCount = this.inputs.reduce((sum, i) => sum + i.checked, 0);
const {allCheckbox} = this;
if (checkCount === 0 || checkCount === this.inputs.length) {
allCheckbox.checked = !!checkCount;
allCheckbox.indeterminate = false;
console.info('all/nothing', !!checkCount);
} else {
allCheckbox.indeterminate = true;
console.info('indeterminate');
}
filterEvents(); // FIXME: clean up dep on global var
}
// init() {
// this.skip = (root || document).querySelector(
// `input[name="${name}"][value="*"]`
// );
// this.inputs = Array.from((root || document).querySelectorAll(
// 'input[name="${name}"]:not([value="*"])'
// ));
// }
// populate the menu
setupFilters(
list, text = 'All',
selectMultiple = true,
checked = (item, n) => !n // default to always check just the first item
) {
// nests the DOM of a list {item/label/checkbox|radio button}
function input({ text, title, id, type, name, value, checked, onclick }) {
const li = document.createElement('li');
let label = document.createElement('label');
let input = document.createElement('input');
if (id) input.id = id;
if (name) input.name = name;
if (value != null) input.value = value;
input.checked = !!checked;
input.type = type || 'checkbox';
if (onclick) {
input.onclick = onclick;
} // else { console.warn('no filter set', {text, title, id}); } // FIXME
else {
input.onclick = onUpdate;
}
if (title) label.title = title;
li.appendChild(label);
label.appendChild(input);
label.appendChild(document.createTextNode(' ' + text));
return { input, li };
}
const onUpdate = this.updateAllStateOnCheckboxToggle.bind(this);
const type = selectMultiple ? 'checkbox' : 'radio';
// render the first "All" / "Any" item, to skip checks for this property:
let all = input(
{ text
, type
, name: this.property
, value: '*',
onclick: (e) => {
const {checked} = e.target;
for (const input of this.inputs) {
input.checked = checked;
};
filterEvents(); // TODO: trigger events instead?
}
, checked: list.every(checked)
});
this.skip = this.allCheckbox = all.input;
this.root.appendChild(all.li);
// render all the other items in the menu
let n = 0;
this.inputs = [];
for (const opt of list) {
const {id, name} = opt;
const item = input(
{ text: name
, id
, checked: checked(opt, n++, list)
}
);
this.inputs.push(item.input);
this.root.appendChild(item.li);
n++;
}
}
}
// inits root, property, test, skip, inputs for each of these filters:
const filters =
[ new Filter({ root: byRegion, property: 'region', list: regions})
, new Filter({ root: byPrereq, property: 'prereq', list: prereqs})
, new Filter({ root: byLevels, property: 'level', list: levels
, checked: () => true
})
, new Filter({ root: byLeader, property: 'facilitators', list: facilitators
// if a facilitator is checked, accept events with at least that leader
, test: function facChecked(event) {
// FIXME: this gets called on regions, not events?! on unclicking All
return this.inputs.find(
i => i.checked && event.facilitators.indexOf(i.value) !== -1
);
}
, checked: () => true
})
];
return function(e) {
let check = (filter) => {
const {indeterminate, checked} = filter.allCheckbox;
return (checked && !indeterminate) || filter.test(e);
};
// FIXME: this shouldn't be needed; e should always be an event, not Array
if (Array.isArray(e)) {
console.warn('eventFilter(', e, ')');
check = (filter) => {
const {indeterminate, checked} = filter.allCheckbox;
return (checked && !indeterminate) || e.every(E => filter.test(E));
};
}
return filters.every(check);
};
};
const fetchJSON = (url) => new Promise((resolve, reject) => {
fetch(url).catch(reject).then(
(res) => res.text().catch(reject).then(
(j) => resolve(JSON.parse(j))
)
);
});
const cached = (as, promiseFunc, ms = 3600e3) => new Promise((resolve, reject) => {
let {from, data} = JSON.parse(localStorage[as] || '{}');
if (data && Date.now() - (from || 0) < ms) {
console.log(`Cached ${as} from last ${ms/3600e3}h`);
resolve(data);
} else {
console.log(`Fetching ${as} from source`);
promiseFunc().catch(
() => data ? resolve(data) : reject()
).then(
(data) => {
localStorage[as] = JSON.stringify({from: Date.now(), data});
resolve(data);
}
);
}
});
const cacheJSON = (url) => cached(url, () => fetchJSON(url));
const geoLocate = () => new Promise((resolve, reject) => {
const {geolocation} = navigator;
if (geolocation) {
geolocation.getCurrentPosition(resolve, reject);
} else {
reject();
}
});
const geoLocateOrNorcal = () => new Promise((resolve, reject) => {
const resolveFallback = () => resolve(
{ fallback: true
, coords:
{ latitude: 37.4
, longitude: -122.1
}
}
);
const resolveJSONable = ({coords}) => {
const {latitude, longitude} = coords;
resolve({coords: {latitude, longitude}});
};
geoLocate().then(resolveJSONable).catch(resolveFallback);
});
const cachedGeo = () => cached('geo', geoLocateOrNorcal);
const ical = ({name, desc, domain, events}) => {
function vevent({summary, title, start, end, uid, geo, url, description}) {
start = date(start);
end = date(end);
const now = date(new Date);
const name = summary || title || '';
const slug = name.replace(/\W+/g, '-');
if (!uid) uid = `${start}-${slug}`;
const props =
[ `UID:${uid}@${domain}`
, `DTSTAMP:${now}`
, `DTSTART:${start}`
, `DTEND:${end}`
];
if (name) props.push(`SUMMARY:${name}`);
if (geo) props.push(`GEO:${geo}`);
if (url) props.push(`URL:${url}`);
if (description) props.push(`DESCRIPTION:${description}`);
return ['BEGIN:VEVENT', ...props, 'END:VEVENT'].join('\r\n');
}
domain = domain || location.hostname;
const optionals = [];
if (name) { optionals.push(`X-WR-CALNAME:${name}`); }
if (desc) { optionals.push(`X-WR-CALDESC:${desc}`); }
return [ 'BEGIN:VCALENDAR'
, 'VERSION:2.0'
, 'METHOD:PUBLISH'
, `PRODID:-//${domain}//iCal Events`
, ...optionals
, ...events.map(vevent)
, 'END:VCALENDAR', ''
].join('\r\n');
};
// caniuse.com/#search=download - covered mostly everywhere
const icalLink = ({text, name, filename, domain, events}) => {
var ics = ical({name, domain, events});
var a = document.createElement('a');
//a.href = `data:text/calendar;base64,${btoa(ics)}`;
a.href = `data:text/calendar,${encodeURIComponent(ics)}`;
a.download = filename || 'calendar.ics';
a.textContent = text || name;
return a;
}
const gcalUrl = (event) => {
let {summary, title, start, end, url, description} = event;
let calurl = 'https://www.google.com/calendar/render';
let query =
{ action: 'TEMPLATE'
, text: summary || title
, dates: date(start) + '/' + date(end)
, details: description
, location: url
, sf: 'true'
, output: 'xml'
};
let sep = '?';
for (let key in query) {
let val = query[key];
if (val) calurl += `${sep}${key}=${encodeURIComponent(val)}`;
sep = '&';
}
return calurl;
}
const gcalLink = (event) => {
var a = document.createElement('a');
var i = document.createElement('img');
i.src = 'https://i.imgur.com/QlbTNwa.png';
i.width = i.height = 32;
i.border = 0;
a.appendChild(i);
a.href = gcalUrl(event);
a.target = '_blank';
var n = event.summary || event.title;
if (n) a.title = i.alt = `Add "${n}" to Google Calendar`;
return a;
}
const parseDate = (t) => {
if (typeof t !== 'object' || !(t instanceof Date)) {
if (typeof t !== 'number') { t = Date.parse(t); }
t = new Date(t);
}
return t;
}
const date = (t) => parseDate(t).toISOString().replace(/[-:]|\.\d*/g, '');
const iso = (t) => {
function p(n, c) {
return ('0000' + n).slice(-(c || 2));
}
return [ t.getFullYear(), '-'
, p(t.getMonth() + 1), '-'
, p(t.getDate()), ' '
, p(t.getHours()), ':'
, p(t.getMinutes())
].join('');
}
const toRadians = (n) => n * Math.PI / 180;
const toDegrees = (n) => n / Math.PI * 180;
const haversineAngularDistance = ([lat1, lng1], [lat2, lng2]) => {
const φ1 = toRadians(lat1);
const φ2 = toRadians(lat2);
const Δφ = toRadians(lat2 - lat1);
const Δλ = toRadians(lng2 - lng1);
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
Math.cos(φ1) * Math.cos(φ2) *
Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
return toDegrees(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)));
};
// sorts the regions array, per a geolocation.getCurrentPosition response object
const getRegionsByProximity = (regions, {coords: {latitude, longitude}}) => {
const here = [latitude, longitude];
return regions.map(region => {
const {lat, lng} = region;
const degrees = haversineAngularDistance(here, [lat, lng]);
const kilometers = 6371 * toRadians(degrees);
const km = Math.round(kilometers);
const mi = Math.round(kilometers / 1.60934);
return Object.assign({degrees, km, mi}, region);
}).sort((a, b) => a.degrees - b.degrees);
}
const now = Date.now();
const eventInFuture = ({end}) => end > now;
const decodeEvent = (event) => {
event.title = event.title.replace(/\s+/g, ' ').trim().replace(/[,.]+$/, '');
event.start = parseDate(event.start);
event.end = parseDate(event.end);
return event;
};
Promise.all(
[ cachedGeo()
, cacheJSON(eventUrl)
])
.then(([pos, {regions, levels, facilitators, events}]) => {
window.allevents = events;
window.events = events = events.map(decodeEvent).filter(eventInFuture);
window.regions = getRegionsByProximity(regions, pos);
window.facilitators = facilitators;
renderEventList(events);
let filterEvent = getEventFilter({ regions, levels, facilitators });
let filterEvents = window.filterEvents = () => {
console.info('debugger');
Array.from(eventLst.children).forEach((e, n) => {
const event = events[n];
const show = filterEvent(event);
e.style.display = show ? '' : 'none';
if (show)
console.info(event, show ? 'show' : 'hide');
});
};
filterEvents();
});
<!doctype html>
<html lang="en"><head>
<meta name="referrer" content="no-referrer">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script>(function(l){for (var u in l)if(l[u])document.write('<script src="'+u+'"><\/script>')})(
{"https://cdnjs.cloudflare.com/ajax/libs/promiz/1.0.6/promiz.min.js":typeof Promise !== 'function' || !Promise.resolve || Object.prototype.toString.call(Promise.resolve()) !== '[object Promise]'
,"https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js":typeof fetch!=='function'
});if (!Array.from) Array.from = function(a) {
for (var l = a.length, A = new Array(l), i = 0; i < l; i++)
A[i] = a[i];
return A;
};if (![].find) Array.prototype.find = function(f) {
for (var i = 0; i < this.length; i++)
if (f(this[i])) return this[i];
};</script>
<style>
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 60px;
background-color: #f5f5f5;
}
body > .container {
padding-top: 60px;
}
.dropdown-menu > li > label {
display: block;
padding: 3px 10px;
clear: both;
font-weight: 400;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
}
.navbar-inverse .dropdown-menu > li > label {
color: #ccc;
}
ul {
padding-left: 0;
}
</style></head><body>
<nav class="navbar navbar-default navbar-fixed-top navbar-inverse">
<div class="container">
<div class="navbar-header">
<button aria-controls="navbar" aria-expanded="false" class="navbar-toggle collapsed" data-target="#navbar" data-toggle="collapse" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" id="dlc">Calendar of HAI Events by…</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<ul class="nav navbar-nav">
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Regions
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="byregion"></ul>
</li>
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Prerequisites
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="byprereq"></ul>
</li>
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Levels
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="bylevels"></ul>
</li>
<li class="dropdown">
<a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
Facilitators
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="byleader"></ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<ul id="events"></ul>
</div>
<footer class="footer" id="fetch">
<div class="container">
<p class="text-muted">
Tip: click the "Calendar" link to save your event selection as a calendar to your device's calendar
</p>
</div>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="rewrite.es6.js"></script>
</body></html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment