var Ionas3SearchalyzrBuilder = Class.create(SearchalyzrBuilder, {
	addTabContainer: function(container, title, content) {
		container.update(title);
		container.insert(Builder.node('div', { id: 'ie_clearing' }, [ '\xA0' ]));
		container.insert(content);
	},

	searchForm: function(stateParams) {
		return getSearchFormHTML();
	},
	
	addTabContent: function(container, tab) {
		Element.extend(container);
		Element.extend(tab);
		
		try {
			container.up("div.searchalyzrContainer").childElements().findAll(function(e) {
				return e.hasClassName('searchalyzrSystem');
			}).reverse()[0].insert(tab);
		} catch(e) {
			alert('Searchalyzr: Inkonsistenz bei der DOM-Manipulation aufgetreten!');
		}
	},
	
	addTabTitle: function(container, tab) {
		Element.extend(container);
		Element.extend(tab.container);
		var div = Builder.node('div', { className: 'searchalyzrSystem panel' });
		div.style.display = "none";
		container.up("div.searchalyzrContainer").insert(div);
		div.insert(tab.container);
	},
	
	createTabTitle: function(system, label) {
		var title = {};
		title.label = Builder.node('span', [ label ]);
		title.loader = Builder.node('img', { src: this.getLoadingIndicatorImage(), alt: '', 'class': 'loading-indicator', style: 'display: none;' });
		title.counter = Builder.node('span', { 'class': 'counter' })
		title.container = Builder.node('a',{
			id: system + '-tab',
			className: 'tabTitle',
			href: '#',
			onclick: 'return false;'
		}, [ title.label, title.loader, title.counter ]);
		Element.extend(title.label);
		Element.extend(title.loader);
		Element.extend(title.counter);
		Element.extend(title.container);
		
		Panel.specify(title.container);
		
		return title;
	},
	
	createTabContent: function(system, label, header) {
		var div = Builder.node('div', {
			id: system + '-content',
			className: 'tabContent',
			style: 'display: none;'
		});
		
		var div2 = Builder.node('div');
		
		if (header) {
			div2.innerHTML = header;
		}
		
		div.appendChild(div2);
		
		return div;		
	},
	
	addTabAction: function(title, func) {
		return false;
	},
	
	showTab: function(title, content) {
		Element.extend(title.container);
		Element.extend(content);
		title.container.show();
		title.container.parentNode.style.display = "";
	},
	
	hideTab: function(title, content) {
		title.container.hide();
		title.container.parentNode.style.display = "none";
		content.hide();
	},
	
	createPageBrowser: function(prevAction, nextAction) {
		var l = [];
        for (var i = 0; i < 2; i++) {
			var prev = Builder.node('a', { href: 'javascript:;', title: this.translate('prevPage') }, [ '<<' ]);
			Element.extend(prev);
			Event.observe(prev, 'click', prevAction);
			
			var next = Builder.node('a', { href: 'javascript:;', title: this.translate('nextPage') }, [ '>>' ]);
			Element.extend(next);
			Event.observe(next, 'click', nextAction);
			
			var from = Builder.node('span', { className: 'from' });
			Element.extend(from);
			var to = Builder.node('span', { className: 'to' });
			Element.extend(to);
			var of = Builder.node('span', { className: 'of' });
			Element.extend(of);
			
			var div = Builder.node('div', { className: 'page-browser ' + (i ? 'page-browser-bottom' : 'page-browser-top') }, [
			    Builder.node('div', { className: 'page-browser-box' }, [
	
				prev,
				' ' + this.translate('show') +' ',
				from,
				' ' + this.translate('to') +' ',
				to,
				' ' + this.translate('from') +' ',
				of,
				' ' + this.translate('entries') +' ',
				next
			])]);
			Element.extend(div);
			div.hide();
            l.push({ prev: prev, next: next, from: from, to: to, of: of, div: div });
		}
		return l;
	},
	
	/**
	 * Aktualisiert einen PageBrowser.
	 * 
	 * @param pageBrowser [Object]
	 * PageBrowser-Element, das mit createPageBrowser erzeugt wurde.
	 * 
	 * @param pageCount [integer]
	 * Anzahl Elemente pro Seite.
	 * 
	 * @param offset [integer]
	 * Offset-Index.
	 * 
	 * @param max [integer]
	 * Maximale-Trefferzahl.
	 * 
	 * @return void
	 */
	updatePageBrowser: function(pageBrowser, pageCount, offset, max) {
        for (var i = 0; i < 2; i++) {
			if (offset > 0)
				pageBrowser[i].prev.show();
			else
				pageBrowser[i].prev.hide();
			
			if (offset < max - pageCount)
				pageBrowser[i].next.show();
			else
				pageBrowser[i].next.hide();
			
			pageBrowser[i].from.update(offset + 1);
			var end = offset + pageCount;
			if (end > max)
				end = max;
			pageBrowser[i].to.update(end);
			pageBrowser[i].of.update(max);
        }
	},
	
	/**
	 * Fügt dem PageBrowser einem Kategorie-Container hinzu.
	 * 
	 * @param container [Object]
	 * Kategorie-Element, das mit createCategory erzeugt wurde.
	 * 
	 * @param pageBrowser [Object]
	 * PageBrowser-Element, das mit createPageBrowser erzeugt wurde.
	 * 
	 * @return void
	 */
	addPageBrowser: function(container, pageBrowser) {
		container.container.insertBefore(pageBrowser[0].div, container.container.firstChild);
		container.container.insert(pageBrowser[1].div);
	},

	/**
	 * Versteckt den PageBrowser.
	 * 
	 * @param pageBrowser [Object]
	 * PageBrowser-Element, das mit createPageBrowser erzeugt wurde.
	 * 
	 * @return void
	 */
	hidePageBrowser: function(pageBrowser) {
        for (var i = 0; i < 2; i++) {
           	pageBrowser[i].div.hide();
        }
	},

	/**
	 * Zeigt den PageBrowser wieder an.
	 * 
	 * @param pageBrowser [Object]
	 * PageBrowser-Element, das mit createPageBrowser erzeugt wurde.
	 * 
	 * @return void
	 */
	showPageBrowser: function(pageBrowser) {
        for (var i = 0; i < 2; i++) {
        	pageBrowser[i].div.show();
        }
	}
});