/**
 * Library to produce cookie log of clicked filters and inject them
 * as breadcrumbs when product pages are rendered. Should work for
 * any Blik installation.
 *
 * jdbartlett, Electric Pulp 2009 <joe@electricpulp.com>
 */
BBC = {
	defaults: '{"crumbs": []}',
	values: null,

/**
 * Add a crumb to BBC.values
 */
	addCrumb: function(text, link) {
		if (!text.blank() && !link.blank()) {
			this.values.crumbs.push({link: link, text: text.toLowerCase()});
			BBC.writeCookie();
		}
	},

/**
 * Remove all crumbs from BBC.values and save cookie
 */
	clearCrumbs: function() {
		BBC.values.crumbs = [];
		BBC.writeCookie();
	},

/**
 * Extract the BBC cookie into BBC.values
 */
	evalCookie: function() {
		BBC.values = (Mage.Cookies.get('BBC') || BBC.defaults).evalJSON();
	},

/**
 * Return HTML snippet of all crumbs as list items
 */
	htmlCrumbs: function() {
		html = '';
		BBC.values.crumbs.each(function(crumb, index) {
			html += '<li><a href="'+crumb.link+'" onclick="BBC.removeCrumb('+index+')">'+crumb.text+'</a></li>';
		});
		return html;
	},

/**
 * Initialize BBC
 */
	initialize: function() {
		BBC.evalCookie();
		BBC.renderCrumbs();
		BBC.initializeExplore();
	},

/**
 * Add filter link and text to BBC.values.crumbs array
 */
	initializeFilter: function(a) {
		a.observe('click', function(e) {
			BBC.addCrumb(a.innerHTML.unescapeHTML(), a.readAttribute('href'));
		});
	},

/**
 * Initialize an Explore page that includes the filters sidebar
 */
	initializeExplore: function() {
		var filters = $$('div#filter ul li ul li a');
		if (filters.length == 0) return false;

		// Check location.href matches crumbs
		var newParams = location.href.toQueryParams();
		if ($A($H(newParams)).length == 0) BBC.clearCrumbs();
		else BBC.values.crumbs.each(function(crumb, index) {
			var valid = true;
			$H(crumb.link.toQueryParams()).each(function(param) {
				if ('undefined' == typeof newParams[param.key] || newParams[param.key] != param.value) valid = false;
			});
			
			if (!valid) {
				BBC.removeCrumb(index-1);
				throw $break;
			}
		});

		// Call BBC.initializeFilter for each link in #filters
		filters.each(BBC.initializeFilter);
	},

/**
 * Snip BBC.values.crumbs from index to the end of the array
 */
	removeCrumb: function(index) {
		BBC.values.crumbs = BBC.values.crumbs.slice(0, index+1);
		BBC.writeCookie();
	},

/**
 * If the breadcrumbs list exists, injects BBC.value.crumbs above last item
 */
	renderCrumbs: function() {
		var last = $$('ul#breadcrumbs li').last();
		if (Object.isUndefined(last)) return false;
		if (!document.referrer.match(/\/shop\/explore\/?\?/)) return false;
		
		var html = BBC.htmlCrumbs();
		if (!html.empty()) {
			$$('ul#breadcrumbs li')[1].remove(); // remove the designer
			last.insert({before: html});
		}
	},

/**
 * Compile BBC.values into the BBC cookie
 */
	writeCookie: function() {
		Mage.Cookies.set('BBC', Object.toJSON(BBC.values));
	}
	
};

document.observe('dom:loaded', BBC.initialize);
