﻿/**
 * the TabNavigation class
 *
 * @author Klaas Dieleman
 * @since nov 2010
 * @copyright eFocus
 *
 * @require jQuery 1.4.2, <http://www.jquery.com>
 *
 * @param Array; jQuery object with navigation elements
 * @param Array; jQuery object with tabcontent elements 
 * @param Object; options (optional)
 *
 */
function TabNavigation(arrNavElements, arrTabElements, options){
	
	if(jQuery(arrNavElements).length == jQuery(arrTabElements).length && jQuery(arrNavElements).length > 0) {
		this.arrNavElements = arrNavElements;
		this.arrTabElements = arrTabElements;
		
		var opt = options || {};
		
		this.options = {
			defaultTab	: 1,
			activeClass	: 'active',
			onChange	: null
		};
		
		for(i in this.options) {
			if(opt[i] != undefined) {
				this.options[i] = opt[i];
			}
		}
		
		this.initialize();
	} else {
		return false;
	}
	
};

TabNavigation.prototype = {
	/**
	 * 
	 */
	initialize: function() {

		this.arrTabElements.addClass('doprint');
		this.showTab(this.getUrlHashTabNumber() || this.options.defaultTab);
		this.attachEvents();
			
	},
	
	/**
	 * 
	 */
	getUrlHashTabNumber: function() {
	
		var requestedTab = false;
		
		jQuery(this.arrNavElements).each(function(index, item) {
			if(jQuery(item).find('a')) {
				if(location.hash.indexOf(jQuery(item).find('a').attr('href')) != -1) {
					requestedTab = index + 1;
				}
			}
		});
		
		return requestedTab
	
	},
    
	/**
	 * 
	 */
	showTab: function(intTab) {
	
		jQuery(this.arrNavElements).removeClass(this.options.activeClass);
		jQuery(this.arrNavElements[intTab - 1]).addClass(this.options.activeClass);
		
		jQuery(this.arrTabElements).hide();
		jQuery(this.arrTabElements[intTab - 1]).show();

		if (this.options.onChange) this.options.onChange(intTab)
		
	},
	
	/**
	 * 
	 */
	attachEvents: function() {
	
		jQuery(this.arrNavElements).bind({
			'click': jQuery.proxy(function(event) {
				event.preventDefault();
				jQuery(event.target).add(jQuery(event.target).parents('a')).blur();
				
				var intTab = jQuery.inArray(event.currentTarget, this.arrNavElements) + 1;
				this.showTab(intTab);
			}, this)
		});
	
	}
}
