	jQuery(document).ready(function(){
			//JQUERY UI DATEPICKER
			if (jQuery('#events_calendar').length) {
			
				var startRangeDate=new Date();

				  with(startRangeDate)
				  {
					setMonth(getMonth());
					setDate(1);
				  }
				  
				var endRangeDate=new Date('12/31/2015');
				//CHECK if Calendar has been setup correctly
				if (endRangeDate > startRangeDate) {
					var defaultDate;
					jQuery('#events_calendar').datepicker({
						dateFormat: 'mm/dd/yy',
						minDate: startRangeDate, 
						maxDate: endRangeDate,
						defaultDate: +0,
						firstDay: 1,
						onSelect: function(dateText, inst) { 
							showEvents(dateText, inst);
						}
					});
					//Default UpComing Events
					showUpcomingEvents();
					//highlightEvents();
					
				}
				else {
					jQuery('#message-none').removeClass('hide');
					jQuery('#message-none').text('Please setup the event calendar theme options in the backend correctly.');
				}
				
					
			}
			
			jQuery('.add-calendar').each(function(){
				jQuery(this).parent().find('ul').hide();
				jQuery(this).click(function() {
  					jQuery(this).parent().find('ul').toggle();
				});
				jQuery(this).parent().find('ul li').each(function() {	
  					jQuery(this).find('a').click(function() {
  						jQuery(this).parent().parent().hide();
					});
				});
			});
			
			
	});
	
	jQuery(document).ready(function(){
		//resetCalendarClickers();
	});
	
	//reset the jquery on month change
	function resetCalendarClickers() {

		//Next Month button
		if (jQuery('.ui-datepicker-next').attr('onClick') !== undefined) {
    		// attribute exists
    		var currentOnClickJS = jQuery('.ui-datepicker-next').attr('onClick');
    		currentOnClickJS = currentOnClickJS.toString() + 'highlightEvents();';
    		jQuery('.ui-datepicker-next').attr('onClick',currentOnClickJS);
		} 
		else {
   			// attribute does not exist
   			
		}

		//Previous Month button
		if (jQuery('.ui-datepicker-prev').attr('onClick') !== undefined) {
    		// attribute exists
    		var currentOnClickJS = jQuery('.ui-datepicker-prev').attr('onClick');
    		currentOnClickJS = currentOnClickJS.toString() + 'highlightEvents();';
    		jQuery('.ui-datepicker-prev').attr('onClick',currentOnClickJS);
		} 
		else {
   			// attribute does not exist
		}
		
		jQuery('.ui-datepicker-calendar a.ui-state-default').each(function (){
			if (jQuery(this).parent().attr('onClick') !== undefined) {
    			// attribute exists
    			var currentOnClickJS = jQuery(this).parent().attr('onClick');
    			var strcurrentOnClickJS = currentOnClickJS.toString();
    			var brokenstring = strcurrentOnClickJS.split(';'); 
  			
  				var stringpart1 = brokenstring[0];
  				var stringpart2 = brokenstring[1];
  				
    			strcurrentOnClickJS = stringpart1.toString() + ';highlightEvents();' + stringpart2.toString() + ';';
    			jQuery(this).parent().attr('onClick',strcurrentOnClickJS);
			} 
			else {
   				// attribute does not exist
			}
		});
		
		
		resetCalendarDayClickers()
		
	}
	
	function resetCalendarDayClickers() {
		jQuery('.ui-datepicker-calendar a.ui-state-default').each(function (){
		
			if ((jQuery(this).hasClass('ui-state-highlight')) || (jQuery(this).hasClass('ui-state-active'))) {
				//Do Nothing
			}
			else {
				jQuery(this).parent().addClass('ui-datepicker-unselectable ui-state-disabled');
			}
			
			if ((jQuery(this).hasClass('ui-state-highlight')) && (jQuery(this).parent().hasClass('ui-datepicker-today'))) {
				//check if has events for todays date
				var currentDate = new Date('08/21/2011');
				var datepickermonth = jQuery('span.ui-datepicker-month').text();
				var datepickeryear = jQuery('span.ui-datepicker-year').text();
				var hasevents = false;

				jQuery('#events-calendar div.event').each(function (){
					var startDateRaw = jQuery(this).find('p.date span.startdate').text();
					var startDate = new Date(startDateRaw);
					//Check for End Date
					if (jQuery(this).find('p.date span.enddate').text().length) {
						
						var endDateRaw = jQuery(this).find('p.date span.enddate').text();
						var endDate = new Date(endDateRaw);
					
						date1 = currentDate;
						date2 = startDate;
						date3 = endDate;
						
						if ( (date1.valueOf() >= date2.valueOf()) && (date1.valueOf() <= date3.valueOf()) ) {
							hasevents = true;
						}
						else {
							//Do Nothing
						}
						
					}
					else {
						date1 = currentDate;
						date2 = startDate;
						if (date1.valueOf() == date2.valueOf()) {
							hasevents = true;
						}
						else {
							//Do Nothing
						}
					}
						
				});
				
				//Check if has events for today
				if (hasevents) {
					//Do Not remove highlighting
					jQuery(this).removeClass('ui-state-hover');
				}
				else {
					//Remove highlighting from today
					jQuery(this).parent().addClass('ui-datepicker-unselectable ui-state-disabled');
					jQuery(this).removeClass('ui-state-highlight');
				}
				
			}
				
		});
	}
	
	//Highlights all event dates in the calendar
	function highlightEvents() {
		//alert('test');

		var eventDates=new Array();
		//Iterate through all the events
		jQuery('div.post').each(function (){
			//Add start date to the array
			var startDateRaw = jQuery(this).find('span.startdate').text();
			var startDate = new Date(startDateRaw);
			var startDay = startDate.getDate();
			var startMonth = startDate.getMonth();
			var startYear = startDate.getFullYear();
			eventDates.push(startYear + '/' + (startMonth + 1) + '/' + startDay);
			//Add end date to the array
			if (jQuery(this).find('span.enddate').text().length) {
				var endDateRaw = jQuery(this).find('p.date span.enddate').text();
				var endDate = new Date(endDateRaw);
				var endDay = endDate.getDate();
				var endMonth = endDate.getMonth();
				var endYear = endDate.getFullYear();
				eventDates.push(endYear + '/' + (endMonth + 1) + '/' + endDay);
			
				date1 = endDate;
  				date2 = startDate;
				while (date1 > date2)
  				{
  					
					date2.setDate(date2.getDate()+1);
  					// The number of milliseconds in one day
    				var ONE_DAY = 1000 * 60 * 60 * 24
    				// Convert both dates to milliseconds
    				var date1_ms = endDate.getTime()
    				var date2_ms = startDate.getTime()
    				// Calculate the difference in milliseconds
    				var difference_ms = Math.abs(date1_ms - date2_ms)
    				// Convert back to days and return
    				var daysInBetween = Math.round(difference_ms/ONE_DAY)
					//Add date to the array
					var date2Day = date2.getDate();
					var date2Month = date2.getMonth();
					var date2Year = date2.getFullYear();
					eventDates.push(date2Year + '/' + (date2Month + 1) + '/' + date2Day);
			
  				}
			}
			
  			
						
		});
		
		//Sort the events data
		var sortedEvents = arrayUnique(eventDates.sort());
		//alert(sortedEvents);
		
		var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
		var calendarYear = jQuery('span.ui-datepicker-year').text();
		var calendarMonth = jQuery('span.ui-datepicker-month').text();
		//jQuery('a.ui-state-default');
		//alert(calendarMonth);
		//alert ( currentDate );
		//Iterate through all the calendar dates
		
		for (x in sortedEvents)
  		{
  			var eventItem =sortedEvents[x];
  			var streventItem = eventItem.toString();
  			var brokenstring = streventItem.split('/'); 
  			
  			var eventYear = brokenstring[0];
  			var eventMonth = brokenstring[1];
  			var eventDay = brokenstring[2];
  			
  			//alert(typeof eventMonth);
  			
  			switch(eventMonth)
			{
				case '1':
  					eventMonth = 'January';
  					break;
				case '2':
  					eventMonth = 'February';
  					break;
				case '3':
  					eventMonth = 'March';
  					break;
				case '4':
  					eventMonth = 'April';
  					break;
				case '5':
  					eventMonth = 'May';
  					break;
				case '6':
  					eventMonth = 'June';
  					break;
				case '7':
  					eventMonth = 'July';
  					break;
				case '8':
  					eventMonth = 'August';
  					break;
				case '9':
  					eventMonth = 'September';
  					break;
				case '10':
  					eventMonth = 'October';
  					break;
				case '11':
  					eventMonth = 'November';
  					break;
				case '12':
  					eventMonth = 'December';
  					break;
				default:
  					eventMonth = 'January'
			}
			
			if (eventMonth == calendarMonth) {
				
				jQuery('.ui-datepicker-calendar a.ui-state-default').each(function (){
					var calendarDay = jQuery(this).text();
					//alert(jQuery(this).text());
					//alert (typeof calendarDay);
					//alert (typeof eventDay);
					if (calendarDay == eventDay) {
						jQuery(this).addClass('ui-state-highlight');
					}
					else {
						//jQuery(this).parent().removeAttr('onClick');
					}
				
				});
				
			}
  		}
		

		//Add highlight class to the calendar dates that match the events
		resetCalendarClickers();
	}
	
	//Removes duplicate Array values
	function arrayUnique(arrayName) {
    	var a = [];
    	var l = arrayName.length;
    	for(var i=0; i<l; i++) {
      	for(var j=i+1; j<l; j++) {
        	// If arrayName[i] is found later in the array
        	if (arrayName[i] === arrayName[j])
         	j = ++i;
      	}
      	a.push(arrayName[i]);
    	}
    	return a;
	}
	
	//Hides all event items from view
	function hideAllEvents() {
	
		jQuery('div.post').each(function (){
			if (jQuery(this).hasClass('hide')) {
				//DO NOTHING
			}
			else {
				jQuery(this).addClass('hide');
			}
		});
		
	}
	
	//Displays relevant event items
	function showEvents(dateText, inst) {
		
		var dateCalendar = new Date(dateText);
		//Prepare events
		hideAllEvents();
		//alert(dateCalendar);
		var globalcount = 0;
		//Iterate through event items
		jQuery('div.post span.startdate').each(function (){
			var rawDateEvent = jQuery(this).text();
			var dateEvent = new Date(rawDateEvent);
			var eventEndDateRaw = jQuery(this).parent().find('span.enddate').text();
			var eventEndDate = new Date(eventEndDateRaw);
			
			//Compare dates
			if (dateEvent.valueOf() == dateCalendar.valueOf()) {
				if (jQuery(this).parent().hasClass('hide')) {//.parent().parent().parent().parent().parent().parent().parent().parent()
					jQuery(this).parent().removeClass('hide');
					globalcount++;
				}
				else {
					//DO NOTHING
				}	
			}
			else if (eventEndDateRaw !== undefined) {
				//alert('test');
				if ((dateCalendar.valueOf() > dateEvent.valueOf()) && (dateCalendar.valueOf() <= eventEndDate.valueOf())) {
					if (jQuery(this).parent().hasClass('hide')) {
						jQuery(this).parent().removeClass('hide');
						globalcount++;
					}
					else {
						//DO NOTHING
					}
				}
			}
			else {
				//DO NOTHING
			}	
	
		});
		
		//Validation Message Output
		if (globalcount == 0) {
			showNoEvents();
		}
		else {
			if (jQuery('#message-none').hasClass('hide')) {
				//DO NOTHING
			}
			else {
				jQuery('#message-none').addClass('hide');
			}
			
			if (jQuery('#message-upcoming').hasClass('hide')) {
				//DO NOTHING
			}
			else {
				jQuery('#message-upcoming').addClass('hide');
			}
			
		}
		//alert(jQuery('#calendar h2 span').text());
		var selectedDate = jQuery('#events_calendar').datepicker('getDate');
		var selectedMonth = monthText(selectedDate);
		jQuery('#calendar h2 span').text(selectedMonth)
		highlightEvents();
	}
	
	//Returns Month Name in text format
	function monthText(dateText) {
		var d=new Date(dateText);
		var month=new Array(12);
		month[0]="January";
		month[1]="February";
		month[2]="March";
		month[3]="April";
		month[4]="May";
		month[5]="June";
		month[6]="July";
		month[7]="August";
		month[8]="September";
		month[9]="October";
		month[10]="November";
		month[11]="December";
		var formattedDate = month[d.getMonth()];
		return formattedDate;
	}
	
	//Shows error messages
	function showNoEvents() {
		
		if (jQuery('#message-none').hasClass('hide')) {
			jQuery('#message-none').removeClass('hide');
		}
		else {
			//DO NOTHING
		}
		
		if (jQuery('#message-upcoming').hasClass('hide')) {
			//DO NOTHING
		}
		else {
			jQuery('#message-upcoming').addClass('hide');
		}
		
	}
	
	//Shows Upcoming Events		
	function showUpcomingEvents() {
				
		var count = 0;
		var nextDate;
		
		var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
		
		//Iterate through event items
		jQuery('div.post span.startdate').each(function (){
			var dateEvent = new Date(jQuery(this).text())
			var rawDateEvent = jQuery(this).text();
			var rawDateEnd = jQuery(this).parent().find('span.enddate').text();
						
			//check if there isnt an end date for this event
			if (rawDateEnd == '') {
				var dateEnd = '';
			}
			else {
				var dateEnd = new Date(rawDateEnd);
			}
			
			//check if end date is defined
			if (dateEnd != '') {
				//if event start or end date equals todays date
				if ( (dateEvent.valueOf() == currentDate.valueOf()) || (dateEnd.valueOf() == currentDate.valueOf()) ) {
					nextDate = dateEvent;
				}
				else {
					// if start  date less than todays date and end date great than todays date
					if ( (dateEvent.valueOf() <= currentDate.valueOf()) && (dateEnd.valueOf() >= currentDate.valueOf())  ) {
						if (nextDate == undefined) {
							nextDate = dateEvent;
						}
					}
					else {
						//Default comparison
						if ( dateEvent.valueOf() >= currentDate.valueOf() ) {
							if (nextDate == undefined) {
								nextDate = dateEvent;
							}
						}
					}
				}
			} 
			else {
				//if event start date equals todays date
				if ( dateEvent.valueOf() == currentDate.valueOf() ) {
					nextDate = dateEvent;
				}
				else {
					//Default comparison
					if ( dateEvent.valueOf() >= currentDate.valueOf() ) {
						if (nextDate == undefined) {
							nextDate = dateEvent;
						}
					}
				}
			}
			
			
		});
		if (nextDate == undefined) {
			//throw error
			var enddate = jQuery('div.post span.enddate:last').text();
			if (enddate == '') {
				enddate = jQuery('div.post span.startdate:last').text()
			}
			nextDate = new Date(enddate);
			//Set calendar date and show events		
			//alert(nextDate);
			jQuery('#events_calendar').datepicker('setDate', nextDate );
			var inst = 0;
			showEvents(nextDate, inst);
		}
		else {
			//Set calendar date and show events		
			jQuery('#events_calendar').datepicker('setDate', nextDate );
			var inst = 0;
			showEvents(nextDate, inst);	
		}
	}
	
	//Display the next set of events on a date	
	function nextEventDate() {
		
		var count = 0;
		var nextDate;
		
		var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
		//Iterate through event items
		jQuery('div.post span.startdate').each(function (){
			var dateEvent = new Date(jQuery(this).text())
			var rawDateEvent = jQuery(this).text();
			//Compare dates
			if (dateEvent > currentDate) {
				if (nextDate == undefined) {
					nextDate = dateEvent;
				}
			}
		});
		//If no event found for criteria
		if (nextDate == undefined) {
			//Iterate through event items from earliest
			jQuery('div.post span.startdate').each(function (){
				var dateEvent = new Date(jQuery(this).text())
				var rawDateEvent = jQuery(this).text();
				//Get the first event item in the list
				if (count == 0) {
					if (dateEvent < currentDate) {
						nextDate = dateEvent;
						count++;
					}
					else {
						//DO NOTHING
					}
				}
			});
		}
		else {
			//DO NOTHING
		}
		
		if (nextDate == undefined) {
			var enddate = jQuery('div.post span.enddate:last').text();
			if (enddate == '') {
				enddate = jQuery('div.post span.startdate:last').text()
			}
			nextDate = new Date(enddate);
		}
		//Set calendar date and show events
		jQuery('#events_calendar').datepicker('setDate', nextDate );
		var inst = 0;
		showEvents(nextDate, inst);	
		highlightEvents();	
	}
	
	//Display the previous set of events on a date	
	function previousEventDate() {

		var count = 0;
		var nextDate;
		
		var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
		//Iterate through event items
		jQuery('div.post span.startdate').each(function (){	
			var dateEvent = new Date(jQuery(this).text())
			var rawDateEvent = jQuery(this).text();
			//Compare dates			
			if (dateEvent < currentDate) {
				nextDate = dateEvent;
			}
		});
		//If no event found for criteria
		if (nextDate == undefined) {
			//Iterate through event items from earliest
			jQuery('div.post span.startdate').each(function (){
				var dateEvent = new Date(jQuery(this).text())
				var rawDateEvent = jQuery(this).text();
				//Compare dates until last event found
				if (dateEvent > currentDate) {
					nextDate = dateEvent;
				}
				else {
					//DO NOTHING
				}				
			});
		}
		else {
			//DO NOTHING
		}
		
		if (nextDate == undefined) {
			var enddate = jQuery('div.post span.enddate:last').text();
			if (enddate == '') {
				enddate = jQuery('div.post span.startdate:last').text()
			}
			nextDate = new Date(enddate);
		}
		//Set calendar date and show events
		jQuery('#events_calendar').datepicker('setDate', nextDate );
		var inst = 0;
		showEvents(nextDate, inst);	
		highlightEvents();
	}
