// (c)2009

var SmoothCalendar=new Class
(
{
events:[],daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],weekDays:["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],monthsOfYear:["January","February","March","April","May","June","July","August","September","October","November","December"],dayNumbers:{"sunday":0,"monday":1,"tuesday":2,"wednesday":3,"thursday":4,"friday":5,"saturday":6},isIE6:(Browser.Engine.trident&&Browser.Engine.version==4),isIE:(Browser.Engine.trident),container:null,currentDate:null,dateBeingViewed:null,dayBeingViewed:null,boxingWidth:null,EVENTBOARD_PADDING:30,
hijriCal:{"1-10":"12 Shawal","2-10":"13 Shawal","3-10":"14 Shawal","4-10":"15 Shawal","5-10":"16 Shawal","6-10":"17 Shawal","7-10":"18 Shawal","8-10":"19 Shawal","9-10":"20 Shawal","10-10":"21 Shawal","11-10":"22 Shawal","12-10":"23 Shawal","13-10":"24 Shawal","14-10":"25 Shawal","15-10":"26 Shawal","16-10":"27 Shawal","17-10":"28 Shawal","18-10":"29 Shawal","19-10":"30 Shawal","20-10":"1 Dhul Qi'dah","21-10":"2 Dhul Qi'dah","22-10":"3 Dhul Qi'dah","23-10":"4 Dhul Qi'dah","24-10":"5 Dhul Qi'dah","25-10":"6 Dhul Qi'dah","26-10":"7 Dhul Qi'dah","27-10":"8 Dhul Qi'dah","28-10":"9 Dhul Qi'dah","29-10":"10 Dhul Qi'dah","30-10":"11 Dhul Qi'dah","31-10":"12 Dhul Qi'dah",
"1-11":"13 Dhul Qi'dah","2-11":"14 Dhul Qi'dah","3-11":"15 Dhul Qi'dah","4-11":"16 Dhul Qi'dah","5-11":"17 Dhul Qi'dah","6-11":"18 Dhul Qi'dah","7-11":"19 Dhul Qi'dah","8-11":"20 Dhul Qi'dah","9-11":"21 Dhul Qi'dah","10-11":"22 Dhul Qi'dah","11-11":"23 Dhul Qi'dah","12-11":"24 Dhul Qi'dah","13-11":"25 Dhul Qi'dah","14-11":"26 Dhul Qi'dah","15-11":"27 Dhul Qi'dah","16-11":"28 Dhul Qi'dah","17-11":"29 Dhul Qi'dah","18-11":"1 Dhul Hijjah","19-11":"2 Dhul Hijjah","20-11":"3 Dhul Hijjah","21-11":"4 Dhul Hijjah","22-11":"5 Dhul Hijjah","23-11":"6 Dhul Hijjah","24-11":"7 Dhul Hijjah","25-11":"8 Dhul Hijjah","26-11":"9 Dhul Hijjah","27-11":"10 Dhul Hijjah","28-11":"11 Dhul Hijjah","29-11":"12 Dhul Hijjah","30-11":"13 Dhul Hijjah",
"1-12":"14 Dhul Hijjah","2-12":"15 Dhul Hijjah","3-12":"16 Dhul Hijjah","4-12":"17 Dhul Hijjah","5-12":"18 Dhul Hijjah","6-12":"19 Dhul Hijjah","7-12":"20 Dhul Hijjah","8-21":"17 Dhul Hijjah","9-12":"22 Dhul Hijjah","10-12":"23 Dhul Hijjah","11-12":"24 Dhul Hijjah","12-12":"25 Dhul Hijjah","13-12":"26 Dhul Hijjah","14-12":"27 Dhul Hijjah","15-12":"28 Dhul Hijjah","16-12":"29 Dhul Hijjah","17-12":"30 Dhul Hijjah","18-12":"1 Muharram","19-12":"2 Muharram","20-12":"3 Muharram","21-12":"4 Muharram","22-12":"5 Muharram","23-12":"6 Muharram","24-12":"7 Muharram","25-12":"8 Muharram","26-12":"9 Muharram","27-12":"10 Muharram","28-12":"11 Muharram","29-12":"12 Muharram","30-12":"13 Muharram","31-12":"14 Muharram",
"1-1":"15 Muharram","2-1":"16 Muharram","3-1":"17 Muharram","4-1":"18 Muharram","5-1":"19 Muharram","6-1":"20 Muharram","7-1":"21 Muharram","8-1":"22 Muharram","9-1":"23 Muharram","10-1":"24 Muharram","11-1":"25 Muharram","12-1":"26 Muharram","13-1":"27 Muharram","14-1":"28 Muharram","15-1":"29 Muharram","16-1":"1 Safar","17-1":"2 Safar","18-1":"3 Safar","19-1":"4 Safar","20-1":"5 Safar","21-1":"6 Safar","22-1":"7 Safar","23-1":"8 Safar","24-1":"9 Safar","25-1":"10 Safar","26-1":"11 Safar","27-1":"12 Safar","28-1":"13 Safar","29-1":"14 Safar","30-1":"15 Safar","31-1":"16 Safar",
"1-2":"17 Safar","2-2":"18 Safar","3-2":"19 Safar","4-2":"20 Safar","5-2":"21 Safar","6-2":"22 Safar","7-2":"23 Safar","8-2":"24 Safar","9-2":"25 Safar","10-2":"26 Safar","11-2":"27 Safar","12-2":"28 Safar","13-2":"29 Safar","14-2":"30 Safar","15-2":"1 Rabi-ul Awal","16-2":"2 Rabi-ul Awal","17-2":"3 Rabi-ul Awal","18-2":"4 Rabi-ul Awal","19-2":"5 Rabi-ul Awal","20-2":"6 Rabi-ul Awal","21-2":"7 Rabi-ul Awal","22-2":"8 Rabi-ul Awal","23-2":"9 Rabi-ul Awal","24-2":"10 Rabi-ul Awal","25-2":"11 Rabi-ul Awal","26-2":"12 Rabi-ul Awal","27-2":"13 Rabi-ul Awal","28-2":"14 Rabi-ul Awal",
"1-3":"15 Rabiul Awal","2-3":"16 Rabiul Awal","3-3":"17 Rabiul Awal","4-3":"18 Rabiul Awal","5-3":"19 Rabiul Awal","6-3":"20 Rabiul Awal","7-3":"21 Rabiul Awal","8-3":"22 Rabiul Awal","9-3":"23 Rabiul Awal","10-3":"24 Rabiul Awal","11-3":"25 Rabiul Awal","12-3":"26 Rabiul Awal","13-3":"27 Rabiul Awal","14-3":"28 Rabiul Awal","15-3":"29 Rabiul Awal","16-3":"30 Rabiul Awal","17-3":"1 Rabiul Thani","18-3":"2 Rabiul Thani","19-3":"3 Rabiul Thani","20-3":"4 Rabiul Thani","21-3":"5 Rabiul Thani","22-3":"6 Rabiul Thani","23-3":"7 Rabiul Thani","24-3":"8 Rabiul Thani","25-3":"9 Rabiul Thani","26-3":"10 Rabiul Thani","27-3":"11 Rabiul Thani","28-3":"12 Rabiul Thani","29-3":"13 Rabiul Thani","30-3":"14 Rabiul Thani","31-3":"15 Rabiul Thani"},view:null,

initialize:function(container,startDate,view){
	this.container=container;
	this.currentDate=(startDate)?startDate:new Date();
	this.view=view;
	if($type(this.container)!='element') this.container=$(this.container)
	this.container.set('class','smoothcalendar');
	var eventElements=this.container.getElements('div');
	var date,node;
	hijriYear=parseInt(this.currentDate.getFullYear()-622+(this.currentDate.getFullYear()-622)/32) + ' AH';
	for(var i=0;i<eventElements.length;i++){
		node=eventElements[i];
		date=node.getProperty('class');
		if(date){
			date=new Date(date);
			this.events.push({date:date,content:node.get('html'),title:node.get('title')})
		}
	}
this.sortEvents();
this.generateCalendar();
},

numberOfDaysInMonth:function(dateObject){
	var month=dateObject.getMonth();
	if(month==1){
		var leapYear=(new Date(dateObject.getYear(),1,29).getDate())==29;
		if(leapYear)
			return 29
		else
			return 28;
	}else 
	return this.daysInMonth[month];
},

dayHasEvents:function(dayOfMonth){
	var year=this.currentDate.getFullYear();
	var month=this.currentDate.getMonth();
	var date;
	for(var i=0;i<this.events.length;i++){
		date=this.events[i].date;
		if(date.getFullYear()==year&&date.getMonth()==month&&date.getDate()==dayOfMonth){
			return true;
		}
	}
	return false;
},

getEventsOfDay:function(dayOfMonth){
	var year=this.currentDate.getFullYear();
	var month=this.currentDate.getMonth();
	var event,result=[];
	for(var i=0;i<this.events.length;i++){
		event=this.events[i];
		if(event.date.getFullYear()==year&&event.date.getMonth()==month&&event.date.getDate()==dayOfMonth){
			result.push(event);
		}
	}
	return result;
},

sortEvents:function(){
	var j,tmp,events=this.events;
	for(var i=1;i<events.length;i++){
		tmp=this.events[i];
		for(j=i;j>0&&events[j-1].date>tmp.date;j--)
			events[j]=events[j-1];
			events[j]=tmp;
	}
},

firstDayOfMonth:function(dateObject){
	dateObject.setDate(1);
	return dateObject.getDay();
},

getDayContent:function(dayNumber){
	var eventCount=this.getEventsOfDay(dayNumber).length;
	var dayNumberEl=new Element("p",{'class':'day_number','style':'color:#40FF40;','html':((dayNumber<10)?'0'+dayNumber:dayNumber)});
	if(this.view=='compact')dayNumberEl=new Element("p",{'class':'day_number_compact','html':((dayNumber<10)?'0'+dayNumber:dayNumber)});
	//var dayCountEl=new Element("p",{'class':'day_event_count','html':((eventCount!=0)?eventCount+' Entries':'&nbsp;')});
	var dayCountEl=new Element("p",{'class':'day_event_count','html':((eventCount!=0)?'+':'&nbsp;')});	
	if(this.view=='compact')dayCountEl=new Element("p",{'class':'day_event_count_compact','html':((eventCount!=0)?'+':'&nbsp;')});	
	return[dayNumberEl,dayCountEl];
},

getDayContentDay:function(dayNumber){
	var eventCount=this.getEventsOfDay(dayNumber).length;
	//var dateString=this.monthsOfYear[this.currentDate.getMonth()]+', '+this.currentDate.getFullYear();
	var dateString=this.monthsOfYear[this.currentDate.getMonth()];
	var month = this.monthsOfYear[this.currentDate.getMonth()];
	var hijriDate=this.hijriCal[dayNumber + '-' + (this.currentDate.getMonth()+1)];
	var dayNumberE0=new Element("p",{'class':'day_number_day','style':'display:none;','html':((dayNumber<10)?'0'+dayNumber:dayNumber)});
	//var dayNumberEl=new Element("p",{'class':'day_number_day','style':'text-align:center;color:#FFF;','html':((dayNumber<10)?'0'+dayNumber:dayNumber)+' '+dateString});
	var dayNumberEl=new Element("p",{'class':'day_number_cal','style':'text-align:center;color:#FFF;','html':month});
	var dayNumberDate=new Element("p",{'class':'current_date_number','style':'line-height:65px;color:#FFF;','html':((dayNumber<10)?'0'+dayNumber:dayNumber)});
	var dayNumberE2=new Element("p",{'class':'current_date_day','style':'color:#333;','html':hijriDate+', '+hijriYear});
	var eventListContainer=new Element("p",{'class':'day_event_count','style':'text-align:center;color:#557F16;font-weight:bold;'});	
	var eventsOfDay=this.getEventsOfDay(dayNumber);
	for(var i=0;i<eventsOfDay.length;i++){
		var listItem=new Element('div');
		listItem.set('html',eventsOfDay[i].title);
		//eventListContainer.adopt(listItem);
	}
	//var dayCountEl=new Element("p",{'class':'day_event_count','style':'text-align:center;font-style:italic;color:#557F16;','html':((eventCount!=0)?'Read more...':'&nbsp;')});
	var dayCountEl=new Element("p",{'class':'day_event_count','style':'text-align:center;color:#557F16;','html':((eventCount!=0)?eventCount+' Entries':'&nbsp;')});
	if (eventCount == 1) var dayCountEl=new Element("p",{'class':'day_event_count','style':'text-align:center;color:#557F16;','html':eventCount+' Entry'});
	return[dayNumberE0,dayNumberEl,dayNumberDate,dayNumberE2,dayCountEl];
},

getNavigationRow:function(){
	var row=new Element('div',{'class':'navigations'});
	var center=new Element('div',{'class':((!this.isIE6)?'current_date':'current_date_IE6')});
	var left=new Element('div');
	var right=new Element('div');
	var width=Math.floor(this.container.offsetWidth/3);left.setStyle('width',width+'px');right.setStyle('width',width+'px');center.setStyle('width',width+'px');
	var dateString=this.monthsOfYear[this.currentDate.getMonth()]+', '+this.currentDate.getFullYear();
	var prevYear=new Element("a",{id:'previousYear',html:"&nbsp;",href:"Previous Year",title:"Previous Year"});
	var prevMonth=new Element("a",{id:'previousMonth',html:"&nbsp;",href:"Previous Month",title:"Previous Month"});
	var nextMonth=new Element("a",{id:'nextMonth',html:"&nbsp;",href:"Next Month",title:"Next Month"});
	var nextYear=new Element("a",{id:'nextYear',html:"&nbsp;",href:"Next Year",title:"Next Year"});prevYear.addEvent('click',this.prevYear.bind(this));prevMonth.addEvent('click',this.prevMonth.bind(this));nextYear.addEvent('click',this.nextYear.bind(this));nextMonth.addEvent('click',this.nextMonth.bind(this));center.set('html',dateString);left.adopt([prevYear,new Element('span',{'html':'&nbsp;&nbsp;'}),prevMonth]);right.adopt([nextMonth,new Element('span',{'html':'&nbsp;&nbsp;'}),nextYear]);row.adopt([left,center,right]);return row;},adjustWidthOfBox:function(element){var value=(this.container.offsetWidth/7)-1;element.setStyles({'width':(this.container.offsetWidth/7)-1+'px'});
},

getDayNames:function(){
	var days=[];
	var day=null;
	for(var i=0;i<this.weekDays.length;i++){
		days.push(new Element('div',{'html':this.weekDays[i],'class':'dayNames'}));
	}
	return days;
},

getWeekDaysRow:function(){
var row=new Element("div",{'class':'weekDays'});
var firstDayOfMonth=this.firstDayOfMonth(this.currentDate);
var totalDaysInMonth=this.numberOfDaysInMonth(this.currentDate);
var dayBox=null;
var currentPrintedDays=0;
var actualPrintedDays=0;
var columns=[];
for(var i=0;i<7;i++){
	columns.push(new Element('div',{'class':'columns'}));
	this.adjustWidthOfBox(columns[i]);
}
var weekDays=this.getDayNames();
for(i=0;i<weekDays.length;i++){
	columns[i].adopt(weekDays[i]);
}
var ownerColumnIndex=0;
while(actualPrintedDays!=totalDaysInMonth&&currentPrintedDays!=(totalDaysInMonth+firstDayOfMonth+Math.ceil(totalDaysInMonth/7))){
	dayBox=new Element('div');
	columnIndex=(currentPrintedDays%7==0)?0:columnIndex+1;
	if(currentPrintedDays>=firstDayOfMonth&&actualPrintedDays<=totalDaysInMonth-1){
		dayBox.adopt(this.getDayContent(actualPrintedDays+1));
		if(this.dayHasEvents(actualPrintedDays+1)){//this box has events
			dayBox.addEvent('mouseover',this.onCalendarDayMouseOver.bind(this));
			dayBox.addEvent('mouseout',this.onCalendarDayMouseOut.bind(this));
			dayBox.addEvent('click',this.onCalendarDayMouseClick.bind(this));
			dayBox.set('class','day_content_with_event');
		}else{ //this box does not have any events
			dayBox.set('class','day_content');
		}
		actualPrintedDays++;
	}else{
		dayBox.set('html','<p class="day_number">&nbsp</p><p class="day_event_count">&nbsp</p>');
		dayBox.set('class','emptyBox');
	}
	currentPrintedDays++;
	columns[columnIndex].adopt(dayBox);
}
row.adopt(columns);
return row;
},

getToday:function(){
	var todayDate=new Date();
	var actualPrintedDays=todayDate.getDate();
	var row=new Element("div",{'class':'columns'});
	var dayBox=null;
	dayBox=new Element('div');
	dayBox.adopt(this.getDayContentDay(actualPrintedDays));
	if(this.dayHasEvents(actualPrintedDays)){
		dayBox.addEvent('mouseover',this.onCalendarDayMouseOver.bind(this));
		dayBox.addEvent('mouseout',this.onCalendarDayMouseOut.bind(this));
		dayBox.addEvent('click',this.onCalendarDayMouseClick.bind(this));
		dayBox.set('class','day_content_with_event');
	}else{
		dayBox.set('class','day_content');
		if(this.view=='day')dayBox.set('class','day_content_day');
	}
	var dayBoxT=null;
	dayBoxT=new Element("div",{'style':'visibility:hidden'});
	var dayNumberT=new Element("p",{'class':'day_number','html':((actualPrintedDays<10)?'0'+actualPrintedDays:actualPrintedDays)});
	var eventCount=this.getEventsOfDay(actualPrintedDays).length;//alert('eventCount='+eventCount);
	var dayCountT=new Element("p",{'class':'day_event_count','html':((eventCount!=0)?eventCount+' Entries':'&nbsp;')});	
	dayBoxT.adopt(dayNumberT);dayBoxT.adopt(dayCountT);
	if(this.view=='day') row.adopt(dayBoxT);
	row.adopt(dayBox);
	return row;
},

generateCalendar:function(){
	this.container.empty();
	if(this.view=="month"){
		//this.container.adopt(this.getNavigationRow());
		this.container.adopt(this.getWeekDaysRow());
	}
	if(this.view=="compact"){
		this.container.adopt(this.getWeekDaysRow());
	}	
	if(this.view=="day"){
		//this.container.adopt(this.getNavigationRow());
		//this.container.adopt(this.getWeekDaysRow());
		this.container.adopt(this.getToday());
	}
	if(this.view=="both"){
		this.container.adopt(this.getNavigationRow());
		this.container.adopt(this.getWeekDaysRow());
		this.container.adopt(this.getToday());		
	}	
},

extractTargetFromEvent:function(event){
	var container=((event.target.nodeName=='P')?event.target.parentNode:event.target);
	return container;
},

onCalendarDayMouseOver:function(event){
	if(this.dayBeingViewed)	return;
	var container=this.extractTargetFromEvent(event);
	if(!container) return;
	var day=container.getFirst();
	container.morph(".day_content_with_event_mouseover");
},

onCalendarDayMouseOut:function(event){
	if(this.dayBeingViewed) return;
	var container=this.extractTargetFromEvent(event);
	if(!container) return;
	var day=container.getFirst();
	//container.morph(".day_content_with_event");
},

onCalendarDayMouseClick:function(event){
	//alert('this.dayBeingViewed='+this.dayBeingViewed);
	if(this.dayBeingViewed)	return;
	var container=this.extractTargetFromEvent(event);
	//alert(container.getFirst().get('text'));
	if(!container) return;
	var day=container.getFirst();
	var dayNumber=day.get('text');
	//alert('dayNumber='+dayNumber);
	dayNumber=(dayNumber[0]=='0')?dayNumber.substr(1,dayNumber.length).toInt():dayNumber.toInt();
	this.dateBeingViewed=this.currentDate;
	this.dateBeingViewed.setDate(dayNumber);
	this.animateOpenningDayEvents(dayNumber);
},

animateOpenningDayEvents:function(dayNumber,target){
	var eventsOfDay=this.getEventsOfDay(dayNumber);
	if(eventsOfDay&&eventsOfDay.length==0)return;
	if(!target){
		var paragraphs=this.container.getElements('p');
		//alert('paragraphs.length='+paragraphs.length);
		for(var i=0;i<paragraphs.length;i++){
			target=(paragraphs[i].get('text').substring(0,2)==dayNumber)?paragraphs[i].parentNode:null;
			//alert('paragraphs[i].get(\'text\')='+paragraphs[i].get('text') + ' dayNumber='+dayNumber);
			if(target){
				//alert('paragraphs[i].get(\'text\').substring(0,2)='+paragraphs[i].get('text').substring(0,2) + ' dayNumber='+dayNumber);				
				break;
			}
		}
		if(!target)return;
	}//alert('target='+target.get('text'));
	target.set('style','visiblity:visible');
	var eventList=target.clone();   
//	eventList.set('style','visibility:visible');
//	target.set('style','visiblity:hidden');
	this.container.adopt(eventList);
	eventList.set('class','events_list_box');
	var width=target.offsetWidth-(eventList.getStyle('border-width').toInt()+eventList.getStyle('padding').toInt()*2);
	var height=target.offsetHeight-(eventList.getStyle('border-width').toInt()+eventList.getStyle('padding').toInt()*2);
	//alert(target.offsetHeight+' height='+height+' width='+width);
	var targetPosition=this.getRelativePosition(target);
	eventList.setStyles({width:width+'px',height:height+'px',borderColor:"#000",backgroundColor:'#000',left:targetPosition.left+'px',top:targetPosition.top+'px'});
	target.setStyles({'visibility':'hidden'});
	var leftToBe,topToBe,widthToBe,heightToBe=0;leftToBe=this.EVENTBOARD_PADDING;topToBe=this.EVENTBOARD_PADDING;widthToBe=this.container.offsetWidth-(leftToBe*2)-(eventList.getStyle('border-width').toInt()+eventList.getStyle('padding').toInt());heightToBe=this.container.offsetHeight-(topToBe*2)-(eventList.getStyle('border-width').toInt()+eventList.getStyle('padding').toInt());this.dayBeingViewed={day:dayNumber,target:target,animationEl:eventList,originals:{left:targetPosition.left,top:targetPosition.top,width:width,height:height}};
	//alert('heightToBe='+heightToBe+' widthToBe='+widthToBe+' leftToBe='+leftToBe+' topToBe='+topToBe);
	if (this.view=='day'){
		heightToBe=220;widthToBe=265;leftToBe=0;topToBe=0;
	}
	//heightToBe=250;widthToBe=265;leftToBe=0;topToBe=0;
	var morph=eventList.get('morph');
	morph.set({transitions:Fx.Transitions.Elastic.easeIn})
	morph.onComplete=this.onOpenningDayEventAnimationComplete.bind(this);
	morph.start({'width':widthToBe+'px','height':heightToBe+'px','left':leftToBe+'px','top':topToBe+'px'});
},

onOpenningDayEventAnimationComplete:function(){
	with(this.dateBeingViewed){
		var dayText=this.weekDays[getDay()]+' '+this.monthsOfYear[getMonth()]+' '+getDate()+', '+getFullYear();
		var hijriDayText = this.hijriCal[getDate() + '-' + (getMonth()+1)] + ', ' + hijriYear;
	}
	var animationPanel=this.dayBeingViewed.animationEl;
	var dayNumber=animationPanel.getFirst();
	var eventCountText=animationPanel.childNodes[1];
	var fullDayText=dayNumber.cloneNode(true);
	fullDayText.set({html:dayText.toUpperCase(),'id':'fullDateText','style':'','class':''});
	var fullDayTextH=dayNumber.cloneNode(true);
	fullDayTextH.set({html:hijriDayText.toUpperCase(),'id':'fullDateText','style':'font-size:11px;','class':''});
	var div=new Element('div');
	animationPanel.insertBefore(div,animationPanel.getFirst());
	div.setStyles({'height':(dayNumber.offsetHeight+25)+'px','overflow':'hidden','position':'relative'});
	div.adopt([dayNumber,fullDayText,fullDayTextH]);
	dayNumber.setStyles({'position':'absolute','top':'0px','left':'0px'});
	fullDayText.setStyles({'position':'absolute','top':dayNumber.offsetHeight+'px','left':'0px'});
	fullDayTextH.setStyles({'top':25+'px','left':'0px'});
	var eventListContainer=new Element('div',{id:'eventListContainer'});
	var eventDetailContainer=new Element('div',{id:'eventDetailContainer'});
	var eventsOfDay=this.getEventsOfDay(this.dateBeingViewed.getDate());
	eventListContainer.setStyles({'visibility':'hidden','opacity':'0','overflow':'auto'});
	eventDetailContainer.setStyle('overflow','auto');
	for(var i=0;i<eventsOfDay.length;i++){
		var listItem=new Element('div');
		eventListContainer.adopt(listItem);
		listItem.addEvent('mouseover',this.onEventMouseOver.bind(this));
		listItem.addEvent('mouseout',this.onEventMouseOut.bind(this));
		listItem.addEvent('click',this.onEventMouseClick.bind(this));
		listItem.set('class','smoothcalendar_listItem');
		listItem.set('html',(i+1)+'. '+eventsOfDay[i].title);
	}
	this.dayBeingViewed.listContainer=eventListContainer;
	this.dayBeingViewed.detailContainer=eventDetailContainer;
	this.dayBeingViewed.eventsOfDay=eventsOfDay;
	this.dayBeingViewed.eventCountText=eventCountText;
	animationPanel.adopt([eventListContainer,eventDetailContainer]);
	eventListContainer.setStyle('height',(animationPanel.getStyle('height').toInt()-eventListContainer.offsetTop)+'px');
	eventDetailContainer.setStyles({'position':'absolute','top':eventListContainer.offsetTop+'px','left':animationPanel.offsetWidth+'px','width':eventListContainer.getStyle('width'),'height':eventListContainer.getStyle('height')});
	var closeElement=new Element('a',{'id':'smoothcalendarclose','html':'&times;','href':'javascript:;'});
	closeElement.addEvent('click',this.onCloseClick.bind(this));
	animationPanel.adopt(closeElement);
	var fx=new Fx.Morph(dayNumber,{duration:300}).start({'top':-dayNumber.offsetHeight+'px'});
	var fx=new Fx.Morph(fullDayText,{duration:300}).start({'top':'0px'});
	var fx=new Fx.Morph(fullDayTextH,{duration:300}).start({'margin-top':'25px'});
	eventListContainer.fade('in');
},

onEventMouseOver:function(event){
	event.target.morph('.smoothcalendar_listItem_mouseover');
},

onEventMouseOut:function(event){
	event.target.morph('.smoothcalendar_listItem');
},

getIndexOfNode:function(child){var parent=child.parentNode;
	if(!parent)return null;
	for(var i=0;i<parent.childNodes.length;i++){
		if(parent.childNodes[i]==child)return i;
	}
	return null;
},

onGoBackClick:function(event){
	var listContainer=this.dayBeingViewed.listContainer;
	var detailContainer=this.dayBeingViewed.detailContainer;
	with(listContainer.get('morph')){
		set({transition:Fx.Transitions.Elastic.easeOut});
		options.duration=300;start({'left':'0px'});
	}
	with(detailContainer.get('morph')){
		set({transition:Fx.Transitions.Elastic.easeOut});
		options.duration=300;
		start({'left':listContainer.parentNode.offsetWidth+'px'});
	}
	event.target.setStyle('display','none');
},

onEventMouseClick:function(event){
	var listItem=event.target;
	var listContainer=this.dayBeingViewed.listContainer;
	var detailContainer=this.dayBeingViewed.detailContainer;
	var eventIndex=this.getIndexOfNode(listItem);
	var thisEvent=this.dayBeingViewed.eventsOfDay[eventIndex];
	var goBackLink=this.dayBeingViewed.animationEl.getElementById('smoothcalendargoBackLink');
	if(!goBackLink){
		//alert('this.dayBeingViewed.eventCountText.offsetTop='+this.dayBeingViewed.eventCountText.offsetTop);
		goBackLink=new Element('a',{'id':'smoothcalendargoBackLink','html':'&lsaquo; Back','href':'javascript:;'});
		goBackLink.setStyles({'top':this.dayBeingViewed.eventCountText.offsetTop+'px','left':this.dayBeingViewed.eventCountText.offsetLeft+'px','padding-top':this.dayBeingViewed.eventCountText.getStyle('padding-top')});
		goBackLink.addEvent('click',this.onGoBackClick.bind(this));this.dayBeingViewed.animationEl.adopt(goBackLink);
	}else{
		goBackLink.setStyle('display','block');
	}
	var title=new Element('h2',{'html':thisEvent.title});
	var detail=new Element('div',{'html':thisEvent.content});detailContainer.empty();
	detailContainer.adopt([title,detail]);
	with(detailContainer.get('morph')){
		set({transition:Fx.Transitions.Elastic.easeOut});
		options.duration=300;
		onStart=function(){
			listContainer.setStyle('overflow','hidden');
			detailContainer.setStyle('overflow','hidden');
		};
		onComplete=function(){
			listContainer.setStyle('overflow','auto');
			detailContainer.setStyle('overflow','auto');
		};
		start({'left':listContainer.offsetLeft+'px'});
	}
	with(listContainer.get('morph')){
		set({transition:Fx.Transitions.Elastic.easeOut});
		options.duration=300;
		start({'left':-listContainer.parentNode.offsetWidth+'px'});
	}
},

onCloseClick:function(event){
	this.dayBeingViewed.closingStage=0;
	this.animateClosingDayEvents(event);
},

animateClosingDayEvents:function(event){
	var animationPanel=this.dayBeingViewed.animationEl;
	var detailContainer=this.dayBeingViewed.detailContainer;
	var listContainer=this.dayBeingViewed.listContainer;
	var dayNumber=animationPanel.getFirst().getFirst();
	var dayName=dayNumber.getNext();
	this.dayBeingViewed.closingStage++;
	switch(this.dayBeingViewed.closingStage){
		case 1:
		if(listContainer.getStyle('left')&&listContainer.getStyle('left').toInt()<0)
			detailContainer.fade('out');
		else
			listContainer.fade('out');
		event.target.fade('out');
		var fx=new Fx.Morph(dayNumber,{duration:300});
		fx.onComplete=this.animateClosingDayEvents.bind(this);
		fx.start({'top':'0px'});
		var fx=new Fx.Morph(dayName,{duration:300});
		fx.start({'top':dayNumber.offsetHeight+'px'});
		break;

		case 2:
		detailContainer.destroy();
		listContainer.destroy();
		var fx=animationPanel.get('morph');
		fx.onComplete=this.animateClosingDayEvents.bind(this);
		fx.start({'left':this.dayBeingViewed.originals.left+'px','top':this.dayBeingViewed.originals.top+'px','height':this.dayBeingViewed.originals.height+'px','width':this.dayBeingViewed.originals.width+'px'});
		break;

		case 3:
		animationPanel.parentNode.removeChild(animationPanel);
		this.dayBeingViewed.target.setStyle('borderColor','');
		//alert('this.dayBeingViewed.target.get(\'text\')='+this.dayBeingViewed.target.get('text'));
		this.dayBeingViewed.target.fade('in');
		if(this.view=='day')this.dayBeingViewed.target.set('style','display:none');
		//this.dayBeingViewed.target.hide();
		this.dayBeingViewed=null;
		break;
	}
},

getRelativePosition:function(element){
	var result={left:0,top:0};
	do{
		result.left+=element.offsetLeft;
		result.top+=element.offsetTop;
		element=element.offsetParent;
	}
	while(element&&element!=this.container);
	return result;
},

nextMonth:function(event){
	if(event)event.stop();
	if(this.dayBeingViewed)return;
	this.currentDate.setMonth(this.currentDate.getMonth()+1);
	this.generateCalendar();
},

nextYear:function(event){
	if(event)event.stop();
	if(this.dayBeingViewed)return;
	this.currentDate.setYear(this.currentDate.getFullYear()+1);
	this.generateCalendar();
},

prevMonth:function(event){
	if(event)event.stop();
	if(this.dayBeingViewed)return;
	this.currentDate.setMonth(this.currentDate.getMonth()-1);
	this.generateCalendar();
},

prevYear:function(event){
	if(event)event.stop();
	if(this.dayBeingViewed)return;
	this.currentDate.setYear(this.currentDate.getFullYear()-1);
	this.generateCalendar();
}

}
);