getToday();

daysOfWeek=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
monthsOfYear=["January","February","March","April","May","June","July","August","September","October","November","December"];
blockoutDates=[];
ticketdates=[];

function calendar(cobb){

this.calistring='<table border="0" cellspacing="0" cellpadding="0" align="center" id="calendartable">\
<tr><td id="backtd"></td><td colspan="5" id="monthtd"></td><td id="nexttd"></td></tr>\
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>\
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>\
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>\
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>\
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>\
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>\
</table>';

this.toString=function(){ return this.calistring; }
this.write=function(){ document.writeln(this.calistring); populateTable(); }
this.inner=function(innerTarget){ document.getElementById(innerTarget).innerHTML=this.calistring; populateTable(); }

return this;
}

function isBlockOut(_d){
outblockout=false;
for (b=0; b<blockoutDates.length; b++){
try{ if (_d>=new Date(blockoutDates[b].start+" 00:00") && _d<=new Date(blockoutDates[b].end+" 23:59")){ outblockout=true; break; }}catch(e){}}
return outblockout;
}

function isAvailable(_d){
outavailable=false;
for (t=0; t<ticketdates.length; t++){
if (_d>=new Date(ticketdates[t].date+" 00:00") && _d<=new Date(ticketdates[t].date+" 23:59")){
datetoget=formatDate(new Date(ticketdates[t].date+" 00:00"), "yyyyMMdd");
if (entries[datetoget]<ticketdates[t].tickets){ outavailable=true; }
break;
}}
return outavailable;
}

function resetDates(){
dayTroll=new Date(today);
dayTroll.setDate(1); dayTroll.setHours(0); dayTroll.setMinutes(0);
currentMonth=today.getMonth();
}

dayTroll=new Date();
dayTroll.setDate(1); dayTroll.setHours(0); dayTroll.setMinutes(0);
currentMonth=today.getMonth();

rangeStart=new Date(); rangeStart=today;
rangeEnd=new Date(); rangeEnd.setYear(today.getFullYear()+1);

function populateTable(){

dt=gid('calendartable');

for (r=1; r<dt.rows.length; r++){
for (c=0; c<7; c++){
dt.rows[r].getElementsByTagName('td')[c].innerHTML="";
dt.rows[r].getElementsByTagName('td')[c].className="bored";
}}

inner('monthtd', '<b>'+monthsOfYear[dayTroll.getMonth()]+' '+dayTroll.getFullYear()+'</b>');

thisweek=1;
while (dayTroll.getMonth()==currentMonth){
thisdate=dayTroll.getDate();
thisday=dayTroll.getDay();
if (thisday==0 && thisdate>1){ thisweek++; }

dt.rows[thisweek].getElementsByTagName('td')[thisday].innerHTML=((dayTroll.getDay()>0 && dayTroll.getDay()<6 && dayTroll<=rangeEnd && dayTroll>=rangeStart && isAvailable(dayTroll))?'<a href="javascript:returnDate(\''+dayTroll.toString()+'\')">'+thisdate+'</a>':thisdate);
dayTroll.setDate(dayTroll.getDate()+1);
}

for (c=0; c<7; c++){ dt.rows[6].getElementsByTagName('td')[c].className=((dt.rows[6].getElementsByTagName('td')[0].innerHTML=="")?'unbored':'bored'); }
setCalendarNav();
}

function setCalendarNav(){
tempdate=new Date(dayTroll.toString());
gid('nexttd').innerHTML=((tempdate<=rangeEnd)?'<a href="javascript:changeMonth(1)">></a>':'');
tempdate.setMonth(tempdate.getMonth()-1);
tempdate.setDate(tempdate.getDate()-1);
gid('backtd').innerHTML=((tempdate>=rangeStart)?'<a href="javascript:changeMonth(-1)"><</a>':'');
}

function changeMonth(monthdelta){
dayTroll.setMonth(dayTroll.getMonth()+monthdelta-1);
currentMonth=dayTroll.getMonth();
populateTable();
}

function formatDate(vDate, vFormat){
//e.g. dd/MM/yy hh:mm:ss or DDD, Month dd, yyyy
var vDays=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var vMonths=["Jan.","Feb.","Mar.","Apr.","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."];
var vDay=addZero(vDate.getDate()); var vMonth=addZero(vDate.getMonth()+1); var vYearLong=addZero(vDate.getFullYear()); var vDoWeek=vDate.getDay();
var vYearShort=addZero(vDate.getFullYear().toString().substring(3,4)); var vYear=(vFormat.indexOf("yyyy")>-1?vYearLong:vYearShort);
var vHour=addZero(vDate.getHours()); var vMinute=addZero(vDate.getMinutes()); var vSecond=addZero(vDate.getSeconds());
return vFormat.replace(/DDD/g,vDays[vDoWeek]).replace(/DD/g,vDays[vDoWeek]).replace(/dd/g,vDay).replace(/MM/g,vMonth).replace(/y{2,4}/g,vYear).replace(/hh/g,vHour).replace(/mm/g,vMinute).replace(/ss/g,vSecond).replace(/Month/g,vMonths[vDate.getMonth()]);
}