(function(){ 
	var walkUntil = function(element, walk, match, nocash){ 
		var el = element[walk]; 
		var elements = []; 
		while (el){ 
			if (el.nodeType == 1){ 
				if (!match || Element.match(el, match)) { 
					break; 
				} else { 
					elements.push(el); 
				} 
			} 
			el = el[walk]; 
		} 
		return new Elements(elements, {ddup: false, cash: !nocash}); 
	} 
	Element.implement({ 
		getAllPreviousUntil: function(match, nocash){ 
			return walkUntil(this, 'previousSibling', match, nocash); 
		}, 
		getAllNextUntil: function(match, nocash){ 
			return walkUntil(this, 'nextSibling', match, nocash); 
		}, 
		getParentsUntil: function(match, nocash){ 
			return walkUntil(this, 'parentNode', match, nocash); 
		} 
 	}); 
 
})();

(function($) { window.addEvent('domready', function() {

	var html = $(document.documentElement), body = $(document.body);
	
	$$('div.more').each(function(el) {
		var less = new Element ('a', {
			'html': '<span class="arrow-left">&larr;</span>',
			'class': 'less link',
			'events': {
				'click': function() {
					el.tween('height', 0);
					more.fade('in');
				}
			}
		}).inject(el.getElement('p:last-child'), 'bottom');
		
		var h = el.getStyle('height').toInt();
		
		el.setStyles({
			'height': 0,
			'overflow': 'hidden',
			'zoom': '1',
			'position': 'relative'
		});

		var more = new Element('a', {
			'html': el.getProperty('data-morestring') || '<span class="arrow-right">&rarr;</span>',
			'class': 'more link',
			'events': {
				'click': function() {
					el.tween('height', h+18);
					more.fade('out');
				}
			},
			'tween': {
				'link': 'cancel'
			}
		}).inject(el.getPrevious(), 'bottom');
	});

	var menu = $('menu'),
	menuLi = menu.getElements('>ul>li');
	menu.getElements('>ul>li>span').each(function(el) {
		el.addEvents({
			'click': function() {
				menuLi.removeClass('clicked');
				this.getParent().addClass('clicked');
			},
			'mouseenter': function() {
				if (!this.getParent().hasClass('clicked')) {
					menuLi.removeClass('clicked');
				}
			}
		});
	});
	
	if (html.hasClass('news')) {
		$$('#news article:nth-child(3n+1)').addClass('nth-child-4');
	}
	
	if (html.hasClass('faq')) {
		var togglers = $('content').getElements('h3'),
		elements = [];
		togglers.each(function(el,idx) {
			elements[idx] = new Element('div.accordion.content').adopt(el.getAllNextUntil('h3')).inject(el, 'after');
			el.addClass('toggler');
		});
		
		var faqAccordion = new Fx.Accordion(togglers, elements, {
			alwaysHide: true,
			display: -1,
			onActive: function(toggler, element) {
				$$([toggler, element]).addClass('active');
			},
			onBackground: function(toggler, element) {
				$$([toggler, element]).removeClass('active');
			}
		});
	}
	
	$$('table').each(function(table) {
		if (table.getElements('tr').length > 2) {
			HtmlTable.defineParsers({
				'xxx': {
					convert: function(){
						return this.get('text').stripTags().trim().clean().toLowerCase();
					}
				}
			});
			var tablesort = new HtmlTable(table, {
				sortIndex: null,
				sortable: true,
				defaultParser: 'xxx'
			});
		}
	});
	
}); })(document.id);
