/*
 * var options = {
 * 		tabsBoxId: 'id',						Exemple: onglets-box
 * 		tabsBoxClassName: 'className',			Exemple: onglet_[nb]
 * 		tabClassName: 'className',				Exemple: onglet
 * 		tabActiveClassName: 'className',		Exemple: active
 * 		tabElement: 'elementName',				Exemple: h2
 * 		contentClassName: 'className',			Exemple: onglet-contenu
 * 		contentNoTabClassName: 'className',		Exemple: onglet-sans-contenu
 * 		tabHtml: 'html',						Exemple: <span>[html]</span>			
 * 		contentHtml: 'html',					Exemple: [html]<div class="onglet-contenu-bas"></div>
 * 		contentNoTabHtml: 'html',				Exemple: [html]<div class="onglet-sans-contenu-bas"></div>
 * }
 *
 * Dans les options de type "html", les variables suivantes peuvent être utilisées :
 * [html]		est remplacée par le contenu normalement inséré (nom de l'onglet ou contenu de l'onglet)
 * [index]		est remplacée par l'index de l'onglet (1 pour le premier onglet, 2 pour le suivant, etc.) /!\ N'est pas remplacé dans contentNoTabHtml
 * [oindex]		est remplacée par l'index du groupe d'onglets (1 pour le premier groupe d'onglets, 2 pour le suivant, etc.)
 */


/**
 * @var (int) Index du groupe d'onglets
 */
var RSPlug_Tab_Index = 0;

/**
 * Objet de génération d'onglets
 * @param mixed container		Conteneur à analyser (peut-être un id ou un objet)
 * @param object options		Contient les options
 */
var RSPlug_Tab = function (container, options){
	// Incrémentation de l'index du groupe d'onglets
	RSPlug_Tab_Index++;	
	
	// Initialisation de la configuration
	var _config = {};
	_config.tabsBoxId 				= (options.tabsBoxId && options.tabsBoxId != '') 							? options.tabsBoxId 				: 'onglets-box' + RSPlug_Tab_Index;
	_config.tabsBoxClassName		= (options.tabsBoxClassName && options.tabsBoxClassName != '') 				? options.tabsBoxClassName			: '';
	_config.tabClassName 			= (options.tabClassName && options.tabClassName != '') 						? options.tabClassName 				: 'onglet';
	_config.tabActiveClassName 		= (options.tabActiveClassName && options.tabActiveClassName != '') 			? options.tabActiveClassName 		: 'active';
	_config.tabElement 				= (options.tabElement && options.tabElement != '') 							? options.tabElement.toLowerCase() 	: 'h2';
	_config.contentClassName 		= (options.contentClassName && options.contentClassName != '') 				? options.contentClassName 			: 'onglet-contenu';
	_config.contentNoTabClassName 	= (options.contentNoTabClassName && options.contentNoTabClassName != '') 	? options.contentNoTabClassName 	: 'onglet-sans-contenu';
	_config.tabHtml 				= (options.tabHtml && options.tabHtml != '') 								? options.tabHtml 					: '[html]';
	_config.contentHtml 			= (options.contentHtml && options.contentHtml != '') 						? options.contentHtml 				: '[html]';
	_config.contentNoTabHtml		= (options.contentNoTabHtml && options.contentNoTabHtml != '') 				? options.contentNoTabHtml			: '[html]';
	
	// On récupère le conteneur des tabs
	var _container = (typeof container == 'string') ? document.getElementById(container) : container;
	
	if (_container){
		
		// Initialisation des conteneurs
		var _tmpTabs = document.createElement('div');
		_tmpTabs.innerHTML = _container.innerHTML; 	
		_container.innerHTML = '';
		_container.className = '';
		var _tabsBox = document.createElement('div');
		_tabsBox.id = _config.tabsBoxId;
		_container.appendChild(_tabsBox);
		
		// Analyse du contenu
		var childs = _tmpTabs.childNodes;
		var indexTab = 0;
		var tabActif = null;
		var hasContent = false;
		for (var i=0; i<childs.length; i++){
			if (childs[i].nodeType == 1){
				if (childs[i].nodeName.toLowerCase() == _config.tabElement){
					hasTab = true;
					indexTab++;
					var tab = document.createElement('a');
					tab.href = '#';
					tab.className = _config.tabClassName;
					tab.innerHTML = this.replaceVars(_config.tabHtml, {html: childs[i].innerHTML, index: indexTab, oindex: RSPlug_Tab_Index})
					tab.id = 'tab_' + RSPlug_Tab_Index + '-' + indexTab;
					tab.onclick = function(){
						if (tabActif != null){
							tabActif.className = _config.tabClassName;
							var index = tabActif.id.substr(tabActif.id.lastIndexOf('_') +1);
							if (document.getElementById('tab-contenu_' + index)){
								document.getElementById('tab-contenu_' + index).style.display = 'none';
							}
						}
						tabActif = this;
						this.className = _config.tabClassName + ' ' + _config.tabActiveClassName;
						var index = this.id.substr(this.id.lastIndexOf('_') +1);
						document.getElementById('tab-contenu_' + index).style.display = '';
						this.blur();
						return false;
					};
					
					if (tabActif == null){
						tabActif = tab;
						tab.className = _config.tabClassName + ' ' + _config.tabActiveClassName;
					}
					_tabsBox.appendChild(tab);
					
					var tabContenu = document.createElement('div');
					tabContenu.style.display = (indexTab == 1) ? '' : 'none';
					tabContenu.id = 'tab-contenu_' + RSPlug_Tab_Index + '-' + indexTab;
					tabContenu.className = _config.contentClassName;
					tabContenu.innerHTML = '&nbsp;';
					_container.appendChild(tabContenu);
				}
				else {
					hasContent = true;
					var enfant = childs[i].cloneNode(true);
					var elmt = document.getElementById('tab-contenu_' + RSPlug_Tab_Index + '-' + indexTab);
					if (indexTab != 0 && elmt){
						if (elmt.innerHTML == '&nbsp;'){
							elmt.innerHTML = '';
						}
						elmt.appendChild(enfant);
					} 
				} 			
			}
			else if (childs[i].nodeType == 3) {
				hasContent = true;
			}
		}
		if (indexTab == 0){
			if (hasContent){
				var content = document.createElement('div');
				content.className = _config.contentNoTabClassName;
				content.innerHTML = this.replaceVars(_config.contentNoTabHtml, {html: _tmpTabs.innerHTML, oindex: RSPlug_Tab_Index});
				_container.removeChild(_tabsBox);
				_container.appendChild(content);
			} else {
				_container.parentNode.removeChild(_container);
			}
		} else {
			for (var i=0; i<=indexTab; i++){
				var elmt = document.getElementById('tab-contenu_' + RSPlug_Tab_Index + '-' + i);
				if (elmt){
					elmt.innerHTML = this.replaceVars(_config.contentHtml, {html: elmt.innerHTML, index: i, oindex: RSPlug_Tab_Index});
				}
			}
			if (_tabsBox && _config.tabsBoxClassName != ''){
				_tabsBox.className = this.replaceVars(_config.tabsBoxClassName, {nb: indexTab});
			}
		}
	}
};

RSPlug_Tab.prototype.replaceVars = function (string, vars){
	for (myVar in vars){
		var reg = new RegExp('\\\[' + myVar + '\\\]', '');
		string = string.replace(reg, vars[myVar]);
	}
	return string;
};

