/**
 * Librairie javascript commune
 *
 * @author		Julie Tétard <julie@2jstudio.com> 
 * @version		1.0
 * @package		Cathia Zeoli
 * @subpackage 	shared
 * @category 	javascript
 */


/**
 * Attache événements
 */
DJS_smartAttachEvent(window, 'load', DJS_initEvents, false);



/**
 * Fonctions d'initalisation
 */

	/**
	 * Fonction attachant un les événements aux éléments du menu
	 *
	 * @return		-
	 */
	function DJS_initEvents()
	{
		var menuTab = document.getElementById('languesUl').getElementsByTagName('img');
		for(i = 0 ; i < menuTab.length ; i++) {
			/* On explose la source de l'image en tableau */
			var srcTab = menuTab[i].src.split('/');
			/* On explose le dernier élément = le nom de l'image en tableau */
			var imgNameTab = srcTab[srcTab.length - 1].split('.');
			/* Si l'image n'est déja pas en rollover, on la change */
			if (imgNameTab[0].substr(imgNameTab[0].length - 3, 3) != '-f2') {
				DJS_smartAttachEvent(menuTab[i], 'mouseover', DJS_rollOver, false);
				DJS_smartAttachEvent(menuTab[i], 'mouseout', DJS_rollOut, false);
			}
		}
		DJS_smartAttachEvent(document.getElementById('legal').getElementsByTagName('a')[0], 'click', DJS_openLegals, false);
	} 



/**
 * Fonctions de manipulation des événements
 */

	/**
	 * Fonction attachant un événement a un objet selon le navigateur
	 *
	 * @param  		object	obj				objet auquel on doit attacher l'événement
	 * @param  		string	evenType		nom de l'évenement 
	 * @param  		string	functionName	nom de la fonction
	 * @param  		bool	capture			methode de capture
	 * @return		-
	 */
	function DJS_smartAttachEvent(obj, evenType, functionName, capture)
	{
		// Cas de type Mozilla
		if (window.addEventListener) {
			obj.addEventListener(evenType, functionName, capture);
		// Cas MSIE
		} else {
			obj.attachEvent('on' + evenType, functionName);	
		}
	}
	
	/**
	 * Fonction supprimant un événement pour un objet selon le navigateur
	 *
	 * @param  		object	obj				objet auquel on doit attacher l'événement
	 * @param  		string	evenType		nom de l'évenement 
	 * @param  		string	functionName	nom de la fonction
	 * @param  		bool	capture			methode de capture
	 * @return		-
	 */
	function DJS_smartRemoveEvent(obj, evenType, functionName, capture)
	{
		// Cas de type Mozilla
		if (window.addEventListener) {
			obj.removeEventListener(evenType, functionName, capture);
		// Cas MSIE
		} else {
			obj.detachEvent('on' + evenType, functionName);	
		}
	}
	
	/**
	 * Fonction récupérant l'élément déclencheur
	 *
	 * @param		object	event		Objet évenement
	 * @return		object	élément déclencheur
	 */
	function DJS_smartGetTarget(event)
	{
		if(event.currentTarget) {
			return objOrigin = event.currentTarget;
		} else {
			return objOrigin = event.srcElement; 
		}
	}



/**
 * Fonctions du DOM
 */

	/**
	 * Fonction permettant d'accéder a un noeud élément enfant
	 *
	 * @param		object	parentNode	Noeud parent dont on doit trouver l'enfant
	 * @param		object	childRank	Rang du noeud a récupérer
	 * @return		object	le noeud enfant récupéré
	 */
	function DJS_smartChild(parentNode, childRank) 
	{ 
		var rank = 0;
		var i = 0;
		// On passe en revue tout le noeud parent
		for(i=0 ; i<parentNode.childNodes.length ; i++) {
			// S'il s'agit d'un bien d'un noeud élément
			if (parentNode.childNodes[i].nodeType == 1) {
				rank ++;
			}
			// Si on est arrivé au bon rang, on retourne
			if (rank == childRank) {
				return parentNode.childNodes[i]; 
			}
		}
		return false;
	} 
	

/**
 * Fonctions de conversion HTML
 */

	/**
	 * Fonction affichant un lien dans une nouvelle fenetre
	 *
	 * @param		object	event		Objet évenement
	 */
	function DJS_openLinkInNewWindow(event)
	{
		// On récupere la cible et l'url de son lien
		var target = DJS_smartGetTarget(event);
		// Remonte jusqu'au a
		var node = target.nodeName;
		while(node.toLowerCase() != 'a' && node.toLowerCase() != 'body') {
			target = target.parentNode;
			node = target.nodeName;
		}
		// On execute le lien en javascript
		if (node.toLowerCase() == 'a') {
			window.open(target.name, '_blank');
		}
	}
	
	/**
	 * Fonction affichant le rollover de l'image principale
	 *
	 * @param		object		menuObj			l'objet cible
	 * @return		-
	 */
	function DJS_rollOver(event)
	{
		menuObj = DJS_smartGetTarget(event);
		/* On explose la source de l'image en tableau */
		var srcTab = menuObj.src.split('/');
		/* On explose le dernier élément = le nom de l'image en tableau */
		var imgNameTab = srcTab[srcTab.length - 1].split('.');
		/* Si l'image n'est déja pas en rollover, on la change */
		if (imgNameTab[0].substr(imgNameTab[0].length - 3, 3) != '-f2') {
			/* On lui rajoute le _f2 et on recolle avec l'extension */
			imgNameTab[0] += '-f2';
			srcTab[srcTab.length - 1] = imgNameTab.join('.');
			/* On recolle tout le chemin et on le réassigne a la source de l'image principale */
			menuObj.src = srcTab.join('/');
		}
	}
	
	/**
	 * Fonction affichant le rollout de l'image principale
	 *
	 * @param		object		menuObj			l'objet cible
	 * @return		-
	 */
	function DJS_rollOut(event)
	{
		menuObj = DJS_smartGetTarget(event);
		/* On explose la source de l'image en tableau */
		var srcTab = menuObj.src.split('/');
		/* On explose le dernier élément = le nom de l'image en tableau */
		var imgNameTab = srcTab[srcTab.length - 1].split('.');
		/* Si l'image est bien en rollover, on la change */
		if (imgNameTab[0].substr(imgNameTab[0].length - 3, 3) == '-f2') {
			/* on enleve le _f2 final */
			imgNameTab[0] = imgNameTab[0].substr(0, imgNameTab[0].length - 3);
			srcTab[srcTab.length - 1] = imgNameTab.join('.');
			/* On recolle tout le chemin et on le réassigne a la source de l'image principale */
			menuObj.src = srcTab.join('/');
		}
	}



