/*

UMC Planning Calendar Listing - Source code
Version: beta

This contains the source code for the UMC Planning Calendar. Calendar can go
within any site. Pulling from Kintera Sphere RSS feeds

Requires:
	Google AJAX Feed API
	http://code.google.com/apis/ajaxfeeds/

*/
/*
 *	Object that gets feed and creates UMCPlanningCalendar
 */
var seasonsearch = {};
seasonsearch.season = '';
seasonsearch.special = '';

function UMCPlanningCalendar (params) {
	
	/*
	 *	Initializing parameters
	 */
	this.createParams = function (params) {
				this.params = new Array();
				if($(params.eventsAreaId)) {
					this.params.eventsAreaId = params.eventsAreaId;
				} else {
					alert('Error: Events Area not found\nLooking for object with id \''+params.eventsAreaId+'\'');
				}
				if($(params.contentAreaId)) {
					this.params.contentAreaId = params.contentAreaId;
				} else {
					alert('Error: Content Area not found\nLooking for object with id \''+params.contentAreaId+'\'');
				}
				if($(params.eventsNavAreaId)) {
					this.params.eventsNavAreaId = params.eventsNavAreaId;
				} else {
					alert('Error: Events Navigation Area not found\nLooking for object with id \''+params.eventsNavAreaId+'\'');
				}
				if(params.loadingImage) {
					this.params.loadingImage = params.loadingImage;
				}
				itemsOnNav = (params.itemsOnNav) ? params.itemsOnNav : 6;
				if(params.datafeeds) {
					this.params.datafeeds = new Array;
					this.params.datafeeds = params.datafeeds;
					this.params.navfeeds = new Array;
					this.params.navfeeds = params.navfeeds;
					this.params.eventsNavAreaId = params.eventsNavAreaId;
				} else {
					alert('Error: Feed not found in initilization\nInclude feeds in initilization function');
				}
				this.params = params;
				sitepath = params.sitepath;
				this.params.google = params.google;
				
				
				
			}
			
	

	this.createLoading = function() {
				var loadingId = this.params.eventsAreaId;
				var loadingNode = document.getElementById(loadingId);
				var loadingImage = this.params.loadingImage;
				var html = '';

				if(loadingImage) {
					html = '<div class="umc-events-calendar-loading">'+
							'<img src="'+loadingImage+'" /><br />'+
							'Loading...'+
							'</div>';
				} else {
					html = 'Loading...';
				}

				loadingNode.innerHTML = html;
			}
	
	this.loadFeedData = function() {
			//get calendar data feed
			var divcnt = 0;
			for (var key in this.params.datafeeds) {
				if (this.params.google)
					var obj = new AjaxRequestGoogle();
				else
					var obj = new AjaxRequest();
				statusobj[divcnt] = "running";
				obj.rss = this.params.datafeeds[key];
				obj.count = divcnt;
				obj.init();
				divcnt++;
			}
			this.datafeedlength = divcnt;
			/* get liturgical seasons */
			/*if (this.params.google)
				var obj = new AjaxRequestGoogle();
			else
				var obj = new AjaxRequest();
			statusobj[this.datafeedlength+1] = "running";
			obj.rss = this.params.navfeeds.liturgical;
			obj.count = this.datafeedlength+1;
			obj.init();*/
			
			/* get special times */
			if (this.params.google)
				var obj = new AjaxRequestGoogle();
			else
				var obj = new AjaxRequest();
			statusobj[this.datafeedlength+2] = "running";
			obj.rss = this.params.navfeeds.special;
			obj.count = this.datafeedlength+2;
			obj.init();
			
			/* check status of data retrieval */
			this.checkStatus();
	}
	
	this.checkStatus = function() {
		var self = this;
		var complete = true;
		for (x=0;x<=this.datafeedlength+2;x++) {
		   if (statusobj[x] == "running") {
			   complete = false;
			   break;
		   }
		}
		if (!complete) {
			setTimeout(function() {self.checkStatus()}, 200); /* check status every 2 seconds */
		} else {
			//clear loading image
			var loadingId = this.params.eventsAreaId;
			$(loadingId).innerHTML = '';
			
			//store data 
			var newData = [];
			for (x=0;x<this.datafeedlength;x++) {
				newData = newData.concat(xhrs[x]);
			}
			articlesData = UMCParser(newData);     /* article data       */
			//liturgicalData = xhrs[this.datafeedlength+1];   /* liturgical data    */
			liturgicalData = [];
			specialData = xhrs[this.datafeedlength+2];      /* special times data */
			articlesData.params = this.params;
			navCalendar = new UMCCalendar(params); /* calendar display */
			navResCalendar = new UMCResourceCalendar(); /* liturgical and special times calendar display */
			UMCPlanningDisplayController = new UMCPlanningCalendarController(articlesData); /* event display */
			if (UMCPlanningDisplayController.checkURL("override") == "yes")	{
				var sdate = new Date(UMCPlanningDisplayController.makeDate(UMCPlanningDisplayController.checkURL("sdate")));
				var edate = new Date(UMCPlanningDisplayController.makeDate(UMCPlanningDisplayController.checkURL("edate")));
				var special = unescape(UMCPlanningDisplayController.checkURL("special"));
				var season = '';
				var view = null;
				navResCalendar.selectResource(sdate, edate, season, special, view);
			}	
			
			/* once everything is built then update calendar days for events on those days */
			//UMCPlanningDisplayController.displayEvents(); 
		}
	}

	/*
	 *	Initialization function - only looking for 1 feed
	 */
	this.init = function (params) {
				statusobj = [];
				xhrs = []; /* clear old article array */
				/* initializing params  */
				this.createParams(params);
				/*display loading image */
				this.createLoading();
				/* get calendar data */
				this.loadFeedData();
				
				if(window.console) {
					console.log(xhrs);
				}
		}
	
/* Run initialization function */
	this.init(params);

}

/*
 *	Parses and returns items from events RSS
 */
function UMCParser(items) {

	/*
	 *	Initilizes and creates items to send back
	 */
	this.parseItems = function(items) {
				for (var i = 0; i < items.length; i++) {
					var item = items[i];
					/* Getting standar information */
					items[i].itemlink = ( items[i].read_more_url ) ? items[i].read_more_url : items[i].linkurl;
					items[i].theme = parseTheme(items[i].theme);
					items[i].otherCategories = parseTheme(items[i].otherCategories);
				
				}
				articlesData = new Array;
				articlesData.articles = items;
				return articlesData;
			}
	
	this.parseTheme = function(themes) {
				if(themes) {
					var newThemes = themes.split(',');
					for(var i=0; i<newThemes.length; i++) {
						newThemes[i] = newThemes[i].replace(/^\s+|\s+$/g,"");
					}
					return newThemes;
				} else {
					return false;
				}
		}
			
	/* Return items */
	return this.parseItems(items);
}

/*---------------------------------------------------
	
	display event data 
	
----------------------------------------------------*/
function UMCPlanningCalendarController( articleData ) {
	this.setupArea = function() {
			var loadingNode = document.createElement('div');
			loadingNode.id = "umc-events-loading";
			loadingNode.innerHTML = "Loading...";
			var contentParentNode = this.contentAreaNode.parentNode;
			var contentFirstChild = this.contentAreaNode.firstChild;
			if(document.all) {
				this.contentAreaNode.insertBefore(loadingNode, contentFirstChild);
			} else {
				contentParentNode.insertBefore(loadingNode, this.contentAreaNode);
			}
			this.loadingNode = loadingNode;
		}
		
	this.makeDate = function(date) {
		splitdate = new Array();
	
		splitdate['year'] = date.substr(0,4);
		splitdate['month'] = date.substr(4,2);
		splitdate['day'] = date.substr(6,2);		
		stringdate = splitdate['year'] + ","	+ splitdate['month'] + "," + splitdate['day'];
		return stringdate;
	}
		
	this.checkURL = function(key) {
	
	
	// Check to see if we have already retrieved the key value pairs
	// if we haven't then we need to retrieve them
	if( window.location.variablePairs == null )
		{
		if( window.location.href.indexOf('?') == -1)
			{
			return false;	
			}
		window.location.variablePairs = window.location.href.substr( window.location.href.indexOf('?') + 1).split('&');
		}
	
	// Search for the key that matches the keyName supplied
	for( var x = 0; x < window.location.variablePairs.length; x++ )
		{
		// If we find the key name then we retun the value associated with it
		
		if( key == window.location.variablePairs[x].substr( 0, window.location.variablePairs[x].indexOf('=')))
			{
			return window.location.variablePairs[x].substr( window.location.variablePairs[x].indexOf('=') + 1);
			}
		}
	
	// If we couldn't find the key in the GET parameters
	// then we return false
	return false;
	
}
		
	this.createSortHTML = function() {
			var titleClass = (this.sort == 'title') ? 'class="umc-selected"' : '';
			var dateClass = (this.sort == 'date') ? 'class="umc-selected"' : '';
			var typeClass = (this.sort == 'type') ? 'class="umc-selected"' : '';

			var html = 'Sort by: <a onclick="UMCPlanningDisplayController.changeSort(\'title\');" href="#" '+titleClass+'>Title</a> | ';
			//html += '<a onclick="UMCPlanningDisplayController.changeSort(\'date\');" href="#" '+dateClass+'>Date</a> | ';
			html += '<a onclick="UMCPlanningDisplayController.changeSort(\'type\');" href="#" '+typeClass+'>Type of Resource</a>';
			html += '<a href="#" onclick="UMCPlanningDisplayController.clearCategoryDisplay();" class="umc-back">Return to viewing all categories</a>';
			return html;
		}

	this.createInitialHTML = function() {
			var self = this;
			
			var eventsNav = document.createElement('div');
			eventsNav.className = 'umc-events-view-nav';
				var eventsView = document.createElement('span');
				eventsView.id = "umc-events-view";
				eventsView.innerHTML = "View by: ";
				eventsView.className = "umc-events-view";
				var eventsclasslink = " umc-events-view-link";
				var eventsclasssel = " umc-events-view-link-selected";
				var eventsshowalllink = "umc-events-showall-link";
				var evbydate = document.createElement('a');
				evbydate.className = eventsclasslink;
				if (this.view == 'date')
					evbydate.className += eventsclasssel;
				evbydate.onclick = function() {
					UMCPlanningDisplayController.showByDate();
				}
				evbydate.innerHTML = "Date";
				eventsView.appendChild(evbydate);
				this.linkbydate = evbydate;
				
				var evbydate = document.createTextNode(" | ");
				eventsView.appendChild(evbydate);
				
				var evbydate = document.createElement('a');
				evbydate.className = eventsclasslink;
				if ((this.view == 'splash') || (this.view == 'category'))
					evbydate.className += eventsclasssel;
				evbydate.onclick = function() {
					UMCPlanningDisplayController.showByCategory();
				}
				evbydate.innerHTML = "Category";
				eventsView.appendChild(evbydate);
				this.linkbycat = evbydate;
			eventsNav.appendChild(eventsView);	
				var eventsView = document.createElement('span');
				eventsView.id = "umc-events-view-reset";
					var evbydateall = document.createElement('a');
					evbydateall.className = eventsshowalllink;
					evbydateall.onclick = function() {
						self.resetDisplay();
					}
					
					evbydateall.innerHTML = "Return to view current 8 weeks";
				eventsView.appendChild(evbydateall);
			eventsNav.appendChild(eventsView);
			this.resetList = eventsNav;
			this.resetList.style.display = "none"; //initially don't display
				
			/* sort node - for sort criteria */
			var sortNode = document.createElement('div');
			sortNode.style.display = "none"; /* initial display set to not display */
			sortNode.id = "umc-sort-area";
			sortNode.innerHTML = this.createSortHTML();

			var statusNode = document.createElement('div');
			statusNode.id = "umc-status-area";

			/* main area events are displayed */
			var splashListing = document.createElement('div');
			splashListing.id = "umc-splash-listing";
			
			/* where categories are displayed */
			var categoryListing = document.createElement('div');
			categoryListing.id = "umc-category-listing";
			
			/* when a day selected in the calendar - this is where output goes */
			var dateSearch = document.createElement('div');
			dateSearch.id = "umc-events-date-search";
			
				
			this.nodeArticlesArea.appendChild(statusNode);         /* apply statusnode - from/to dates */
			this.nodeArticlesArea.appendChild(eventsNav);         /* apply sortnode */
			this.nodeArticlesArea.appendChild(sortNode);         /* apply sortnode */
			this.nodeArticlesArea.appendChild(splashListing);    /* apply event area */
			this.nodeArticlesArea.appendChild(categoryListing);  /* apply category list area */
			this.nodeArticlesArea.appendChild(dateSearch);       /* apply date search area */
			
			/* store for future use in this function */
			this.eventsview = eventsView;
			this.nodeSort = sortNode;
			this.statusNode = statusNode;
			this.nodeSplashListing = splashListing;
			this.nodeCategoryListing = categoryListing;
			this.eventsDatesSearch = dateSearch;			
		}

	this.getArticles = function(itemsPerCategory, events, view) {
			var articles = new Object();
			events = (events != undefined) ? events : this.articles;

			for(var i=0; i<events.length; i++ ) {
				var article = events[i];
				/* if category not in array yet then add */
				if(!articles[article.category]) {
					articles[article.category] = new Array();
					articles[article.category].push(article); /* add article to category */
				} else { /* if items specfied only get that many or if 0 then get all */
					if((articles[article.category].length != itemsPerCategory) || (itemsPerCategory == 0))
						articles[article.category].push(article); /* add article to category */
				}
				/* if article contains other categories */
				/* only get if itemsPerCategory is = 0 */
				if (view == 'category') {
					if(article.otherCategories && (itemsPerCategory == 0)) {
						for(var j=0; j<article.otherCategories.length; j++) {
							/* if other category not in array yet then add */
							if(!articles[article.otherCategories[j]]) {
								articles[article.otherCategories[j]] = new Array();
								articles[article.otherCategories[j]].push(article); /* add article to other category */
							} else { /* if items specfied only get that many or if 0 then get all */
								if((articles[article.otherCategories[j]].length != itemsPerCategory) || (itemsPerCategory == 0))
									articles[article.otherCategories[j]].push(article); /* add article to other category */
							}
							
						}
					}
				}
			}
			
			/* default if no type selected - sort by date else sort by type or title */
			var sort = this.sort;
			if(sort == 'type') {
				sortFunction = UMCEventsTypeSort;
			} else if(sort == 'title') {
				sortFunction = UMCEventsTitleSort;
			} else {
				sortFunction = UMCEventsDateSort;
			}

			for(key in articles) {
				articles[key].sort(sortFunction);
			}
			return articles; /* return list of articles by category */
		}

	// used strictly on initial display of all dates
	this.getArticlesByDate = function(events, view) {
			
			/* default if no type selected - sort by date else sort by type or title */
			var sort = this.sort;
			sortFunction = UMCEventsByDateSort;
			events.sort(sortFunction);
			return events; /* return list of articles by category */
		}

	this.getDates = function() {
			var datenodes = new Array();
			for(var i=0; i<this.articles.length; i++ ) {
				if (this.articles[i].date_display.toLowerCase() == "yes")
					datenodes.push(this.formatNodeDate(this.articles[i].date));
			}
			this.datenodes = datenodes;
		}
		
	this.changeSort = function(sort, events, itemsPerCategory) {
		events = (events != undefined) ? events : this.articles;
		itemsPerCategory = (itemsPerCategory != undefined) ? itemsPerCategory : this.params.initialEventsPerCategory;
		this.sort = sort;
		this.start = 0;
		this.statusNode.innerHTML = this.createEventsHeadingCategories();
		this.nodeSort.innerHTML = this.createSortHTML();
		this.categoryArticles = this.getArticles(0, events, 'category'); /* get articles and store by category */
		this.splashArticles = this.getArticles(itemsPerCategory, events);     /* get initial display of articles */

		/* check view selected */
		if(this.view == 'category') { /* by category*/
			this.viewCategory(this.displayedCategory,1);
		} else if(this.view == 'splash') { /* by splash page */
			this.displaySplashListing(this.splashArticles);
		} else if(this.view == 'date') { /* by splash page */
			this.eventList = this.getArticlesByDate(events);     /* get initial display of articles */
			this.displayListingsByDate(this.eventList);
		}
	}


	this.createThemeHTML = function(article) {
		var html = '';
		if(article.theme.length) {
			html += '<strong>Themes:</strong> ';	
		}

		for(var i=0; i<article.theme.length; i++) {
			var theme = article.theme[i];
			var lastIndex = article.theme.length-1;
			var url = this.params.themeURLS[theme];
			if(url) {
				html += '<a href="'+url+'">';
			}
			html += theme;
			if(url) {
				html += '</a>';
			}
			if(lastIndex != i) {
				html += ', ';
			}
		}
		return html;
		
	}

	this.previousPage = function() {
			this.viewCategory(this.displayedCategory,this.page-1);
		}

	this.nextPage = function() {
			this.viewCategory(this.displayedCategory,this.page+1);
		}

	this.getPagination = function () {
		/* Setting up start and limit */
		var realStart = this.params.itemsPerPage * (this.page - 1);
		var start = realStart+1;
		var limit = this.params.itemsPerPage + start - 1;
		var totalPages = Math.ceil( (this.categoryArticles[this.displayedCategory].length) / this.params.itemsPerPage) ;
		var html ='';
		if(totalPages > 1) {

			/* Checking if pagination limit is larger then display total */
			limit = (limit > this.categoryArticles[this.displayedCategory].length) ? this.categoryArticles[this.displayedCategory].length : limit;

			/* Building HTML for pagination */
			var html = '<div id="umc-articles-pagination">';
			html += '<div id="umc-articles-pagination-options">';
			if(this.page != 1) {
				html += '<a id="umc-articles-link-left" href="#" onclick="UMCPlanningDisplayController.previousPage();">Previous</a>';
			}
			if((this.page != 1) && (totalPages!=this.page)) {
				html += ' | ';
			}
			if (totalPages!=this.page) {
				html += '<a id="umc-articles-link-right" href="#" onclick="UMCPlanningDisplayController.nextPage();">Next</a>';
			}
			html += '</div>';
			html += '<div id="umc-articles-pagination-info">';
			html += 'Showing '+start+'-'+limit+' of '+this.categoryArticles[this.displayedCategory].length+" ";
			html += '</div>';
			html += '<div class="umc-clear"></div>';
			html += '</div>';
		}
		return html;
	}

  	this.viewCategory = function(category, page) {
  		alert("525");
		navCalendar.hideNav();
		this.eventsview.style.display="none";
		this.statusNode.innerHTML = '';
		this.page = page;
		this.view = 'category';
		this.displayedCategory = category;
		this.nodeSplashListing.style.display = "none";
		var html = '';
		html += '<div class="umc-category-articles">';
		html += '<div class="umc-category-heading">'+
			'<div class="umc-category-name">'+((category != undefined) ? category : '')+'</div>'+
			'<div class="umc-clear"></div>'+
			'</div>';
		html += this.getPagination();
		var start = this.params.itemsPerPage * (this.page - 1);
		var limit = this.params.itemsPerPage + start;
		limit = (limit > this.categoryArticles[this.displayedCategory].length) ? this.categoryArticles[this.displayedCategory].length : limit;
		var k=1;
		for(var i=start; i<limit; i++) {
			var article = this.categoryArticles[category][i];
			if(k == this.params.itemsPerPage){
				var lastClass = ' umc-planning-last';
			} else {
				var lastClass = '';
			}
			html += this.createArticleHTML(article, lastClass);
			k++;
		}
		html += this.getPagination();
		html += '</div>';
		this.nodeCategoryListing.innerHTML = html;
		this.nodeCategoryListing.style.display = "block";
		this.nodeSort.style.display = "block";
		
	}

	this.displaySplashListing = function(events) {
			var eventslist = new Object();
			eventslist = events;
			this.view = 'splash';
			var view = this.nodeSplashListing;
			var html = "";
			for(key in eventslist) {
				var category = eventslist[key];
				var categoryName = (key != undefined && key != 'undefined') ? key : '';
				html += '<div class="umc-category-articles">';
				html += '<div class="umc-category-heading">'+
					'<div class="umc-category-name">'+categoryName+'</div>';
				if (categoryName != '') 
					html += '<div class="umc-category-view-all"><a href="#" onclick="UMCPlanningDisplayController.showCategory(\''+categoryName+'\', 1); ">View All</a></div>';
				html += '<div class="umc-clear"></div>'+
					'</div>';
				for(var i=0; i<category.length; i++) {
					var article = category[i];
					if(i == (category.length-1)) {
						var lastClass = ' umc-planning-last';
					} else {
						var lastClass = '';
					}
					html += this.createArticleHTML(article, lastClass);
				}
				html += '</div>';
			}
			if (html == '')
				html = '<p>No events found in range.</p>';
			this.nodeSplashListing.innerHTML = html;
			this.nodeCategoryListing.style.display = "none";
			this.nodeSort.style.display = "none";
			this.nodeSplashListing.style.display = "block";
		}

	// events listed by date
	this.displayListingsByDate = function(events) {
			var self = this;
			this.specialdates = new Array();
			var view = this.nodeSplashListing;
			this.nodeSplashListing.innerHTML = '';
			var html = "";
			var prevdate = new Date('1/1/1970');
			var datelisting = document.createElement("div");
			//add prev 8 weeks/next 8 weeks links
			if ((this.season == '') && (this.special == '') && (this.startDate != this.endDate) &&(this.startDate.getFullYear() != 1970)) {//no specific display by season or special time
				var weeklink = document.createElement("div");
				weeklink.id = "umc-8week-links";
				var weeklinkp = document.createElement("a");
				weeklinkp.innerHTML = "Previous 8 Weeks";
				weeklinkp.onclick = function() {
					self.prev8Weeks();
				}
				weeklinkp.className = "umc-eventsbydate-prevlink";
				weeklink.appendChild(weeklinkp);
				var weeklinkt = document.createTextNode(" | ");
				weeklink.appendChild(weeklinkt);
				var weeklinkn = document.createElement("a");
				weeklinkn.innerHTML = "Next 8 Weeks";
				weeklinkn.onclick = function() {
					self.next8Weeks();
				}
				weeklinkn.className = "umc-eventsbydate-nextlink";
				weeklink.appendChild(weeklinkn);
				
				datelisting.appendChild(weeklink);
			}

			//add ongoing list of events
			/* display ongoing events */
			var ongoingListing = document.createElement('div');
			ongoingListing.id = "umc-dates-ongoing";
			
			var startdate = this.startDate;
			var enddate = this.endDate;
			for (x=0;x<navResCalendar.resNode.length;x++) {
				var itemres = navResCalendar.resNode[x];
				if ( navResCalendar.dateCompExt( navResCalendar.dateKey(startdate), navResCalendar.dateKey(enddate), navResCalendar.dateKey(itemres.seasonstartdate), navResCalendar.dateKey(itemres.seasonenddate) ) ) {
					ongoingListing.appendChild(this.createOngoingHTML(itemres));
				}
			}
			datelisting.appendChild(ongoingListing);    /* apply ongoing event area */
			this.nodeOngoingListing = ongoingListing;

			//get events to display
			for(x=0;x<events.length;x++) {
				var eventdata = events[x];
				if (eventdata.date_display =="yes" || eventdata.date_display == "YES") {
					categoryName = eventdata.date;
					if (this.formatHeadingDate(categoryName) != this.formatHeadingDate(prevdate)) {
						var html = document.createElement("div");
						html.className = "umc-eventsbydate-articles";
						var htmlinner = document.createElement("div");
						htmlinner.className = "umc-eventsbydate-heading";
						if ((this.view == 'date') && (this.startDate != this.endDate)) {
							var htmlinner2 = document.createElement("div");
							htmlinner2.className = "umc-eventsbydate-name";
							htmlinner2.innerHTML = this.formatHeadingDate(categoryName, "yes");
							htmlinner.appendChild(htmlinner2);
						}
						//var htmlinner2 = document.createElement("div");
						//htmlinner2.className = "umc-clear";
						htmlinner.appendChild(htmlinner2);
						html.appendChild(htmlinner);
						datelisting.appendChild(html);
						var html = document.createElement("div");
						html.className = "umc-nav-res";
					  //  html.innerHTML = "<span>LABEL GOES HERE</span>";  SD
						html.date = eventdata.date;
						datelisting.appendChild(html);
						this.specialdates.push(html);
					}
					var lastClass = '', lastAClass = '';
					if(x < (events.length-1)) {
						if (this.formatHeadingDate(events[x].date) != this.formatHeadingDate(events[x+1].date)) {
							lastClass = ' umc-planning-outer-last';
							lastAClass = ' umc-eventsbydate-planning-last';
						}
					}
					if (x == (events.length-1)) {
						lastClass = ' umc-planning-outer-last';
						lastAClass = ' umc-eventsbydate-planning-last';
					}
					var htmlout = document.createElement("div");
					htmlout.innerHTML = this.createArticleHTML(eventdata, lastClass, lastAClass);
					datelisting.appendChild(htmlout);
					
					if (this.formatHeadingDate(categoryName) != this.formatHeadingDate(prevdate)) {
						//html += '</div>';
					}
					prevdate = categoryName;
				}
			}

			if (events.length == 0 || html == '') {
			    var html = document.createElement("p");
				html.innerHTML = 'No events found in range.';
				datelisting.appendChild(html);
			}
			this.nodeSplashListing.appendChild(datelisting);
			this.datelisting = datelisting;
			//this.nodeSplashListing.innerHTML = html;
			this.nodeCategoryListing.style.display = "none";
			this.nodeSort.style.display = "none";
			this.nodeSplashListing.style.display = "block";
		}

	this.createArticleHTML = function(article, lastClass, lastAClass) {
			var imageHTML = (article.thumbnail) ? '<img class="umc-planning-thumbnail" src="'+article.thumbnail+'" />' : '';
			var descriptionImageClass = (imageHTML) ? ' umc-image-description' : '';
			var themes = this.createThemeHTML(article);
			var readMore = (article.read_more_label) ? article.read_more_label : 'Read more';
			var itemlink = '';
			
			var html = '<div class="umc-planning-outer'+lastClass+'">';
			if (this.view != 'date')
				html += '<div class="umc-article'+lastClass+'">';
			else
				html += '<div class="umc-eventsbydate-article'+lastAClass+'">';			
			html +=    '<div class="umc-planning-heading">';
			if (this.view == 'date')
				html += '<div class="umc-eventsbydate-resource">'+ ((article.subtitle != undefined) ? article.subtitle : "") +'</div>';
			if (article.read_more_url)
				itemlink = '<a href="'+article.itemlink+'" '+article.read_more_internal+'>'+article.title+'</a>';
			else
				if (article.read_more_label)
					itemlink = '<a class="justintest" onclick="UMCPlanningDisplayController.displayEvent(\''+article.linkurl+'\'); return false;" href="#">'+article.title+'</a>';
				else
					itemlink = article.title; 
			html +=    '<div class="umc-planning-title">'+itemlink+'</div>';
			if (this.view == 'date')
				html += '<div class="umc-planning-category">'+((article.category != undefined) ? article.category : '')+' '+((article.type != undefined) ? '| '+ article.type : '')+'</div>';
			else
				html += '<div class="umc-planning-date">'+this.formatArticleDate(article.date)+' '+((article.type != undefined) ? '| '+ article.type : '')+'</div>';
			html +=	'<div class="umc-clear"></div>'+
					'</div>'+
					'<div class="umc-planning-description-area">'+
						imageHTML+
						'<div class="umc-planning-description'+descriptionImageClass+'">';
			html +=				(article.description != undefined) ? article.description : '';
			itemlink = '';
			if (article.read_more_url)
				itemlink = '<a href="'+article.itemlink+'" class="umc-read-more" '+article.read_more_internal+'>'+readMore+'</a>';
			else
				if (article.read_more_label)
					itemlink = '<a class="justintest2" onclick="UMCPlanningDisplayController.displayEvent(\''+article.linkurl+'\'); return false;" href="#">'+readMore+'</a>';
			html += itemlink;
			html +=			'<div class="umc-planning-themes">'+themes+'</div>';
			html +=			'</div><div class="umc-clear"></div>'+
					'</div>'+
				'</div>'+
			'</div>';
			return html;
					
		}
		
	this.createOngoingHTML = function(article, lastClass, lastAClass) {
			var imageHTML = (article.featureimage) ? '<img class="umc-planning-thumbnail" src="'+article.featureimage+'" />' : '';
			var descriptionImageClass = (imageHTML) ? ' umc-image-description' : '';
			var readMore = (article.read_more_label) ? article.read_more_label : 'Read more';
			var itemlink = '', html = '';
			
			var div = document.createElement("div");
			div.className = 'umc-planning-outer';
			if (this.view != 'date')
				html += '<div class="umc-article">';
			else
				html += '<div class="umc-eventsbydate-article">';			
			html +=    '<div class="umc-planning-heading">';
			if (article.type == 'season') {
				html += '<div class="umc-eventsbydate-resource">Liturgical Season</div>';
				itemlink = '<a onclick="navResCalendar.selectResource(\''+article.seasonstartdate+'\',\''+article.seasonenddate+'\',\''+article.season.replace("'","`")+'\', \'\')" href="#">'+article.season+'</a>';
			} else {
				html += '<div class="umc-eventsbydate-resource">Special Time</div>';
				itemlink = '<a onclick="navResCalendar.selectResource(\''+article.seasonstartdate+'\',\''+article.seasonenddate+'\',\'\',\''+article.season.replace("'","`")+'\')" href="#">'+article.season+'</a>';
			}
			
			html +=    '<div class="umc-planning-title">'+itemlink+'</div>';
			html +=	   '<div class="umc-clear"></div>';
			if (article.seasonstartdate == article.seasonenddate) {
				html +=    '<div class="umc-planning-daterange">'+navResCalendar.formatDate(article.seasonstartdate)+'</div>';
			} else {
				html +=    '<div class="umc-planning-daterange">'+navResCalendar.formatDate(article.seasonstartdate)+' - '+navResCalendar.formatDate(article.seasonenddate)+'</div>';
			}
			html +=	   '<div class="umc-clear"></div>';
			html +=		'</div>'+
					'<div class="umc-planning-description-area">'+
						imageHTML+
						'<div class="umc-planning-description'+descriptionImageClass+'">';
			html +=				(article.description != undefined) ? article.description : '';
			html +=			'</div><div class="umc-clear"></div>'+
					'</div>'+
				'</div>'+
			'</div>';
			div.innerHTML = html;
			return div;
					
		}
		
	this.showCategory = function(category, page) {
		this.view = 'category';
		this.displayedCategory = category;
		this.changeSort('date');
	}
	
	this.clearCategoryDisplay = function(){
		this.nodeCategoryListing.style.display = "none";
		this.nodeSort.style.display = "none";
		this.statusNode.innerHTML = this.createEventsHeadingCategories();
		this.nodeSplashListing.style.display = "block";
		this.view = 'splash';
		this.eventsview.style.display="block";
		navCalendar.showNav();
	}
	
	this.showByCategory = function() {
		this.linkbydate.className = "umc-events-view-link";
		this.linkbycat.className = "umc-events-view-link umc-events-view-link-selected";
		this.view = 'splash';
		var startdate = (this.startDate != undefined) ? this.startDate : new Date();
		alert(startdate);
		var enddate = new Date(startdate);
		if (this.startDate == undefined)
			enddate.setDate(enddate.getDate() + 55); //add 8 weeks to current date
		else
		    enddate = this.endDate;
		this.refreshDates(startdate, enddate, this.season, this.special);
	}
	
	this.showByDate = function() {
		this.linkbycat.className = "umc-events-view-link";
		this.linkbydate.className = "umc-events-view-link umc-events-view-link-selected";
		this.view = 'date';
		var startdate = new Date();
		if ((this.startDate == undefined) || (this.startDate.getFullYear() == '1970'))
			startdate.setDate(startdate.getDate() - startdate.getDay()); //go back to sunday
		else
			startdate = this.startDate;
		
		var enddate = new Date(startdate);
		if ((this.endDate == undefined) || (this.endDate.getFullYear() == '2200'))
			enddate.setDate(enddate.getDate() + 55); //add 8 weeks to current date
		else
		    enddate = this.endDate;
		this.refreshDates(startdate, enddate, this.season, this.special);
	}
	
	this.formatArticleDate = function(date) {
			var months = {0:"Jan. ", 1:"Feb. ", 2:"Mar. ", 3:"Apr. ", 4:"May ", 5:"Jun. ", 6:"Jul. ", 7:"Aug. ", 8:"Sep. ", 9:"Oct. ", 10:"Nov. ", 11:"Dec. " }
			var string = months[date.getMonth()]+date.getDate()+', '+date.getFullYear();
			return string;
			
		}
	
	this.formatNodeDate = function(date) {
		var dd = date.getDate() <= 9 ? '0' + date.getDate() : date.getDate();
		var mm = date.getMonth() <= 9 ? '0' + date.getMonth() : date.getMonth();
		var key = date.getFullYear() + '' + mm + '' + dd; 
		return key;
	}
	
	this.changedSelection = function() {
			this.eventsRefresh = 1;
			this.eventsStart = 0;
			this.page = 1;
		}
		
	/* loop through each day of cal - if an event is found for that day then add hyperlink */
	this.displayEvents = function() {
			for(var i=0;i<6;i++) {
				for(var j=0; j<7; j++) {
					var day = navCalendar.dateNodes[i][j];
					if (day.innerHTML != '') {
						if(this.datenodes.indexOf(this.formatNodeDate(day.date)) > -1) {
							day.className = "umc-calendar-day umc-calendar-day-selected";
							day.onclick = function () {
									navResCalendar.selectResource(this.date, this.date, '', '', 'date');
								}
						} else {
							day.className = "umc-calendar-day";
						}
					}
				}
			}
		}
	
	this.refreshDates = function(startDate, endDate, season, special) {
			var self = this;
			if (!this.initialDisplay) this.resetList.style.display = "block";
			this.initialDisplay=false;
			this.displayLoading();
			this.startDate = startDate;
			this.endDate = endDate;
			this.season = (season != undefined) ? season : '';
			this.special = (special != undefined) ? special : '';
			//this.displayDates();
			setTimeout(function() {self.displayDates()}, 0);
		}
	
	this.displayDates = function(season, special) {
			if (this.view == 'splash') {
				this.linkbydate.className = "umc-events-view-link";
				this.linkbycat.className = "umc-events-view-link umc-events-view-link-selected";
			} else {
				this.linkbycat.className = "umc-events-view-link";
				this.linkbydate.className = "umc-events-view-link umc-events-view-link-selected";
			}
			//this.startDate = startDate;
			//this.endDate = endDate;
			var newEvents = new Array();
			var totalEvents = 0;
			//this.clearCategoryTotals();

			for(var i=0; i<this.articles.length; i++) {
				var event = this.articles[i];
				var addevent = true;
				if (this.season == '' && this.special == '') {
					if(!this.checkEventBetweenDates(event, this.startDate, this.endDate)) {
						addevent=false;
					}
				}
				if ((this.season != '') && (this.season != undefined) && (this.season != event.seasons)) {
					addevent=false;
				}
				if ((this.special != '') && (this.special != undefined) && (this.special != event.specialtimes)) {
					addevent=false;
				}
				if (addevent) {
					// need to add resource check
					totalEvents++;
					newEvents.push(event);	
				}
			}
			if ((this.season != '') && (this.season != undefined) || (this.special != '') && (this.special != undefined)) {
				newEvents.sort(UMCEventsTitleSort);
				this.sort = 'title';
			} else {
				newEvents.sort(UMCEventsCategorySort);
			}
			this.changeSort(this.sort, newEvents, 0);
			this.removeLoading();
			navResCalendar.getNavResource();
			//dean
			if (seasonsearch.season != '' || seasonsearch.special != '') {
				navResCalendar.selectResource(seasonsearch.startdate,seasonsearch.enddate,seasonsearch.season,seasonsearch.special);
				seasonsearch.season = '';
				seasonsearch.special = '';
			}
		}
	
	this.createEventsHeadingCategories = function() {
			var html = '';
			this.startDate = ((this.startDate != undefined) && (this.startDate != '')) ? this.startDate : new Date('1/1/1970');
			this.endDate = ((this.endDate != undefined) && (this.endDate != '')) ? this.endDate : new Date('1/1/2200');
			if (this.startDate.getFullYear() != '1970') {
			    var background = this.getSeasonDetail();
				if (background['image'] != undefined) {
					html += "<div id='umc-calendar-heading-bg' style='background: url("+background['image']+") no-repeat'>";
				}
				 	
				if ((this.season != undefined) && (this.season != ''))
					html += '<div class="umc-calendar-heading-res">' + this.season + '</div>';
				if ((this.special != undefined) && (this.special != ''))
				    var background = this.getSeasonDetail();
					html += '<div class="umc-calendar-heading-res">' + this.special + '</div>';
				if ((this.startDate != undefined) && (this.startDate != '')) {
					html += '<div class="umc-calendar-heading-dates">' + this.formatHeadingDate(this.startDate);
					if (this.formatHeadingDate(this.startDate) != this.formatHeadingDate(this.endDate) )
						html += ' - ' + this.formatHeadingDate(this.endDate);
					html += '</div>';
				}
				if (background['image'] != undefined) {
					html += "<div class='umc-calendar-heading-text'>"+background['desc']+"</div>";
				 	html += "</div>";
				}
			}

			return html;
		}

	this.getSeasonDetail = function(){
			var htmlarr = [];
			if ((this.season != undefined) && (this.season != '')) {
				var litcal = navResCalendar.litcal;
				for (x=0;x<litcal.length;x++) {
					if (litcal[x].season == this.season) {
						htmlarr['image'] = litcal[x].featureimage;
						htmlarr['desc'] = litcal[x].description;
						return htmlarr;
					}
				}
			}
			if ((this.special != undefined) && (this.special != '')) {
				var speccal = navResCalendar.speccal;
				for (x=0;x<speccal.length;x++) {
					if (speccal[x].season == this.season) {
						htmlarr['image'] = speccal[x].featureimage;
						htmlarr['desc'] = speccal[x].description;
						return htmlarr;
					}
				}
			}
			return 0;
		}
	
	this.displayEvent = function(linkurl) {
			var self = this;
			this.displayLoading();
			setTimeout(function(){self.getEvent(linkurl)}, 10);
		}
	
	this.getEvent = function(linkurl) {
			//navCalendar.hideNav();

			var obj = new AjaxRequest();
			obj.dataonly = true;
			obj.rss = linkurl;
			obj.count = 50;
			obj.init();
			
			this.contentAreaNode.style.display="none";
			this.removeLoading();
			window.scrollTo(0,0);
			$("introLine").hide();
			

			/* Displaying events */
			var temphtml = '<table id="umc-event-display"><tr><td valign=top>';
			temphtml += '<span class="umc-event-display-link"><a href="#" onclick="UMCPlanningDisplayController.backToEvents(); return false;" class="umc-back-to-events">Return to Planning Calendar</a></span>';
			temphtml += '<span class="umc-event-display-text"><table>'+xhrs[50]+'</table></span></td></tr></table>';
			$('itemDetail').innerHTML = temphtml;
			$$('.pageTitle')[0].className += " umc-pagetitle-resource";
		
			
			tabs2('tabContainer',new Date()); // this creates the tabs - Justin
			$('umc-events-item-detail').style.display = 'block';	
			var tableHeight = $('umc-event-display').getHeight();
			var leftHandNavHeight = $('leftNav').getHeight();
			var footerTopMargin = tableHeight - leftHandNavHeight;
			$('footer').hide();
			//interesting note: commenting either line 985 ($('itemDetail).innerHTML = temphtml) or line 988 ($('umc-events-item-detail').style.display = 'block') makes the content not show.
			
		}

	this.backToEvents = function() {
		$("introLine").show();
		$('lbPrint').removeClassName('hide');
		$('umc-events-item-detail').style.display = 'none';
		navCalendar.showNav();
		this.contentAreaNode.style.display="block";
		$$('.pageTitle')[0].className = "pageTitle";
	}
	
	this.formatHeadingDate = function(date, incday) {
			var months = {0:"January", 1:"February", 2:"March", 3:"April", 4:"May", 5:"June", 6:"July", 7:"August", 8:"September", 9:"October", 10:"November", 11:"December" }
			var days = {0:"Sunday", 1:"Monday", 2:"Tuesday", 3:"Wednesday", 4:"Thursday", 5:"Friday", 6:"Saturday" }
			if (incday == "yes") 
				var string = days[date.getDay()]+', '+months[date.getMonth()]+' '+date.getDate()+', '+date.getFullYear();
			else
				var string = months[date.getMonth()]+' '+date.getDate()+', '+date.getFullYear();
			return string;
			
		}
	
	this.checkEventBetweenDates = function(event, dateBefore, dateAfter) {
			var dateStart = new Date();
			dateStart.setFullYear(dateBefore.getFullYear(), dateBefore.getMonth(), dateBefore.getDate());
			dateStart.setHours(0,0,0,0);
			var dateEnd = new Date();
			dateEnd.setFullYear(dateAfter.getFullYear(), dateAfter.getMonth(), dateAfter.getDate());
			dateEnd.setHours(0,0,0,0);
			var isBetween = 0
			var eventDate = new Date();
			eventDate.setFullYear(event.date.getFullYear(), event.date.getMonth(), event.date.getDate());
			eventDate.setHours(0,0,0,0);
			if((eventDate>=dateStart) && (eventDate<=dateEnd)) {
				isBetween = 1;
			}
			return isBetween;
		}

	this.removeLoading = function() {
			changeOpac(100,this.contentAreaNode);
			this.loadingNode.style.display = 'none';
		}

	this.displayLoading = function() {
			changeOpac(40,this.contentAreaNode);
			this.loadingNode.style.display = 'block';
		}
	
	this.prev8Weeks = function() {
			var edate = new Date(this.endDate);
			edate.setDate(edate.getDate()-56);
			var sdate = new Date(this.startDate);
			sdate.setDate(sdate.getDate()-56); //go back 8 weeks
			var dow = sdate.getDay(); //get day of week
			sdate.setDate(sdate.getDate()-dow); //subtract off day of week to get sunday
			this.refreshDates(sdate, edate);
	}
	
	this.next8Weeks = function() {
			var edate = new Date(this.endDate);
			edate.setDate(edate.getDate()+56);
			var sdate = new Date(this.startDate);
			sdate.setDate(sdate.getDate()+56); //go back 8 weeks
			var dow = sdate.getDay(); //get day of week
			sdate.setDate(sdate.getDate()-dow); //subtract off day of week to get sunday
			this.refreshDates(sdate, edate);
	}
	
	this.showAll = function() {
			this.startDate = new Date('1/1/1970');
			this.endDate = new Date('12/31/2200');
			this.changedYears = 1;
			this.changedSelection();
			this.season = '';
			this.special = '';
			this.statusNode.innerHTML = '';
			navResCalendar.selectResource(this.startDate, this.endDate, '', '', 'date');
		}

	this.resetDisplay = function() {
			this.initialDisplay = true;
			this.resetList.style.display = "none";
			this.startDate = new Date();
			this.startDate.setDate(this.startDate.getDate() - this.startDate.getDay()); //go back to sunday
			this.endDate = new Date(this.startDate);
			this.endDate.setDate(this.endDate.getDate() + 55); //add 8 weeks to current date
			this.changedYears = 1;
			this.changedSelection();
			this.season = '';
			this.special = '';
			this.statusNode.innerHTML = '';
			navResCalendar.selectResource(this.startDate, this.endDate, '', '', 'date');
		}

	this.init = function(articleData) {
			this.initialDisplay = true;
			this.setupArea();
			this.params = articleData.params;
			this.limit = this.params.itemsPerPage;
			this.view = 'date';
			this.nodeArticlesArea = $('umc-events-area');
			this.createInitialHTML();
			this.articles = articleData.articles;
			this.articles.sort(UMCEventsCategorySort);			

			// set default start and end dates
			this.startDate = new Date();
			this.startDate.setDate(this.startDate.getDate() - this.startDate.getDay()); //go back to sunday
			var startdate = this.startDate;
			this.endDate = new Date(this.startDate);
			this.endDate.setDate(this.endDate.getDate()+55); //add 8 weeks to current date
			this.refreshDates(this.startDate, this.endDate);
		//	this.getDates(); // go through all recs and get dates - for mini cal day link
		}

	this.contentAreaNode = $(articleData.params.contentAreaId);
	this.init( articleData );
}


/* Event Comparing */
function UMCEventsTypeSort(x,y) {
	if(x.type == y.type){ return 0; }
	if(x.type < y.type){ return -1; }
	return 1;
}


function UMCEventsTitleSort(x,y) {
	if(x.title == y.title){ return 0; }
	if(x.title < y.title){ return -1; }
	return 1;
}

function UMCEventsDateSort(x, y){
	var xS = x.date.getTime();
	var yS = y.date.getTime();
	if(xS == yS) { return 0; }
	if(xS>yS) { return -1; }
	return 1;
}
function UMCEventsByDateSort(a, b){
	a = a['date'];
	b = b['date'];
	if (a>b) return 1;
	if (a<b) return -1;
	return 0;
}

function UMCEventsCategorySort(a, b){
	a = a['category'];
	b = b['category'];
	if (a>b) return 1;
	if (a <b) return -1;
	return 0; 
}

google.load("feeds", "1");


/* @@@@
 * UMC Calendar
 */
function UMCCalendar(params, id, dateObj) {

	this.buildLeftCal = function() {
			/* main div id in left area */
	 		var pageNavNode = $(params.eventsNavAreaId);	
			
			var itemDetail = document.createElement('div');
			itemDetail.id = "umc-events-item-detail";
				var itemDetailnav = document.createElement('div');
				itemDetail.appendChild(itemDetailnav);
				var itemDetailtext = document.createElement('div');
				itemDetailtext.id = "itemDetail";
				itemDetail.appendChild(itemDetailtext);
			pageNavNode.appendChild(itemDetail);
			
			/*default tag names */
			var categoryTagName = "umc-events-nav-category";
			var categoryTagNameUnchecked = "umc-events-nav-category-unchecked";
			
			/* main nav node - where mini cal will be placed */
	 		var navNode = document.createElement('div');
			//navNode.id = "umc-events-nav-areax";

			/* hidden node for date range */
			var hideNode = document.createElement('div');
			hideNode.id = "umc-events-nav-hide";
			hideNode.innerHTML = "&nbsp;";
			
			/* node for where mini cal will reside */
			var calendarDiv = document.createElement('div');
			calendarDiv.id = "umc-events-calendar-area";
			
			/***********************/
			/* build mini calendar */
			/***********************/
			var month = this.getMonth(this.dateObj);
			var calendarHeading = document.createElement('div');
			calendarHeading.id = "umc-calendar-heading";
			this.calendarHeadingMonthId = 'umc-calendar-heading-month';
			/* calendar header */
			calendarHeading.innerHTML = '<div id="umc-calendar-heading-left">'+
								'<a href="#" onclick="return navCalendar.previousYear();">'+
								'<img src="'+sitepath+'umc-heading-double-left-arrow.gif" /></a> '+
								'<a href="#" onclick="return navCalendar.previousMonth();">'+
								'<img src="'+sitepath+'umc-heading-left-arrow.gif" /></a> '+
							'</div>'+
							'<div class="umc-calendar-heading-center" id="'+this.calendarHeadingMonthId+'">'+month+' '+this.dateObj.getFullYear()+'</div>'+
							'<div id="umc-calendar-heading-right">'+
								' <a href="#" onclick="return navCalendar.nextMonth();">'+
								'<img src="'+sitepath+'umc-heading-right-arrow.gif" /></a>'+
								' <a href="#" onclick="return navCalendar.nextYear();">'+
								'<img src="'+sitepath+'umc-heading-double-right-arrow.gif" /></a>'+
							'</div>'+
							'<div style="clear:both;"></div>';

			/* -- calendar days -- */
			var calendarDays = document.createElement('div');
			calendarDays.id = "umc-calendar-days";
			var days = new Array('S','M','T','W','T','F','S');
			for(var i=0; i<days.length; i++) {
				var day = document.createElement('div');
				day.className = "umc-calendar-day";
				day.innerHTML = days[i];
				calendarDays.appendChild(day);
			}
			var clear = document.createElement('div');
			clear.className = "umc-clear";
			calendarDays.appendChild(clear);

			var calendarDates = document.createElement('div');
			calendarDates.id = "umc-calendar-dates";

			/* create basic calendar layout - days not added yet */
			var dateNodes = new Array();
			/* 6 weeks */
			for(var i=0;i<6;i++) {
				dateNodes[i] = new Array();

				var week = document.createElement('div');
				week.className = "umc-calendar-week";
				/* 7 days a week */
				for(var j=0; j<7; j++) {
					var day = document.createElement('div');
					day.className = "umc-calendar-day";

					/* Adding node to array */
					dateNodes[i][j] = day;

					week.appendChild(day);
				}
				calendarDates.appendChild(week);
			}
			var week = document.createElement('div');
			week.className = "umc-clear";
			calendarDates.appendChild(week);

			calendarDiv.appendChild(calendarHeading); /* write calendar heading */
			calendarDiv.appendChild(calendarDays);    /* write day titles - Sun - Sat */
			calendarDiv.appendChild(calendarDates);   /* write the 6 weeks of day fields */
			this.dateNodes = dateNodes;
			/* add hidden node */
			navNode.appendChild(hideNode);
			/* add calendar layout */
			navNode.appendChild(calendarDiv);
						
			
			/****************************************/
			/* create date range area - layout only */
			/****************************************/
			var dateRangeArea = document.createElement('div');
			dateRangeArea.id = "umc-events-nav-date-search-area";
			dateRangeArea.innerHTML = '<div id="umc-date-range-heading"><div style="float:left; cursor:pointer;" onclick="navCalendar.closeDateRange(); return false;">close</div>'+
							'<div onclick="navCalendar.setDateRangeForm(document.forms[\'umcdaterange\']);" id="umc-form-submit">&nbsp;</div>'+
							'<form name="umcdaterange" onsubmit="navCalendar.setDateRangeForm(this); return false;" id="umc-date-range-form" >'+
							'Date Range: '+
							'<input onclick="navCalendar.setFocus(this);" name="start" />'+
							'<input onclick="navCalendar.setFocus(this);" name="end" /> '+
							'</form> <div class="umc-clear"></div></div>';
			var dateCalendarArea= document.createElement('div');
			dateCalendarArea.id = "umc-events-nav-date-calendar-area";

			/* store current month */
			var thisMonth = new Date();
			/* store next month */
			var nextMonth = new Date();
			nextMonth.setMonth(thisMonth.getMonth()+1);
			/* store previous month */
			var previousMonth = new Date();
			previousMonth.setMonth(thisMonth.getMonth()-1);
			/* store prev, curr and next months in array - date range only displays 3 months at a time */
			var months = new Array( previousMonth, thisMonth, nextMonth);
			/* dateNodes = days defined within the 3 months */
			this.rangedateNodes = new Array();

			/* create back month div for previous month */
			var backMonthDiv = document.createElement('div');
			backMonthDiv.className = 'umc-calendar-date-leftside';

			var backMonth = document.createElement('img');
			backMonth.src = sitepath+'umc-calendar-left.gif';
			backMonth.style.cursor = 'pointer';
			backMonth.className = 'umc-calendar-date-navigation';
			backMonth.onclick = function() {
						navCalendar.backMonth();
				}
			backMonthDiv.appendChild(backMonth);
			dateCalendarArea.appendChild(backMonthDiv);

			/* create forward month div for next month */
			var forwardMonth = document.createElement('img');
			forwardMonth.src = sitepath+'umc-calendar-right.gif';
			forwardMonth.style.cursor = 'pointer';
			forwardMonth.className = 'umc-calendar-date-navigation';
			forwardMonth.onclick = function() {
						navCalendar.forwardMonth();
				}

			/* loop through 3 months and build day nodes - no values in nodes yet */
			for(var k=0; k<months.length; k++) {
				if(k!=0) {
					var backMonthDiv = document.createElement('div');
					backMonthDiv.className = 'umc-calendar-date-leftside';
					dateCalendarArea.appendChild(backMonthDiv);
				}
				var month = this.getMonth(months[k]); /* get month name */
				var calendar = document.createElement('div');
				calendar.className = "umc-date-calendar";
				var calendarHeading = document.createElement('div');
				calendarHeading.className = 'umc-date-calendar-heading';
				calendarHeading.innerHTML = '<span id="umc-date-calendar-heading-'+k+'">'+month+' '+months[k].getFullYear()+'</span>'; /* write heading */
				calendar.appendChild(calendarHeading);
				
				/* write day headings */
				var calendarDays = document.createElement('div');
				calendarDays.className = "umc-calendar-days";
				var days = new Array('S','M','T','W','T','F','S');
				for(var i=0; i<days.length; i++) {
					var day = document.createElement('div');
					day.className = "umc-calendar-date-day";
					day.innerHTML = days[i];
					calendarDays.appendChild(day);
				}
				var clear = document.createElement('div');
				clear.className = "umc-clear";
				calendarDays.appendChild(clear);
				
				/* write calendar day nodes */
				var calendarDates = document.createElement('div');
				calendarDates.className = "umc-calendar-dates";

				var rangedateNodes = new Array();

				/* write 6 weeks */
				for(var i=0;i<6;i++) {
					rangedateNodes[i] = new Array();

					var week = document.createElement('div');
					week.className = "umc-calendar-date-week";
					
					/* write 7 days per week day nodes */
					for(var j=0; j<7; j++) {
						var day = document.createElement('div');
						day.className = "umc-calendar-date-day";
						day.onclick = function() {
								navCalendar.fillDate(this);
							}

						/* Adding node to array */
						rangedateNodes[i][j] = day;

						week.appendChild(day);
					}
					calendarDates.appendChild(week);
				}

				this.rangedateNodes.push(rangedateNodes);

				calendar.appendChild(calendarDays);
				calendar.appendChild(calendarDates);
				dateCalendarArea.appendChild(calendar);

			}
			dateCalendarArea.appendChild(forwardMonth);

			this.months = months;

			var week = document.createElement('div');
			week.className = "umc-clear";
			calendarDates.appendChild(week);
			dateRangeArea.appendChild(dateCalendarArea);

			var dateRange = document.createElement('div');
			dateRange.id = "umc-events-nav-date-search";
			dateRange.innerHTML = '( <a href="#" onclick="UMCPlanningDisplayController.showAll(); return false;" id="umc-events-nav-show-all">Show all</a> ) <a href="#" onclick="navCalendar.showDateRange(); return false;">Set Date Range</a>';

			navNode.appendChild(dateRangeArea); /* add date range area */
			navNode.appendChild(dateRange);     /* add daterange div */
			pageNavNode.appendChild(navNode);   /* add nav node to the page - this si the final add to get everything to display */
			/* store for future routines */
			this.calendarNode = calendarDiv;
			this.dateRangeArea = dateRangeArea;
			this.navHideNode = hideNode;
			this.navNode = navNode;
			this.pageNavNode = pageNavNode;
			
			this.dateSearchFocus = document.forms['umcdaterange'].start;
			this.dateSearchFocus.className = 'umc-selected';
			/* fill in mini cal day nodes */
			this.changeMonth(); /* builds days into mini calendar month */
			/* fill in daterange day nodes */
			this.changeDateRangeMonth();
		
	}

	this.changeMonth = function() {
			var firstWeek = 1;
			var lastWeek = 0;
			var dayOfMonth = new Date();
			dayOfMonth.setFullYear(this.dateObj.getFullYear(), this.dateObj.getMonth(), 1);
			for(var i=0;i<6;i++) {
				for(var j=0; j<7; j++) {
					day = this.dateNodes[i][j];

					if(firstWeek) {
						if(dayOfMonth.getDay() == j) {
							firstWeek = 0;
						}
					}

					if(!firstWeek && !lastWeek) {
						var dayDate = new Date();
						dayDate.setFullYear(dayOfMonth.getFullYear(), dayOfMonth.getMonth(), dayOfMonth.getDate());
						day.date = dayDate;
						day.className = "umc-calendar-day";
						//day.onclick = function () {
						//		UMCPlanningDisplayController.refreshDates(this.date, this.date, '');
						//	}
						day.innerHTML = dayDate.getDate();
						dayOfMonth.setDate(dayOfMonth.getDate() +1);
						if(dayOfMonth.getMonth() != dayDate.getMonth()) {
							lastWeek = 1;
						}
					} else {
						day.innerHTML = '';
					}
				}
			}
			var headingMonthNode = $(this.calendarHeadingMonthId);
			var month = this.getMonth(this.dateObj);
			headingMonthNode.innerHTML = month + ' ' + this.dateObj.getFullYear();
		}

	this.changeDateRangeMonth = function() {
			for(var k=0; k<this.months.length; k++) {
				var firstWeek = 1;
				var lastWeek = 0;
				var dayOfMonth = new Date();
				dayOfMonth.setFullYear(this.months[k].getFullYear(), this.months[k].getMonth(), 1);
				for(var i=0;i<6;i++) {
					for(var j=0; j<7; j++) {
						day = this.rangedateNodes[k][i][j];
						if(firstWeek) {
							if(dayOfMonth.getDay() == j) {
								firstWeek = 0;
								var d = 1;
								var n = j-1;
								for(n; n>-1;n--) {
									var oldDay = this.rangedateNodes[k][i][n];
									var dayDate = new Date(dayOfMonth);
									dayDate.setDate(dayDate.getDate() - d);
									d++;
									oldDay.date = dayDate;
									oldDay.className = 'umc-calendar-date-day umc-unsellected';
									oldDay.innerHTML = dayDate.getDate();
								}
							}
						}

						if(lastWeek == 1) {
							var dayDate = new Date();
							dayDate.setFullYear(dayOfMonth.getFullYear(), dayOfMonth.getMonth(), dayOfMonth.getDate());
							day.date = dayDate;
							day.className = 'umc-calendar-date-day umc-unsellected';
							day.innerHTML = dayDate.getDate();
							dayOfMonth.setDate(dayOfMonth.getDate() +1);
						}
						if(!firstWeek && !lastWeek) {
							var dayDate = new Date();
							dayDate.setFullYear(dayOfMonth.getFullYear(), dayOfMonth.getMonth(), dayOfMonth.getDate());
							day.date = dayDate;
							day.className = 'umc-calendar-date-day';
							day.innerHTML = dayDate.getDate();
							dayOfMonth.setDate(dayOfMonth.getDate() +1);
							if(dayOfMonth.getMonth() != dayDate.getMonth()) {
								lastWeek = 1;
							}
						}
					}
				}
				var headingMonthNode = $('umc-date-calendar-heading-'+k);
				var month = this.getMonth(this.months[k]);
				headingMonthNode.innerHTML = month + ' ' + this.months[k].getFullYear();
			}
		}

	this.convertDateKey = function(date) {
			var key = date.getMonth()+' '+date.getDate()+' '+date.getFullYear();
			return key;
		}

	this.getMonth = function(dateObj) {
			var months = {0:"January", 1:"February", 2:"March", 3:"April", 4:"May", 5:"June", 6:"July", 7:"August", 8:"September", 9:"October", 10:"November", 11:"December" }
			var month = months[dateObj.getMonth()];
			return month;
		}

	this.showDateRange = function () {
			this.hideNav();
			changeOpac(40,this.contentAreaNode);
			document.forms['umcdaterange'].start.value='';
			document.forms['umcdaterange'].end.value='';
			this.resetMonths();
			this.dateRangeArea.style.display = 'block';
			this.setFocus(document.forms['umcdaterange'].start);
		}

	this.previousYear = function() {
			this.dateObj.setFullYear(this.dateObj.getFullYear()-1 );
			this.changeMonth();
			UMCPlanningDisplayController.displayEvents();
			return false;
		}

	this.nextYear = function() {
			this.dateObj.setFullYear(this.dateObj.getFullYear()+1 );
			this.changeMonth();
			UMCPlanningDisplayController.displayEvents();
			return false;
		}

	this.nextMonth = function() {
			this.dateObj.setMonth(this.dateObj.getMonth() +1 );
			this.changeMonth();
			UMCPlanningDisplayController.displayEvents();
			return false;
		}

	this.previousMonth = function() {
			this.dateObj.setMonth(this.dateObj.getMonth() -1 );
			this.changeMonth();
			UMCPlanningDisplayController.displayEvents();
			return false;
		}

	this.showNav = function() {
			this.navHideNode.style.position = 'static';
			this.navHideNode.style.display = 'none';
			changeOpac(100,this.navHideNode);
		}
	

	this.hideNav = function() {
			this.navHideNode.style.position = 'absolute';
			this.navHideNode.style.display = 'block';
			this.navHideNode.style.height =  $(params.eventsNavAreaId).parentNode.offsetHeight+'px';
			this.navHideNode.style.width =  $(params.eventsNavAreaId).parentNode.offsetWidth+'px';
			changeOpac(50,this.navHideNode);
		}
	
	this.resetMonths = function() {
			var thisMonth = new Date();
			var nextMonth = new Date();
			nextMonth.setMonth(thisMonth.getMonth()+1);
			var previousMonth = new Date();
			previousMonth.setMonth(thisMonth.getMonth()-1);
			var months = new Array( previousMonth, thisMonth, nextMonth);
			this.months = months;
			//this.changeMonth();
			this.changeDateRangeMonth();
		}

	this.setFocus = function(o) {
			this.dateSearchFocus.className = '';
			o.className = 'umc-selected';
			o.focus();
			this.dateSearchFocus = o;
		}
		
	this.closeDateRange = function() {
			this.showNav();
			changeOpac(100,this.contentAreaNode);
			this.dateRangeArea.style.display = 'none';
		}

	this.backMonth = function() {
			for(var i=0; i<this.months.length; i++) {
				this.months[i].setMonth(this.months[i].getMonth() -3 );
				this.changeDateRangeMonth();
			}
			return false;
		}
	this.forwardMonth = function() {
			for(var i=0; i<this.months.length; i++) {
				this.months[i].setMonth(this.months[i].getMonth() +3 );
				this.changeDateRangeMonth();
			}
			return false;
		}

	this.fillDate = function(o) {
			var thisDate = o.date;
			this.dateSearchFocus.value = (thisDate.getMonth()+1)+'/'+thisDate.getDate()+'/'+thisDate.getFullYear();	
			if(this.dateSearchFocus.name == 'start') this.setFocus(document.forms['umcdaterange'].end);
		}	

	this.setDateRangeForm = function(f) {
			var start = new Date(f.start.value);
			var end= new Date(f.end.value);
			var regex=/^\d{1,2}\/\d{1,2}\/\d{4}$/g;
			if(!f['start'].value.match(regex)) {
				alert('Date is invalid');
				f['start'].className = 'umc-selected';
				f['end'].className = '';
				this.dateSearchFocus = f['start'];
				return false;
			}else if(!f['end'].value.match(regex)) {
				alert('Date is invalid');
				f['end'].className = 'umc-selected';
				f['start'].className = '';
				this.dateSearchFocus = f['end'];
				return false;
			} else if(start > end) {
				alert('Start date is after end date.');
				return false;
			}
			this.showNav();
			changeOpac(100,this.contentAreaNode);
			this.dateRangeArea.style.display = 'none';
			navResCalendar.selectResource(start, end, '', '', 'date');
			//document.location = '#';
		}
	
	this.init = function() {

			this.dateObj =new Date();
			this.buildLeftCal();
			this.changeMonth();
		}
	
	this.contentAreaNode = $(params.contentAreaId);
	this.init();
}
function UMCResourceCalendar(id, dateObj) {

	this.buildLitCal = function() {
			/* main div id in left area */
	 		var pageNavNode = $(params.eventsNavAreaId);	
			
			/*default tag names */
			var categoryTagName = "umc-events-nav-category";
			var categoryTagNameUnchecked = "umc-events-nav-category-unchecked";
			
			/* main nav node - where mini cal will be placed */
	 		var navNode = document.createElement('div');
			//navNode.id = "umc-events-nav-areax";

			var categoriesNode = document.createElement('div');
			categoriesNode.id = "umc-events-nav-categories";
			
			
			/* LITURGICAL SEASON REMOVED - ALL ITEMS MOVED TO SPECIAL TIMES  SD 12/22/09 
			categoriesNode.innerHTML = '<div id="umc-events-nav-categories-heading"><div class="umc-event-nav-heading">Planning Resources for Liturgical Season</div></div>';
	        */
			
			
			navNode.appendChild(categoriesNode);
			
			/* hidden node for date range */
			var calendarDiv = document.createElement('div');
			calendarDiv.id = "umc-calendar-nav-liturgical";
			
			var calendarDates = document.createElement('div');
			calendarDates.id = "umc-calendar-resources";

			/* create basic calendar layout - days not added yet */
			var resNodes = new Array();
			var litNodes = new Array();
			var visiblecount = 1;
			/* 6 weeks */
			for(var i=0;i<liturgicalData.length;i++) {
				var season = document.createElement('div');
				season.type = 'season';
				season.className = "umc-calendar-resource";
				season.innerHTML = liturgicalData[i].title;
				season.featureimage = liturgicalData[i].featureimage;
				season.description = liturgicalData[i].description;
				seasonstartdate = new Date(liturgicalData[i].date);
				seasonenddate = new Date(liturgicalData[i].date);
				seasonenddate.setDate(seasonenddate.getDate() + (parseInt(liturgicalData[i].days)-1));
				seasonstartdate = this.formatDate(seasonstartdate);
				seasonenddate = this.formatDate(seasonenddate);
				season.seasonstartdate = new Date(liturgicalData[i].date);
				season.seasonenddate = new Date(liturgicalData[i].date);
				season.seasonenddate.setDate(liturgicalData[i].date.getDate() + (parseInt(liturgicalData[i].days)-1));;
				var currdate = this.dateKey(new Date());
				var currsdate = this.dateKey(season.seasonstartdate);
				var curredate = this.dateKey(season.seasonenddate);
				// if current date is in the range of the item - then add add'l style
				if (this.dateComp(currdate, currsdate, curredate)) {
					season.className += " umc-calendar-resource-current";
				}
				//if the end date of current item is less than current date then add different class
				if (currdate > curredate) {
					season.className += " umc-calendar-resource-old";
					season.style.display = "none";
					visiblecount--;
				}
				if (visiblecount > itemsOnNav)
					season.style.display = "none";
				visiblecount++;
				season.count = i;
				season.caltype = 'lit';
				season.season = liturgicalData[i].title;
				if (seasonstartdate == seasonenddate)
					season.innerHTML += '<br />' + seasonstartdate;
				else
					season.innerHTML += '<br />' + seasonstartdate + ' - ' + seasonenddate;
				season.onclick = function () {
						navResCalendar.selectResource(this.seasonstartdate, this.seasonenddate, this.season);
				}
				calendarDates.appendChild(season);
				if (unescape(getUrlVal("liturgical")) == season.season) {
					seasonsearch.startdate = season.seasonstartdate;
					seasonsearch.enddate = season.seasonenddate;
					seasonsearch.season = season.season;
					seasonsearch.special = '';
				}
			
				resNodes.push(season);
				litNodes.push(season);
			}
			var season = document.createElement('div');
			season.className = "umc-clear";
			calendarDates.appendChild(season);
			
			var seasonscroll = document.createElement("div");
			seasonscroll.className = "umc-calendar-seasons-scroll";
			var seasonscrollup = document.createElement("div");
			seasonscrollup.className = "umc-calendar-seasons-scrollup";
			seasonscrollup.onclick = function() {
				navResCalendar.navScroll('lit','up');
			}
			seasonscroll.appendChild(seasonscrollup);
			var seasonscrolldown = document.createElement("div");
			seasonscrolldown.className = "umc-calendar-seasons-scrolldown";
			seasonscrolldown.onclick = function() {
				navResCalendar.navScroll('lit','down');
			}
			seasonscroll.appendChild(seasonscrolldown);
			calendarDates.appendChild(seasonscroll);

			calendarDiv.appendChild(calendarDates);   /* write the 6 resources */
			
			this.resNode = resNodes;
			this.litcal = litNodes;
			
			/* add calendar layout */
			navNode.appendChild(calendarDiv);
			pageNavNode.appendChild(navNode);   /* add nav node to the page - this si the final add to get everything to display */
		}
		
	this.buildSpecialCal = function() {
			/* main div id in left area */
	 		var pageNavNode = $(params.eventsNavAreaId);	
			
			/*default tag names */
			var categoryTagName = "umc-events-nav-category";
			var categoryTagNameUnchecked = "umc-events-nav-category-unchecked";
			
			/* main nav node - where mini cal will be placed */
	 		var navNode = document.createElement('div');
			//navNode.id = "umc-events-nav-areax";

			var categoriesNode = document.createElement('div');
			categoriesNode.id = "umc-events-nav-categories";
			categoriesNode.innerHTML = '<div id="umc-events-nav-categories-heading"><div class="umc-event-nav-heading">Browse By Occasion</div></div>';
	
			navNode.appendChild(categoriesNode);
			
			/* hidden node for date range */
			var calendarDiv = document.createElement('div');
			calendarDiv.id = "umc-calendar-nav-special";
			
			var calendarDates = document.createElement('div');
			calendarDates.id = "umc-calendar-resources";
			
			var seasonscroll = document.createElement("div");
			seasonscroll.className = "umc-calendar-seasons-scroll";
			var seasonscrollup = document.createElement("div");
			seasonscrollup.className = "umc-calendar-seasons-scrollup";
			seasonscrollup.innerHTML = "Earlier";
			seasonscrollup.onclick = function() {
				navResCalendar.navScroll('spec','up');
			}
			seasonscroll.appendChild(seasonscrollup);
			//var seasonscrolldown = document.createElement("div");
			//seasonscrolldown.className = "umc-calendar-seasons-scrolldown";
			//seasonscrolldown.onclick = function() {
			//	navResCalendar.navScroll('spec','down');
			//}
			//seasonscroll.appendChild(seasonscrolldown);
			calendarDates.appendChild(seasonscroll);
			
			/* create basic calendar layout - days not added yet */
			var resNodes = this.resNode;
			var specNodes = new Array();
			var visiblecount = 1;
			/* 6 weeks */
			for(var i=0;i<specialData.length;i++) {
				var season = document.createElement('div');
				season.type = 'special';
				season.className = "umc-calendar-resource"; // this draws the events in the lefthand nav. 
				season.innerHTML = specialData[i].title;
				season.featureimage = specialData[i].featureimage;
				season.description = specialData[i].description;
				seasonstartdate = new Date(specialData[i].date);
				seasonenddate = new Date(specialData[i].date);
				seasonenddate.setDate(seasonenddate.getDate() + (parseInt(specialData[i].days)-1));
				seasonstartdate = this.formatDate(seasonstartdate);
				seasonenddate = this.formatDate(seasonenddate);
				season.seasonstartdate = new Date(specialData[i].date);
				season.seasonenddate = new Date(specialData[i].date);
				season.seasonenddate.setDate(specialData[i].date.getDate() + (parseInt(specialData[i].days)-1));;
				var currdate = this.dateKey(new Date());
				var currsdate = this.dateKey(season.seasonstartdate);
				var curredate = this.dateKey(season.seasonenddate);
				// if current date is in the range of the item - then add add'l style
				if (this.dateComp(currdate, currsdate, curredate)) {
					season.className += " umc-calendar-resource-current";
				}
				//if the end date of current item is less than current date then add different class
				if (currdate > curredate) {
					season.className += " umc-calendar-resource-old";
					season.style.display = "none";
					visiblecount--;
				}
				if (visiblecount > itemsOnNav)
					season.style.display = "none";
				visiblecount++;
				season.count = i;
				season.caltype = 'spec';
				season.season = specialData[i].title;
				if (seasonstartdate == seasonenddate)
					season.innerHTML += '<br />' + seasonstartdate;
				else
					season.innerHTML += '<br />' + seasonstartdate + ' - ' + seasonenddate;
				season.onclick = function () {
						navResCalendar.selectResource(this.seasonstartdate, this.seasonenddate, '', this.season);
					}
				calendarDates.appendChild(season);
				if (getUrlVal("special") == season.season) {
					seasonsearch.startdate = season.seasonstartdate;
					seasonsearch.enddate = season.seasonenddate;
					seasonsearch.season = '';
					seasonsearch.special = season.season;
				}
				resNodes.push(season);
				specNodes.push(season);
			}
			var season = document.createElement('div');
			season.className = "umc-clear";
			calendarDates.appendChild(season);
			
			var seasonscroll = document.createElement("div");
			seasonscroll.className = "umc-calendar-seasons-scroll";
			//var seasonscrollup = document.createElement("div");
			//seasonscrollup.className = "umc-calendar-seasons-scrollup";
			//seasonscrollup.onclick = function() {
			//	navResCalendar.navScroll('spec','up');
			//}
			//seasonscroll.appendChild(seasonscrollup);
			var seasonscrolldown = document.createElement("div");
			seasonscrolldown.className = "umc-calendar-seasons-scrolldown";
			seasonscrolldown.innerHTML = "Later";
			seasonscrolldown.onclick = function() {
				navResCalendar.navScroll('spec','down');
			}
			seasonscroll.appendChild(seasonscrolldown);
			calendarDates.appendChild(seasonscroll);

			calendarDiv.appendChild(calendarDates);   /* write the 6 weeks of day fields */
			
			this.resNode = resNodes;
			this.speccal = specNodes;
			/* add calendar layout */
			navNode.appendChild(calendarDiv);
			pageNavNode.appendChild(navNode);   /* add nav node to the page - this si the final add to get everything to display */
		}
		
	this.selectResource = function(sdate, edate, season, special, view) {
		//alert("sdate: " + sdate + "/n" + "edate: " + edate + "/n" + "special: " + special + "/n" + "view: " + view); - testing by Justin
		
		season = season.replace("`","'"); //replace temp quote with real quote - change to tempquote in createOngoingHtml()
		sdate = (sdate != undefined) ? new Date(sdate) : new Date('1/1/1970');
		edate = (edate != undefined) ? new Date(edate) : new Date('1/1/2200');
		var currdate = this.dateKey(new Date());
		for (x=0;x<this.resNode.length;x++) {
			//this.resNode[x].className = "umc-calendar-resource";
			this.resNode[x].className = this.resNode[x].className.replace("umc-calendar-resource-selected",""); //remove selected class then reapply
			//if (((this.resNode[x].season == season) || (this.resNode[x].season == special)) && 
			//	(this.resNode[x].seasonstartdate == sdate) && 
			//	(this.resNode[x].seasonenddate == edate)) {
			if ((this.resNode[x].season == season) || (this.resNode[x].season == special)) {
				this.resNode[x].className += " umc-calendar-resource-selected";
			}
		}
		UMCPlanningDisplayController.view = (view != undefined) ? view : 'splash';
		UMCPlanningDisplayController.refreshDates(sdate, edate, season, special);
		window.scrollTo(0,0);
	}
	
	this.getNavResource = function() {
		var navresdate = UMCPlanningDisplayController.specialdates;
		var htmlout = document.createElement("div");
		for (n=0;n<navresdate.length;n++) {
			var date = new Date(navresdate[n].date);
			var htmldiv = document.createElement("div");
			for (x=0;x<this.resNode.length;x++) {
				//if (x==6)
				//alert(this.dateKey(date) + ' ' + this.dateKey(this.resNode[x].seasonstartdate) + ' ' + this.dateKey(this.resNode[x].seasonenddate));
				if (this.dateComp(this.dateKey(date), this.dateKey(this.resNode[x].seasonstartdate), this.dateKey(this.resNode[x].seasonenddate))) {
					var html = document.createElement("div");
					if (this.resNode[x].type == 'season') {
						html.innerHTML = "<span class='umc-nav-res-title'>Liturgical Season: </span>";
						var htmlhref = document.createElement("a");
						htmlhref.innerHTML = this.resNode[x].season;
						htmlhref.className = "umc-nav-res-link";
						htmlhref.seasonstartdate = this.resNode[x].seasonstartdate;
						htmlhref.seasonenddate = this.resNode[x].seasonenddate;
						htmlhref.season = this.resNode[x].season;
						htmlhref.onclick = function() {
							navResCalendar.selectResource(this.seasonstartdate, this.seasonenddate, this.season, '');
						}
					}
					if (this.resNode[x].type == 'special') {
						//html.innerHTML = "<span class='umc-nav-res-title'>Special Times</span>";
						var htmlhref = document.createElement("a");
						htmlhref.innerHTML = this.resNode[x].season;
						htmlhref.className = "umc-nav-res-link";
						htmlhref.seasonstartdate = this.resNode[x].seasonstartdate;
						htmlhref.seasonenddate = this.resNode[x].seasonenddate;
						htmlhref.season = this.resNode[x].season;
						htmlhref.onclick = function() {
							navResCalendar.selectResource(this.seasonstartdate, this.seasonenddate, '', this.season);
						}
					}
					html.appendChild(htmlhref);
					navresdate[n].appendChild(html);
				}
			}
		}
	}

	/* may cause performance issues in the future */
	this.findResNoData = function() {
		var navitems = this.resNode; // all nav items (Seasons and Special Times)
		for (n=0;n<navitems.length;n++) {
			//loop through all event dates if none found for current item then set class
			var evdates = UMCPlanningDisplayController.datenodes; //all events by date
			var evfound = false;
			for (x=0;x<evdates.length;x++) {
				var cdate = evdates[x].date;
				var sdate = this.dateKey(navitems[n].seasonstartdate);
				var edate = this.dateKey(navitems[n].seasonenddate);
				if (this.dateComp(cdate, sdate, edate) && (navitems[n].season == evdates[x].season)) {
					evfound = true;
					break;
				}
			}
			if (!evfound) {
				navitems[n].className += " umc-calendar-resource-nodata";
				navitems[n].onclick = "";				
			}
		}

	}
	
	this.navScroll = function(res, direction) {
		var visiblecount = 0;
		if (res == 'lit')
			var navitems = this.litcal;
		if (res == 'spec')
			var navitems = this.speccal;
		if (direction == 'up') {
			for (n=0;n<navitems.length;n++) {
				if ((n < (navitems.length-1)) && (navitems[n+1].style.display != "none") && (navitems[n].style.display == "none")) {
					navitems[n].style.display="block";
				}
				if (navitems[n].style.display != "none")
					visiblecount++;
				if (visiblecount > itemsOnNav)
					navitems[n].style.display="none";
			}
		}
		if (direction == 'down') {
			var last = (navitems.length-itemsOnNav);
			for (n=0;n<navitems.length;n++) {
				if (n < last) {
					if ( ( (n == 0) && (navitems[n].style.display != "none") ) ||
						 ( (n > 0) && (navitems[n].style.display != "none") && (navitems[n-1].style.display == "none") ) ) {
						navitems[n].style.display="none";
						break;
					}
				}
			}
			var firstfound = false;
			for (n=0;n<navitems.length;n++) {
				if ((navitems[n].style.display != "none")) {
					firstfound = true;
				}
				if ((firstfound) && (visiblecount < itemsOnNav)) {
					navitems[n].style.display="block";
					visiblecount++;
				} else {
					navitems[n].style.display="none";
				}
			}
		}
	}

	this.dateKey = function(date) {
		var dd = (date.getDate() <= 9) ? '0' + date.getDate() : date.getDate();
		var mm = (date.getMonth() < 9) ? '0' + (date.getMonth()+1) : (date.getMonth()+1);
		var key = date.getFullYear() + '' + mm + '' + dd; 
		return key;
	}
	
	this.dateComp = function(date, sdate, edate) {
		return ((sdate <= date) && (edate >= date)) 
	}
	
	this.dateCompExt = function(csdate, cedate, sdate, edate) {
		return ((sdate <= csdate && edate >= csdate) || (sdate >= csdate && sdate <= cedate)) 
	}
	
	this.formatDate = function(date) {
			var months = {0:"Jan. ", 1:"Feb. ", 2:"Mar. ", 3:"Apr. ", 4:"May ", 5:"Jun. ", 6:"Jul. ", 7:"Aug. ", 8:"Sep. ", 9:"Oct. ", 10:"Nov. ", 11:"Dec. " }
			var string = months[date.getMonth()]+date.getDate()+', '+date.getFullYear();
			return string;
		}
	
	this.init = function() {

			this.dateObj =new Date();
			this.buildLitCal();
			this.buildSpecialCal();

		}
	
	this.contentAreaNode = $(params.contentAreaId);
	this.init();
}
Date.prototype.addDays = function(d) {
        /* Adds the number of days to the date */
        this.setDate( this.getDate() + d );
    };
	
Date.prototype.addWeeks = function(w) {
        /* Adds the number of weeks to the date */
        this.addDays(w * 7);
    };

google.load("feeds", "1");
