// Copyright (C) 2008 BlueGolf, LLC. All Rights Reserved
function Detail()
{this.div=document.getElementById('detail');}
Detail.hide=function()
{var me=calendar.detail;me.trigger=null;me.div.style.display='none';}
Detail.onMouseMove=function(e)
{var me=calendar.detail;var mouseX=Util.isIE?(event.clientX+document.documentElement.scrollLeft):e.pageX;var mouseY=Util.isIE?(event.clientY+document.documentElement.scrollTop):e.pageY;var day=me.trigger;for(var i=0;day&&i<3;i++)
{day=day.parentNode;}
if(!(me.trigger&&Util.isPointInElement(me.trigger,mouseX,mouseY))&&!(day&&Util.isPointInElement(day,mouseX,mouseY))&&!Util.isPointInElement(me.div,mouseX,mouseY))
{Detail.hide();}}
Detail.reveal=function()
{var me=calendar.detail;if(me.trigger)
{Util.position(me.div,me.trigger,50,me.trigger.offsetHeight);me.div.style.zIndex=10;}}
Detail.show=function()
{var cal=window.calendar;var me=cal?cal.detail:null;if(me&&(me.trigger!=this||me.div.style.display=='none'))
{me.trigger=this;while(me.div.lastChild)
{Util.removeHandlers(me.div.lastChild);me.div.removeChild(me.div.lastChild);}
var vevent=calendar.getComponent(this.name);if(vevent)
{var uid=vevent.getPropertyValue(/^UID$/i);var text=vevent.getPropertyValue(/^SUMMARY$/i);if(text)
{var div=document.createElement('div');me.div.insertBefore(div,null);var b=document.createElement('b');div.insertBefore(b,null);text=document.createTextNode(text);b.insertBefore(text,null);}
text=vevent.getPropertyValue(/^DTSTART$/i);if(text)
{var dtstart=text;var div=document.createElement('div');div.style.width='170px';me.div.insertBefore(div,null);var label=document.createTextNode(_("When:")+' ');div.insertBefore(label,null);text=Property.formatTime(Property.asDate(dtstart));var dtend=vevent.getPropertyValue(/^DTEND$/i);if(dtend&&dtend!=dtstart)
{text=text+' - '+Property.formatTime(Property.asDate(dtend));}
text=document.createTextNode(text);div.insertBefore(text,null);}
text=vevent.getPropertyValue(/^LOCATION$/i);if(text)
{var loc=text;text=String(text).split('\n');var address=text.slice(1);text=text[0];var div=document.createElement('div');div.style.paddingLeft='4em';div.style.textIndent='-4em';me.div.insertBefore(div,null);label=document.createTextNode(_("Where:")+' ');div.insertBefore(label,null);text=document.createTextNode(String(text).replace(/\n/g,', '));var url=vevent.getPropertyValue(/^X-BG-LOCATION-URL$/i);if(url)
{a=document.createElement('a');a.href=url;a.target='_blank';div.insertBefore(a,null);a.insertBefore(text,null);}
else
{div.insertBefore(text,null);}
if(/((\b[0-9]{5}\b)|(\b[a-z][0-9][a-z](-| )[0-9][a-z][0-9]\b))/i.test(loc))
{text=document.createTextNode(' (');div.insertBefore(text,null);a=document.createElement('a');a.href='http://maps.google.com/maps?q='+escape(String(loc).replace(/\n/g,', '));a.target='_blank';div.insertBefore(a,null);text=document.createTextNode(_("map"));a.insertBefore(text,null);text=document.createTextNode(')');div.insertBefore(text,null);}
for(var line in address)
{var br=document.createElement('br');div.insertBefore(br,null);text=document.createTextNode(address[line]);div.insertBefore(text,null);}}
div=null;if(calendar.editor)
{div=document.createElement('div');me.div.insertBefore(div,null);a=document.createElement('a');if((/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).test(uid))
{a.href='edit.htm?id='+uid;}
else
{var h=vevent.getPropertyValue(/^X-BG-EVENT$/i);a.href='../event/'+h+'/index.htm';}
div.insertBefore(a,null);text=document.createTextNode(_("Edit"));a.insertBefore(text,null);}
url=vevent.getPropertyValue(/^URL$/i);if(url)
{if(div)
{text=document.createTextNode(' | ');div.insertBefore(text,null);}
else
{div=document.createElement('div');me.div.insertBefore(div,null);}
a=document.createElement('a');a.href=url;a.target='_blank';div.insertBefore(a,null);text=document.createTextNode(_("Info"));a.insertBefore(text,null);}
url=vevent.getPropertyValue(/^X-BG-URL-REGISTER$/i);if(url)
{if(div)
{text=document.createTextNode(' | ');div.insertBefore(text,null);}
else
{div=document.createElement('div');me.div.insertBefore(div,null);}
a=document.createElement('a');a.href=url;a.target='_blank';div.insertBefore(a,null);text=document.createTextNode(_("Register"));a.insertBefore(text,null);}
url=vevent.getPropertyValue(/^X-BG-URL-CANCEL$/i);if(url)
{if(div)
{text=document.createTextNode(' | ');div.insertBefore(text,null);}
else
{div=document.createElement('div');me.div.insertBefore(div,null);}
a=document.createElement('a');a.href=url;a.target='_blank';div.insertBefore(a,null);text=document.createTextNode(_("Cancel"));a.insertBefore(text,null);}
me.div.style.zIndex=-10;var table=document.getElementById('calendar');Util.position(me.div,table,0,0);me.div.style.display='';setTimeout(Detail.reveal,0);}}}
function Filter()
{this.div=document.getElementById('filterdiv');this.clear();this.categoryHidden={};var hidden=String(document.filter.elements.hiddencategories.value).split(',');for(var i=0;i<hidden.length;i++)
{if(hidden[i].length)
{this.categoryHidden[hidden[i]]=true;}}
document.filter.onsubmit=Util.returnFalse;document.filter.elements.ok.onclick=Filter.apply;document.filter.elements.cancel.onclick=Filter.hide;}
Filter.apply=function()
{Filter.hide();var me=calendar.filter;me.categoryHidden={};var hidden=document.filter.elements.hiddencategories;hidden.value='';for(var i=0;i<document.filter.elements.length;i++)
{var input=document.filter.elements[i];if(input.name=='category'&&!input.checked)
{me.categoryHidden[input.value]=true;if(hidden.value.length>0)
{hidden.value=hidden.value+',';}
hidden.value=hidden.value+input.value;}}
var ajax=Util.isIE?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();var base=String(location.href).replace(/\/(bluegolf|league|manage)\/+([^\/]+).*/,"/bluegolf/$2");ajax.open('POST',base+'/calendar/category.htm');ajax.setRequestHeader('content-type','application/x-www-form-urlencoded');ajax.send('hiddencategories='+escape(hidden.value));me.apply();return false;}
Filter.grey=function()
{for(var i=0;i<document.filter.elements.length;i++)
{var input=document.filter.elements[i];if(input.name=='category')
{if(input.value=='Tournament')
{var isGrey=!input.checked;}
else if(!input.id)
{input.disabled=isGrey;}}}}
Filter.hide=function()
{var me=calendar.filter;me.div.style.display='none';calendar.haze.hide();return false;}
Filter.show=function()
{var me=calendar.filter;calendar.haze.show();var content=document.getElementById('categories');for(var value in me.categories)
{var before=null;var exists=false;for(var i=0;i<document.filter.elements.length;i++)
{var input=document.filter.elements[i];if(input.name!='category')
{continue;}
if(value=='Tournament')
{input.onclick=Filter.grey;}
if(value==input.value)
{exists=true;break;}
if(!input.id)
{continue;}
if(input.value>value&&(!before||before.value>value))
{before=input;}}
if(!exists)
{if(before)
{before=document.getElementById('categorydiv'+String(before.id).substr(8));}
var div=document.createElement('div');div.id='categorydiv'+document.filter.elements.length;content.insertBefore(div,before);var label=document.createElement('label');div.insertBefore(label,null);input=document.createElement('input');input.id='category'+document.filter.elements.length;input.type='checkbox';input.name='category';input.value=value;label.insertBefore(input,null);text=document.createTextNode(value);label.insertBefore(text,null);}}
for(i=0;i<document.filter.elements.length;i++)
{input=document.filter.elements[i];if(input.name!='category')
{continue;}
input.checked=me.categoryHidden[input.value]?false:'checked';}
Filter.grey();var table=document.getElementById('calendar');Util.position(me.div,table,50,50);me.div.style.display='';}
Filter.prototype.add=function(value)
{if(value&&value.length>0)
{var keys=String(value).split(',');for(var i=0;i<keys.length;i++)
{this.categories[keys[i]]=true;}}
else
{this.categories.Other=true;}}
Filter.prototype.apply=function()
{for(var i=0;i<calendar.components.length;i++)
{var comp=calendar.components[i];var value=comp.getPropertyValue(/^CATEGORIES$/i);if(value==null||value.length==0)
{value='Other';}
var div=document.getElementById('uid'+comp.getPropertyValue(/^UID$/i));if(div)
{var isShow=!value;if(value)
{var keys=String(value).split(',');for(var j=0;!isShow&&j<keys.length;j++)
{isShow=!this.categoryHidden[keys[j]];if(keys[j]=='Tournament')
{if(!isShow)
{break;}
else if(keys.length>1)
{isShow=false;}}}}
div.style.display=isShow?'':'none';}}}
Filter.prototype.clear=function()
{this.categories={};}
function Picker()
{this.div=document.getElementById('picker');document.getElementById('pprev').onclick=Picker.prev;document.getElementById('pnext').onclick=Picker.next;}
Picker.fill=function(when)
{var today=new Date();var yearToday=today.getFullYear();var monthToday=today.getMonth();var dateToday=today.getDate();var year=when.getFullYear();var month=when.getMonth();when=new Date(year,month,1,12,0,0);calendar.picker.date=Property.date2text(when);var msPerDay=24*60*60*1000;var cell=document.getElementById('pc');cell.firstChild.nodeValue=i18nDictionary.formatDate_long_noday(when);var date=1-when.getDay();for(var r=0;r<6;r++)
{for(var c=0;c<7;c++)
{cell=document.getElementById('pr'+r+'c'+c);if(date>0&&month==when.getMonth())
{if(yearToday==year&&monthToday==month&&dateToday==date)
{cell.style.backgroundColor='#ffd';}
else
{cell.style.backgroundColor='';}
cell.firstChild.nodeValue=String(date);cell.name='pick'+Property.date2text(when);cell.onclick=Picker.pick;when.setTime(when.getTime()+msPerDay);year=when.getFullYear();}
else
{cell.style.backgroundColor='';cell.firstChild.nodeValue='';cell.name='';cell.onclick=Util.returnFalse;}
date++;}}}
Picker.hide=function()
{var me=calendar.picker;me.div.style.display='none';}
Picker.next=function()
{var when=Property.asDate(calendar.picker.date);var month=when.getMonth();if(month>=11)
{when.setFullYear(when.getFullYear()+1);when.setMonth(0);}
else
{when.setMonth(month+1);}
Picker.fill(when);return false;}
Picker.pick=function()
{Picker.hide();calendar.clear();calendar.init(Property.asDate(this.name.substr(4)),0);return false;}
Picker.prev=function()
{var when=Property.asDate(calendar.picker.date);var month=when.getMonth();if(month<=0)
{when.setFullYear(when.getFullYear()-1);when.setMonth(11);}
else
{when.setMonth(month-1);}
Picker.fill(when);return false;}
Picker.show=function()
{var me=calendar.picker;Detail.hide();if(me.div.style.display=='none')
{me.target=this;var cell=document.getElementById('r0c6');var when=Property.asDate(cell.firstChild.id.substr(4));Picker.fill(when);me.div.style.display='';Util.position(me.div,this,this.offsetWidth-158,this.offsetHeight);}
else
{Picker.hide();}
return false;}
function Calendar(text)
{Component.call(this,(text?text:'VCALENDAR'));if(this.properties.length==0)
{this.properties[this.properties.length]=new Property('PRODID:bluegolf.com');this.properties[this.properties.length]=new Property('VERSION:2.0');this.properties[this.properties.length]=new Property('METHOD:PUBLISH');}
this.detail=new Detail();this.haze=new Haze();this.filter=new Filter();this.picker=new Picker();var editor=document.getElementById('editordiv');if(editor)
{this.editor=true;}
if(!Util.isIE)
{document.captureEvents(Event.MOUSEMOVE);}
document.onmousemove=Detail.onMouseMove;document.onclick=Calendar.onClick;document.getElementById('categorybutton').onclick=Filter.show;document.getElementById('back4').onclick=Calendar.navigate;document.getElementById('back1').onclick=Calendar.navigate;document.getElementById('today').onclick=Calendar.navigate;document.getElementById('pick').onclick=Picker.show;document.getElementById('next1').onclick=Calendar.navigate;document.getElementById('next4').onclick=Calendar.navigate;setInterval(Calendar.interval,1000);}
Calendar.prototype=new Component.inherit();Calendar.months=['January','February','March','April','May','June','July','August','September','October','November','December'];Calendar.mons=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];Calendar.interval=function()
{if(Util.isIE)
{var width=0;for(var c=0;c<7;c++)
{var cell=document.getElementById('r0c'+c);var day=cell.firstChild;width+=day.offsetWidth;}
width=(width/7)|0;for(var r=0;r<4;r++)
{for(var c=0;c<7;c++)
{var cell=document.getElementById('r'+r+'c'+c);var day=cell.firstChild;for(var i=1;i<day.childNodes.length;i++)
{day.childNodes.item(i).style.width=width;}}}}}
Calendar.navigate=function()
{if(this.id=='back4')
{calendar.move(-4);}
else if(this.id=='back1')
{calendar.move(-1);}
else if(this.id=='today')
{calendar.clear();calendar.init(new Date(),0);}
else if(this.id=='next1')
{calendar.move(1);}
else if(this.id=='next4')
{calendar.move(4);}}
Calendar.onClick=function(e)
{var mouseX=Util.isIE?(event.clientX+document.documentElement.scrollLeft):e.pageX;var mouseY=Util.isIE?(event.clientY+document.documentElement.scrollTop):e.pageY;var picker=document.getElementById('picker');var button1=document.getElementById('pick');if(picker&&!Util.isPointInElement(picker,mouseX,mouseY)&&(!button1||!Util.isPointInElement(button1,mouseX,mouseY)))
{Picker.hide();}}
Calendar.prototype.clear=function(from,to)
{for(var r=(from?from:0);r<=(to?to:3);r++)
{for(var c=0;c<7;c++)
{cell=document.getElementById('r'+r+'c'+c);while(cell.lastChild!=null)
{Util.removeHandlers(cell.lastChild);cell.removeChild(cell.lastChild);}}}}
Calendar.prototype.fill=function()
{this.filter.clear();for(var i=0;i<calendar.components.length;i++)
{var comp=calendar.components[i];if((/^VEVENT$/i).test(comp.name))
{this.filter.add(comp.getPropertyValue(/^CATEGORIES$/i));var dtstart=Property.asDate(comp.getPropertyValue(/^DTSTART$/i));var day=document.getElementById('date'+Property.date2text(dtstart));if(day)
{var uid=comp.getPropertyValue(/^UID$/i);var div=document.getElementById('uid'+uid);if(div==null)
{div=document.createElement('div');div.style.overflow='hidden';div.style.paddingBottom='3px';div.style.whiteSpace='nowrap';if(Util.isIE||true)
{div.style.width=day.offsetWidth+'px';}
div.setAttribute('id','uid'+uid);var a=document.createElement('a');a.name=uid;a.href='#';a.style.color='#333';a.style.textDecoration='none';a.onmouseover=Detail.show;a.onclick=Util.returnFalse;div.insertBefore(a,null);var text=document.createTextNode(comp.getPropertyValue(/^SUMMARY$/i));a.insertBefore(text,null);var before=null;var list=day.getElementsByTagName('div');if(list)
{var compKey=this.getSortKey(div);for(var j=0;j<list.length;j++)
{var otherKey=this.getSortKey(list.item(j));if(otherKey>compKey)
{before=list.item(j);break;}}}
day.insertBefore(div,before);}}}}
this.filter.apply();}
Calendar.prototype.getSortKey=function(div)
{var result=undefined;var vevent=calendar.getComponent(String(div.id).substring(3));if(vevent)
{result='';var text=vevent.getPropertyValue(/^DTSTART$/i);if(text)
{result=text;}
text=vevent.getPropertyValue(/^SUMMARY$/i);if(text)
{result=result+'~'+text;}}
return result;}
Calendar.prototype.init=function(when,offset)
{var msPerDay=24*60*60*1000;var time=new Date();var yearToday=time.getFullYear();var monthToday=time.getMonth();var dateToday=time.getDate();if(when&&when.getTime)
{time.setTime(when.getTime());time.setMinutes(0);time.setHours(12);time.setTime(time.getTime()+offset*msPerDay);}
else if(document.filter.elements.when.value)
{time.setTime(Property.asDate(document.filter.elements.when.value));}
else if(location.search)
{when=Property.asDate(String(location.search).substr(1));if(when&&when.getTime)
{time.setTime(when.getTime());}}
time.setMinutes(0);time.setHours(12);time.setTime(time.getTime()-(time.getDay()*msPerDay));document.filter.elements.when.value=Property.date2text(time);for(var r=0;r<4;r++)
{for(var c=0;c<7;c++)
{var cell=document.getElementById('r'+r+'c'+c);if(!cell.firstChild)
{var year=time.getFullYear();var month=time.getMonth();var date=time.getDate();var iso=Property.date2text(time);cell.style.height='100%';cell.style.overflow='hidden';if(yearToday==year&&monthToday==month&&dateToday==date)
{cell.style.backgroundColor='#fff';}
else
{cell.style.backgroundColor=(month%2)?'#ddd':'#eee';}
var day=document.createElement('div');day.setAttribute('id','date'+iso);cell.insertBefore(day,null);if(this.editor)
{var div=document.createElement('div');div.style.position='absolute';div.style.paddingLeft='5px';var a=document.createElement('a');a.name='date'+iso;a.href='edit.htm?date='+iso;a.insertBefore(document.createTextNode('add'),null);div.insertBefore(a,null);day.insertBefore(div,null);}
div=document.createElement('div');day.insertBefore(div,null);var span=document.createElement('span');span.setAttribute('id','head'+iso);div.insertBefore(span,null);div.style.fontFamily='sans-serif';div.style.color='#999';div.style.fontSize='120%';div.style.fontWeight='900';div.style.textAlign='right';text=document.createTextNode(year==yearToday?i18nDictionary.formatDate_medium_noyear(time):i18nDictionary.formatDate_medium(time));div.insertBefore(text,null);}
time.setTime(time.getTime()+msPerDay);}}
this.fill();if(window.Weather)
{window.Weather.display();}}
Calendar.prototype.merge=function(other)
{for(var i=0;i<other.components.length;i++)
{if((/^VEVENT$/i).test(other.components[i].name))
{var uid=other.components[i].getPropertyValue(/^UID$/i);if(!this.getComponent(uid))
{this.components[this.components.length]=other.components[i];}}}}
Calendar.prototype.move=function(delta)
{Detail.hide();var cell=document.getElementById('r0c0');var when=Property.asDate(cell.firstChild.id.substr(4));for(var r=((delta<0)?3:0);0<=r&&r<=3;r+=((delta<0)?-1:1))
{this.clear(r,r);for(var c=0;c<7;c++)
{cell=document.getElementById('r'+r+'c'+c);var source=r+delta;if(source>=0&&source<=3)
{var from=document.getElementById('r'+source+'c'+c);while(from.firstChild!=null)
{var child=from.firstChild;from.removeChild(from.firstChild);cell.insertBefore(child,null);cell.style.backgroundColor=from.style.backgroundColor;}}}}
this.init(when,delta*7);}
Util.chainHandler('onload',function()
{var ajax=Util.isIE?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();ajax.onreadystatechange=function()
{if(ajax.readyState==4)
{var text=(ajax.status==200)?new Text(ajax.responseText):null;window.calendar=new Calendar(text);calendar.init();}}
var base=String(location.href).replace(/\/(bluegolf|league|manage)\/+([^\/]+)(\/+schedule\/+[^\/]*)*\/+.*/,"/bluegolf/$2$3");ajax.open('GET',base+'/calendar.ics?utc=n');ajax.send(null);});