/*
+-----------------------------------------------------------------------+ 
| JavaScript used on doGoodr Fund site
+-----------------------------------------------------------------------+
*/

document.observe('dom:loaded', function() {
	newWindowHandler();
	popboxLinkObservers();
	dogoodr.qaHandler();
});

/**
 * Open certain designated links in new browser windows
 */
function newWindowHandler() 
{
	$$('a.new_window').each(function(link) {
		Element.observe(link, 'click', function(e) {
			window.open(link.href);
			Event.stop(e);
		});
	});
}

/**
 * Adds mouseover, mouseout, and click handlers to links
 * with popboxes, and displays boxes when needed.
 */
function popboxLinkObservers() 
{
	// Get links in various containers and iterate through them
	var links  = $$('a.popbox_link');
	var links2 = $$('div.popbox_links a');
	links = links.concat(links2);

	links.each(function(link) {
		if (!link.id.match(/_link$/)) return;
		var popbox = link.id.sub('_link', '_box');

		// Show popboxes
		$(link).observe('mouseover', function() {
			$(popbox).show();
		});
		$(popbox).observe('mouseover', function() {
			$(popbox).show();
		});
		// Hide popboxes
		$(link).observe('mouseout', function() {
			$(popbox).hide();
		});
		$(popbox).observe('mouseout', function() {
			$(popbox).hide();
		});
		// Disable links
		$(link).observe('click', function(click) {
			Event.stop(click);
		})
	});
}

var dogoodr = function() {
	// private vars/methods here

	return {
		// public vars/methods here

		/**
		 *
		 * @param obj
		 * @param elmts
		 * @param trigger
		 * @param actv
		 */
		showOnChoosing : function(obj, elmts, trigger, actv) 
		{
			if (obj.value == trigger) {
				$$(elmts).each(function(s) {
					s.show()
				});
			} else {
				$$(elmts).each(function(s) {
					s.hide()
				});
			}
			if ((actv != null) && ($(actv) != null)) {
				$(actv).activate();
			}
		},
  
		/**
		 * limit number of characters entered in input text or textarea field
		 * @param field INPUT text or textarea
		 * @param limit INTEGER max number of characters
		 * @param display OPTIONAL 
		 */
		charLimiter : function(field, limit, display) 
		{
			if (field.value.length > limit) {
				field.value = field.value.substring(0, limit);
			}
			if (display != null) {
				var left = limit - field.value.length;
				display.update(left + ' character' + (left == 1 ? '' : 's') + ' left');
			}
		},
		
		qaHandler : function() 
		{
			this.closeAll('qa_answer');
			$$('h6.qa_question a').each(function(link) {
				Element.observe(link, 'click', function(e) {
					var question = link;
					var answer   = link.id.replace('q', 'a');
					dogoodr.closeAll('qa_answer');
					dogoodr.removeAll('current', 'h6.qa_question a');
					$(question).addClassName('current');
					$(answer).show(); //Effect.toggle(answer, 'slide');
					Event.stop(e);
				});
			});
			$$('div.qa_answer a.close_button').each(function(link) {
				Element.observe(link, 'click', function(e) {
					var parents  = link.ancestors();
					var answer   = parents[1];
					var question = parents[1].id.replace('a', 'q');
					$(question).removeClassName('current');
					$(answer).hide(); //Effect.toggle(answer, 'slide');
					Event.stop(e);
				});
			});
		},
		
		/**
	     * Hides all matching elements
	     */
		closeAll : function(klass) 
		{
			var box   = 'div.' + klass;
			var boxen = $$(box);
			boxen.invoke('hide');
		},
		
		/**
	     * Remove specified class from all matching elements
	     */
		removeAll : function(klass, elements) 
		{
			$$(elements).each(function(element) {
				element.removeClassName(klass);
			});
		}
  
	}; // end public vars/methods
} ();  // end dogoodr namespace

