/*

	ballotbox.js
	Copyright 2009 Collaborare, LLC

	Javascript utilities for broshure site.
*/

var BBX = function(){
	// Private methods

	// add/remove/check element's css class
	function jscss(a, o, c1, c2)
	{
	  switch (a){
		case 'swap':
		  o.className=!jscss('check',o,c1)
							? o.className.replace(c2,c1)
							: o.className.replace(c1,c2);
		break;
		case 'add':
		  if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
		break;
		case 'remove':
		  var rep=o.className.match(' '+c1)?' '+c1:c1;
		  o.className=o.className.replace(rep,'');
		break;
		case 'check':
		  return new RegExp('\\b'+c1+'\\b').test(o.className)
		break;
	  }
	}

	// Add event handler to DOM object
	function addEvent(obj,type,fn) {
		if (obj.attachEvent) {
			obj['e'+type+fn] = fn;
			obj[type+fn] = function() { obj['e'+type+fn](window.event); }
			obj.attachEvent('on'+type,obj[type+fn]);
		} else
		obj.addEventListener(type,fn,false);
	}

	// Install Help Popups
	function installHelpPopups() {
		var elements = document.getElementsByTagName('*');
		var triggers = [];
		for(var i = 0; i < elements.length; i++) {
			var element = elements[i];
			if(jscss('check', element, 'popup_trigger') && element.nodeName.toLowerCase() == 'div')
				triggers.push(element);
		}

		var foundTriggers = false;
		for(var triggerIdx = 0; triggerIdx < triggers.length; triggerIdx++) {
			var trigger = triggers[triggerIdx];
			if(jscss('check', trigger, 'popup_trigger'))
			{
				// We've got a trigger
				addEvent(trigger, 'click', popupTriggerClick);
				foundTriggers = true;
				if(trigger.nodeName.toLowerCase() == 'div') {
					// Grab title
					var titleHTML = trigger.innerHTML;

					// Collect following popup_description elements
					var descriptions = [];
					var desc = trigger.nextSibling;
					while(desc != null) {
						if(jscss('check', desc, 'popup_description'))
							descriptions.push(desc);
						desc = desc.nextSibling;
					}

					if(descriptions.length < 1)
						continue;
					
					// Append image
					var img = document.createElement('img');

					img.src = '/media/web_info_icon.jpg';
					trigger.appendChild(img);

					// Create popup container					
					var wrapper = document.createElement('div');
					var content = document.createElement('div');
					wrapper.className = 'popup_container';
					content.className = 'popup_content';

					wrapper.appendChild(content);
					var title = document.createElement('div');
					title.className = 'popup_title';
					title.innerHTML = titleHTML;

					content.appendChild(title);
					
					for(var i = 0; i < descriptions.length; i++) {
						jscss('remove', descriptions[i], 'popup_description');
						content.appendChild(descriptions[i]);
					}
					
					var footer = document.createElement('div');
					footer.className = 'popup_footer';
					footer.innerHTML = "(Click to close)";
					content.appendChild(footer);
					
					// Now append this to the trigger
					var next = trigger.nextSibling;
					next = trigger;
					if(next != null)
						trigger.parentNode.insertBefore(wrapper, next);
					else
						trigger.parentNode.appendChild(wrapper);
						
					addEvent(wrapper, 'click', popupDescriptionClick);
						
				}
			}
			/*
			else if(jscss('check', trigger, 'popup_description'))
			{
				// We've got a description
				addEvent(trigger, 'click', popupDescriptionClick);
			}
			*/
		}
	}

	// Popup trigger click handler
	function popupTriggerClick(e) {
		var targ;
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;

		while(targ != null) {
			// Check for sibling popup_display

			var node = targ.previousSibling;
			while(node != null) {
				if(jscss('check', node, 'popup_container')) {
					if(jscss('check', node, 'popup_container_visible'))
						hidePopupDescription(node);
					else
						showPopupDescription(node, true);
					return;
				}
				node = node.previousSibling;
			}

			targ = targ.parentNode;
		}
	}
	
	// Popup description click handler
	function popupDescriptionClick(e) {
		var targ;
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;

		hidePopupDescription(targ);
	}
	
	function showPopupDescription(node, hideOthers) {
	
		if(hideOthers) {
			var elts = document.getElementsByTagName('*');
		
			for(var i = 0; i < elts.length; i++) {
				var elt = elts[i];
				if(elt != node && jscss('check', elt, 'popup_container_visible')) {
					hidePopupDescription(elt);
				}
			}
		}

		jscss('add', node, 'popup_container_visible');
	}
	
	function hidePopupDescription(node) {
		while(node != null) {
			if(jscss('check', node, 'popup_container_visible')) {
				jscss('remove', node, 'popup_container_visible');
				break;
			}
			
			node = node.parentNode;
		}
	}
	
	// Convert .png images to corresponding .gif images
	function fixupPngUrls() {
		$(".subcontent-unit-border-orange img[src='/media/checkbox.png']").attr('src', '/media/checkbox-orange.gif');
		$(".subcontent-unit-border-blue img[src='/media/checkbox.png']").attr('src', '/media/checkbox-blue.gif');
		$(".subcontent-unit-border-green img[src='/media/checkbox.png']").attr('src', '/media/checkbox-green.gif');
		$("img[src='/media/tagline.png']").attr('src', '/media/tagline.gif');
		$("img[src='/media/web_checkmark.png']").attr('src', '/media/web_checkmark.jpg');
		$("img[src='/media/checkbox_big.png']").attr('src', '/media/checkbox_big.gif');
		$("img[src='/media/checkbox_mini.png']").attr('src', '/media/checkbox_mini.gif');
	}

	// Public methods/properties
	return {	
		apply: function() {
			addEvent(window, 'load', installHelpPopups);
		},
		
		old_browser_mode: function() {
			addEvent(window, 'load', fixupPngUrls);
		}
	}


}();

BBX.apply();

$(document).ready(function() {
//	$("img[src$='bar_assns.gif']").remove();
//	$("a[href$='contact-us.php']").html('<img src="/media/contact_us_button.gif">');
	$("a[href$='contact-us.php']").html('&nbsp;').attr('id', 'mb_contact').parent().addClass('menu-button');
});


