if(!Array.prototype.map)Array.prototype.map=function(h,e){var g=this.length>>>0,c=new Array(g);if(typeof h!=="function")throw new TypeError;for(var a=0;a<g;a++)if(a in this)c[a]=h.call(e,this[a],a,this);return c};if(!Array.prototype.forEach)Array.prototype.forEach=function(h,e){var g=this.length>>>0;if(typeof h!=="function")throw new TypeError;for(var c=0;c<g;c++)c in this&&h.call(e,this[c],c,this)};
if(!Array.prototype.filter)Array.prototype.filter=function(h,e){var g=this.length>>>0,c=[],a;if(typeof h!=="function")throw new TypeError;for(var b=0;b<g;b++)if(b in this){a=this[b];h.call(e,a,b,this)&&c.push(a)}return c};window.upcomingjs=window.upcomingjs||{};
upcomingjs.Dates=function(){var h=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloOSZ]|"[^"]*"|'[^']*'/g,e=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,g=/[^-+\dA-Z]/g,c=function(a,b){a=String(a);for(b=b||2;a.length<b;)a="0"+a;return a};return{format:function(a,b,d){if(arguments.length==1&&Object.prototype.toString.call(a)=="[object String]"&&!/\d/.test(a)){b=a;a=undefined}a=a?new Date(a):new Date;if(isNaN(a))throw SyntaxError("invalid date");
b=String(this.masks[b]||b||this.masks["default"]);if(b.slice(0,4)=="UTC:"){b=b.slice(4);d=true}var f=d?"getUTC":"get",i=a[f+"Date"](),l=a[f+"Day"](),m=a[f+"Month"](),n=a[f+"FullYear"](),j=a[f+"Hours"](),p=a[f+"Minutes"](),q=a[f+"Seconds"](),o=a[f+"Milliseconds"](),k=d?0:a.getTimezoneOffset(),r={d:i,dd:c(i),ddd:this.i18n.dayNames[l],dddd:this.i18n.dayNames[l+7],m:m+1,mm:c(m+1),mmm:this.i18n.monthNames[m],mmmm:this.i18n.monthNames[m+12],yy:String(n).slice(2),yyyy:n,h:j%12||12,hh:c(j%12||12),H:j,HH:c(j),
M:p,MM:c(p),s:q,ss:c(q),l:c(o,3),L:c(o>99?Math.round(o/10):o),t:j<12?"a":"p",tt:j<12?"am":"pm",T:j<12?"A":"P",TT:j<12?"AM":"PM",Z:d?"UTC":(String(a).match(e)||[""]).pop().replace(g,""),o:(k>0?"-":"+")+c(Math.floor(Math.abs(k)/60)*100+Math.abs(k)%60,4),O:(k>0?"-":"+")+c(Math.floor(Math.abs(k)/60),2)+":"+c(Math.abs(k)%60,2),S:["th","st","nd","rd"][i%10>3?0:(i%100-i%10!=10)*i%10]};return b.replace(h,function(s){return s in r?r[s]:s.slice(1,s.length-1)})},masks:{"default":"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",
mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:ss",isoDateTimeO:"yyyy-mm-dd'T'HH:MM:ssO",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"},i18n:{dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep",
"Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],dayHeader:"dddd, mmmm dS",nanoTime:"htt",tinyTime:"h:MMtt"},zeroTimestamp:function(a){a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);return a},isoString:function(a){a=a.match(new RegExp("([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"));var b=0,d=new Date(a[1],0,1),f=new Date;
a[3]&&d.setMonth(a[3]-1);a[5]&&d.setDate(a[5]);a[7]&&d.setHours(a[7]);a[8]&&d.setMinutes(a[8]);a[10]&&d.setSeconds(a[10]);a[12]&&d.setMilliseconds(Number("0."+a[12])*1E3);if(a[14]){b=Number(a[16])*60+Number(a[17]);b*=a[15]=="-"?1:-1}b-=d.getTimezoneOffset();time=Number(d)+b*60*1E3;f.setTime(Number(time));return f}}}();window.upcomingjs=window.upcomingjs||{};
upcomingjs.Tmpl=function(){var h={};return{render:function(e,g){e=!/\W/.test(e)?(h[e]=h[e]||this.render(document.getElementById(e).innerHTML)):new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+e.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return g?e(g):e}}}();
window.upcomingjs=window.upcomingjs||{};upcomingjs.Util=function(){};upcomingjs.Util.extend=function(h,e){if(e&&e!="undefined")for(var g in e)if(e[g]&&e[g]!="undefined")h[g]=e[g]};window.upcomingjs=window.upcomingjs||{};
upcomingjs.Events=function(){function h(b,d){this.date=b;this.events=d||[]}var e=upcomingjs.Tmpl,g=upcomingjs.Util,c=upcomingjs.Dates,a={period:25,element:"upcomingjs",orderby:"starttime",sortorder:"ascending",spinner:"<em>Loading&#8230;</em>",show:null,error:function(b){this.element.innerHTML='<span class="error">Unable to display the upcoming events due to an error.</span>';if(window.console)console.error("Unable to display the upcoming events due to an error.\n\n"+(b.cause?b.cause.statusText:b.message))},
tmpl:'                 <table class="vcalendar">                     <thead>                         <tr>                             <th id="event-date">Date</th>                             <th id="event-info">Info</th>                         </tr>                     </thead>                     <tbody>                         <% if (!days.length) { %>                         <tr>                             <td colspan="2">No upcoming events found.</td>                         </tr>                         <% } else { %>                         <% var d = upcomingjs.Dates; %>                         <% for (var i = 0; i < days.length; i++) { %>                         <% var day = days[i]; %>                         <tr>                             <th colspan="2">                                 <%=d.format(day.date, d.i18n.dayHeader)%>                             </th>                         </tr>                         <% for (var j = 0; j < day.events.length; j++) { %>                         <% var event = day.events[j]; %>                         <% var start = d.format(event.dtstart, (event.dtstart.getMinutes() === 0 ? d.i18n.nanoTime : d.i18n.tinyTime)); %>                         <% var end = d.format(event.dtend, (event.dtend.getMinutes() === 0 ? d.i18n.nanoTime : d.i18n.tinyTime)); %>                         <tr class="vevent">                             <td headers="event-date">                                 <abbr title="<%=d.format(event.dtstart, d.masks.isoDateTimeO)%>" class="dtstart"><%=start%></abbr>&#8211;<abbr title="<%=d.format(event.dtend, d.masks.isoDateTimeO)%>" class="dtend"><%=end%></abbr>                             </td>                             <td headers="event-info">                                 <a class="url summary" href="<%=event.url%>"><%=event.summary%></a>                                 <% if (event.description) { %>                                 <div class="description"><%=event.description%></div>                                 <% } %>                                 <% if (event.location) { %>                                 <div class="location"><%=event.location%></div>                                 <% } %>                             </td>                         </tr>                         <% } %>                         <% } %>                         <% } %>                     </tbody>                 </table>                 <div id="upcoming-footer">                     <p><a href="<%=url%>">View the calendar</a> or subscribe: <a href="<%=ics%>">iCal</a>, <a href="<%=rss%>">XML</a>.</p>                 </div>             '};
return{init:function(b,d){g.extend(a,d);a.element=document.getElementById(a.element)||a.element;if(!a.element||!a.element.nodeType)a.error({message:"Can't find the element \""+a.element+'".'});a.element.innerHTML=a.spinner||a.element.innerHTML;var f=new Date,i=(new Date).setDate(f.getDate()+a.period);d=document.createElement("script");b=this.buildURL(b,{alt:"json-in-script","start-min":c.format(f,c.masks.isoDateTimeO),"start-max":c.format(i,c.masks.isoDateTimeO),callback:"window.upcomingjs.Events.parseFeed",
orderby:a.orderby,sortorder:a.sortorder,singleevents:true});d.src=b;d.setAttribute("async","true");document.documentElement.firstChild.appendChild(d)},buildURL:function(b,d){b=[b+"?"];for(var f in d)b.push("&"+f+"="+d[f]);return b.join("")},parseFeed:function(b){if(!b||!b.feed)a.error({message:"Invalid feed:\n"+b});var d=b.feed;b=d.xmlns$gd;var f=d.entry;d=d.link;var i={days:[]},l=[],m=[],n;try{l=f.filter(function(k){return k.gd$when.length&&k.gd$when[0]})}catch(j){a.error(j)}if(l.length){try{m=l.map(this.entry2Event,
{schema:b})}catch(p){a.error(p)}n=new h(c.zeroTimestamp(new Date(m[0].dtstart)));i.days.push(n);try{m.forEach(function(k){var r=c.zeroTimestamp(new Date(k.dtstart));if(r.getTime()!==n.date.getTime()){n=new h(r);i.days.push(n)}n.events.push(k)})}catch(q){a.error(q)}}for(f=0;f<d.length;f++){l=d[f];if(l.type=="text/html"&&l.rel=="alternate")i.url=l.href;else if(l.type=="application/atom+xml"&&l.rel==b+"#feed")i.rss=l.href}i.ics=i.rss.replace("/feeds/","/ical/")+".ics";b=a.element.style.display;a.element.style.display=
"none";try{a.element.innerHTML=e.render(a.tmpl,i)}catch(o){a.error(o)}a.show?a.show.call(a.element):(a.element.style.display=b)},entry2Event:function(b){function d(p){for(var q=[],o=0;o<p.length;o++){var k=p[o];q.push({name:k.name.$t,email:k.email?k.email.$t:""})}return q}function f(p){return p.replace(this.schema+"#event.","")}for(var i=b.gd$when[0],l=b.gd$where[0],m=b.link,n,j=0;j<m.length;j++)if(m[j].type=="text/html"&&m[j].rel=="alternate")n=m[j].href;return{attendee:[],category:[],"class":null,
contact:null,description:b.content.$t,dtend:c.isoString(i.endTime),dtstart:c.isoString(i.startTime),duration:null,geo:{latitude:null,longitude:null},"last-modified":c.isoString(b.updated.$t),location:l.valueString,organizer:d(b.author),rdate:null,rrule:null,status:f(b.gd$eventStatus.value),summary:b.title.$t,uid:b.id.$t,url:n}}}}();window.jQuery&&function(h){h.fn.upcoming=function(e,g){g=g||{};g.element=this[0];upcomingjs.Events.init(e,g)}}(jQuery);

