/*
 * JavaScript version 1.5 
 * DOM 1.0
 * Prototype JavaScript framework, version 1.5.0_rc1
 *
 * Created on 2006.11.15
 *
 * Project Widget Class Liberty
 * Subproject TabNavigation
 * File tabnav.js
 * 
 * @author Artur Wied <a.wied@zeitgenossen.de>
 * @version 0.1b1
 * @copyright 2006-2007 ZEITGENOSSEN
 *
 */
/**
 * @package TabNav
 *
 * Erzeugt eine Reiter ähnliche Navigationssystem auf Basis von '<img>' Tag.
 * 
 * Beispielabruf:
 * 
 * var foo = new TabNav;
 * foo.addTab('idImgHome', 'images/home_over.png', 'images/home_active.png', function() {alert('Home')});
 * foo.addTab('idImgImpressum', 'images/impressum_over.png', 'images/impressum_active.png', function() {alert('Impressum')});
 *
 * foo.active;    //ID der Aktiven Elements
 * foo.tabs;      //Array beinhalter alle Tabs Objekte
 * foo.destroy(); //deaktiviert TabNav
 * delete foo;    //foo löschen
 **/
TabNav = Class.create();
TabNav.prototype = {
	initialize: function() {
        	this.active;
                this.default_src = Array();
		this.active_src = Array();
                this.tabs = Array();          
		this.tfunc = Array();
        },
	/**
	 * @package TabNav.addTab()
	 * @access public
	 * 
	 * Fügt ein Tab-Element zu dem System hinzu, erste 
	 * hinzufügte Tab wird automatisch aktiviert.
	 * 
	 * Beispielabruf:
	 * 
	 * foo.addTab('idImgHome', 'images/home_over.png', 'images/home_active.png', function() {alert('Home')});
	 * 
	 * @param string id ID des '<img>' Tags
	 * @param string or null src_over Pfad zur Over image
	 * @param string or null src_active Pfad zur Active image
	 * @param function action_func Funktion, die bei Klick ausgefürt wird
	 **/ 
        addTab: function(id, src_over, src_active, action_func) {
        	this.tabs.push($(id));
			this.tfunc.push(action_func);
            	var self_tab = this.tabs[this.tabs.length - 1];
            	
            	this.default_src.push(self_tab.src);
				this.active_src.push(src_active);

            	var self_src = this.default_src[this.default_src.length - 1];
            	var self = this;
            	var action = action_func;
            	if(this.tabs.length == 1) {
            		this.active = self_tab.id;
            		self_tab.src = src_active;
            		action();
            	}
            	self_tab.onclick = function() {
            		if(self.active != self_tab.id) {	
            			self.__setActive(self_tab, src_active);
            			action();
            		}
            	}
            	self_tab.onmouseover = function() {
            		if(self.active != self_tab.id && src_over != null) {
            			self_tab.src = src_over;
            		}
            	}
            	self_tab.onmouseout = function() {
            		if(self.active != self_tab.id && src_over != null) {
            			self_tab.src = self_src;
            		}
        	}
            
	},
	/**
	 * @package TabNav.setActive();
	 * @access public
	 * 
	 * Aktiviert ein Tab und fürt dessn Funktion aus
	 * 
	 * Beispielabruf:
	 * 
	 * foo.setActive(1);
	 * 
	 * @param init tabid ID der Tabs beginend von 0
	 **/ 
	setActive: function(tabid) {
		__setActive(this.tabs[tabid], this.active_src[tabid]);
		this.tfunc[tabid]();
	},
	/**
	 * @package TabNav.__setActive()
	 * @access private
	 * 
	 * Aktiviert ein Tab, fürt keie Function aus!
	 * wird bei *.onclick verwendet
	 * 
	 * Beispielabruf:
	 * 
	 * self.__setActive(self_tab, src_active);
	 * 
	 * @param object new_active_object Nuer aktiver Obect $('ID')
	 * @param string new_active_src Pfad zu aktiver image
	 **/ 
	__setActive: function(new_active_object, new_active_src) {

            	for (var i = 0; i < this.tabs.length; i++) {
            		//if(this.tabs[i].id == this.active) 
            			this.tabs[i].src = this.default_src[i];
            	}
            	this.active = new_active_object.id;
		if (new_active_src != null)
            		new_active_object.src = new_active_src;
        },
	/**
	 * @package TabNav.destroy()
	 * @access public
	 * 
	 * Sezt alle erzeugte Events auf 'null', vor dem löschen von 
	 * TabNav Object unbedingt ausführen!
	 * 
	 * Beispielabruf:
	 * 
	 * foo.destroy();
	 * delete foo //obejct foo löschen
	 **/ 
        destroy: function () {
		for (var i = 0; i < this.tabs.lenght; i += 1) {
			this.tabs[i].onclick = null;
			this.tabs[i].onmouseover = null;
			this.tabs[i].onmouseout = null;
			if(this.tabs[i].id == this.active) 
            			this.tabs[i].src = this.default_src[i];
		}
        }
}
