var ec3={version:'3.2.beta2',today:new Date(),calendars:[],allday:'all day',ELEMENT_NODE:1,TEXT_NODE:3,init:function(){ec3.today_day_num=ec3.today.getDate();ec3.today_month_num=ec3.today.getMonth()+1;ec3.today_year_num=ec3.today.getFullYear();ec3.imgwait=new Image(14,14);ec3.imgwait.src=ec3.myfiles+'/ec_load.gif';ec3.viewpostsfor=ec3.unencode(ec3.viewpostsfor);for(var i=0;i<ec3.month_of_year.length;i++)ec3.month_of_year[i]=ec3.unencode(ec3.month_of_year[i]);for(var j=0;j<ec3.month_abbrev.length;j++)ec3.month_abbrev[j]=ec3.unencode(ec3.month_abbrev[j])},do_onload:function(fn){var prev=window.onload;window.onload=function(){if(prev)prev();fn()}},new_calendar:function(cal_id,options){var cal=new ec3.Calendar(cal_id);if(options&&options.hasOwnProperty('hide_logo'))cal.hide_logo=options.hide_logo;ec3.do_onload(function(){cal.init()});ec3.calendars[cal_id]=cal;return cal},unencode:function(text){if(!ec3.unencodeDiv)ec3.unencodeDiv=document.createElement('div');ec3.unencodeDiv.innerHTML=text;return(ec3.unencodeDiv.innerText||ec3.unencodeDiv.firstChild.nodeValue)},get_child_by_tag_name:function(element,tag_name){var results=element.getElementsByTagName(tag_name);if(results)for(var i=0;i<results.length;i++)if(results[i].parentNode==element)return results[i];return 0},calc_day_id:function(day_num,month_num,year_num){if(ec3.today_day_num==day_num&&ec3.today_month_num==month_num&&ec3.today_year_num==year_num){return'today'}else{return'ec3_'+year_num+'_'+month_num+'_'+day_num}},add_class:function(element,new_class_name){if(element.className.length==0){element.className=new_class_name}else if(-1==element.className.indexOf(new_class_name)){element.className+=' '+new_class_name}else{var classes=element.className.split(' ');for(var i=0,len=classes.length;i<len;i++)if(classes[len-i-1]==new_class_name)return;element.className+=' '+new_class_name}},parse_datetime:function(s){if(s&&s.length){var dt=s.split(' ');var ymd=dt[0].split('-');var hms=dt[1].split(':');return new Date(parseInt(ymd[0],10),parseInt(ymd[1],10)-1,parseInt(ymd[2],10),parseInt(hms[0],10),parseInt(hms[1],10),parseInt(hms[2],10))}return null},attr2bool:function(element,attrname){var val;if(typeof element.getAttributeNode=='function'){var n=element.getAttributeNode(attrname);return(n&&n.specified&&n.value=='1')?true:false}else{var a=element.getAttribute(attrname);return(a&&a=='1')?true:false}},extend:function(dest,src){for(k in src)dest[k]=src[k]}}ec3.do_onload(function(){ec3.init()});ec3.Calendar=function(cal_id){this.cal_id=cal_id}ec3.Calendar.prototype={hide_logo:false,full_id:function(short_id){return this.cal_id+'-'+short_id},short_id:function(full_id){return full_id.substr(this.cal_id.length)},getElementById:function(short_id){return document.getElementById(this.full_id(short_id))},init:function(){this.reqs=new Array();this.div=document.getElementById(this.cal_id);var prev=this.getElementById('ec3_prev');var next=this.getElementById('ec3_next');if(prev&&next){var xCat=new RegExp('[&?]ec3_listing=[eE].*$');var match=xCat.exec(prev.href);if(match)this.is_listing=true;var self=this;prev.onclick=function(){self.go_prev();return false}next.onclick=function(){self.go_next();return false}prev.href='#';next.href='#'}if(typeof ec3_Popup!='undefined'){var cals=this.get_calendars();if(cals){for(var i=0,len=cals.length;i<len;i++)ec3_Popup.add_tbody(ec3.get_child_by_tag_name(cals[i],'tbody'))}}},create_calendar:function(table_cal,month_num,year_num){var table=table_cal.cloneNode(1);var month_num0=month_num-1;var caption=ec3.get_child_by_tag_name(table,'caption');if(caption){var c=ec3.get_child_by_tag_name(caption,'a');var caption_text=ec3.month_of_year[month_num0]+' '+year_num;if(c&&c.firstChild&&c.firstChild.nodeType==ec3.TEXT_NODE){if(month_num<10){c.href=ec3.home+'/?m='+year_num+'0'+month_num}else{c.href=ec3.home+'/?m='+year_num+month_num}if(this.is_listing)c.href+='&ec3_listing=events';c.title=ec3.viewpostsfor;c.title=c.title.replace(/%1\$s/,ec3.month_of_year[month_num0]);c.title=c.title.replace(/%2\$s/,year_num);c.firstChild.data=caption_text}}if(caption&&caption.firstChild&&caption.firstChild.nodeType==ec3.TEXT_NODE){caption.firstChild.data=ec3.month_of_year[month_num0]+' '+year_num}var tbody=ec3.get_child_by_tag_name(table,'tbody');while(tbody.lastChild)tbody.removeChild(tbody.lastChild);var date=new Date(year_num,month_num0,1,12,00,00);var tr=document.createElement('tr');var td,div;tbody.appendChild(tr);var day_count=0 var col=0;while(date.getMonth()==month_num0&&day_count<40){var day=(date.getDay()+7-ec3.start_of_week)%7;if(col>6){tr=document.createElement('tr');tbody.appendChild(tr);col=0}if(col<day){td=document.createElement('td');td.colSpan=day-col;td.className='pad';tr.appendChild(td);col=day}td=document.createElement('td');td.ec3_daynum=date.getDate();var short_id=ec3.calc_day_id(date.getDate(),month_num,year_num);td.id=this.full_id(short_id);if(short_id=='today')td.className='ec3_today';this.new_day(td);tr.appendChild(td);col++;day_count++;date.setDate(date.getDate()+1)}if(col<7){td=document.createElement('td');td.colSpan=7-col;td.className='pad';tr.appendChild(td)}if((7-col)>1&&!this.hide_logo){a=document.createElement('a');a.href='http://blog.firetree.net/?ec3_version='+ec3.version;a.title='Event Calendar '+ec3.version;td.style.verticalAlign='bottom';td.appendChild(a);div=document.createElement('div');div.className='ec3_ec';div.align='right';a.appendChild(div)}table.id=this.full_id('ec3_'+year_num+'_'+month_num);return table},loadDates:function(month_num,year_num){var req=new XMLHttpRequest();if(req){this.reqs.push(req);var self=this;req.onreadystatechange=function(){self.process_xml()};var url=ec3.home+'/?feed=ec3xml&year='+year_num+'&monthnum='+month_num;if(this.is_listing)url+='&ec3_listing=events';req.open("GET",url,true);this.set_spinner(1);req.send(null)}},get_calendars:function(){var result=new Array();for(var i=0;i<this.div.childNodes.length;i++){var c=this.div.childNodes[i];if(c.id&&c.id.search(this.full_id('ec3_[0-9]'))==0&&c.style.display!='none'){result.push(this.div.childNodes[i])}}if(result.length>0)return result;else return 0},rewrite_controls:function(prev_month0,next_month0){var prev=this.getElementById('ec3_prev');if(prev&&prev.firstChild&&prev.firstChild.nodeType==ec3.TEXT_NODE)prev.firstChild.data='\u00ab\u00a0'+ec3.month_abbrev[prev_month0%12];var next=this.getElementById('ec3_next');if(next&&next.firstChild&&next.firstChild.nodeType==ec3.TEXT_NODE)next.firstChild.data=ec3.month_abbrev[next_month0%12]+'\u00a0\u00bb'},set_spinner:function(on){var spinner=this.getElementById('ec3_spinner');var publish=this.getElementById('ec3_publish');if(spinner){if(on){spinner.style.display='inline';if(publish)publish.style.display='none'}else{spinner.style.display='none';if(publish)publish.style.display='inline'}}},go_prev:function(){var calendars=this.get_calendars();if(!calendars)return;var pn=calendars[0].parentNode;var id_array=this.short_id(calendars[0].id).split('_');if(id_array.length<3)return;var year_num=parseInt(id_array[1]);var month_num=parseInt(id_array[2])-1;if(month_num==0){month_num=12;year_num--}var newcal=this.getElementById('ec3_'+year_num+'_'+month_num);if(newcal){newcal.style.display=this.calendar_display}else{newcal=this.create_calendar(calendars[0],month_num,year_num);pn.insertBefore(newcal,calendars[0]);this.loadDates(month_num,year_num)}this.calendar_display=calendars[calendars.length-1].style.display;calendars[calendars.length-1].style.display='none';this.rewrite_controls(month_num+10,month_num+calendars.length-1)},go_next:function(){var calendars=this.get_calendars();if(!calendars)return;var pn=calendars[0].parentNode;var last_cal=calendars[calendars.length-1];var id_array=this.short_id(last_cal.id).split('_');if(id_array.length<3)return;var year_num=parseInt(id_array[1]);var month_num=1+parseInt(id_array[2]);if(month_num==13){month_num=1;year_num++}var newcal=this.getElementById('ec3_'+year_num+'_'+month_num);if(newcal){newcal.style.display=this.calendar_display}else{newcal=this.create_calendar(calendars[0],month_num,year_num);if(last_cal.nextSibling)pn.insertBefore(newcal,last_cal.nextSibling);else pn.appendChild(newcal);this.loadDates(month_num,year_num)}this.calendar_display=calendars[0].style.display;calendars[0].style.display='none';this.rewrite_controls(month_num-calendars.length+11,month_num)},process_xml:function(){var busy=0;for(var i=0;i<this.reqs.length;i++){var req=this.reqs[i];if(req){if(req.readyState==4){this.reqs[i]=0;if(req.status==200)this.update_days(new ec3.xml.Calendar(req.responseXML))}else busy=1}}if(!busy){while(this.reqs.shift&&this.reqs.length&&!this.reqs[0])this.reqs.shift();this.set_spinner(0)}},update_days:function(xcal){for(var i=0,len=xcal.day.length;i<len;i++){var td=this.getElementById(xcal.day[i].id());if(td&&td.ec3_daynum){this.update_day(td,xcal.day[i])}}if(typeof ec3_Popup!='undefined'){var month=this.getElementById(xcal.id());if(month)ec3_Popup.add_tbody(ec3.get_child_by_tag_name(month,'tbody'))}},new_day:function(td){td.appendChild(document.createTextNode(td.ec3_daynum))},update_day:function(td,day){ec3.add_class(td,'ec3_postday');var txt=td.removeChild(td.firstChild);var a=document.createElement('a');a.href=day.link();a.title=day.titles();if(day.is_event()){ec3.add_class(td,'ec3_eventday');a.className='eventday'}a.appendChild(txt);td.appendChild(a)}}ec3.xml={details:[]}ec3.xml.Calendar=function(element){this.element=element;this.init()}ec3.xml.Calendar.prototype={day:[],init:function(){var days=this.element.getElementsByTagName('day');for(var i=0,len=days.length;i<len;i++){this.day[i]=new ec3.xml.Day(this,days[i])}},id:function(){var months=this.element.getElementsByTagName('month');if(months)return months[0].getAttribute('id');else return''},_detail:function(post_id){if(!ec3.xml.details[post_id]){var details=this.element.getElementsByTagName('detail');for(var i=0,len=details.length;i<len;i++){var pid=details[i].getAttribute('id');if(pid)ec3.xml.details[pid]=details[i]}}return ec3.xml.details[post_id]}}ec3.xml.Day=function(calendar,element){this.calendar=calendar;this.element=element}ec3.xml.Day.prototype={id:function(){return this.element.getAttribute('id')},link:function(){return this.element.getAttribute('link')},titles:function(){return this.element.getAttribute('titles')},is_event:function(){return ec3.attr2bool(this.element,'is_event')},date:function(){var d=this.element.getAttribute('date').split('-');return new Date(parseInt(d[0],10),parseInt(d[1],10)-1,parseInt(d[2],10))},_events:function(result){var all=this.element.getElementsByTagName('event');if(all){for(var i=0,len=all.length;i<len;i++)result.push(new ec3.xml.Event(this,all[i]))}return result},_posts:function(result){var all=this.element.getElementsByTagName('post');if(all){for(var i=0,len=all.length;i<len;i++)result.push(new ec3.xml.Post(this,all[i]))}return result},events:function(result){return this._events([])},posts:function(result){return this._posts([])},posts_and_events:function(){var result=[];result=this._posts(result);result=this._events(result);return result}}ec3.xml.Post=function(day,element){this.day=day;this.element=element}ec3.xml.Post.prototype={kind:'post',brief:function(){return''},link:function(){return this._detail().getAttribute('link')},title:function(){return this._detail().getAttribute('title')},excerpt:function(){var excerpts=this._detail().getElementsByTagName('excerpt');if(excerpts)return excerpts[0].firstChild.data;else return''},_detail:function(){return this.day.calendar._detail(this.element.getAttribute('post_id'))}}ec3.xml.Event=function(day,element){this.day=day;this.element=element}ec3.extend(ec3.xml.Event.prototype,ec3.xml.Post.prototype);ec3.extend(ec3.xml.Event.prototype,{kind:'event',allday:function(){return ec3.attr2bool(this.element,'allday')},brief:function(){if(this.allday())return ec3.allday;var result='';var starts=this.element.getElementsByTagName('start');var ends=this.element.getElementsByTagName('end');if(starts&&starts.length){result=starts[0].getAttribute('time');if(ends&&ends.length)result+=' - '+ends[0].getAttribute('time');else result+='...'}else{if(ends&&ends.length)result='...'+ends[0].getAttribute('time');else result='...'+ec3.allday+'...'}return result}});
