/*--------------
 * Local extensions for MooTools 
 *-----------*/


//----
// tabswapper - for the resources/events search pages
tabSwapper = Fx.Base.extend({

	getOptions: function(){
		return {
			startTab: 0,	
			action: 'click' ,
			linkOnClass: 'active',
			linkOffClass: "" ,
			tabClass: 'tabs',
			tabContainer:false
		};
	},


	initialize: function(container, links, blocks, options){
		this.setOptions(this.getOptions(), options);

		this.tabs = [] ;
		this.links = $$(links);
		this.blocks = $$(blocks);
		this.now = -1 ;

		// add bulleted list to container
		this.tabContainerList = new Element('ul').addClass(this.options.tabClass) ;
		this.tabContainer = $(this.options.tabContainer);
		if (this.tabContainer) {
			this.tabContainerList.injectInside(this.tabContainer) ;
		}
		else {
			this.tabContainerList.injectBefore( $(container).getChildren()[0] ) ;
		}
		// getFirst() isn't working!
		// $(container).getFirst() returns false, so $x.getChildren() instead

		this.links.each(function(link, i){
			tab = new Element('li')
			new Element('span').appendText(link.innerHTML).injectInside(tab);
			tab.injectInside(this.tabContainerList);
			tab.addEvent(this.options.action, this.display.bind(this, i));
			this.tabs.push(tab);
			link.setStyle('display','none');
		}, this);


		this.slideEls = [];
		this.blocks.each(function(block, index){
			this.slideEls[index] = new Fx.Slide(block);
    	}, this);

		this.slideEls.each(function(el){
			el.hide();
		});
	},

	display: function(iToShow){
		this.blocks.each(function(el, idx){
			if (idx == iToShow){	// show
				el.setStyle('visibility', 'visible');
				this.slideEls[idx.toString()].toggle();
				$(this.tabs[idx]).removeClass(this.options.linkOffClass).addClass(this.options.linkOnClass);
			} else {
				this.slideEls[idx.toString()].hide();
				$(this.tabs[idx]).removeClass(this.options.linkOnClass).addClass(this.options.linkOffClass);
			}
		}, this);
		this.currentBlock = iToShow;
	} 

});


//----
// paginator - for the long resources pages which get split into separate divs
// insert links for next/prev + page numbers at top and at bottom of page
var pageSwapper = Fx.Base.extend({

	getOptions: function(){
		return {
			pagerTop: '',
			nextLink: true,
			prevLink: true,
			linkOnClass: "linkOn",
			linkOffClass: ""
		};
	},

	initialize: function(blocks, options){
		this.setOptions(this.getOptions(), options);
		this.currentBlock = -1 ;
		this.blocks = $$(blocks);

		this.toplinks = Array();
		this.bottomlinks = Array();

		if (this.options.prevLink) {
			link = new Element('span').setHTML('&laquo;');
			link.addEvent('click', function(){this.prevPage();}.bind(this));

			link.injectInside(this.options.pagerTop);
			link.clone().cloneEvents(link).injectInside(this.options.pagerBottom);
		}

		this.blocks.each(function(el,index){
			el.setStyle('display','none');
			
			link = new Element('span').setHTML((index+1).toString());
			link.addEvent('click', function(){this.display(index);}.bind(this));
			link.injectInside(this.options.pagerTop);
			this.toplinks.push(link);

			bottomlink = link.clone().cloneEvents(link);
			bottomlink.injectInside(this.options.pagerBottom);
			this.bottomlinks.push(bottomlink);

		}.bind(this));
		
		if (this.options.nextLink) {
			link = new Element('span').setHTML('&raquo;');
			link.addEvent('click', function(){this.nextPage();}.bind(this));
			link.injectInside(this.options.pagerTop);
			link.clone().cloneEvents(link).injectInside(this.options.pagerBottom);
		}		
		
		this.display(0);
	},


	prevPage: function() {
		if (this.currentBlock>0) 
			this.display(this.currentBlock-1);
		else 
			this.display(this.blocks.length-1);
	},


	nextPage: function() {
		if (this.currentBlock<this.blocks.length-1) 
			this.display(this.currentBlock+1);
		else 
			this.display(0);
	},
	

	display: function(iToShow){
		this.blocks.each(function(el, idx){
			if (idx == iToShow){	// show
				$(this.toplinks[idx]).removeClass(this.options.linkOffClass).addClass(this.options.linkOnClass);
				$(this.bottomlinks[idx]).removeClass(this.options.linkOffClass).addClass(this.options.linkOnClass);
				this.blocks[idx].setStyle('display','block');				
			} else {
				$(this.toplinks[idx]).removeClass(this.options.linkOnClass).addClass(this.options.linkOffClass);
				$(this.bottomlinks[idx]).removeClass(this.options.linkOnClass).addClass(this.options.linkOffClass);
				this.blocks[idx].setStyle('display','none');				
			}
		}, this);
		this.currentBlock = iToShow;
	}
});



