﻿/**********************************
 **     Common class methods     **
 **********************************/
function switchClass(eNode, sCurrClass, sNewClass) {
	if ( matchClass(eNode, sNewClass)) replaceClass(eNode, sCurrClass, sNewClass);
	else replaceClass(eNode, sNewClass, sCurrClass);
}

function removeClass(eNode, sCurrClass) { replaceClass(eNode, '', sCurrClass); }

function addClass(eNode, sNewClass) { replaceClass(eNode, sNewClass, ''); }

function replaceClass(eNode, sNewClass, sCurrClass) {
	var sOldClass = sNewClass;
	if (sCurrClass && sCurrClass.length ){
		sCurrClass = sCurrClass.replace(/\s+(\S)/g, '|$1');
		if (sOldClass.length) sOldClass += '|';
		sOldClass += sCurrClass;
	}
	eNode.className = eNode.className.replace(new RegExp('(^|\\s+)(' + sOldClass + ')($|\\s+)', 'g'), '' );
	eNode.className += ((eNode.className.length)? ' ' : '') + sNewClass;
}

function matchClass(eNode, sClass) {
	if (eNode && eNode.className) return (eNode.className.length && eNode.className.match(new RegExp('(^|\\s+)(' + sClass + ')($|\\s+)')));
	return false;
}


/**************************
 **     Tab Switcher     **
 **************************/
if (!window.selected_tab_id) var selected_tab_id = null;
if (!window.tabs_array) var tabs_array = null;
var tab_class_prefix = 'tab_';

function get_tab_id(tab_element) {
	if (tab_element) {
		if (tab_element.id) {
			for (var tab_element_id in tabs_array) if (tabs_array[tab_element_id].tab_element_id == tab_element.id) {
				var tab_id = parseInt(tab_element_id.substring(tab_class_prefix.length));
				if (!isNaN(tab_id)) return tab_id;
			}
		}
		if (tab_element.className && tab_element.className.indexOf(tab_class_prefix) >= 0) {
			var tab_id = parseInt(tab_element.className.substring(tab_element.className.indexOf(tab_class_prefix) + tab_class_prefix.length));
			if (!isNaN(tab_id)) return tab_id;
		}
	}
	return null;
}
 
function switch_tab() {
	if (this) {
		var new_tab_id = get_tab_id(this);
		if (new_tab_id && new_tab_id != selected_tab_id) {
			deselect_tab(selected_tab_id);
			selected_tab_id = new_tab_id;
			select_tab(selected_tab_id);
		}
	}
}

function select_tab(tab_id) {
	if (tab_id && tabs_array[tab_class_prefix + tab_id]) {
		if (tabs_array[tab_class_prefix + tab_id].tab_element)
			addClass(tabs_array[tab_class_prefix + tab_id].tab_element, 'active');
		if (tabs_array[tab_class_prefix + tab_id].contents_element) {
			removeClass(tabs_array[tab_class_prefix + tab_id].contents_element, 'hidden');
		} else if (tabs_array[tab_class_prefix + tab_id].contents_elements) {
			for (var i = 0; i < tabs_array[tab_class_prefix + tab_id].contents_elements.length; i++) {
				removeClass(tabs_array[tab_class_prefix + tab_id].contents_elements[i], 'hidden');
			}
		}
	}
}

function deselect_tab(tab_id) {
	if (tab_id && tabs_array[tab_class_prefix + tab_id]) {
		if (tabs_array[tab_class_prefix + tab_id].tab_element)
			removeClass(tabs_array[tab_class_prefix + tab_id].tab_element, 'active');
		if (tabs_array[tab_class_prefix + tab_id].contents_element) {
			addClass(tabs_array[tab_class_prefix + tab_id].contents_element, 'hidden');
		} else if (tabs_array[tab_class_prefix + tab_id].contents_elements) {
			for (var i = 0; i < tabs_array[tab_class_prefix + tab_id].contents_elements.length; i++) {
				addClass(tabs_array[tab_class_prefix + tab_id].contents_elements[i], 'hidden');
			}
		}
	}
}

function init_tabs() {
	var e_tab_navigation = document.getElementById('tab_navigation');
	/* init tabs */
	if (tabs_array) {
		for (var i in tabs_array) {
			if (tabs_array[i].tab_element_id) {
				tabs_array[i].tab_element = document.getElementById(tabs_array[i].tab_element_id);
				tabs_array[i].tab_element.onclick = switch_tab;
			}
			if (tabs_array[i].contents_element_id) {
				tabs_array[i].contents_element = document.getElementById(tabs_array[i].contents_element_id);
			} else if (tabs_array[i].contents_elements_id) {
				tabs_array[i].contents_elements = [];
				for (var j = 0; j < tabs_array[i].contents_elements_id.length; j++) {
					tabs_array[i].contents_elements[j] = document.getElementById(tabs_array[i].contents_elements_id[j]);
				}
			}
		}
	} else {
		tabs_array = {};
		if (e_tab_navigation) {
			for (var i = 0; (elem = e_tab_navigation.getElementsByTagName('*')[i]); i++) {
				if (elem.className && elem.className.indexOf('tab_') >= 0) {
					var tab_id = get_tab_id(elem);
					if (!isNaN(tab_id)) {
						if (elem.className.indexOf('active') >= 0) selected_tab_id = tab_id;
						tabs_array[tab_class_prefix + tab_id] = {};
						tabs_array[tab_class_prefix + tab_id].tab_element = elem;
						elem.onclick = switch_tab;
					}
				}
			}
		}
		
		/* init tabs content */
		var e_tab_contents = document.getElementById('tab_contents');
		if (e_tab_contents) {
			for (var i = 0; (elem = e_tab_contents.getElementsByTagName('*')[i]); i++) {
				if (elem.className && elem.className.indexOf('tab_') >= 0) {
					var tab_id = get_tab_id(elem);
					if (!isNaN(tab_id) && tabs_array[tab_class_prefix + tab_id]) {
						tabs_array[tab_class_prefix + tab_id].contents_element = elem;
					}
				}
			}
		}
	}
}

window.onload = init_tabs;
