 // CUSTOM PLUGINS
(function($) {
	// Test DOM element for absence of non-empty descendent text nodes
	$.fn.swrPopulatedTextNodeDescendents = function() {
		var elementTreeTextNodes = this.contents().filter(function() {
			return $(this).text() != '';
		});
		return elementTreeTextNodes;
	};

	// Input box default text plugin
	$.fn.swrInputDefaultText = function() {
		return this.each(function() {
			var $obj = $(this);
			$obj.focus(function() {
				if( $obj.val() == $(this)[0].defaultValue ) {
					$obj.val('');
			}});
			$obj.blur(function() {
				if( ! $obj.val().length ) {
					$obj.val($obj[0].defaultValue);
				}
			});
		});
	};
	
	// Button fix. For IE < 8, and older versions of Chrome, Safari
	$.fn.swrButtonFix = function() {
		return this.each(function() {
			var $obj = $(this);
			$obj.click(function() {
				$('button').attr('disabled', 'disabled'); 
				var label = $obj.text(); 
				$obj.text('');
				$obj.after($("<input/>").attr('type', 'hidden').attr('name', $obj.attr('name')).val($obj.attr('value'))); 
				$obj.text(label); 
				$obj.closest('form').submit(); 
			});
		});
	};
	
	// Replaces href with alternate URL from page ID class attribute. 
	// Used for display of link destination in modal window using a different URL than that used when JS disabled
	$.fn.swrChangeHrefByPageId = function(config) {
		return this.each(function() {
			var $obj = $(this);
			var classes = $obj.attr('class');
			var classRegex = new RegExp('\\b' + config.pageIdClassPrefix + config.pageIdClassIdRegex + '\\b');
			var regexMatch = classRegex.exec(classes);
			if (regexMatch) {
				var pageId = regexMatch[0].substring(config.pageIdClassPrefix.length);
				$obj.attr('href', config.replacementHrefPrefix + pageId + config.replacementHrefSuffix);
			}
		});
	};
	
	// Build print links
	$.fn.swrBuildPrintLink = function(config) {
		return this.each(function() {
			var $obj = $(this);
			$obj.text('');
			$obj.append($('<a/>')
							.text(config.linkText)
							.attr('href', '#')
							.click(function(event) {
								event.preventDefault();
								window.print();
							})
			);
		});
	}

	// Facade to colorbox.js. Apply Colorbox modal behavior to form element; form submission (AJAX or iframe) sends input elements and puts request result into Colorbox
	// Limitations: 1. iframe option only supports GET, not POST) 2. Only supports HTML return from AXAX call
	$.fn.swrColorboxForm = function(colorboxOptions, colorboxCallback) {
		var colorboxDefaults = {};
		
		return this.each(function() {
			var colorboxConfig = $.extend({}, colorboxDefaults, colorboxOptions);
			
			$(this).submit(function(event) {
				event.preventDefault();
				var $thisForm = $(this);
				var formInputs = $thisForm.serialize()

				// Iframe: Add serialized inputs to URL, and execute colorbox in iframe mode
				if (colorboxConfig.iframe) {
					colorboxConfig.href = $thisForm.attr('action') + '?' + formInputs
					$.fn.colorbox(colorboxConfig, colorboxCallback);
				}
				// Non-iframe: Execute AJAX call, and pass Colorbox as the AJAX success callback to draw the returned data
				else {
					$.ajax({
						url: $thisForm.attr('action'),
						type: $thisForm.attr('method'),
						data: formInputs,
						success: function(data) {
							colorboxConfig.html = data;
							$.fn.colorbox(colorboxConfig, colorboxCallback);
						},
						dataType: 'html'
					});
				}
			});
		});
	};
}) (jQuery);

// Other functions
var swrUtility = function() {
	return {
		getUserLanguage: function() {
			var language = (navigator.language) ? navigator.language : navigator.userLanguage; 
			return language.substring(0, 2);
		},
		
		hideEventCalendarGrid: function() {
			$('#contentPrimary .eventCalendarGridWrapper').hide();
			$('#contentPrimary ul.eventList').show();
		},
		
		showEventCalendarGrid: function() {
			// Determine month to display
			var displayYear		= $('#contentPrimary .eventCalendarGridSelectYear').val();
			var displayMonth	= $('#contentPrimary .eventCalendarGridSelectMonth').val();

			// Retrieve the current grid, then populate it with events form the event list, then hide the list and show the grid
			$('#contentPrimary div.eventCalendarGridContainer').load(
				'/utility/calendar-grid.php',
				{year: displayYear, month: displayMonth},
				function() {
					$('#contentPrimary ul.eventList').hide();
					$('#contentPrimary .eventCalendarGridWrapper').show();
					$('#contentPrimary .modal h4 a').each(function() {
						var classes = $(this).attr('class').split(/\s+/);

						for (var i = 0, len = classes.length; i < len; i++) {
							if (classes[i].substr(0, 4) == 'date') {
								$(this).clone(true).addClass('clone').appendTo('.eventCalendarGrid td.' + classes[i] + ' div');
							}
						}
					});
				}
			);
			
			var availableYears = [];
			$('#contentPrimary .eventCalendarGridSelectYear option').each(function() {
				availableYears.push($(this).val());
			});
			var yearLow = Math.min.apply(Math, availableYears);
			var yearHigh = Math.max.apply(Math, availableYears);
			
			if (displayMonth == 1 && yearLow == displayYear) {
				$('#contentPrimary .eventCalendarGridPrevMonth').addClass('disabled').data('disabled', true);
			}
			else
			{
				$('#contentPrimary .eventCalendarGridPrevMonth').removeClass('disabled').data('disabled', false);
			}

			if (displayMonth == 12 && yearHigh == displayYear) {
				$('#contentPrimary .eventCalendarGridNextMonth').addClass('disabled').data('disabled', true);
			}
			else
			{
				$('#contentPrimary .eventCalendarGridNextMonth').removeClass('disabled').data('disabled', false);
			}

		}
	};
}();

// Cookie handler object, Derived from PPK's functions (http://www.quirksmode.org/js/cookies.html)
var swrCookie = function() {
	return {
		create: function(name, value, days) {
			if (days) {
				var date = new Date();
				date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
				var expires = "; expires=" + date.toGMTString();
			}
			else var expires = "";
			document.cookie = name+ "=" + value + expires + "; path=/";
		},
		read: function(name) {
			var nameEQ = name + "=";
			var ca = document.cookie.split(';');
			for(var i=0; i < ca.length; i++) {
				var c = ca[i];
				while (c.charAt(0) == ' ') c = c.substring(1, c.length);
				if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
			}
			return null;
		},
		erase: function(name) {
			this.create(name, "", -1);
		}
	};
}();

// Initialize Google Map
function swrInitializeLocationMap() {
	var latlng = new google.maps.LatLng(44.032881, -88.578215);
	var locationMapOptions = {
		zoom: 11,
		mapTypeControl: false,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var locationMarker = new google.maps.Marker({
		position: latlng,
		title:"Southwest Rotary Weekly Meeting"
	});
	
	var map = new google.maps.Map(document.getElementById("gmapCanvas"), locationMapOptions);
	locationMarker.setMap(map);
	
	var infoWindowContent = '<h5>Oshkosh Rotary Southwest</h5><p>Robbins Restaurant</p>';
	var infowindow = new google.maps.InfoWindow({
		content: infoWindowContent
	});
	google.maps.event.addListener(locationMarker, 'click', function() {
		infowindow.open(map, locationMarker);
	});
}


