var speed = 20;
var enableOpen = true;
var anim = new Pipeline("anim", 5);
var tab_div_unvisible = [];
var in_menu = false;

/* Pipeline Class */
function Pipeline (ref, interval)
{
	this.pipeline = new Array();
	this.pipeline_ptr = 0;
	this.timeout = interval;
	this.ref = ref;

	this.play = Pipeline_play;
	this.reset = Pipeline_reset;
	this.add = Pipeline_add;
}

function Pipeline_reset ()
{
	this.pipeline = new Array();
	this.pipeline_ptr = 0;
}

function Pipeline_play ()
{
	if (this.pipeline.length == 0) return;
	
	eval (this.pipeline[this.pipeline_ptr]);
	
	this.pipeline_ptr++;
	
	if (this.pipeline_ptr < this.pipeline.length)
	{
		setTimeout (this.ref + ".play()", this.timeout);
	}
	else
	{
		this.reset();
	}
}

function Pipeline_add (callback)
{
	this.pipeline[this.pipeline.length] = callback;
}



/* Tree Initializer */

function init_trees (x, y, data) 
{
    //alert (" >> 1 ");
	// Auto Open
	var item_states = new Array();
	for (var i = 0; i < tree_state.length; i++)
	{
        //alert (" >> i =  "+i);
		var index = tree_state[i];
        //alert (" >> index =  "+index);
		item_states[index] = true;
		
		for (var j = index + 1; j < data.length; j++)
		{
			if (data[j][0] == data[index][0]) break;
			else if (data[j][0] == data[index][0] + 1) item_states[j] = true;
            //alert (" >> item_states[j] =  "+item_states[j]);
		}
	}

	// Build trees
	var selected_state = new Array();
	var arr = new Array();
    
    //alert (" >> 2 "+ data.length);
    
	for (var i = 0; i < data.length; i++)
	{
		var depth	= data[i][0];
		var name	= data[i][1];
		var url		= (data[i].length == 4) ? data[i][2] : null;
		var group	= (i < data.length - 1 && data[i + 1][0] > depth) ? true : false;
		var modsel        = ( url.indexOf(data[i][3]) > -1) ? true : false;
		
		selected_state[depth] = i;
		//alert (" >>>> tree_init ("+i+", "+depth+", "+name+", "+url+", "+group+", "+item_states[i]+", "+tree_state+", "+selected_state+", "+modsel+")" );
        
        
		arr[i] = tree_init (i, depth, name, url, group, item_states[i], tree_state, selected_state, modsel );
		arr[i].moveTo (x, y);
	}
	
	// Initial Placement
	var lasty = y;
	for (var i = 0; i < arr.length; i++)
	{
		if (arr[i].depth == 0 || arr[i].style.visibility == "visible")
		{
			arr[i].moveTo (x, lasty);
			arr[i].show();

			lasty += arr[i].ysize;
		}
	}

	return arr;
}

function build_tree_state (selected_state, depth)
{
    //alert("selected_state = "+selected_state+ " et depth = "+ depth);
	//var str = "&location.tree:=";
	//var str = "?location.tree:=";
	var str = "";
	if (str != "")
	{
		for (var i = 0; i <= depth; i++)
		{
			if (i != 0) str += ",";
			str += selected_state[i];
		}	
	}

	return str;
}

function tree_init (idx, depth, name, url, group, item_state, state, selected_state, isselected)
{
	var item;
	
	var str =  url + build_tree_state (selected_state, depth);
		//alert (" >>>> 1 : str = "+str );

	item = tree_drawItem (idx, depth, name, str, group, selected_state, isselected);
 		//alert (" >>>> 2" );
   
    
	item.isGroup = group;
    
    		//alert (" >>>> 3 " );

	//if (!group) item.url = str;
	item.url = str;

	item.depth = depth;
	item.idx = idx;
	item.style.visibility = (item_state) ? "visible" : "hidden";
	item.opened = (depth < state.length) ? (state[depth] == idx) : false;
	item.style.cursor = "default";
	//NS6
	if (document.getElementById&&!document.all)
	{
		item.style.cursor = "pointer";
	}
	else
	{
		item.style.cursor = "hand";
	}
	item.onclick = tree_action;
	item.moveTo	= tree_moveTo;
	item.move	= tree_move;
	item.show	= tree_show;
	item.hide	= tree_hide;

	setImage (item);

	return item;
}

function tree_moveTo (x, y)
{
	this.xpos = x;
	this.ypos = y;
	this.style.left = x + "px";
	this.style.top = y + "px";
}

function tree_move (x, y)
{
	this.xpos += x;
	this.ypos += y;
	this.style.left = this.xpos + "px";
	this.style.top = this.ypos + "px";
}

function tree_show ()
{
	this.style.visibility = "visible";
}

function tree_hide ()
{
	this.style.visibility = "hidden";
	this.opened = false;
	
	setImage(this);
}

/* End Of Trees Initializer */


function setImage (tree)
{
	if (tree.isGroup)
	{
		try
		{
		var img = document.getElementById ("img" + tree.idx);
		img.src = (tree.opened) ? img_opened : img_closed;
		}catch(e){}
	}
}

/* tree anims */
function tree_action ()
{
	var u = this.url;
	/*if (this.isGroup)
	{
		if (this.opened) tree_close (this.idx);
		else 			 tree_close_open (this.idx);
		anim.play ();
	}
	else
	{*/
		if( u!=null && u.indexOf('javascript:')<0 )
		{
			document.location.href=u;
		}
		else if( u!=null && u.indexOf('javascript:')==0 )
		{
			eval( u );	
		}
	//}
}

function tree_close_open (idx)
{
//alert(idx);
//alert(trees.length+" --- "+ trees[idx].depth+" ---------- ");


	var prevOpen = -1
	for (var i = 0; i < trees.length; i++)
	{
//alert(i+"     op? ="+trees[i].opened);
		var curr = trees[i];
		if (curr.depth == trees[idx].depth && curr.opened == true)
		{
//alert("in condition");
			prevOpen = i;
			break;
		}
	}
	
	if (prevOpen != -1) tree_close (prevOpen);

	tree_open (idx);
}

function findNextItem (idx)
{
	var depth = trees[idx].depth;


	for (var i = idx+1; i < trees.length; i++)
	{


		//alert(trees[i].depth +"     <?       "+depth );
		if (trees[i].depth <= depth) return i;
	}
	return trees.length;
}

function tree_open (idx)
{
//alert(enableOpen);
	if (!enableOpen)
	{
		anim.add ("tree_open ("+idx+")");
		return;
	}
	
	var tree	= trees[idx];
	var next	= findNextItem (idx);
	var offset	= 0;
//alert("retour="+ next );	
	tree.opened = true;

	//setImage (trees[idx]);
	
	for (var i = idx + 1; i < next; i++)
	{
		var curr = trees[i];
		if (curr.depth == (tree.depth + 1))
		{
			//alert("ok");
			offset += curr.ysize;
		}
	}
	
	anim.add ("_tree_open(" + idx + ", " + next + ", " + offset + ", " + 0 + ", " + idx + ")");
}

function _tree_open (from, to, offset, pos, lastshown)
{

	pos += speed;
	var pix = (pos > offset) ? speed - (pos - offset) : speed;
	
	for (var i = to; i <= (trees.length - 1); i++)
	{
		var curr = trees[i];
		if (curr.style.visibility == "visible")
		{
			curr.move (0, pix);
		}
	}
	
	var lasty = trees[lastshown].ypos + trees[lastshown].ysize;



	if (to == trees.length || lasty < trees[to].ypos)
	{
		for (var i = lastshown + 1 ; i < to ; i++)
		{
			if (trees[i].depth == trees[from].depth + 1)
			{
				trees[i].moveTo (trees[i].xpos, lasty); 
				trees[i].show();

				lastshown = i;
				break;
			}
		}
	}
	
	if (pos < offset)
	{
		anim.add ("_tree_open("+from+","+ to+","+ offset+", "+pos+", "+lastshown+")");
	}
}

function tree_close (idx)
{
	enableOpen = false;
	var tree	= trees[idx];
	var next	= findNextItem (idx);
	var offset = 0;
	
	tree.opened = false;
	
	//setImage (trees[idx]);
	
	for (var i = idx + 1; i < next; i++)
	{
		var curr = trees[i];
		if (curr.style.visibility == "visible")
		{
			offset += curr.ysize;
		}
	}

	anim.add ("_tree_close(" + idx + ", " + next + ", " + offset + ", " + 0 + ", -1)");
}

function _tree_close (from, to, offset, pos, lasthidden)
{
	pos += speed;
	
	var pix = (pos > offset) ? speed - (pos - offset) : speed;
	
	for (var i = to; i <= (trees.length - 1); i++)
	{
		var curr = trees[i];
        //alert( " >> " + curr);
		if (curr.style.visibility == "visible")
		{
			curr.move (0, -pix);
		}
	}
	
	if (lasthidden == -1) lasthidden = nextToHide (from, to);
	
	if (lasthidden != -1)
	{
		var lasty = trees[lasthidden].ypos;
		if (to == trees.length || lasty >= trees[to].ypos)
		{
			for (var i = lasthidden; i > from ; i--)
			{
				if (trees[i].style.visibility == "visible")
				{
					trees[i].hide();
					lasthidden = nextToHide (from, i);
					break;
				}
			}
		}
	}

	if (pos < offset)
	{
		anim.add ("_tree_close("+from+","+ to+","+ offset+", "+pos+", "+lasthidden+")");
	}
	else
	{
		enableOpen = true;
	}

}

function nextToHide (from, to)
{
	for (var i = to - 1 ; i > from ; i--)
	{
		if (trees[i].style.visibility == "visible")
		{
			return i;
		}
	}
	return -1;
}


/* menu code */

function init_menus (x, y, data)
{
	var arr = new Array ();
	
	for (var i = 0; i < data.length; i++)
	{
		var menu = init_menu (i, data);
		arr[i] = menu;
	}
	
	var lastx = x;
	
	for (var i = 0; i < arr.length; i++)
	{
		var menu = arr[i];
		menu.style.left = lastx+"px";
		menu.style.top = y + 1+"px";
		menu.style.visibility = "visible";
		menu.style.height = menu.offsetHeight;
		
		if (typeof menu.content != "undefined")
		{
			menu.content.style.left = lastx-1+"px";
			menu.content.style.top = y + menu.offsetHeight + 2+"px";
			menu.content.style.height = menu.content.offsetHeight;
		}
		
		lastx += menu.offsetWidth;
	}
	
	arr[0].totalWidth = lastx;

	return arr;
}


function menu_color (active)
{
	if (active) return color1;//"#d2d0d1";
	else return color2;
}

function menu_setActive ()
{
	if( menu_color )
		this.bgColor = menu_color (true);
}

function menu_setInactive ()
{
	if( menu_color )
		this.bgColor = menu_color(false);
}

function init_menu (idx, data)
{
	var item;
	
	if (data[idx].length == 1)
	{
		item = drawMenuRoot (idx, data);
		item.style.visibility = "hidden";
		//NS6
		if (document.getElementById&&!document.all)
		{
			item.style.cursor = "pointer";
		}
		else
		{
			item.style.cursor = "hand";
		}
		//item.style.cursor = "default";
		item.idx = idx;
	}
	else
	{
		item = drawMenu (idx, data);
	}
	
	return item;
}

function menu_click ()
{
	var u = this.url;
	if( u!=null && u.length>0 && u.indexOf('javascript:')<0 )
	{
		document.location.href=u;
	}
	else if( u!=null && u.indexOf('javascript:')==0 )
	{
		eval( u );	
	}
}

function drawMenu (idx, data)
{

//alert"drawMenu");
	var root = drawMenuRoot (idx, data);
    //alert"drawMenuRoot");
	var content = drawMenuContent (idx, data);
	//alert"drawMenuContent");
    
	content.style.visibility = "hidden";
    
	//NS6
	if (document.getElementById&&!document.all)
	{
		content.style.cursor = "pointer";
	}
	else
	{
		content.style.cursor = "hand";
	}
    
	//content.style.cursor = "default";
	content.inside = false;
	content.onmouseover = menu_content_enter;
	if (document.all)
		content.onmouseout = menu_content_leave;

	root.content = content;
	content.root = root;

	root.style.visibility = "hidden";
	//NS6
	if (document.getElementById&&!document.all)
	{
		root.style.cursor = "pointer";
	}
	else
	{
		root.style.cursor = "hand";
	}
	//root.style.cursor = "hand";
	//root.style.cursor = "default";
	root.idx = idx;

	root.inside = false;
	root.onmouseover = menu_enter;
	root.onmouseout = menu_leave;

	return root;
}

function menu_enter ()
{
	//window.status=this.url;
	in_menu = true;
	menu_divs_hidden();
	
	for (var i = 0; i < menus.length; i++)
	{
		var menu = menus[i];
		if (typeof menu.content != "undefined")
		{
			menu.content.inside = false;
			if (this.idx == i)
			{
				menu.inside = true;
				menu.content.style.visibility = "visible";
			}
			else
			{
				menu.inside = false;
				menu.content.style.visibility = "hidden";
			}
		}
	}
}

function menu_leave ()
{
	this.inside = false;
	var menu = menus[this.idx];
	in_menu = false;
	setTimeout ("_menu_leave("+this.idx+")", 200 );
}


function _menu_leave (idx)
{
	var menu = menus[idx];
	if (menu.content.inside == false && menu.inside == false)
	{
		menu.content.style.visibility = "hidden";
		if( in_menu == false)
		{
			menu_divs_visible();
		}
	}
}

function menu_content_enter ()
{
	menu_divs_hidden();
	in_menu = true;
	this.inside = true;
	this.style.visibility = "visible";
}

function menu_content_leave ()
{
	this.inside = false;
	in_menu = false;
	if (this.root.inside == false)
	{
		this.style.visibility = "hidden";
		if( in_menu == false)
		{
			menu_divs_visible();
		}
	}
}

function menu_divs_hidden ()
{
	for( i = 0  ; i < tab_div_unvisible.length ; i ++ )
	{
		try	{document.getElementById(tab_div_unvisible[i]).style.visibility='hidden';}catch(e){}
	}
}
function menu_divs_visible ()
{
	for( i = 0  ; i < tab_div_unvisible.length ; i ++ )
	{
		try	{document.getElementById(tab_div_unvisible[i]).style.visibility='visible';}catch(e){}
	}
}

function searchtree (parent)
{
	var children = parent.childNodes;
	for (var i = 0; i < children.length; i++)
	{
		var child = children[i];
		if (child.nodeType != 1) {
			continue;
		}
		if (child.id.indexOf("tree") == 0 ) 
		{
			tab_div_unvisible[tab_div_unvisible.length]=child.id;
		}
		searchtree (child);
	}
}


//-------------------------------------------------- Ici on copie tout le theme.js -------------------------------------

function tree_drawItem (idx, depth, name, url, group, selected_state,  isselected)
{
	//alert ("tree_drawItem");


	var item;
	var size = depth * 15;
	var nbrow = cptRow (name,isselected);

	//alert ("tree_drawItem :: nbrow = "+nbrow+" et getTreeColorFromDepth (depth)="+getTreeColorFromDepth (depth));
	
	document.write (" \
	<div id='tree" + idx + "' style='width:174px;color:#fff;font-weight:bold;position: absolute; z-index: " + (100 - depth) + "'> \
	<table height='20' width='174' cellpadding='0' cellspacing='0' border='0'> \
	<tr height='19' bgcolor='" + getTreeColorFromDepth (depth) + "'> \
	<td width='" + size + "'><IMG src='"+img_blank+"' width='" + size + "' height='1'></td> ");
	
	if (isselected)
	{
		if (nbrow == 1){
			document.write ("<td width='14' valign='top'><img src='/leongrosse/img/puce_blanche.png' /></td>");
		}else{
			document.write ("<td width='14' valign='top'><img src='/leongrosse/img/puce_blanche2.png' /></td>");		
		}
	}
	else
	{
		document.write ("<td width='14'>&nbsp;</td>");
	}
    
	//alert"ici :: "+idx+ "  "+ name+ "  "+(174-14-size));
	//document.write (" <td width='"+(174-14-size)+"' class='menutop' ><div id='tdtree" + idx + "'>" +  replaceStr (name)+ "</div></td> </tr> </table></div> ");
	document.write (" <td width='"+(174-14-size)+"' class='menutop' ><div id='tdtree" + idx + "'>" +  name+ "</div></td> </tr> </table></div> ");
//alert"la");
	item = document.getElementById ("tree" + idx);

	item.xsize = 174;
	//item.ysize = 20;
/*
	if (depth == 0)
	{*/
		if (nbrow == 1)
		{
			item.ysize = 20*nbrow ;
		}
		else
		{
			item.ysize = 20+(11*(nbrow-1)) ;
		}
/*	}
	else
	{

		if (nbrow == 1)
		{
			item.ysize = 15*nbrow ;
		}
		else
		{
			item.ysize = 15+(11*(nbrow-1)) ;
		}
	}	
*/


	if (isselected)
	{

		//alert "ici");
		var rootSel ="";
		if ( url.indexOf("tree:=") > -1 )
		{
			rootSel = url.substr( (url.indexOf("tree:=")+6),url.length) ;

		}
		if ( rootSel.indexOf(",") > -1 )
		{
			rootSel = rootSel.substr(rootSel.indexOf(",")+1,rootSel.length) ; 
		}
		if ( rootSel != "")
		{

		

			var rootitem = document.getElementById("tdtree" + rootSel );

		}
		//alert"fin ici");
	}


	return item;
}

function getTreeColorFromDepth (depth)
{
	switch (depth)
	{
		case 0: return color2;
		default: return color1;
	}
}


function cptRow (theStr,sel)
{ 
	while (theStr.indexOf("&nbsp;") != -1)
	{
		theStr = theStr.replace('&nbsp;',' ');
	}


	nbRow = 1;
//alert(theStr.length +" pour " +theStr);
	if (theStr.length >= 25)  
	{
		if (CheckIsIE())
		{
			nbRow = Math.ceil((theStr.length)/22);  
		}
		else
		{
			nbRow = Math.ceil((theStr.length)/23);
		}
	}
//alert(theStr+'   '+theStr.length+'     '+nbRow);
	
	return nbRow ;
}

function replaceStr (theStr)
{
//alert"replaceStr:: "+theStr);


	while (theStr.indexOf("&nbsp;") != -1)
	{
		theStr = theStr.replace('&nbsp;',' ');
	}
    
    //alert"replaceStr::fin ="+theStr);

	return theStr;
}

function drawMenuRoot (idx, data)
{
	var item;
	
	var hasUrl = (data[idx][0].length >= 2);
	var color = false;
	try
	{
		color = data[idx][0][2];
	}
	catch(e){}
	
	document.write (" \
	<DIV id='menu" + idx + "' style='position: absolute; z-index: 300'> \
	<TABLE cellspacing='0' cellpadding='0' border='0' height='18'> \
	<TR> \
	");
	
	document.write (" \
	<TD id='menu_" + idx + "' bgcolor='"+color2+"' class='menutop' align='center'>&nbsp;&nbsp;<b>" + data[idx][0][0] + "</b>&nbsp;&nbsp;</TD> \
	<TD width='1' height='18'><IMG src='" + img_blank + "' height='18' width='1'></TD> \
	</TR> \
	</TABLE> \
	</DIV> \
	");

	item = document.getElementById ("menu" + idx);
	
	if (hasUrl)
	{
		item.url = data[idx][0][1];
		item.onclick = menu_click;
	}
	item2 = document.getElementById ("menu_" + idx);
	if( color )
	{
		if( menu_color )
		item2.bgColor = menu_color (true);
	}
	else
	{
		item2.onmouseover = menu_setActive;
		item2.onmouseout = menu_setInactive;	
	}
	return item;
}


function drawMenuContent (idx, data)
{
	var content;
	
	document.write (" \
	<DIV id='menu" + idx + "_content' style='position: absolute; z-index: 300'> \
	<TABLE cellspacing='0' cellpadding='0' border='0' bgcolor='"+color2+"' height='18'> \
	");
	
	for (var i = 1; i < data[idx].length; i++)
	{
		document.write (" \
		<TR height='18'> \
		<TD width='1' bgcolor='"+color1+"'><IMG src=" + img_blank + " width='1' height='18'></TD> \
		<TD id='menu"+idx+"_"+i+"' class='menutop'>&nbsp;&nbsp;" + data[idx][i][0] + "&nbsp;&nbsp;</TD> \
		<TD width='1' bgcolor='"+color1+"'><IMG src=" + img_blank + " width='1' height='18'></TD> \
		</TR> \
		");

		var td = document.getElementById ("menu"+idx+"_"+i);
		
		td.url = data[idx][i][1];
		td.onmouseover = menu_setActive;
		td.onmouseout = menu_setInactive;
		td.onclick = menu_click;
		
	}
	
	document.write (" \
	<TR><TD colspan='3' height='1' bgcolor='"+color1+"'><IMG src=" + img_blank + " width='100%' height='1'></TD></TR> \
	</TABLE> \
	</DIV> \
	");
	
	content = document.getElementById ("menu" + idx + "_content");
	
	return content;
}








// Pour les references du mois

function showDoc(id,constid,compid, locationid, type)
{
	document.location.href="/srt/leongrosse/showReference?location.id:="+locationid+"&type="+type+"&id="+id+"&compid="+compid+"&constid="+constid;
}


	function aclickDiv (id,cpt)
	{
		var mondiv= document.getElementById(id);
		// test sur l'element? visible?
		if (mondiv.style.display == "block")
		{
			mondiv.style.display = "none";
		}
		else
		{
			// on boucle sur tous les elements : on les rend invisibles, puis visibilit? de notre element
			for(i=1; i<=cpt; i++)
			{
				var tempDiv= document.getElementById("bloc_"+i);
				tempDiv.style.display = "none";
			}
			mondiv.style.display='block';
		}

	}


		//////
		function ImageMax(chemin,titre)
		   {
		   html = '<html> <head> <title>'+titre+'</title> </head> <body onBlur="top.close()"><img src="'+chemin+'" border=0 name=ImageMax id=ImageMax onLoad="window.resizeTo(document.ImageMax.width+25, document.ImageMax.height+60)"></body></html>';
		   popupImage =    window.open('','_blank','toolbar=0, location=0, directories=0, menuBar=0, scrollbars=0, resizable=1');
		   popupImage.document.open();
		   popupImage.document.write(html);
		   popupImage.document.close();
		   }



		//
		function CheckIsIE()
		{
		    if  (navigator.appName.toUpperCase() == 'MICROSOFT INTERNET EXPLORER')  { return true;}
		    else { return false; }
		}




		function showBlock(id) {
			if (document.getElementById(id)) {document.getElementById(id).style.display='block';}
		}


		function hideBlock(id) {
			if (document.getElementById(id)) {document.getElementById(id).style.display='none';}
		}


		function rand_number(n)
		{
			var x;
			x=Math.round(Math.random()*100);
			x%=n;
			return x;
		}




		function Remplace(str,find,rep){
			var reg = new RegExp(find,"gi")
			return(str.replace(reg,rep));
		}




