﻿// *********
// VARIABLES
// *********

var TAB_smenusMain = new Array();
var smenusVertical = 1;
var smenusHorizontal = 2;

// *******
// OBJECTS
// *******

function smenusAddMainObject(name,mode,width,height,merge){

	var objDiv = document.getElementById(name);

	if(objDiv){

		TAB_smenusMain[name] = new Array();

		TAB_smenusMain[name].clear = false;
		TAB_smenusMain[name].contentDiv = document.getElementById(name);
		TAB_smenusMain[name].headers = new Array();
		TAB_smenusMain[name].logout = new Array();
		TAB_smenusMain[name].merge = merge;
		TAB_smenusMain[name].mode = mode;
		TAB_smenusMain[name].width = width;
		TAB_smenusMain[name].height = height;

	}
	else{

		alert("Le DIV d'ID '" + name + "' sensé contenir le menu n'existe pas");

	}

}

function smenusAddHeaderObject(name, label, cssClass, cssActive, cssScroll, action, code, isScroll, space){

	if(TAB_smenusMain[name] && TAB_smenusMain[name].headers){

		var index = TAB_smenusMain[name].headers.length;

		TAB_smenusMain[name].headers[index] = new Array();
		TAB_smenusMain[name].headers[index].id = name + "_header#" + index;
		TAB_smenusMain[name].headers[index].label = label;
		TAB_smenusMain[name].headers[index].scroll = null;
		TAB_smenusMain[name].headers[index].cssClass = cssClass;
		TAB_smenusMain[name].headers[index].cssActive = cssActive;
		TAB_smenusMain[name].headers[index].cssScroll = cssScroll;
		TAB_smenusMain[name].headers[index].action = action;
		TAB_smenusMain[name].headers[index].code = code;
		TAB_smenusMain[name].headers[index].space = space;
		TAB_smenusMain[name].headers[index].isScroll = isScroll;
		TAB_smenusMain[name].headers[index].items = new Array();

	}

}

function smenusAddScrollObject(name, label, cssClass, action){

	var index1 = (TAB_smenusMain[name].headers.length - 1);

	if(TAB_smenusMain[name].headers[index1].items){

		var index2 = TAB_smenusMain[name].headers[index1].items.length;

		TAB_smenusMain[name].headers[index1].items[index2] = new Array();
		TAB_smenusMain[name].headers[index1].items[index2].id = TAB_smenusMain[name].headers[index1].id + "_item#" + index2;
		TAB_smenusMain[name].headers[index1].items[index2].label = label;
		TAB_smenusMain[name].headers[index1].items[index2].cssClass = cssClass;
		TAB_smenusMain[name].headers[index1].items[index2].action = action;

	}
	
}

function smenusAddScrollObject(name, label, cssClass, action){

	var index1 = (TAB_smenusMain[name].headers.length - 1);

	if(TAB_smenusMain[name].headers[index1].items){

		var index2 = TAB_smenusMain[name].headers[index1].items.length;

		TAB_smenusMain[name].headers[index1].items[index2] = new Array();
		TAB_smenusMain[name].headers[index1].items[index2].id = TAB_smenusMain[name].headers[index1].id + "_item#" + index2;
		TAB_smenusMain[name].headers[index1].items[index2].label = label;
		TAB_smenusMain[name].headers[index1].items[index2].cssClass = cssClass;
		TAB_smenusMain[name].headers[index1].items[index2].action = action;

	}
	
}

function smenusAddLogout(name, label, cssClass, action){

	var index = TAB_smenusMain[name].logout.length;

	TAB_smenusMain[name].logout[index] = new Array();
	TAB_smenusMain[name].logout[index].id = name + "_logout";
    TAB_smenusMain[name].logout[index].label = label;
    TAB_smenusMain[name].logout[index].cssClass = cssClass;
    TAB_smenusMain[name].logout[index].action = action;

}

// *******
// DISPLAY
// *******

function smenusInitMainObject(name, activation){

	if(TAB_smenusMain[name]){

		var positionX = 0;
		var positionY = 0;
		
		for(key1 in TAB_smenusMain[name].headers){
					
			TAB_smenusHeader = TAB_smenusMain[name].headers[key1];
			
			if(TAB_smenusHeader){

                var active = (activation && TAB_smenusHeader.code && activation == TAB_smenusHeader.code);
        	var objDiv = document.createElement("div");
	        objDiv.id = TAB_smenusHeader.id
	        objDiv.className = (active)?TAB_smenusHeader.cssActive:TAB_smenusHeader.cssClass;
                objDiv.style.width = (TAB_smenusMain[name].width > 0)?TAB_smenusMain[name].width + "px":(objBrowser.name == "msie" && objBrowser.version < 7)?"1px":"";
                objDiv.style.height = (TAB_smenusMain[name].height > 0)?TAB_smenusMain[name].height + "px":(objBrowser.name == "msie" && objBrowser.version < 7)?"1px":"";
                objDiv.style.position = "absolute";
                objDiv.style.top = positionY + "px";
                objDiv.style.left = positionX + "px";
                objDiv.innerHTML = TAB_smenusHeader.label;
                objDiv.onmouseover = function(evt){if(smenusCheckMouseOver(this,evt)){smenusHideAll(name);smenusCheckRoll(name,this)}}; 
                objDiv.onmouseout = function(){smenusSetTimeOut(name)}; 
                objDiv.onclick = function(){smenusAction(name,this)}; 
                
                TAB_smenusMain[name].contentDiv.appendChild(objDiv);

				if(TAB_smenusHeader.isScroll){
				
					if(TAB_smenusMain[name].headers[key1].items){
					
                		var objScrollDiv = document.createElement("div");
                		var objTable = document.createElement("table");
                        var objTbody = document.createElement("tbody");

                        objScrollDiv.style.width = (objBrowser.name == "msie" && objBrowser.version < 7)?"1px":"";
                        objScrollDiv.style.height = (objBrowser.name == "msie" && objBrowser.version < 7)?"1px":"";
                        objScrollDiv.style.position = "absolute";
                        objScrollDiv.style.top = (TAB_smenusMain[name].mode == smenusHorizontal)?(positionY + objDiv.offsetHeight + TAB_smenusHeader.space) + "px":positionY + "px";
                        objScrollDiv.style.left = (TAB_smenusMain[name].mode == smenusVertical)?(positionX + objDiv.offsetWidth + TAB_smenusHeader.space) + "px":positionX + "px";
                        objScrollDiv.style.visibility = "hidden";
                        objScrollDiv.onmouseover = function(){smenusCancelTimeOut(name)}; 
                        objScrollDiv.onmouseout = function(evt){if(smenusCheckMouseOut(this,evt)){smenusHideAll(name)}}; 

                        objTable.className = TAB_smenusHeader.cssScroll;
                        objTable.cellPadding = 0;
                        objTable.cellSpacing = 0;




                        objTable.appendChild(objTbody);

						for(key2 in TAB_smenusMain[name].headers[key1].items){
						
							TAB_smenusItem = TAB_smenusMain[name].headers[key1].items[key2];

                    		var objTr = document.createElement("tr");
                    		var objTd = document.createElement("td");

                            objTd.id = TAB_smenusMain[name].headers[key1].items[key2].id;
                            objTd.innerHTML = TAB_smenusItem.label;
                            objTd.className = TAB_smenusItem.cssClass;
                            objTd.onclick = function(){smenusAction(name,this)}; 

                            objTr.appendChild(objTd);
                            objTbody.appendChild(objTr);

						}

                        objScrollDiv.appendChild(objTable);

                        TAB_smenusMain[name].contentDiv.appendChild(objScrollDiv);

                        TAB_smenusHeader.scroll = objScrollDiv;

					}

				}

                positionX += (TAB_smenusMain[name].mode == smenusHorizontal)?objDiv.offsetWidth - ((TAB_smenusMain[name].merge)?1:0):0;
                positionY += (TAB_smenusMain[name].mode == smenusVertical)?objDiv.offsetHeight - ((TAB_smenusMain[name].merge)?1:0):0;

 
    		}	

		}	

        TAB_smenusLogout = TAB_smenusMain[name].logout[0];
			
        if(TAB_smenusLogout){

    		var objDiv = document.createElement("div");

            objDiv.id = TAB_smenusLogout.id
	    objDiv.className = TAB_smenusLogout.cssClass;
            objDiv.style.width = (TAB_smenusMain[name].width > 0)?TAB_smenusMain[name].width + "px":(objBrowser.name == "msie" && objBrowser.version < 7)?"1px":"";
            objDiv.style.height = (TAB_smenusMain[name].height > 0)?TAB_smenusMain[name].height + "px":(objBrowser.name == "msie" && objBrowser.version < 7)?"1px":"";
            objDiv.style.position = "absolute";
            objDiv.style.top = positionY + "px";
            objDiv.style.left = positionX + "px";
            objDiv.innerHTML = TAB_smenusLogout.label;
            objDiv.onclick = function(){eval(TAB_smenusLogout.action)}; 

            TAB_smenusMain[name].contentDiv.appendChild(objDiv);
	
    	}

	}

}

function smenusCheckRoll(name,element){

	if(TAB_smenusMain[name]){

        var TAB_smenusHeader = TAB_smenusMain[name].headers[smenusGetHeaderId(element.id)];
   	
	    if(TAB_smenusHeader && TAB_smenusHeader.scroll){

		    TAB_smenusHeader.scroll.style.visibility = "visible"; 

		    smenusCancelTimeOut(name);

	    }

	}

}

function smenusHideAll(name){

	if(TAB_smenusMain[name]){

		for(key1 in TAB_smenusMain[name].headers){

			if(TAB_smenusMain[name].headers[key1].scroll){TAB_smenusMain[name].headers[key1].scroll.style.visibility="hidden"}

		}	

	}

}

function smenusCheckMouseOver(element,evt){

    if(!evt){evt = window.event};

	if(element.contains && evt.fromElement) {

		return !element.contains(evt.fromElement);
		
	}
	else if(evt.relatedTarget) {

		return !smenusContainsDOM(element, evt.relatedTarget);
		
	}

}

function smenusCheckMouseOut(element,evt){

    if(!evt){evt = window.event};

	if(element.contains && evt.toElement) {

		return !element.contains(evt.toElement);
		
	}
	else if(evt.relatedTarget) {

		return !smenusContainsDOM(element, evt.relatedTarget);
		
	}

}

function smenusSetTimeOut(name){

	if(TAB_smenusMain[name]){
	
		TAB_smenusMain[name].clear = true;
		
		var clear = window.setTimeout("smenusApplyTimeOut('" + name + "')", 100);

	}

}

function smenusApplyTimeOut(name){

	if(TAB_smenusMain[name]){

		if(TAB_smenusMain[name].clear){

			for(key1 in TAB_smenusMain[name].headers){
						
    			//if(TAB_smenusMain[name].headers[key1].scroll){TAB_smenusMain[name].headers[key1].scroll.style.visibility="hidden"}

			}	

		}
	}

}

function smenusCancelTimeOut(name){

	if(TAB_smenusMain[name]){ TAB_smenusMain[name].clear = false };

}

function smenusContainsDOM(container, containee) {

	var isParent = false;

	do{
    
		if((isParent = container == containee)){ break; }

		containee = containee.parentNode;

	}
	while(containee != null);

	return isParent;

}

// ******
// MANAGE
// ******

function smenusGetHeaderId(id){

    var start = id.indexOf("_header#")
    var end = id.indexOf("_", start + 8)

    id = (end!=-1)?id.substring(start + 8,end):id.substring(start + 8);

    return id

}

function smenusGetItemId(id){

    var start = id.indexOf("_item#")
    var end = id.indexOf("_", start + 6)

    id = (end!=-1)?id.substring(start + 6,end):id.substring(start + 6);

    return id

}

function smenusAction(name,element){

	if(TAB_smenusMain[name]){

        var objAction;
        
        if(element.id.match(/header\#[0-9]*$/gi)){

            objAction = TAB_smenusMain[name].headers[smenusGetHeaderId(element.id)];


        }

        if(element.id.match(/item\#[0-9]*$/gi)){

            objAction = TAB_smenusMain[name].headers[smenusGetHeaderId(element.id)].items[smenusGetItemId(element.id)];

        }

       if(objAction && objAction.action){ eval(objAction.action) };
   	
	}

}


