/************************************************************	
 *										*
 * TSM: TabStrip Menu version 0.1					* 
 * Auteur: Wonesek (wonesek@aol.com)				*
 * Liscence: GNU/GPL							* 
 *										*
 * Respectez le travail de l'auteur en laissant cette		*
 * entête dans le fichier source.					*
 * Pour une utilisation commercial, veuillez prevenir		*
 * l'auteur.								*
 * 										*
 ************************************************************/

var isIE= navigator.appName == "Microsoft Internet Explorer" ; 		/* IE */ 
var isNS= navigator.appName == "Netscape" ; 	   			/* Netscape, Mozilla Firefox */
			  
var atsm;

//path vers tsm_spacer.png
//si le .js est utilisé dans plusieurs fichiers de different repertoire,
//il suffit de redefinir la variable qui suit dans chacun des fichiers HTML avec un chemin relatif
//ou donner un chemin absolu dans ce fichier
var	tsmPath	= (tsmPath) ? tsmPath : "./",
	tsmImg	= "tsm_spacer.png",
	tsmS		= tsmPath + tsmImg;

//directions
var	menuTop		= 1,
	menuLeft	= 2,
	menuBottom	= 3,
	menuRight	= 4;

//evenements
var	onClick		= "onClick",
	onMouseOver	= "onMouseOver";

//yes or no
var yes = "yes",
no	= "no";
	
//type style (CSS)
//le style s'applique à l'entete de l'onglet, mais à l'onglet lui meme aussi.
var style_t = { 
                $font_family		: 0,		/* police de caractere */ 
		$font_color		: 1,		/* couleur de la police */
		$font_size		: 2,		/* taille en pixel */
		$font_style		: 3,		/* underline ou normal */
		$background_color	: 4,		/* couleur de fond */
		$border_size		: 5,		/* taille de la bordure */
		$border_style		: 6,		/* dashed, solid, outset, etc... style de la bordure */
		$border_color		: 7,		/* couleur de la bordure */
		$padding		: 8  		/* marge interieur en pixel */
	 }
			  
function style()
{
	var i;
	for(i in style_t) this[i] = null;
}


//style par defaut:
var standardStyleOn;
var standardStyleOff;

with(standardStyleOn = new style)
{
	$font_family	    = "arial";
	$font_color	    = "#000000";
	$font_size	    = "12px";
	$font_style	    = "normal";
	$background_color   = "#ffffff";
	$border_size	    = "1px";
	$border_style	    = "solid";
	$border_color	    = "#000000";
	$padding	    = "4px";			
}

with(standardStyleOff = new style)
{
	$font_family	    = "arial";
	$font_color	    = "#c0c0c0";
	$font_size	    = "12px";
	$font_style	    = "normal";
	$background_color   = "#efefef";
	$border_size	    = "1px";
	$border_style	    = "dashed";
	$border_color	    = "#c0c0c0";
	$padding	    = "4px";
}
	
var name_tsm = "tsm";

//contiendra la liste des menus
var tsm = new Array();

//definit le type menu
var tsm_t =	{ menuId		: 0,		/* identifiant du menu */
		  id_cpt		: 1,		/* id du tableau html qui contiendra la "tête" des onglets */
		  id_cnt		: 2,		/* id du tableau html qui contiendra le "corps" des onglets */
		  parentDivId		: 3,		/* id de la division ou se situe le menu */
		  tabs			: 4,		/* tableau contenant tous les onglets du menu
		  html			: 5,		/* code html du menu */
		  menuWidth		: 6,		/* largeur du menu (px) */
		  menuHeight		: 7,		/* hauteur du menu (px) */
		  menuSelectTab		: 8,		/* onglet selectionné par defaut */
		  menuChangeEvt		: 9,		/* evenement qui permet de changer d'onglet */
		  menuDirection		: 10,		/* direction du menu */
		  menuAlign		: 11,		/* alignement des entetes */
		  menuMargin		: 12,		/* espacement entre deux entetes d'onglets (px) */
		  styleOn		: 13,		/* style des onglets qui n'ont pas le focus */
		  styleOff		: 14,		/* style des onglets qui ont le focus */
		  frmMarginWidth  	: 15,		/* largeur de marge interne des iframes des onglets */
		  frmMarginHeight 	: 16,		/* hauteur de marge interne des iframes des onglets */
		  frmScrolling		: 17,		/* scroll des onglets */
		  frmBorder		: 18}; 		/* bordur des iframes des onglets*/

/*******************************************************************************/
//creation de la classe tabStripMenu
/*******************************************************************************/
function tabStripMenu(parentId, width, height)
{
	var i;
	for (i in tsm_t)
	     this[i] = null;
		
	this.menuId		= tsm.length;
	this.parentDivId	= parentId;
	this.tabs		= new Array();
	this.id_cpt		= name_tsm + this.menuId + "cpt";
	this.id_cnt		= name_tsm + this.menuId + "cnt";
	this.menuWidth		= width;
	this.menuHeight		= height;
	
	//setup par defaut
	this.menuSelectTab	= 0;				//tab par defaut: la premiere
	this.styleOn		= standardStyleOn;		//styleOn standard
	this.styleOff		= standardStyleOff;		//styleOff standard
	this.menuChangeEvt	= onClick;			//changement d'onglet par click
	this.menuDirection	= menuTop;			//menu a entete horizontal
	this.menuAlign		= menuLeft;			//entete à gauche
	this.menuMargin		= 0;				//pas d'espacement entre les entetes
	
	this.frmMarginWidth	= 0;
	this.frmMarginHeight	= 0;
	this.frmScrolling	= yes;
	this.frmBorder		= 0;
		  	
	//methodes detruites apres build()
	this.addTab		= tab;				//ajout d'un onglet
	this.updateTab		= updateTab;			//modifie le contenu d'un onglet
	this.build		= build;			//ajout du menu dans tsm + creation du code html
	this.setDefaultTab	= setDefaultTab;		//definir l'onglet par defaut
	this.setEvent		= setEvent;			//definir l'evenement declencheur
	this.setStyles		= setStyles;			//definir les styles on/off du tabstripmenu
	this.setDirection	= setDirection;			//definir la position de l'entete
	this.setAlign		= setAlign;			//definir l'alignement des items
	this.setMargin		= setMargin;			//definir la marge entre les entetes
	this.setIframes	        = setIframes;       		//définir les paramètres des iframes
		
	//methode utilisable apres build() et tsmLoadAll()
	/*setFocus()*/	//donner le focus à un onglet
}

/*******************************************************************************/
//set default tab
/*******************************************************************************/
function setDefaultTab(aTab)
	{this.menuSelectTab = (aTab) ? aTab : 0;}

/*******************************************************************************/
//set tab margin
/*******************************************************************************/
function setMargin(pxVal)
	{this.menuMargin = Math.max(pxVal, 0);}
	
/*******************************************************************************/
//set tab events
/*******************************************************************************/
function setEvent(evt)
	{this.menuChangeEvt = (!evt) ? onClick : evt;}

/*******************************************************************************/
// set tab direction
/*******************************************************************************/	
function setDirection(dir)
{
	switch(dir)
	{
		case menuTop: case menuLeft: case menuBottom: case menuRight:
			this.menuDirection = dir;
		break;
		default:
			this.menuDirection = menuTop;
		break;
	}

	//on recharge l'alignement
	this.setAlign(this.menuDirection);
}

/*******************************************************************************/
// set align
/*******************************************************************************/
function setAlign(dir)
{
	switch(this.menuDirection)
	{
		case menuLeft : case menuRight :
			if ((dir == menuTop) || (dir == menuBottom))
				this.menuAlign = dir;
			else
				this.menuAlign = menuTop;
		break;

		case menuTop : case menuBottom :
			if ((dir == menuRight) || (dir == menuLeft))
				this.menuAlign = dir;
			else
				this.menuAlign = menuLeft;
		break;
	}
}

/*******************************************************************************/
// set styles
/*******************************************************************************/
function setStyles(sOn, sOff)
{
	this.styleOn	= (!sOn) ? standardStyleOn : sOn;
	this.styleOff	= (!sOff) ? standardStyleOff : sOff;
}

/*******************************************************************************/
// set iframe config
/*******************************************************************************/
function setIframes(border, marginWidth, marginHeight, scroll)
{
   this.frmBorder	     = border;
   this.frmMarginWidth 	 = marginWidth;
   this.frmMarginHeight	 = marginHeight;
   this.frmScrolling 	 = scroll;
}

/*******************************************************************************/
//cette methode permet de construire le code html du menu
/*******************************************************************************/
function build()
{
	var i;
	switch(this.menuDirection)
	{
		case menuLeft:
			this.html	= "<table border='0' cellpadding='0' cellspacing='0' width='" + this.menuWidth + "' height='" + this.menuHeight + "'>"
						+ "<tr>"
						+ "<td valign='top'>"
						+ "<table id='" + this.id_cpt + "' border='0' cellpadding='0' cellspacing='0' width='100%' height='100%'>";

			if (this.menuAlign == menuBottom)
				this.html += "<td height='100%'> &nbsp </td>";
					
			for(i = 0; i < this.tabs.length; i++)
			{
				this.html += "<tr><td nowrap style='cursor:pointer' " + this.menuChangeEvt + "='javascript:tsm[" + this.menuId + "].setFocus(" + i + ")'>" + this.tabs[i].tabCaption + "</td></tr>";
				if 	((this.menuMargin > 0) && (i+1 != this.tabs.length)) 
				    this.html += "<tr><td><img height='" + this.menuMargin + "px' src='" + tsmS + "' style='visibility : hidden;'></td></tr>";
			}
			if (this.menuAlign == menuTop)
				//this.html += "<tr><td height='100%'><img src='" + tsmS + "'></td></tr>";
				this.html += "<td height='100%'> &nbsp </td>";	

			this.html	+="</table>"
					+ "</td>"
					+ "<td valign='top' width='100%'>"
					+ "<table id='" + this.id_cnt + "' border='0' width='100%' height='100%' cellpadding='0' cellspacing='0'>"
					+ "<tr>"
					+ "<td valign='top'>";
												
			for(i = 0; i < this.tabs.length; i++)
			{
				//this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>" + this.tabs[i].tabContent + "</div>";
				this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>"
				          +  "  <iframe id='"+ this.tabs[i].id_frame +"' src='" + this.tabs[i].tabContent + "' width='100%' height='100%' marginwidth='" + this.frmMarginWidth + "' marginheigth='" + this.frmMarginHeight + "' scrolling='" + this.frmScrolling + "' frameborder='" + this.frmBorder + "'></iframe>"
						  +  "</div>";
			}											
			this.html	+="</td>"
					+ "</tr>"
					+ "</table>"			
					+ "</td>"
					+ "</tr>"
					+ "</table>";
		break;
		
		case menuRight:
			this.html	= "<table border='0' cellpadding='0' cellspacing='0' width='" + this.menuWidth + "' height='" + this.menuHeight + "'>"
					+ "<tr>"
					+ "<td valign='top' width='100%'>"
					+ "<table id='" + this.id_cnt + "' border='0' width='100%' height='100%' cellpadding='0' cellspacing='0'>"
					+ "<tr>"
					+ "<td valign='top'>";
												
			for(i = 0; i < this.tabs.length; i++)
			{
				//this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>" + this.tabs[i].tabContent + "</div>";
				this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>"
				          +  "  <iframe id='"+ this.tabs[i].id_frame +"' src='" + this.tabs[i].tabContent + "' width='100%' height='100%' marginwidth='" + this.frmMarginWidth + "' marginheigth='" + this.frmMarginHeight + "' scrolling='" + this.frmScrolling + "' frameborder='" + this.frmBorder + "'></iframe>"
						  +  "</div>";
			}											
			this.html	+="</td>"
					+ "</tr>"
					+ "</table>"
					+ "</td>"
					+ "<td valign='top'>"
					+ "<table id='" + this.id_cpt + "' border='0' cellpadding='0' cellspacing='0' height='100%'>";

			if (this.menuAlign == menuBottom)
				//this.html += "<tr><td height='100%'><img src='" + tsmS + "'></td></tr>";
				this.html += "<td height='100%'> &nbsp </td>";
					
			for(i = 0; i < this.tabs.length; i++)
			{
				this.html += "<tr><td nowrap style='cursor:pointer' " + this.menuChangeEvt + "='javascript:tsm[" + this.menuId + "].setFocus(" + i + ")'>" + this.tabs[i].tabCaption + "</td></tr>";
				if 	((this.menuMargin > 0) && (i+1 != this.tabs.length)) 
				   this.html += "<tr><td><img height='" + this.menuMargin + "px' src='" + tsmS + "' style='visibility : hidden;'></td></tr>";
			}
			if (this.menuAlign == menuTop)
				//this.html += "<tr><td height='100%'><img src='" + tsmS + "'></td></tr>";	
				this.html += "<td height='100%'> &nbsp </td>";

			this.html	+="</table>"			
					+ "</td>"
					+ "</tr>"
					+ "</table>";
		break;

		case menuBottom:
			this.html	= "<table border='0' cellpadding='0' cellspacing='0' width='" + this.menuWidth + "' height='" + this.menuHeight + "'>"
					+ "<tr>"
					+ "<td height='100%' valign='top'>"
					+ "<table id='" + this.id_cnt + "' border='0' width='100%' height='100%' cellpadding='0' cellspacing='0'>"
					+ "<tr>"
					+ "<td valign='top'>";
												
			for(i = 0; i < this.tabs.length; i++)
			{
				//this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>" + this.tabs[i].tabContent + "</div>";
				this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>"
				          +  "  <iframe id='"+ this.tabs[i].id_frame +"' src='" + this.tabs[i].tabContent + "' width='100%' height='100%' marginwidth='" + this.frmMarginWidth + "' marginheigth='" + this.frmMarginHeight + "' scrolling='" + this.frmScrolling + "' frameborder='" + this.frmBorder + "'></iframe>"
					  +  "</div>";
			}											
			this.html	+="</td>"
					+ "</tr>"
					+ "</table>"
					+ "</td>"
					+ "</tr>"
					+ "<tr>"
					+ "<td>"
					+ "<table id='" + this.id_cpt + "' border='0' cellpadding='0' cellspacing='0' width='100%'>"
					+ "<tr>";

			if (this.menuAlign == menuRight)
				//this.html += "<td width='100%'><img src='" + tsmS + "'></td>";
				this.html += "<td width='100%'> &nbsp </td>";
								
			for(i = 0; i < this.tabs.length; i++)
			{
				this.html += "<td nowrap style='cursor:pointer' " + this.menuChangeEvt + "='javascript:tsm[" + this.menuId + "].setFocus(" + i + ")'>" + this.tabs[i].tabCaption + "</td>";
				if 	((this.menuMargin > 0) && (i+1 != this.tabs.length)) 
				   this.html += "<td><img width='" + this.menuMargin + "px' src='" + tsmS + "' style='visibility : hidden;'></td>";
			}
			if (this.menuAlign == menuLeft)
				//this.html += "<td width='100%'><img src='" + tsmS + "'></td>";
				this.html += "<td width='100%'> &nbsp </td>";

			this.html	+="</tr>"
					+ "</table>"
					+ "</td>"
					+ "</tr>"
					+ "</table>";
		break;

		case menuTop:
			this.html	= "<table border='0' cellpadding='0' cellspacing='0' width='" + this.menuWidth + "' height='" + this.menuHeight + "'>"
					+ "<tr>"
					+ "<td>"
					+ "<table id='" + this.id_cpt + "' border='0' cellpadding='0' cellspacing='0' width='100%'>"
					+ "<tr>";

			if (this.menuAlign == menuRight)
				//this.html += "<td width='100%'><img src='" + tsmS + "'></td>";
				this.html += "<td width='100%'> &nbsp </td>";
								
			for(i = 0; i < this.tabs.length; i++)
			{
				this.html += "<td nowrap style='cursor:pointer' " + this.menuChangeEvt + "='javascript:tsm[" + this.menuId + "].setFocus(" + i + ")'>" + this.tabs[i].tabCaption + "</td>";
				if 	((this.menuMargin > 0) && (i+1 != this.tabs.length))
				   this.html += "<td><img width='" + this.menuMargin + "px' src='" + tsmS + "' border='0' style='visibility : hidden;'></td>";
			}
			if (this.menuAlign == menuLeft)
			    this.html += "<td nowrap width='100%'> &nbsp </td>";
				//this.html += "<td width='100%'><img src='" + tsmS + "'></td>";

			this.html	+="</tr>"
						+ "</table>"
						+ "</td>"
						+ "</tr>"
						+ "<tr>"
						+ "<td height='100%' valign='top'>"
						+ "<table id='" + this.id_cnt + "' border='0' width='100%' height='100%' cellpadding='0' cellspacing='0'>"
						+ "<tr>"
						+ "<td valign='top'>";
												
			for(i = 0; i < this.tabs.length; i++)
			{
				//this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>" + this.tabs[i].tabContent + "</div>";
				this.html += "<div id='" + this.tabs[i].id_tab + "' style='width: 100%; height: 100%; display: none;'>"
				          +  "  <iframe id='"+ this.tabs[i].id_frame +"' src='" + this.tabs[i].tabContent + "' width='100%' height='100%' marginwidth='" + this.frmMarginWidth + "' marginheigth='" + this.frmMarginHeight + "' scrolling='" + this.frmScrolling + "' frameborder='" + this.frmBorder + "'></iframe>"
						  +  "</div>";
			}										
			this.html	+="</td>"
						+ "</tr>"
						+ "</table>"
						+ "</td>"
						+ "</tr>"
						+ "</table>";
		break;
	}
					
	tsm[this.menuId]			= this;
	tsm[this.menuId].setFocus	= setFocus; 
}

/*******************************************************************************/
//donner le focus à un onglet
/*******************************************************************************/
function setFocus(tab)
{
	var cell, row;

	for(var i = 0; i < this.tabs.length; i++)
	{
		if (tab == i)
		{
			this.tabs[i].nbClick++;
			//alert(this.tabs[i].nbClick)
			
			switch(this.menuDirection)
			{
				case menuLeft: case menuRight:
					//si il y a une marge entre les entetes on double
					row = (this.menuMargin != 0) ? 2*i : i;
					//si l'alignement est en bas, on decale d'un
					row = (this.menuAlign == menuBottom) ? (row+1) : row;
					with(_getObj(this.id_cpt).rows[row].cells[0].style)
					{
						with(this.styleOn)
						{
							backgroundColor	= $background_color;
							fontFamily		= $font_family;
							fontStyle		= $font_style;
							fontSize		= $font_size;
							color			= $font_color;
							borderStyle		= $border_style;
							borderColor		= $border_color;
							borderTopWidth	= $border_size;
							borderLeftWidth	= (this.menuDirection == menuLeft) ? $border_size : '0px';
							borderRightWidth	= (this.menuDirection == menuLeft) ? '0px' : $border_size;
							borderBottomWidth	= $border_size;
							padding				= $padding;
						}
					}
				break;

				case menuTop: case menuBottom:
					//si il y a une marge entre les entetes on double
					cell = (this.menuMargin != 0) ? 2*i : i;
					//si l'alignement est à droite, on decale d'un
					cell = (this.menuAlign == menuRight) ? (cell+1) : cell;
					with(_getObj(this.id_cpt).rows[0].cells[cell].style)
					{
						with(this.styleOn)
						{
							backgroundColor	= $background_color;
							fontFamily		= $font_family;
							fontStyle		= $font_style;
							fontSize		= $font_size;
							color			= $font_color;
							borderStyle		= $border_style;
							borderColor		= $border_color;
							borderTopWidth	= (this.menuDirection == menuBottom) ? '0px' : $border_size;
							borderLeftWidth	= $border_size;
							borderRightWidth	= $border_size;
							borderBottomWidth	= (this.menuDirection == menuBottom) ? $border_size : '0px';
							padding				= $padding;
						}
					}
				break;
			}
			_getObj(this.tabs[i].id_tab).style.display = "block";
			
			//refresh the content of the tab for "mozilla, nestcape" browsers
			//this is necessary when iframes are used in tab (for scrolling).
			//Do not delete it if iframe is used. Fixed by TheNox alias Djoad!
			//if(isNS && this.tabs[i].nbClick==1)									   	 	
			//  	tabRefresh(_getObj(this.tabs[i].id_tab))
		}
		else
		{
			switch(this.menuDirection)
			{
				case menuLeft: case menuRight:
					//si il y a une marge entre les entetes on double
					row = (this.menuMargin != 0) ? 2*i : i;
					//si l'alignement est en bas, on decale d'un
					row = (this.menuAlign == menuBottom) ? (row+1) : row;
					with(_getObj(this.id_cpt).rows[row].cells[0].style)
					{
						with(this.styleOff)
						{
							backgroundColor	= $background_color;
							fontFamily		= $font_family;
							fontStyle		= $font_style;
							fontSize		= $font_size;
							color			= $font_color;
							borderStyle		= $border_style;
							borderColor		= $border_color;
							borderTopWidth	= ((i > tab) && (this.menuMargin == 0))  ? "0px" : $border_size;
							borderBottomWidth	= ((i < tab) && (this.menuMargin == 0))  ? "0px" : $border_size;
							padding				= $padding;
						}
						if (this.menuDirection == menuLeft)
						{ 
							borderLeftWidth	= this.styleOff.$border_size;
							borderRightStyle	= this.styleOn.$border_style;
							borderRightWidth	= this.styleOn.$border_size;
							borderRightColor	= this.styleOn.$border_color;
						}
						else
						{
							borderRightWidth	= this.styleOff.$border_size;
							borderLeftStyle	= this.styleOn.$border_style;
							borderLeftWidth	= this.styleOn.$border_size;
							borderLeftColor	= this.styleOn.$border_color;
						}
					}
				break;

				case menuBottom: case menuTop:
					//si il y a une marge entre les entetes on double
					cell = (this.menuMargin != 0) ? 2*i : i;
					//si l'alignement est à droite, on decale d'un
					cell = (this.menuAlign == menuRight) ? (cell+1) : cell;
					with(_getObj(this.id_cpt).rows[0].cells[cell].style)
					{
						with(this.styleOff)
						{
							backgroundColor	= $background_color;
							fontFamily		= $font_family;
							fontStyle		= $font_style;
							fontSize		= $font_size;
							color			= $font_color;
							borderStyle		= $border_style;
							borderColor		= $border_color;
							borderLeftWidth	= ((i > tab) && (this.menuMargin == 0)) ? "0px" : $border_size;
							borderRightWidth	= ((i < tab) && (this.menuMargin == 0)) ? "0px" : $border_size;
							padding				= $padding;
						}
				
						if (this.menuDirection == menuBottom)
						{ 
							borderBottomWidth	= this.styleOff.$border_size;
							borderTopStyle	= this.styleOn.$border_style;
							borderTopWidth	= this.styleOn.$border_size;
							borderTopColor	= this.styleOn.$border_color;
						}
						else
						{
							borderTopWidth	= this.styleOff.$border_size;
							borderBottomStyle	= this.styleOn.$border_style;
							borderBottomWidth	= this.styleOn.$border_size;
							borderBottomColor	= this.styleOn.$border_color;
						}
					}
				break;
			}
			_getObj(this.tabs[i].id_tab).style.display = "none";
		}
	}
}

/*******************************************************************************/
//definit le type onglet (un menu est constitué d'onglet)
/*******************************************************************************/
var tab_t = { tabId		: 0,		/* identifiant de l'onglet */
		  id_tab	: 1,		/* id de la division qui contient le corps de l'onglet */
		  tabCaption	: 2,		/* caption de la "tête" de l'onglet */
		  tabContent	: 3,		/* contenu de l'onglet */
		  parentMenu	: 4,		/* menu dans lequel est l'onglet */
		  nbClick	: 5,		/* contain the number of clicks on each tab */
		  parentMenuId	: 6,		/* id du menu dans lequel est l'onglet */
		  id_frame	: 7};

function tab(caption, content, id_frame)
{
	this.tabId		= this.tabs.length;	
	this.id_tab		= this.id_cnt + this.tabId;
	this.tabCaption		= caption;
	this.tabContent		= content;
	this.parentMenuId	= this.menuId;
	this.nbClick		= 0;		  		   
	this.parentMenu		= this;
	this.id_frame 		= '';
	
	try { this.id_frame = id_frame; }
	catch(e){}
	 
	
	this.tabs[this.tabId]	= new Array();
	var i;
	for(i in tab_t) this.tabs[this.tabId][i] = this[i];
	return this.id_tab;			   	/*retourne l'id pour un éventuelle mise à jours de onglet*/
} 

/*******************************************************************************/
// mise à jour d'un onglet existant. Djoad !		
/*******************************************************************************/
function updateTab(id, src)
{
   if(isIE)
   {
     frames[id].location = src;
   }
   else
   {
     _getObj(id).contentWindow.location = src;
   }
   /*
   for(var i=0; i < this.tabs.length; i++)
   {
	  if(this.tabs[i].id_iframe == id)
	  {
	    var num=i;
		break;
	  }
   }
	
   setFocus(this.tabs[num].id_tab);
   */ 
}

/*******************************************************************************/
//charge tous les menus sur la page et ajuste leur apparence graphique
/*******************************************************************************/
function tsmLoadAll()
{
	var	i = 0,
		l = 0,
		j,k,m;
	
	var	alreadyOutList = new Array(),
		alreadyOut;
	
	var elt;
	
	//on tourne dans une boucle tant que tous les menus ne sont pas affichés
	//avec une limite pour eviter les boucles infinies en cas de probleme
	while ((i != tsm.length) && (l <= Math.pow(tsm.length,2)))
	{
		for(j = 0; j < tsm.length; j++)
		{
			if (_getObj(tsm[j].parentDivId))
			{
				alreadyOut = false;
				for(k = 0; k < alreadyOutList.length ; k++)
				{
					if (alreadyOutList[k] == tsm[j].menuId)
					{
						alreadyOut = true;
						break;
					}
				}
				if (!alreadyOut)
				{
					_getObj(tsm[j].parentDivId).innerHTML = tsm[j].html;
					alreadyOutList[k+1] = tsm[j].menuId;
				}
			}
		l++;
		}
	}

	for(i = 0; i < tsm.length; i++)
	{
		//on charge styleOn
		with(tsm[i].styleOn)
		{
			switch(tsm[i].menuDirection)
			{
				case menuLeft: case menuRight:
					//la cellule qui contient le contenu de l'onglet
					with(_getObj(tsm[i].id_cnt).rows[0].cells[0].style)
					{
						backgroundColor	    = $background_color;
						fontFamily			= $font_family;
						fontStyle			= $font_style;
						fontSize			= $font_size;
						color				= $font_color;
						borderStyle			= $border_style;
						borderColor			= $border_color;
						borderTopWidth		= $border_size;
						borderLeftWidth		= (tsm[i].menuDirection == menuLeft) ? '0px' : $border_size;
						borderRightWidth	= (tsm[i].menuDirection == menuLeft) ? $border_size : '0px';
						borderBottomWidth	= $border_size;
						//padding			= $padding;
					}

					//on crée le bord gauche/droite
					elt = _getObj(tsm[i].id_cpt);
					for(j = 0; j < elt.rows.length; j++)
					{
						with(elt.rows[j].cells[0].style)
						{
							backgroundColor		= "transparent";
							padding				= "0px";
							borderStyle			= $border_style;
							borderColor			= $border_color;
							borderTopWidth		= '0px';
							borderLeftWidth		= (tsm[i].menuDirection == menuLeft) ? '0px' : $border_size;
							borderRightWidth	= (tsm[i].menuDirection == menuLeft) ? $border_size : '0px';
							borderBottomWidth	= '0px';
						}
					}			
				break;

				case menuTop: case menuBottom:
					//la cellule qui contient le contenu de l'onglet
					with(_getObj(tsm[i].id_cnt).rows[0].cells[0].style)
					{
						backgroundColor	    = $background_color;
						fontFamily			= $font_family;
						fontStyle			= $font_style;
						fontSize			= $font_size;
						color				= $font_color;
						borderStyle			= $border_style;
						borderColor			= $border_color;
						borderTopWidth		= (tsm[i].menuDirection == menuBottom) ? $border_size : '0px';
						borderBottomWidth	= (tsm[i].menuDirection == menuBottom) ? '0px' : $border_size;
						borderLeftWidth		= $border_size;
						borderRightWidth	= $border_size;
						//padding		= $padding;
					}

					//on crée le bord haut/bas
					elt = _getObj(tsm[i].id_cpt).rows[0];
					for(j = 0; j < elt.cells.length; j++)
					{
						with(elt.cells[j].style)
						{
							backgroundColor	    = "transparent";
							padding				= "0px";
							borderStyle			= $border_style;
							borderColor			= $border_color;
							borderTopWidth		= (tsm[i].menuDirection == menuBottom) ? $border_size : '0px';
							borderBottomWidth	= (tsm[i].menuDirection == menuBottom) ? '0px' : $border_size;
							borderLeftWidth		= '0px';
							borderRightWidth	= '0px';
						}
					}
				break;
			}
		}
	}
	
	/*
	tsm[0].setFocus(1);
	tsm[0].setFocus(0);
	
	tsm[1].setFocus(1);
	tsm[1].setFocus(0);
	*/
	
	//focus sur les onglets par defaut
	for(i = 0; i <tsm.length; i++)
	{
		tsm[i].setFocus(tsm[i].menuSelectTab);
	}
}

/*******************************************************************************/
// rafraichit le contenu de l'onglet
// Lorsqu'on utlise des "<iframe>" dans les "tab", nestcape, firefox, n'affichent 
// pas le contenu de l'onglet au 1er click. Il faut 2 click. Raison inconnue !
// Or les "<irfame>" sont la seule solution que j'ai trouvée pour avoir le 
// scrolling à la fois sous "ie" et sous "nestcape, firefox, mozilla". 
// TheNox alias Djoad !
/*******************************************************************************/
function tabRefresh(obj)
{
  obj.innerHTML = obj.innerHTML;
}

/*******************************************************************************/
//retourne l'objet associé à l'id passé en argument
/*******************************************************************************/
function _getObj(id)
	{return document.getElementById(id);}

	
/************************************END****************************************/
// Au passage, grand merci à Wonesek pour ce source magnifique :) !
/************************************END****************************************/	