var _OFFSET_SOUS_MENU_ACTION = 10;
var _DELTA_WIDTH_SOUS_MENU_PRINCIP = 10;

var StMenu = Class.create({
	name: null,
	
	initialize : function(a_name) {
		this.name = a_name;
		$(this.name + '_princip').cleanWhitespace();
		this.init();
	},
	
	init : function() {
		var me = this;
		this.getItemsPrincipaux().each(function(e) {
			e.observe('mouseover', me.show.bind(me));
			e.observe('mouseout', me.hide.bind(me));
		});
		$$('#' + this.name + ' dd.itemMenu').each(function(e) {
			e.observe('mouseover', me.showSubMenu.bind(me));
			e.observe('mouseout', me.hide.bind(me));
		});
	},
	
	getItemsPrincipaux : function() {
		return $$('#' + this.name + '_princip a.itemMenu');
	},
	
	show : function(a_event) {
		this.innerShow(Event.element(a_event).id);
	},
	
	hide : function(a_event) {
		if (testOuterDiv(a_event)) {
			this.innerShow('');
		}
	},
	
	showSubMenu : function(a_event) {
		var l_subMenu = Event.findElement(a_event, 'dd');
		$(l_subMenu.id.substring(1)).removeClassName('off').addClassName('on');
		this.getItemsPrincipaux().each(function(elt) {
			if (elt.hasClassName('sel')) {
				elt.removeClassName('sel').addClassName('bak');
			}
		});
		l_subMenu.style.display = 'block';
	},
	
	displaySubMenu : function(a_item, a_subMenu) {
		if (a_subMenu.initDone === true) {
			// simple affichage du sous-menu
			a_subMenu.style.display = 'block';
		} else {
			// on aligne le sous-menu sous l'item
			var l_decal = a_item.offsetLeft;
			a_subMenu.style.marginLeft = l_decal + 'px';

			// on affiche
			a_subMenu.style.display = 'block';

			// on resize éventuellement le sous-menu (au moins à la taille de l'item)
/*
			var l_itemWidth = a_item.getWidth();
			var l_subWidth = a_subMenu.offsetWidth;
			if (l_subWidth < l_itemWidth) {
				l_subWidth = l_itemWidth - 1;
				a_subMenu.style.width = l_subWidth + 'px';
			}

			// on "resize" les éléments <a> à la taille du div englobant
			l_subWidth = l_subWidth - _DELTA_WIDTH_SOUS_MENU_PRINCIP;
			$$('#' + a_subMenu.id + ' a').each(function(a_subItem){
				a_subItem.style.width = l_subWidth + 'px';
			});
*/
			a_subMenu.initDone = true;
		}
	},
	
	innerShow : function(a_menuId) {
		var me = this;
		this.getItemsPrincipaux().each(function (a_item) {
			var l_id = a_item.id;
			if (a_menuId != '') {
				// afffichage d'un sous-menu -> on "nettoie" l'élément sélectionné
				if (a_item.hasClassName('sel')) {
					a_item.removeClassName('sel').addClassName('bak');
				}
			} else {
				// plus d'affichage du menu -> on réaffiche l'éventuel élément sélectionné
				if (a_item.hasClassName('bak')) {
					a_item.removeClassName('bak').addClassName('sel');
				}
			}
			a_item.removeClassName('on').removeClassName('off');
			a_item.addClassName((l_id == a_menuId) ? 'on' : 'off');
			var l_subMenu = $('s' + l_id);
			if (l_subMenu) {
				if (l_id == a_menuId) {
					this.displaySubMenu(a_item, l_subMenu);
				} else {
					l_subMenu.style.display = 'none';
				}
			}
		}, me);
	},

	select : function(a_menuId) {
		this.getItemsPrincipaux().each(function (a_item) {
			a_item.addClassName((a_item.id == a_menuId) ? 'sel' : 'off');
		});
	}
	
});

function testOuterDiv(a_event) {
	var l_item = Event.element(a_event);
	var l_sub = Event.findElement(a_event, 'dd');
	if (l_sub) {
		// event sur un item du sous-menu -> on vérifie qu'on n'est pas sorti du sous-menu
		var l_offset = l_sub.cumulativeOffset();
		var l_minX = l_offset.left, l_maxX = l_minX + l_sub.getWidth()-1;
		var l_minY = l_offset.top, l_maxY = l_minY + l_sub.getHeight()- 1;
		
		if ((a_event.pageX < l_minX) || (a_event.pageX > l_maxX)) {
			return true;
		}
		if ((a_event.pageY < l_minY) || (a_event.pageY > l_maxY)) {
			return true;
		}
		return false;
	} else {
		// event sur item principal-> on vérifie qu'on n'est pas juste sous l'item
		var l_offset = l_item.cumulativeOffset();
		var l_minX = l_offset.left, l_maxX = l_minX + l_item.getWidth()-1;
		var l_minY = l_offset.top, l_maxY = l_minY + l_item.getHeight()- 1;
		
		if ((a_event.pageX < l_minX) || (a_event.pageX > l_maxX)) {
			return true;
		}
		if (a_event.pageY > l_maxY) {
			return false;
		}
		return true;
	}
}

// menu gauche
var StMenuGauche = Class.create({
	name : null,
	selectedId : null,
	
	initialize : function(a_name) {
		this.name = a_name;

		var me = this;
		$$('#' + this.name + ' div').each(function(e) {
			e.observe('mouseover', me.onMouseOver.bind(me));
			e.observe('mouseout', me.onMouseOut.bind(me));
		});
	},
	
	select : function(a_itemId) {
		this.selectedId = a_itemId;
		if ($(a_itemId)) {
			$(a_itemId).className = 'menugOn';
		}
	},
	
	onMouseOver : function(a_event) {
		switchOnBak(a_event);
		var l_div = Event.findElement(a_event, 'div');
		l_div.addClassName('menugOver');
	},
	
	onMouseOut : function(a_event) {
		switchOnBak(a_event);
		var l_div = Event.findElement(a_event, 'div');
		l_div.removeClassName('menugOver');
	},
	
	switchOnBak : function(a_event) {
		var l_div = Event.findElement(a_event, 'div');
		if (l_div.hasClassName('itemOn')) {
			l_div.removeClassName('itemOn').addClassName('itemBak');
		
		} else if (l_div.hasClassName('itemBak')) {
			l_div.removeClassName('itemBak').addClassName('itemOn');
		}
	}
});

/***************** formulaires **************************************************************/
function getMainForm() {
	return $$('form.mainForm')[0];
}


var StMenuAction = Class.create({
	initialize : function() {
		$('menuAction').cleanWhitespace();
		this.init();
	},
	
	init : function() {
		var me = this;
		this.getItemsPrincipaux().each(function(e) {
			e.observe('mouseover', me.show.bind(me));
			e.observe('mouseout', me.hide.bind(me));
		});
		$$('#menuAction dd.sAction').each(function(e) {
			e.observe('mouseover', me.showMenuAction.bind(me));
			e.observe('mouseout', me.hide.bind(me));
			e.observe('click', me.hideAll.bind(me));
		});
		$$('#menuAction div.sAction').each(function(e) {
			e.observe('mouseover', me.showSAction.bind(me));
			e.observe('mouseout', me.hideSActionDiv.bind(me));
		});
		$$('#menuAction dd.ssAction').each(function(e) {
			e.observe('mouseover', me.showSMenuAction.bind(me));
			e.observe('mouseout', me.hideSActionMenu.bind(me));
			e.observe('click', me.hideAll.bind(me));
		});
	},
	
	getItemsPrincipaux : function() {
		return $$('#menuAction a.itemAction');
	},
	
	show : function(a_event) {
		this.innerShowMenuAction(Event.element(a_event).id);
	},
	
	innerShowMenuAction : function(a_menuId) {
		var me = this;
		this.getItemsPrincipaux().each(function (a_item) {
			var l_id = a_item.id;
			a_item.removeClassName('on').removeClassName('off');
			a_item.addClassName((l_id == a_menuId) ? 'on' : 'off');
			var l_subMenu = $('s' + l_id);
			if (l_subMenu) {
				if (l_id == a_menuId) {
					this.displayMenuAction(a_item, l_subMenu);
				} else {
					l_subMenu.style.display = 'none';
				}
			}
		}, me);
	},
	
	displayMenuAction : function(a_item, a_subMenu) {
		if (a_subMenu.initDone === true) {
			// simple affichage du sous-menu
			a_subMenu.style.display = 'block';
		} else {
			// on aligne le sous-menu sous l'item
			var l_decal = a_item.offsetLeft - _OFFSET_SOUS_MENU_ACTION;
			a_subMenu.style.marginLeft = l_decal + 'px';

			// on affiche
			a_subMenu.style.display = 'block';
			a_subMenu.initDone = true;
		}
	},
	
	showMenuAction : function(a_event) {
		var l_subMenu = Event.findElement(a_event, 'dd');
		$(l_subMenu.id.substring(1)).removeClassName('off').addClassName('on');
		l_subMenu.style.display = 'block';
	},
	
	hide : function(a_event) {
		if (testOuterDiv(a_event)) {
			this.innerShowMenuAction('');
			$$('#menuAction dd.ssAction').each(function(a_ssMenu) {
				a_ssMenu.style.display = 'none';
			});
		}
	},
	
	showSAction : function(a_event) {
		var l_item = Event.element(a_event);
		this.innerShowSMenuAction(l_item.up('dd').id, l_item.id);
	},
	
	innerShowSMenuAction : function(a_menuId, a_smenuId) {
		var me = this;
	  var l_smenu = $(a_menuId);
		var l_decal = parseInt(l_smenu.style.marginLeft) + 10;
		
		var l_nbItems = 0;
		l_smenu.childElements().each(function (a_item) {
			var l_tagName = a_item.nodeName.toLowerCase();
			if ('div' == l_tagName) {
				var l_id = a_item.id;
				a_item.removeClassName('on');
				a_item.addClassName((l_id == a_smenuId) ? 'on' : '');
				var l_subMenu = $('s' + l_id);
				if (l_subMenu) {
					if (l_id == a_smenuId) {
						this.displaySMenuAction(a_item, l_subMenu, l_nbItems, l_decal);
					} else {
						l_subMenu.style.display = 'none';
					}
				}
				l_nbItems++;
				
			} else if (('a' == l_tagName) || ('span' == l_tagName)) {
				l_nbItems++;
			}
		}, me);
	},
	
	displaySMenuAction : function(a_item, a_subMenu, a_nbItems, a_decal) {
		if (a_subMenu.initDone === true) {
			// simple affichage du sous-menu
			a_subMenu.style.display = 'block';
		} else {
			// on aligne le sous-menu sous l'item
			a_subMenu.style.marginLeft = (a_decal + parseInt(a_item.style.width)) + 'px';
			a_subMenu.style.marginTop = (a_nbItems * 20) + 'px';

			// on affiche
			a_subMenu.style.display = 'block';
			a_subMenu.parentItem = a_item;
			a_subMenu.initDone = true;
		}
	},
	
	showSMenuAction : function(a_event) {
		var l_subMenu = Event.findElement(a_event, 'dd');
		$(l_subMenu.id.substring(1)).addClassName('on');
		l_subMenu.style.display = 'block';
	},
	
	hideSActionDiv : function(a_event) {
		var l_item = Event.element(a_event);
		var l_offset = l_item.cumulativeOffset();
		var l_minX = l_offset.left, l_maxX = l_minX + l_item.getWidth() - 1;
		if (a_event.pageX > l_maxX) {
			// on ne fait rien
		} else {
			// on cache le ssMenu
			this.innerShowSMenuAction(l_item.up('dd').id, '');
		}
		
		if (testOuterDiv(a_event)) {
			this.innerShowMenuAction('');
		}
	},
	
	hideSActionMenu : function(a_event) {
		if (testOuterDiv(a_event)) {
			var l_item = Event.element(a_event);
			if (l_item.nodeName.toLowerCase() != 'dd') {
				l_item = l_item.up('dd')
			}
			this.innerShowSMenuAction(l_item.parentItem.up('dd').id, '');
			
			this.innerShowMenuAction('');
		}
	},
	
	hideAll : function(a_event) {
		$$('#menuAction dd.ssAction').each(function(a_ssMenu) {
			a_ssMenu.style.display = 'none';
		});
		$$('#menuAction dd.sAction').each(function(a_sMenu) {
			a_sMenu.style.display = 'none';
		});
	}
	
});

function setAction(a_elt, a_action, a_submit) {
	_setAction($(a_elt).up('form'), a_action, a_submit);
}

function setMainAction(a_action, a_submit) {
	_setAction(getMainForm(), a_action, a_submit);
}

function _setAction(a_form, a_action, a_submit) {
	a_form._action.value = a_action;
	if (a_submit) {
		a_form.submit();
	}
}

function setMainDeleteAction(a_action, a_deleteXid) {
	_setDeleteAction(getMainForm(), a_deleteXid, a_action);
}

function _setDeleteAction(a_form, a_deleteXid, a_action) {
	a_form._action.value = a_action;
	a_form.del.value = a_deleteXid;
	a_form.submit();
}

function openPopupAction(a_elt, a_action) {
	var l_form;
	if (a_elt) {
	  l_form = $(a_elt).up('form');
	} else {
		l_form = getMainForm();
	}
	var l_linkId;
	if (l_form.link_id) {
		l_linkId = l_form.link_id.value;
	}
	new Ajax.Updater('popupContenu', l_form.action, {
		parameters : {process: l_form.process.value, key: l_form.key.value, 
									link_id:l_linkId, _action: a_action},
		evalScripts: true
	});
}

function onFieldFocus(a_field) {
	var l_default = (a_field.id.indexOf('login') > 0) ? 'IDENTIFIANT' : 'MOT DE PASSE';
	if (a_field.value == l_default) {
		a_field.value = '';
	}
}
function onFieldBlur(a_field) {
	var l_default = (a_field.id.indexOf('login') > 0) ? 'IDENTIFIANT' : 'MOT DE PASSE';
	if (a_field.value == '') {
		a_field.value = l_default; 
	}
}

function onfocus() {
	// focus sur la page
	if (document.forms['login']) {
		onFieldBlur(document.forms['login'].log_00__login);
	}
}

function updateFields(a_clear) {
	if (a_clear) {
		onFieldFocus($('log_00__login'));
		onFieldFocus($('log_00__pass'));
	} else {
		onFieldBlur($('log_00__login'));
		onFieldBlur($('log_00__pass'));
	}
}

function onKeyPress(a_event) {
	if (13 == a_event.keyCode) {
		// on soumet le formulaire
		document.forms['login']._action.value = "login.login";
		document.forms['login'].submit();
		return false;
	}
	return true 
}

/**********************  anchor  ********************************************/
function scrollToAnchor() {
	var l_anchor = document.location.search.parseQuery().anchor;
	if (l_anchor) {
		Element.scrollTo('anchor_' + l_anchor);
	}
}

document.observe('dom:loaded', scrollToAnchor);

