function configuratorUrl() {
	var url = '/product-finder/categories';
	$$('#finder_categories a.selected').each(function(e, i){
		url += '/' + e.readAttribute('rel');
	});
	return url;
}
var Configurator = Class.create({
	
	initialize: function() {

		$$('#finder a.finder-toggler').each(function(e){
			e.observe('click', function(clickEvnt){
				clickEvnt.stop();

				e.toggleClassName('selected');
				if ($('finder_categories').visible()) {
					$('finder_categories').fade({ duration: 0.2, afterFinish: function(){ $('finder_categories').update(); }});
					// $('finder_categories').hide();
					// $('finder_categories').update()
				} else {
					new Ajax.Request(e.href, {
						onComplete: function(x) {
							// alert(x.responseText);
							$('finder_categories').update(x.responseText);
							$('finder_categories').appear({ duration: 0.2 });
							// $('finder_categories').show();

							// attach click events to first level...
							$$('#finder_categories ul.group-0 a').each(function(l1){
								l1.observe('click', function(clickEvnt){
									clickEvnt.stop();

									$$('#finder_categories ul.group-0 a.selected').invoke('removeClassName', 'selected');
									l1.addClassName('selected');

									new Ajax.Request(configuratorUrl(), { //l1.href
										onComplete: function(y) {
											// alert(y.responseText);
											var parentElement = l1.up('ul.choices');
											parentElement.nextSiblings().invoke('remove');
											parentElement.insert({ after: y.responseText });
											parentElement.next().appear({ duration: 0.2 });

											// attach click events to groups
											$$('#finder_categories ul.groups a').each(function(l2){
												l2.observe('click', function(clickEvnt){
													clickEvnt.stop();
													// $$('#finder_categories ul.groups a.selected').invoke('removeClassName', 'selected');
													var _parent = l2.up('ul.groups');
													_parent.select('a.selected').invoke('removeClassName', 'selected');
													if (_parent.next()) {
														_parent.next().select('a.selected').invoke('removeClassName', 'selected');
													}
													l2.addClassName('selected');
													var _nextGroup = _parent.next('ul.groups');
													if (!Object.isUndefined(_nextGroup)) {
														_nextGroup.appear({ duration: 0.2 });
														// _nextGroup.show();
													}

													new Ajax.Request(configuratorUrl(), { //l2.href
														onComplete: function(z) {
                              // alert(z.responseText);
															$('finder_results').replace(z.responseText);
														}
													});
												});
											}); // end: $$('#finder_categories ul.groups a').each..
										}
									});
								});
							}); // end: $$('#finder_categories ul.group-0 a').each...
						}
					});
				}
			});
		});
		if ($('finder')) $('finder').show();
	}

});

