var nbMenuItem = 0;
var menuItemArray = new Array();
var indicBox;
var dragMenuItem = false;
var mouseX = 0;
var mouseY = 0;
var dragItemX = 0;
var dragItemY = 0;
var antilag = -1;
var bordersize = 2;
var okToMove = true;


/*
* AutoScrolling
*/
function getPageScroll(){
        var yScroll;
        if (self.pageYOffset) {
                yScroll = self.pageYOffset;
        } else if (document.documentElement && document.documentElement.scrollTop){      // Explorer 6 Strict
                yScroll = document.documentElement.scrollTop;
        } else if (document.body) {// all other Explorers
                yScroll = document.body.scrollTop;
        }
        arrayPageScroll = new Array('',yScroll);
        return arrayPageScroll;
}


/*
** Fonction qui initialise les evenements 
*/
function initEvents() {
	document.body.onmousemove = moveMenuItem;
	document.body.onmouseup = stopDragMenuItem;
	document.body.onselectstart = cancelSelectionEvent;
	document.body.ondragstart = new Function("return false");
}

function cancelSelectionEvent(e) {
	if(document.all)e = event;
	if (e.target) source = e.target;
		else if (e.srcElement) source = e.srcElement;
		if (source.nodeType == 3) // defeat Safari bug
			source = source.parentNode;
	if(source.tagName.toLowerCase()=='input')return true;
	if(antilag>=0) return false; else return true;	
}

/*
** Fonction qui stop le dragging
*/
function stopDragMenuItem() {
	if(dragMenuItem) {
		if(indicBox.parentNode!=document.body) {
			indicBox.parentNode.insertBefore(dragMenuItem,indicBox);
			indicBox.style.display='none';
			document.body.appendChild(indicBox);
			dragMenuItem.style.position = '';	
			dragMenuItem.style.textAlign = '';
			dragMenuItem.style.width = '';
			saveCook();
		}
		antilag = -1;
		dragMenuItem.style.filter = null;
		dragMenuItem.style.opacity = null;
		dragMenuItem = false;
		hideEmptyMenuBar(false);
	}
}

/*
** Retourne la distance entre l'objet et le haut de l'ecran
*/
function getTopPos(inputObj) {		
	var returnValue = inputObj.offsetTop;
	while((inputObj = inputObj.offsetParent) != null) {
		if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
	}
	return returnValue;
}

/*
** Retourne la distance entre l'objet et la gauche de l'ecran
*/
function getLeftPos(inputObj) {
	var returnValue = inputObj.offsetLeft;
	while((inputObj = inputObj.offsetParent) != null) {
		if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
	}
	return returnValue;
}

/*
** Fonction qui crée le rectangle indicateur
*/
function createIndicBox() {
	var objBody = document.getElementsByTagName("body").item(0);
	indicBox = document.createElement("DIV");
	indicBox.setAttribute('id','indic');
	objBody.insertBefore(indicBox, objBody.firstChild);
}

/*
** Init le tableau menuItemArray et les actions sur les menuItems
*/
function initMenuItems() {
	var alldiv = document.getElementsByTagName("DIV")
	for(i=0;i<alldiv.length;i++) {
		if(alldiv[i].className=='menuItem') {
			alldiv[i].onmousedown = selectMenuItem;
			alldiv[i].id = 'menuItem' + nbMenuItem;
			alldiv[i].style.cursor = 'move';
			menuItemArray[nbMenuItem] = alldiv[i];
			nbMenuItem++;
		}
	}
}

/*
** Fonction appelée lorsqu'on clique sur un menuItem
*/
function selectMenuItem(e) {
	if(document.all)e = event;
	if (e.target) source = e.target;
			else if (e.srcElement) source = e.srcElement;
			if (source.nodeType == 3) // defeat Safari bug
				source = source.parentNode;
				
	if(source.tagName.toLowerCase()=='a' || source.tagName.toLowerCase()=='input') return;
	dragMenuItem = this;
	hideEmptyMenuBar(true);
	mouseX = e.clientX;
	mouseY = e.clientY;
	dragItemX = getLeftPos(this)/1;
	dragItemY = getTopPos(this)/1 - getPageScroll()[1];
	antilag = 0;
	antiLag();
	return false;
}

/*
** Ajouter un Evenement une fois la page et le script chargé
*/
function addLoadEvent(func) {	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}
}

/*
** Fonction antiLag
*/
function antiLag() {
		if(antilag>=0 && antilag<10){
			antilag++;
			setTimeout('antiLag()',10);
			return;
		}
}

/*
** Bouge les elements
*/
function moveMenuItem(e) {
	if(document.all)e = event;
	if(antilag<10) return;
	if(dragMenuItem.parentNode!=document.body) {
		dragMenuItem.style.width = (dragMenuItem.offsetWidth - (2 * bordersize)) + 'px';
		dragMenuItem.style.position = 'absolute';	
		dragMenuItem.style.textAlign = 'left';
		dragMenuItem.style.filter = 'alpha(opacity=70)';
		dragMenuItem.style.opacity = '0.7';
		dragMenuItem.parentNode.insertBefore(indicBox,dragMenuItem);
		indicBox.style.height = (dragMenuItem.offsetHeight - (2 * bordersize)) + 'px';
		indicBox.style.display='block';
		document.body.appendChild(dragMenuItem);
	}
	if(dragMenuItem) {
		dragMenuItem.style.left = (e.clientX - mouseX + dragItemX) + 'px';
		dragMenuItem.style.top = (dragItemY - mouseY + e.clientY + getPageScroll()[1]) + 'px';
	}
	if(!okToMove)return;
	okToMove = false;

	var leftPos = e.clientX;
	var topPos = e.clientY + getPageScroll()[1];

	var found = false;
	var tmpX = getLeftPos(indicBox);
	var tmpY = getTopPos(indicBox);

	if ((leftPos>tmpX && leftPos<(tmpX + indicBox.offsetWidth) && topPos>tmpY && topPos<(tmpY + indicBox.offsetHeight))) {
		setTimeout('okToMove=true',100);
		return;
	}

	for(i=0 ; i < nbMenuItem ; i++) {
		if(menuItemArray[i]==dragMenuItem) continue;
		var tmpX = getLeftPos(menuItemArray[i]);
		var tmpY = getTopPos(menuItemArray[i]);

		if(leftPos>tmpX && leftPos<(tmpX + menuItemArray[i].offsetWidth) && topPos>tmpY && topPos<(tmpY + (menuItemArray[i].offsetHeight/2))){
			menuItemArray[i].parentNode.insertBefore(indicBox,menuItemArray[i]);
			indicBox.style.display = 'block';
			found = true;
			break;
		}
		if(leftPos>tmpX && leftPos<(tmpX + menuItemArray[i].offsetWidth) && topPos>=(tmpY + (menuItemArray[i].offsetHeight/2)) && topPos<(tmpY + menuItemArray[i].offsetHeight)){
			menuItemArray[i].nextSibling.parentNode.insertBefore(indicBox,menuItemArray[i].nextSibling);			
			indicBox.style.display = 'block';
			found = true;
			break;					
		}
	}

	if(!found) for(var no=1;no<=2;no++){
		var obj = document.getElementById('menuBar' + no);			
		var left = getLeftPos(obj)/1;						
		if(leftPos>left && leftPos<(left+obj.offsetWidth)) {
			if(topPos<(getTopPos(obj)+obj.firstChild.offsetHeight)) obj.insertBefore(indicBox,obj.firstChild.nextSibling);
			else obj.insertBefore(indicBox,obj.lastChild)
			indicBox.style.display='block';
			break;	
		}				
	}		
	setTimeout('okToMove=true',100);
}
/*
** Fonction de recuperation de cookie
*/
function getCookie(name) { 
	var start = document.cookie.indexOf(name+"="); 
	var len = start+name.length+1; 
	if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
	if (start == -1) return null; 
	var end = document.cookie.indexOf(";",len); 
	if (end == -1) end = document.cookie.length; 
	return unescape(document.cookie.substring(len,end)); 
} 
/*
** Fonction d'injection d'un cookie
*/
function setCookie(name,value,expires,path,domain,secure) { 
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
	var cookieString = name + "=" +escape(value) + 
	   ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
	   ( (path) ? ";path=" + path : "") + 
	   ( (domain) ? ";domain=" + domain : "") + 
	   ( (secure) ? ";secure" : ""); 
	document.cookie = cookieString; 
} 
/*
** Sauvegarde les positions des menu dans un cookie
*/
function saveCook() {
	var cook = false;
	for(var no=1;no<=2;no++) {
		var alldiv = document.getElementById('menuBar' + no).getElementsByTagName("DIV");
		for(i=0;i<alldiv.length;i++) {
			if(alldiv[i].className=='menuItem') {
				if(cook) cook += '#' + alldiv[i].id + '|' + no;
				else cook = alldiv[i].id + '|' + no;
			}
		}
	}
	if(cook) setCookie('menuItems1',cook,60000,'/');
}
/*
** Charge les menu  si le cookie de sauvegarde est présent
*/
function loadCook() {
	var items = getCookie('menuItems1');
	if(!items) return;
	items = items.split('#');
	for(i=0;i<items.length;i++) {
		var elem = items[i].split('|');
		if(elem.length>=2) {
			var col = document.getElementById('menuBar'+elem[1]);
			var mItem = document.getElementById(elem[0]);
			if(col && mItem && col.firstChild) col.insertBefore(document.getElementById(elem[0]),col.lastChild);
		}
	}
	hideEmptyMenuBar();
}
/*
** HideEmptyMenuBar
*/
function hideEmptyMenuBar(visible) {
	for(var no=1;no<=2;no++) {
		var menubar = document.getElementById('menuBar' + no);
		var vmenubar = visible;
		for(i=0;!vmenubar && i<menuItemArray.length;i++) if(menuItemArray[i].parentNode==menubar && menuItemArray[i].style.display!='none') vmenubar = true;
		//menubar.style.visibility = (vmenubar)?'visible':'hidden';
		menubar.style.display = (vmenubar)?'block':'none';
	}
}




function LoadHisto() {
	return false;
	var list = document.getElementById('historique');
	for(i=0;i<3;i++) {
		li = document.createElement("LI");
		li.innerHTML='- <A HREF="#">Fiche '+i+'</A>';
		list.appendChild(li);
	}
	list.parentNode.style.display='block';
}

/*
** Recherche
*/
function initSearch() {
	var fastr = document.getElementById('fastr');
	if(!fastr) return;
	fastr.onsubmit = function() {
		setCookie('fastr',fastr.find.value+'|'+fastr.categorie.selectedIndex,3600,'/');
	}
	var items = getCookie('fastr');
	if(!items) return;
	items = items.split('|');
	if(items.length==2) {
		fastr.find.value = items[0];
		fastr.categorie.selectedIndex = items[1];
	}
}

/*
** LINK
*/
function initLink() {
	var as = document.getElementsByTagName('a');
	for(i=0; i < as.length; i++) {
		if(as[i].target && as[i].target!='_blank') {
			as[i].onclick = function() {
				mafenetre = window.open(this.href, this.target, "width=500,height=400,scrollbars");
				mafenetre.focus();
				return false;
			}
		}
	}
}

/*
** Initialisation du script
*/
addLoadEvent(createIndicBox);
addLoadEvent(initMenuItems);
addLoadEvent(initEvents);
addLoadEvent(initLink);
addLoadEvent(LoadHisto);
addLoadEvent(loadCook);
addLoadEvent(initSearch);
