/*
-----------------------------------------------
BuildingBlocksForLiteracy
Script: bb.util.js
Author: Ben Glassman
Organization: Vermont Design Works
Created: 05 Oct 2010
----------------------------------------------- */

var bb = {};
bb.util = {
	init:function() {
		bb.util.mailtoFix('REMOVETHISBEFORESENDING');
		bb.util.preparePopups();
		if (!$jq('#nav-explore li ul').length) {
			$jq('#nav-explore .trigger').hide();
		} else {
			$jq('#nav-explore').expando({
				loadCallback : function($trigger, $targets, opts) {
					var height = 0;
					$targets.each(function() {
						var pHeight = $jq(this).parent().height();
						if (pHeight > height) { height = pHeight; }
					});
					$trigger.data('targetHeight', height);
				},
				toggleCallback : function($trigger, $targets, $this, opts) {
					var targetHeight = $trigger.hasClass(opts.openClass) ? $trigger.data('targetHeight') : 'auto';
					$jq('#nav-explore-content > li').height(targetHeight);
				}
			});
		}
	},
	mailtoFix:function(stringToRemove) {
		var links = document.getElementsByTagName('a');
		var removeText = new RegExp(stringToRemove);
		for (var i = 0; i < links.length; i++) {
			if (links[i].href.indexOf('mailto:') != -1) {
				links[i].href = links[i].href.replace(removeText, '');
				$jq(links[i]).html($jq(links[i]).html().replace(removeText, ''));
			}
		}
	},
	popUp:function(winURL, name, parameters) {
		window.open(winURL, name, parameters);
	},
	preparePopups:function() {
		if (!document.getElementsByTagName) return false;
		var lnks = document.getElementsByTagName("a");
		for (var i=0; i<lnks.length; i++) {
			if (lnks[i].className == "popup") {
				lnks[i].title+= " (opens in a new window)";
				lnks[i].onclick = function() {
					bb.util.popUp(this.getAttribute("href"), "popup", "width=320,height=480");
					return false;
				}
			}
			else if (lnks[i].className == "external") {
				lnks[i].title+= " (opens in a new window)";
				lnks[i].onclick = function() {
					bb.util.popUp(this.getAttribute("href"), "external", "");
					return false;
				}
			}
			else if (lnks[i].href != null && lnks[i].href.indexOf('.pdf') != -1) {
				lnks[i].title += " (opens in a new window)";
				lnks[i].onclick = function() {
					bb.util.popUp(this.getAttribute("href"), "pdf", "");
					return false;
				}
			}
		}
	},
	trimString:function(str) {
		return str.replace(/^\s*\n*\r*|\s*\n*\r*$/g,'');
	},
	fadeUp:function(element, red, green, blue) {
		if (element.fade) {
			clearTimeout(element.fade);
		}
		element.style.backgroundColor = 'rgb('+red+','+green+','+blue+')';
		if (red == 255 && green == 255 && blue == 255) {
			return;
		}
		var newred = red + Math.ceil((255-red)/10);
		var newgreen = green + Math.ceil((255-green)/10);
		var newblue = blue + Math.ceil((255-blue)/10);
		var repeat = function() {
			bb.util.fadeUp(element, newred, newgreen, newblue);
		}
		element.fade = setTimeout(repeat, 100);
	},
	autoPopulate:function(input_sel) {	
		$jq(input_sel).each(function() {
			var populate_text = $jq('label[for="' + $jq(this).attr('id') + '"]').text();
			if (populate_text) {
				$jq(this).val(populate_text).data('populate_text', populate_text);				
				$jq(this).focus(function() {
					if ($jq(this).val() == $jq(this).data('populate_text')) {
						$jq(this).val('');
					}
				});
				$jq(this).blur(function() {
					if ($jq(this).val() == '') {
						$jq(this).val($jq(this).data('populate_text'));
					}
				});
			}
		});
	}
};

vdwCookie = {
	createCookie: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=/";
	},
	readCookie: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;
	},
	eraseCookie:function(name) {
		createCookie(name,"",-1);
	}
}


jQuery.fn.equalizeCols = function(){
  var height = 0;
  return this.css("height","auto").each(function(){
  	$this = jQuery(this);
    height = Math.max( height, ($this.outerHeight() - parseInt($this.css('padding-top')) - parseInt($this.css('padding-bottom'))));
  }).css("height", height);

};
/*
(function($) {
	// Expando Plugin by Ben Glassman
	$.fn.expando = function(options) {
		var opts = $.extend({}, $.fn.expando.defaults, options);
		return this.each(function() {
			$this = $(this);
			var o = opts;
			var $targets = $('.' + o.targetClass, $this);
			var $status = $('.' + o.statusClass, $this);
			var $trigger = $('.' + o.triggerClass, $this).bind('click', function(e) {
				e.preventDefault();
				if ($trigger.hasClass(o.openClass)) {
					$status.text(o.closedStatus);
					$targets.hide();
					$trigger.removeClass(o.openClass).addClass(o.closedClass);
				} else {
					$status.text(o.openStatus);
					$targets.show();
					$trigger.removeClass(o.closedClass).addClass(o.openClass);
				}
				if (o.toggleCallback) { o.toggleCallback($trigger, $targets, $jq(this), o); }
			});
			if (o.loadCallback) { o.loadCallback($trigger, $targets, o); }
			if (o.autoClose) { $trigger.trigger('click'); }
		});
	};
	$.fn.expando.defaults = {
		triggerClass : 'trigger',
		targetClass : 'target',
		statusClass : 'status',
		openClass : 'expanded',
		closedClass : 'collapsed',
		openStatus : 'Collapse',
		closedStatus : 'Expand',
		autoClose : 1,
		loadCallback : null,
		toggleCallback : null
	};
})(jQuery);
*/

(function($) {
	// Expando Plugin by Ben Glassman
	$.fn.expando = function(options) {
		var opts = $.extend({}, $.fn.expando.defaults, options);
		return this.each(function() {

			function hideTarget($trigger, $target, o) {
				$target.hide();
				$trigger.removeClass(o.openClass).addClass(o.closedClass);			
			}

			function showTarget($trigger, $target, o) {
				$target.show();
				$trigger.removeClass(o.closedClass).addClass(o.openClass);
			}
			
			$this = $(this);
			var o = opts;
			var $triggers = $('.' + o.triggerClass, $this).each(function() {
				$jq(this).data('target', $jq(this).parent().find('.' + o.targetClass));
				if ($jq(this).hasClass(o.closedClass)) {
					$jq(this).data('target').hide();
				}
			}).bind('click', function(e) {
				e.preventDefault();
				$trigger = $jq(e.currentTarget);
				if ($trigger.hasClass(o.openClass)) {
					hideTarget($trigger, $trigger.data('target'), o);
				} else {
					showTarget($trigger, $trigger.data('target'), o);
					if (o.singleMode) {
						$triggers.not($trigger[0]).each(function() {
							hideTarget($jq(this), $jq(this).data('target'), o);
						});
					}
				}
				if (o.toggleCallback) { o.toggleCallback($triggers, $trigger, o); }
			});
			if (o.loadCallback) { o.loadCallback($triggers, $targets, o); }
			if (o.autoToggle) {
				$triggers.trigger('click');
			}
			if (o.active !== false) {
				showTarget($triggers.eq(o.active), $triggers.eq(o.active).data('target'), o);
			}
		});
	};
	$.fn.expando.defaults = {
		triggerClass : 'trigger',
		targetClass : 'target',
		statusClass : 'status',
		openClass : 'expanded',
		closedClass : 'collapsed',
		openStatus : 'Collapse',
		closedStatus : 'Expand',
		autoToggle : false,
		active : false,
		singleMode : false,
		loadCallback : null,
		toggleCallback : null
	};
	// Scrollpane
	$.fn.scrollpane = function(options) {
		return this.each(function() {
			$this = $(this);
			var o = options;
			if ($this.children().length <= o.limit) { return false; }
			$this.addClass('scrollpane');
			var $items = $this.children().filter(':lt('+o.limit+')');
			var height = 0;
			$items.each(function() {
				height += parseFloat($jq(this).height()) + parseFloat($jq(this).css('paddingTop')) + parseFloat($jq(this).css('paddingBottom'));
			});
			$wrapper = $this.wrapInner('<div class="scrollpane-wrapper"></div>')
				.find('.scrollpane-wrapper');
			$wrapper.css({
				overflow : 'auto',
				height : (height - parseFloat($wrapper.css('paddingTop'))) + 'px'
			});
		});
	};
})(jQuery);
$jq(document).ready(bb.util.init);


