// INITIALISATION
var DHTML = 0;
var DOM = 0;
var MS = 0;
var NS = 0;
var OP = 0;
var AJAX = 0;
var souris = new Souris();
var fenetre = new Rectangle();
var httpRequest = null; 
var TOUCHE_ENTREE = 13;
var menus = new Array();
var urlOUI = null;

function initialiser() {
	if (window.opera) {
		OP = 1;
	}
	if (document.getElementById) {
		DHTML = 1;
		DOM = 1;
	}
	if(document.all && !OP) {
		DHTML = 1;
		MS = 1;
	}
	if (document.layers && !OP) {
		DHTML = 1;
		NS = 1;
	}
	if ( document.captureEvents ) {
		document.captureEvents(Event.MOUSEMOVE);
	}
	// Initialise le requeteur ajax
	if ( window.XMLHttpRequest )
	   httpRequest = new XMLHttpRequest(); 
	else if ( window.ActiveXObject ) {
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	if ( httpRequest == null ) {
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		httpRequest = null;
		AJAX = 0;
	} else {
		AJAX = 1;
	}
}
initialiser();
document.onmousemove = actualiserPositionSouris;

// CLASSES
function Souris() {
	this.x = 0;
	this.y = 0;
	this.getX = SourisGetX;
	this.getY = SourisGetY;
	this.setX = SourisSetX;
	this.setY = SourisSetY;
}
function SourisGetX() { return this.x; }
function SourisGetY() { return this.y; }
function SourisSetX(x) { this.x = x; }
function SourisSetY(y) { this.y = y;}

function Rectangle() {
	this.gauche = 0;
	this.haut = 0;
	this.droite = 0;
	this.bas = 0;
	this.setDimension = RectangleSetDimension;
	this.pointeurDedans = RectangleIsPointeurDansRectangle;
}
function RectangleSetDimension(gauche, haut, largeur, hauteur) {
	this.gauche = (gauche ? gauche : -1);
	this.haut = (haut ? haut : -1);
	this.droite = gauche + (largeur ? (largeur-1) : 0);
	this.bas = haut + (hauteur ? (hauteur-1) : 0);
}
function RectangleIsPointeurDansRectangle(x, y) { return ((x > this.gauche) && (x < this.droite) && (y > this.haut) && (y < this.bas)); }

// FONCTIONS UTILITAIRES
function getTouche(event) {
	if ( event ) {
		return event.keyCode;
	} else {
		return null;
	}
}
function actualiserTailleFenetre() {
		var reference;
		if ( document.body ) {
			reference = document.body;
		} else {
			reference = document.documentElement;
		}
		var width = (reference.clientWidth > reference.scrollWidth ? reference.clientWidth : reference.scrollWidth);
		var height = (reference.clientHeight > reference.scrollHeight ? reference.clientHeight : reference.scrollHeight);
		fenetre.setDimension(0, 0, width, height);
}
function actualiserPositionSouris(evenement) {
	if ( evenement ) {
		souris.setX(evenement.pageX);
		souris.setY(evenement.pageY);
	} else if ( event ) {
		souris.setX(event.x);
		souris.setY(event.y);
	}
	if ( MS && document.documentElement ) {
		souris.setX(souris.getX() + document.documentElement.scrollLeft);
		souris.setY(souris.getY() + document.documentElement.scrollTop);
	}
}
// FONCTIONS SYSTEME
function afficherMessageBarreEtat(message) {
	window.status = message;
}
function afficherInfoBulle(infoBulleId, texte) {
	var objet = getObjetParId(infoBulleId);
	if ( objet ) {
		souris.setX(souris.getX() + 15);
		souris.setY(souris.getY() + 15);
		remplacerContenu(objet, texte);
		setPositionObjetSouris(objet);
		afficherObjet(objet);
	}
}
function masquerInfoBulle(infoBulleId) {
	var objet = getObjetParId(infoBulleId);
	if ( objet ) {
		masquerObjet(objet);
	}
}
function setPositionObjet(objet, x, y) {
	if ( objet && objet.style ) {
		objet.style.left = x + 'px';
		objet.style.top = y + 'px';
	}
}
function copierPositionObjet(objet, objetReference, dx, dy) {
	alert(objetReference.ref.top);
	if ( objetReference && objetReference.style && objet && objet.style ) {
		var x = objetReference.style.left.replace('px', '');
		var y = objetReference.style.top.replace('px', '');
		alert(x + ":" + y);
		setPositionObjet(objet, (x + dx), (y + dy));
	}
}
function setPositionObjetSouris(objet) {
	if ( objet && souris ) {
		setPositionObjet(objet, souris.getX(), souris.getY());
	}
}
function afficherObjet(objet, type) {
	if ( !type ) type = 'block';
	if ( objet ) {
		objet.style.display = type; 
		objet.style.visibility = 'visible'; 
	}
}
function masquerObjet(objet) {
	if ( objet ) {
		objet.style.display = 'none'; 
		objet.style.visibility = 'hidden'; 
	}
}
function switchObjet(objet, type) {
	if ( objet ) {
		if ( objet.style.display == 'none' ) {
			afficherObjet(objet, type);
		} else {
			masquerObjet(objet);
		}
	}
}
function remplacerContenu(objet, nouveauContenu) {
	if ( !objet ) {
		return void(0); 
	}
	if ( DOM && objet.firstChild ) {
		objet.firstChild.nodeValue = nouveauContenu;
	} else if ( MS || objet.innerText ) {
		objet.innerText = nouveauContenu;
	} else if ( NS ) {
		objet.document.open();
		objet.document.write(nouveauContenu);
		objet.document.close();
	}
}
function getObjetParId(id) {
	var objet = void(0);
	if (DOM) {
		if (typeof document.getElementById(id) == "object") objet = document.getElementById(id);				
	} else if (MS) {
		if (typeof document.all[id] == "object") objet = document.all[id];
	} else if (NS) {
		if (typeof document[id] == "object") objet = document[id];
	}
	return objet;
}
function getObjetParTag(tag, index) {
	var objet = void(0);
	if ( !index ) index = 0;
	if (DOM) {
		if (typeof document.getElementsByTagName(tag) == "object" || (OP && typeof document.getElementsByTagName(tag) == "function")) objet = document.getElementsByTagName(tag)[index];
	} else if (MS) {
		if (typeof document.all.tags(tag) == "object") objet = document.all.tags(tag)[index];
	} else if(NS) {
		if (typeof document.layers[tag] == "object") objet = document.layers[tag];
	}
	return objet;
}
function getObjetParNom(nom, index) {
	var objet = void(0);
	if ( !index ) index = 0;
	if (DOM) {
		if (typeof document.getElementsByName(nom) == "object") objet = document.getElementsByName(nom)[index];
	} else if (MS) {
		if (typeof document[nom] == "object") objet = document[nom];
			
	} else if(NS) {
		if (typeof document[nom] == "object") objet = document[nom];
	}
	return objet;
}
function setAlpha(objet, valeur) {
	if ( !objet ) return void(0);
	if ( MS ) { 
		objet.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + parseInt(100*valeur) + ')';
	} else {
		objet.style.opacity = valeur;
	}
}
function afficherMasque(id) {
	var objet = getObjetParId(id);
	if ( objet ) {
		actualiserTailleFenetre();
		objet.style.left = fenetre.gauche + 'px';
		objet.style.top = fenetre.haut + 'px';
		objet.style.width = fenetre.droite + 'px';
		objet.style.height = fenetre.bas + 'px';
		setAlpha(objet, 0.75);
		//alert('affiche masque : ' + objet.style.left + ', ' + objet.style.top + ', ' + objet.style.width + ', ' + objet.style.height);
		afficherObjet(objet);
	} else {
		alert('pas de masque');
	}
}
function centrerObjet(objet) {
	if (!objet) return void(0);
	objet.style.top = parseInt((fenetre.haut + 450) / 2) + "px";
}
function setFocus(id) {
	var objet = getObjetParId(id);
	if ( objet ) {
		if ( (objet.type != "image") && (objet.type != "hidden") && (objet.type != "reset") && (objet.type != "submit") ) {
			objet.focus();
			if ( (objet.type == "text") || (objet.type == "password") ) {
				objet.select();
			}
		}
	}
}
function activerObjet(objet, actif) {
	if ( objet ) {
		objet.disabled = !actif;
	}
}
function effacerListe(objet) {
	if ( objet ) {
		objet.options.length = 0;
	}
}
function ajouterOption(objet, cle, description) {
	if ( objet ) {
		objet.options[objet.options.length] = new Option(description, cle);
	}
}
function enregistrerMenu(id) {
	menus[menus.length] = id;
}
function afficherMenu(id) {
	for(var i = 0; i < menus.length; i++) {
		$('#' + menus[i]).addClass('cache');
	}
	$('#' + id).removeClass('cache');
}
function confirmer(setUrlOUI) {
	urlOUI = setUrlOUI;
	afficherMasque('masque'); 
	centrerObjet(getObjetParId('confirmer-oui-non')); 
	afficherObjet(getObjetParId('confirmer-oui-non'));
}
function switchImage(idImg, idRef, urlVisible, urlInvisible) {
	var img = getObjetParId(idImg);
	var ref = getObjetParId(idRef);
	if ( img && ref ) {
		if ( ref.style.display == 'none' ) {
			setImageObjet(img, urlInvisible);
		} else {
			setImageObjet(img, urlVisible);
		}
	}
}
function setImageObjet(objet, url) {
	if ( objet ) {
		objet.src = url;
	}
}
////////////
// AJAX //
/////////
var ajaxSendTimer = null;
function ajaxSend(url, parametres, callback, forceTimer) {
	if ( forceTimer == undefined ) forceTimer = true;
	if ( AJAX ) {
		/*if ( httpRequest.readyState != 0 ) {
			httpRequest.abort();
		}
		httpRequest.onreadystatechange = function() {
			if ( httpRequest.readyState == 4 && httpRequest.status == 200 ) {
				if ( callback != null ) {
					callback(new String(httpRequest.responseText));
				} else {
					alert(new String(httpRequest.responseText));
				}
			}
		}
		httpRequest.open('POST', url, true);
		httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		httpRequest.setRequestHeader('Content-Encoding', 'UTF-8');
		httpRequest.send(parametres);*/
		
		if (forceTimer) {
			var temp = function() {
				ajaxSend(url, parametres, callback, false);
			};
			clearTimeout(ajaxSendTimer);
			ajaxSendTimer = null;
			ajaxSendTimer = setTimeout(temp, 350);
		} else {
			// Fin du timer
			clearTimeout(ajaxSendTimer);
			ajaxSendTimer = null;
			$.post(url, parametres, callback);
		}
	}
}
function ajaxGetTableauReponse(donnees) {
	var array = donnees.split('\n');
	return array;
}
function ajaxGetTableauCompletReponse(donnees) {
	var array = donnees.split('\n');
	for(var i = 0; i < array.length; i++) {
		var subarray = array[i].split("|");
		if ( subarray.length == 1 ) {
			subarray[1] = "";
		}
		array[i] = subarray;
	}
	return array;
}
function ajaxGetValeurPourCle(cle, array) {
	var valeur = "";
	for(var i = 0; i < array.length; i++) {
		if ( array[i][0] == cle ) {
			valeur = array[i][1];
			break;
		}
	}
	return valeur;
}
function ajaxSetValeurObjet(idObjet, cleValeur, arrayValeurs) {
	var objet = getObjetParId(id);
	var valeur = ajaxGetValeurPourCle(cleValeur, arrayValeurs);
	if ( objet ) {
		if ( objet.type == "select" ) {
			for(var i = 0; i < objet.options; i++) {
				if ( objet.options[i].value == valeur ) {
					objet.selectedIndex = i;
					break;
				}
			}
		} else if ( (objet.type == "text") || (objet.type == "password") || (objet.type == "hidden") ) {
			objet.value = arrayValeurs[cleValeur];
		}
	} else {
		alert('Pas d\'objet \'' + idObjet + '\'');
	}
}
