/*
 * 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.)
 */


/**
 * Objet de génération de popups
 * @param mixed container		Conteneur à analyser (peut-être un id ou un objet)
 * @param object options		Contient les options
 */
var RS_ToPopup = function (container, options){

	// Initialisation de la configuration
	var _config = {};
	_config.tabsBoxId 				= (options.tabsBoxId && options.tabsBoxId != '') 							? options.tabsBoxId 				: 'linkspopup_ficheproduit';
	_config.tabsBoxClassName		= (options.tabsBoxClassName && options.tabsBoxClassName != '') 				? options.tabsBoxClassName			: '';
	_config.tabClassName 			= (options.tabClassName && options.tabClassName != '') 						? options.tabClassName 				: 'linkpopup_ficheproduit';
	_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 			: 'popup_ficheproduit';
	_config.contentNoTabClassName 	= (options.contentNoTabClassName && options.contentNoTabClassName != '') 	? options.contentNoTabClassName 	: 'popup_ficheproduit-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('ul');
		_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 tabLi = document.createElement('li');
					var tab = document.createElement('a');
					tabLi.appendChild(tab);
					tab.href = '#';
					tab.className = _config.tabClassName;
					tab.innerHTML = this.replaceVars(_config.tabHtml, {html: childs[i].innerHTML, index: indexTab})
					tab.id = 'tab_' + indexTab;
					tab.onclick = function(){
						if (tabActif != null && tabActif != this){
							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 = null;
						}
						var index = this.id.substr(this.id.lastIndexOf('_') +1);
						if (document.getElementById('tab-contenu_' + index).style.display != 'none'){
							this.className = _config.tabClassName;
							document.getElementById('tab-contenu_' + index).style.display = 'none';
							return false;
						}
						tabActif = this;
						this.className = _config.tabClassName + ' ' + _config.tabActiveClassName;
						document.getElementById('tab-contenu_' + index).style.display = '';
						return false;
					};
					
					/*if (tabActif == null){
						tabActif = tab;
						tab.className = _config.tabClassName + ' ' + _config.tabActiveClassName;
					}*/
					_tabsBox.appendChild(tabLi);
					
					var tabContenu = document.createElement('div');
					tabContenu.style.display = /*(indexTab == 1) ? '' : */'none';
					tabContenu.id = 'tab-contenu_' + 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_' + 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});
				_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_' + i);
				if (elmt){
					elmt.innerHTML = this.replaceVars(_config.contentHtml, {html: elmt.innerHTML, index: i});
				}
			}
			if (_tabsBox && _config.tabsBoxClassName != ''){
				_tabsBox.className = this.replaceVars(_config.tabsBoxClassName, {nb: indexTab});
			}
		}
		for (var i=0; i<=indexTab; i++){
			var elmt = document.getElementById('tab-contenu_' + i);
			if (elmt){
				var linkClosePopin = document.createElement('a');
				linkClosePopin.href = '#';
				linkClosePopin.innerHTML = document.getElementById('closePopinText') ? document.getElementById('closePopinText').innerHTML : 'Close this window';
				linkClosePopin.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 = null;
					}
					return false;
				};
				var closePopin = document.createElement('div');
				closePopin.className = 'closePopin';
				closePopin.appendChild(linkClosePopin);
				
				var contentBox = document.createElement('div');
				contentBox.className = 'contentPopin';
				contentBox.innerHTML = this.replaceVars(_config.contentHtml, {html: elmt.innerHTML, index: i});
				elmt.innerHTML = '';
				elmt.appendChild(closePopin);
				elmt.appendChild(contentBox);
			}
		}
	}
};

RS_ToPopup.prototype.replaceVars = function (string, vars){
	for (myVar in vars){
		var reg = new RegExp('\\\[' + myVar + '\\\]', '');
		string = string.replace(reg, vars[myVar]);
	}
	return string;
};


