/**
 * Tabs
 */
var Tabs = {
	/**
	 * list of tabs nodes
	 * @type {Object}
	 */
	nodes: {},

	/**
	 * last selected tab
	 * @type {String}
	 */
	history: null,

	/**
	 * search for tabbed elements & add to list
	 * select tab history
	 */
	init: function() {
		var ul = document.getElementsByTagName('ul');
		for (var i=0, length=ul.length; i<length; i++) {
			if (ul[i].className.match('js_tabs')) {
				Tabs.attachLinks(ul[i], ul[i].id);
			}
		}
		if (location.hash) {
			Tabs.loadHistory(location.hash);
		}
		window.setInterval(Tabs.handleHistory, 500);
	},

	/**
	 * handle history hash change
	 */
	handleHistory: function() {
		if (Tabs.history != location.hash) {
			Tabs.loadHistory(location.hash);
		}
	},

	/**
	 * load tab from history hash
	 * @param {Object} hash
	 */
	loadHistory: function(hash) {
		var tab = $(hash.replace(/#/, ''));
		if (tab && typeof tab != 'undefined') {
			//temporary: Tabs.openTab(tab);
		}
	},

	/**
	 * attach links on main tabs buttons
	 * @param {Object} ul
	 * @param {Object} parent
	 */
	attachLinks: function(ul, parent) {
		var a = Tabs.getTabLinks(ul);
		Tabs.nodes[parent] = [];
		for (var i=0, length=a.length; i<length; i++) {
			var id = a[i].id, data = $(id+'_data');
			if (data && i!=0) data.style.display = 'none';
			if (data && i==0) a[i].parentNode.className += ' active';
			a[i].onclick = function() { return Tabs.openTab(this); };
			Tabs.nodes[parent].push(id);
		}
	},

	/**
	 * get all tab links
	 * @param {Object} ul
	 */
	getTabLinks: function(ul) {
		return ul.getElementsByTagName('a');
	},

	/**
	 * open tab
	 * @param {Object} element
	 */
	openTab: function(element) {
		Tabs.closeAll(element);
		element.parentNode.className += ' active';
		var data = $(element.id+'_data');
		if (data) data.style.display = '';
		var match = element.href.match('(#.*)');
		var hash = (match.length > 1) ? match[1] : false;
		if (!hash || hash=='#') {
			return false;
		}
		Tabs.history = hash;
		//temporary: return true;
		return false;
	},

	/**
	 * close all tabs
	 * @param {Object} element
	 */
	closeAll: function(element) {
		var parent = element;
		while (parent.nodeName != 'UL') {
			parent = parent.parentNode;
		}
		var nodes = Tabs.nodes;
		if (nodes && nodes[parent.id]) {
			var links = nodes[parent.id];
			for (var i=0, length=links.length; i<length; i++) {
				var id = links[i];
				var e = $(id);
				if (e && e.parentNode.className.match('active')) {
					e.parentNode.className = e.parentNode.className.replace(/active/, '');
					var tab_data = $(id+'_data');
					if (tab_data) {
						tab_data.style.display = 'none';
						var ul = tab_data.getElementsByTagName('ul');
						for (var i=0, length=ul.length; i<length; i++) {
							if (ul[i].className.match('js_tabs')) {
								this.closeAll(ul[i]);
							}
						}
					}
				}
			}
		}
	}

}
Loader.push(function(){ Tabs.init(); });
//Loader.push(function() {dtag.className = dtag.className.replace(/js_loading/, '')})


