// breadcrumb utilities jQuery plugin
// last updated 06/23/11



jQuery.fn.appendBreadCrumbList = function (docRoot, options) {

	var jqOutputTarget = jQuery(this);

	// establish function settings (can be overridden by passing options to this function)
	var settings = jQuery.extend({
		docRoot:		docRoot
		, docRootLabel:	"Home"
		, delimAfter:	"&gt;"
		, labels:		{ }
	}, options);

	var sThisURL = location.href;
	var sThisPath = sThisURL.slice(sThisURL.indexOf("/", sThisURL.indexOf("//") + 2));
	sThisPath = sThisPath.replace(new RegExp("^" + settings.docRoot), "/");
	var aSegments = sThisPath.slice(1).split("/");
	var bIsIndexPage = (aSegments.slice(-1)[0] == "" || aSegments.slice(-1)[0].charAt(0) == "?" || aSegments.slice(-1)[0].indexOf("index") >= 0);
	var aSteps = ['<a href="' + settings.docRoot + '">' + settings.docRootLabel + '</a>'];
	var sLink;
	
	// build array of steps
	for (var i = 0; i < aSegments.length - 1; i++) {
		sLink = '<a href="';
		for (j = 2; j <= aSegments.length - i; j++) sLink += '../';
		sLink += aSegments[i] + '/">' + labelize(aSegments[i]) + '</a>';
		aSteps.push(sLink);
	}
	
	// sequence steps semantically as nested single-item lists
	var nFinalStepIndex = aSteps.length - ((!bIsIndexPage) ? 1 : 2);
	var bTargetIsUL = (jqOutputTarget.get(0).nodeName.toLowerCase() == "ul");
	for (var i = nFinalStepIndex; i >= 0; i--) {
		if (i == nFinalStepIndex) {
			if (i == 0 && bTargetIsUL) jqOutputTarget.append('<li class="no-ul wrapper">' + aSteps[i] + settings.delimAfter + '</li>');
			else jqOutputTarget.html('<ul class="ul-li wrapper"><li>' + aSteps[i] + settings.delimAfter + '</li></ul>');
		} else {
			var wrapper = (i == 0 && bTargetIsUL) ? '<li></li>' : '<ul><li></li></ul>';
			jqOutputTarget.children(":first-child").wrap(wrapper).before(aSteps[i] + settings.delimAfter);
		}
	}



	function labelize (dirName) {
		var label;
		if (settings.labels[dirName]) {
			// use label for directory name if specified;
			label = settings.labels[dirName];
		} else {
			// ... otherwise, use directory name (w/spaces, capitalized)
			label = dirName;
			label = label.replace(/[_-]/g, " ");
			label = label.replace(/\b(\w)/g, function (w, p1) {return p1.toUpperCase();});
		}
		return label;
	}

};



jQuery.fn.indicateCurrentPage = function (classToAdd) {

	var jqOutputTarget = jQuery(this);
	var overrides = (arguments.length > 1) ? arguments[1].overrides : undefined;
	var overrideHref = (arguments.length > 1) ? arguments[1].url : undefined;
	

	var sCurrentHref = (location.pathname.replace(/index.[^.]+$/, '')).replace(/%2D/gi, '-').replace(/\/$/, '');
	if (overrideHref) {
		sCurrentHref = overrideHref;
	} else if (overrides) {
		for (var patternkey in overrides) {
			if ((new RegExp(patternkey)).test(location.href)) {
				sCurrentHref = overrides[patternkey];
				break;
			}
		}
	}
	
	var sMenuHref;
	jqOutputTarget.each(function(){
		var jqA = jQuery(this).find("> a");
		if (jqA.length > 0) {
			sMenuHref = jqA.attr("href").replace(/\/$/, '');
	//		if (sCurrentHref == sMenuHref) jQuery(this).addClass(classToAdd).parents("li").addClass(classToAdd);
			if (sCurrentHref == sMenuHref) jQuery(this).siblings().removeClass(classToAdd).end().addClass(classToAdd).parents("li").addClass(classToAdd);	// ensures only one hilite per level
		}
	});

};

