// initialisation du JS dans la page HTML
//evenement onload sur window : attente du chargement complet de la page // OBLIGATOIRE POUR TOUS CHARGEMENT
//window.onload=initHTML;

//creation d'un objet
var DOM =
	{
		//recuperer les styles CSS
		recupererCSS : function(_idCible, _proprieteCSS)
			{
				//variables de classes
				var idCible = document.getElementById(_idCible);
				var proprieteCSS;
				
				/*
					cas particulier : float
						- cssFloat pour navigateurs standards W3C
						- styleFloat pour (ie)
				*/
				
				if(_proprieteCSS == "float")
					{
						if(Navigateur.detectionSimple() == "IE")
							{
								_proprieteCSS = "styleFloat";
							}
						else
							{
								_proprieteCSS = "cssFloat";
							}
					}
				
				/*
					getComputedStyle / currentStyle :
						- cree un array de toutes les proprietes CSS existantes sur l'element
						- getComputedStyle : 2 parametres
							- noeud cible
							- pseudo-element (ex... a:hover), si aucun pseudo-element n'est cible, il faut utiliser la valeur null
							- propriete defaultView de document : (equivalent de body pour le HTML)
				*/
				
				if(Navigateur.detectionSimple() == "IE")
					{
						proprieteCSS = idCible.currentStyle[_proprieteCSS];
					}
				else
					{
						proprieteCSS = document.defaultView.getComputedStyle(idCible, null)[_proprieteCSS];
					}
				//resultat
				return proprieteCSS;
			},


		//ajouter les styles CSS ---attention lA "VIRGULE SEPARE LES PROPRIETES"----
			ajouterCSS : function(_idCible, _proprieteCSS, _valeurCSS)
			{
				//id cible
				var idCible = document.getElementById(_idCible);
				
				//propriete style de l'element qui est un array associatif
				idCible.style[_proprieteCSS] = _valeurCSS;
			},
			
			
		//recuperer les proprietes DOM
			recupererProprietesDOM : function(_idCible, _proprieteDOM)
			{
				//id cible
				var idCible = document.getElementById(_idCible);
				
				//resulat
				return idCible[ _proprieteDOM];
			},
	
		//ajouter les styles CSS ---attention lA "VIRGULE SEPARE LES PROPRIETES"----
			ajouterCSS : function(_idCible, _proprieteCSS, _valeurCSS)
			{
				//id cible
				var idCible = document.getElementById(_idCible);
				
				/*
				
				TRANSPARENCE :
					- opacity sur base 1 pour les navigateurs standards
					- IE : style CSS appelé filter, l'une des propriétés de filter est alpha, qui permet de contrôler l'opacité, sur base 100
						>> cette propriété s'écrit : element.style.filter(alpha(opacity=50))
						ou bien element.style['filter(alapha(opacity=50))']
				
				*/
				// exception IE pour opacity
				if(_proprieteCSS == 'opacity' && Navigateur.detectionSimple() == "IE")
				{
					idCible.style['filter'] = 'alpha(opacity=' + (_valeurCSS * 100) + ')';
				}
				
				else
				{
					//propriete style de l'element qui est un array associatif
					idCible.style[_proprieteCSS] = _valeurCSS;
				}
			},
			
			
		//ajouter une classe CSS
			ajouterClasseCSS : function(_idCible, _classeCSS)
			{
				//id cible
				var idCible = document.getElementById(_idCible);
				
				//application de la classe
				idCible.className = _classeCSS;
			},	
	
			
		//supprimer une classe CSS
			supprimerClasseCSS : function(_idCible)
			{
				//id cible
				var idCible = document.getElementById(_idCible);
				
				//application de la classe
				idCible.className = "";
			},
	
		//ajouter un événement
		ajouterEvenement : function (_idCible, _evenement, fonctionEvenement)
			{
				//id cible
				var idCible;
				
				// si le paramètre idCible est un objet (tel que window), getElementById est inutile
				// on conserve l'objet
				if (_idCible == window || _idCible == document)
					{
						idCible = _idCible;
					}
				// si le paramètre _idCible est un identifiant
				else
					{
						idCible = document.getElementById(_idCible);
					}
				
				// exception IE, IE nécessite le on devant les événements, 2 paramètres
				if(Navigateur.detectionSimple() == "IE")
				{
					idCible.attachEvent('on' + _evenement, fonctionEvenement);
				}
				
				else
				{
					//navigateurs standards, 3 paramètres (événement, fonction liée à l'événement et propagation)
					idCible.addEventListener(_evenement, fonctionEvenement, false);
				}
			},
			
		//supprimer un événement
		supprimerEvenement : function (_idCible, _evenement, fonctionEvenement)
			{
				//id cible
				var idCible;
				
				// si le paramètre idCible est un objet (tel que window), getElementById est inutile
				// on conserve l'objet
				if (_idCible == window || _idCible == document)
					{
						idCible = _idCible;
					}
				// si le paramètre _idCible est un identifiant
				else
					{
						idCible = document.getElementById(_idCible);
					}
				
				// exception IE, IE nécessite le on devant les événements, 2 paramètres
				if(Navigateur.detectionSimple() == "IE")
				{
					idCible.detachEvent('on' + _evenement, fonctionEvenement);
				}
				
				else
				{
					//navigateurs standards, 3 paramètres (événement, fonction liée à l'événement et propagation)
					idCible.removeEventListener(_evenement, fonctionEvenement, false);
				}
			},
			
			// propriétés d'un événement
			// DOM.proprietesEvenement(e, 'type');
			proprietesEvenement : function(_evenement, _proprieteEvenement)
			{
				// variables
				var proprieteEvenement;
				
				// test de la propriété
				switch(_proprieteEvenement)
				{
					// type
					case 'type':
					proprieteEvenement = _evenement.type;
					break;
					
					// cible
					case 'cible':
						// exception IE
						if(Navigateur.detectionSimple() == "IE")
						{
							proprieteEvenement = _evenement.srcElement;
						}
						
						else
						{
							//navigateurs standards
							proprieteEvenement = _evenement.target;
						}
					break;
					
					// code clavier
					case 'codeClavier':
					proprieteEvenement = _evenement.keyCode;
					break;
					
					// position de la souris
					case 'positionSouris':
					//proprieteEvenement = new Array();
					// array : indice = 0 >> position x // indice 1 >> position y
					proprieteEvenement = [_evenement.clientX, _evenement.clientY];
					break;
				}
				
				// résultat
				return proprieteEvenement;
				
			}
	
	
	
	}

