/*
 * jQuery urlCrumbs Plugin
 * @requires jQuery v1.3 or later (supports metadata plugin)
 *
 * Usage $("#Content").urlcrumbs();
 *
 * Or:
 * $("#Content").urlcrumbs({
 *							level: 1,  										// Depth the crumbs start at in the url
 *							homeLabel: "HomePage",							// Label for root directory
 *							homeBreadcrumbStyle: "my-url-breadcrumb-home",	// Style for root directory (use to hide text etc)
 *							breadcrumbStyle:  "my-url-breadcrumb-home"		// Style for directory/pages/anchors
 *							}); 
 *
 */

(function($) {
	$.fn.urlCrumbs = function(options) {
		var opts = $.extend({}, $.fn.urlCrumbs.defaults, options);  //metadata plugin
		var p = location.pathname;
		var h = location.href;
		var root = h.substring(0, h.indexOf(p));
		var secs = p.substring(1, p.length).split("/");
		secs.unshift(root);
		if(secs[secs.length-1].length == 0) secs.pop();
		if(location.hash.length > 0) secs.push(location.hash);
		return this.each(function() {
			$this = $(this);
			var href = '';
			var $ul = $('<ul></ul>');
			var len = secs.length;
			for(var i = 0; i < len; i++) {
				var sec = secs[i];
				href += sec;
				if(i <= len - 1) href += '/';
				if(i >= opts.level) {
					if(sec.length > 0) {
						var txt = format((i==len-1) ? opts.finalLabelFunction(sec, p) : opts.labelFunction(sec, root, opts, p));
						if(opts.camelCaps) txt = $.fn.urlCrumbs.camelCaps(txt);
						if(opts.sentenceCase) txt = $.fn.urlCrumbs.sentenceCase(txt);
						if(i == len - 1) {
							$li = $('<li>' + txt + '</li>');
						} else {
							$li = $('<li><a href="' + href + '">' + txt + '</a></li>');
						}
						$li.addClass(i==opts.level ? opts.firstBreadcrumbStyle : opts.breadcrumbStyle);
						if(sec == root) $li.addClass(opts.homeBreadcrumbStyle);
						$ul.append($li);
					}
				}
			}
			$this.append($ul);
		});
	};
	
	function defaultLabelFunction(section, root, opts, pathname) {
		return (section == root) ? opts.homeLabel :  section;
	}
	
	function defaultFinalLabelFunction(section, pathname) {
		return section;
	}
	
	function format(string) {
		string = string.split("_").join(" ");
		string = string.split(".")[0];
		if(string.indexOf('#') > -1) string = string.split("#")[1];
		return string;
	};
	
	$.fn.urlCrumbs.sentenceCase = function(string) {
		var words = string.split(' ');
		if(words.length > 0) {
			words[0] = words[0].charAt(0).toUpperCase() + words[0].substring(1);
		}
		return words.join(' ');
	}

	$.fn.urlCrumbs.camelCaps = function(string) {
		var words = string.split(' ');
		for (var i = 0; i < words.length; i++) {
			words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
		}
		return words.join(' ');
	};

	$.fn.urlCrumbs.defaults = {
		level: 0,
		homeLabel: '&nbsp;&nbsp;&nbsp;',
		homeBreadcrumbStyle: 'url-breadcrumb-home',
		firstBreadcrumbStyle: 'url-breadcrumb-first',
		breadcrumbStyle: 'url-breadcrumb',
		labelFunction: defaultLabelFunction,
		finalLabelFunction: defaultFinalLabelFunction,
		camelCaps: false,
		sentenceCase: true
	};
})(jQuery);