/*============================================================================================
 Fichier Javascript
 Fichier contenant divers fonction utile au dhtml

 AUTEUR:					Marc-Antoine Dumont
 CREATION:					30/08/2008
 VARIABLE GLOBALES:			
 MODIFICATIONS:	
===============================================================================================
	copyright 2009 Alban BALLIEUX - ballieuxa@laon.noirot
	http://www.phpmyportal.info

	This file is part of phpMyPortal.

    phpMyPortal is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation; either version 2.1 of the License, or
    any later version.

    phpMyPortal is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with phpMyPortal; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
===============================================================================================*/

/**
 * Fonctions retournant les coordonnees X,Y de la souris par rapport à la div qu'elle survole 
 * 
 * @param {Object} ev		l'événement js (normalement event)
 * @param {Object} id
 */
function MouseXYDiv(ev,id){
  var x, y;
  if (ev.layerX!=null && ev.layerY!=null)
  {
   x = ev.layerX;
   y = ev.layerY;
  }
  tc=CoordElt(id);
  x=x-tc[0];
  y=y-tc[1];
  return [x, y, tc[0], tc[1]];
}

/**
 * Fonctions retournant les coordonnees X,Y de la souris par rapport a la div 
 * qu'elle survole (en absolute)
 * 
 * @param {Object} ev		l'événement js (normalement event)
 * @param {Object} id		
 * 
 * @return {string}			Tableau contenant les coordonnées
 */
function MouseXYDivAbs(ev){
  var x, y;
  if (ev.layerX!=null && ev.layerY!=null){
  	x = ev.layerX;
	y = ev.layerY;
  }
  return [x, y];
}

/**
 * Recupere la position d'un element dans la page
 * Utilisé pour avoir la position réelle avec des positions relative
 * 
 * @param {string} id		Identifiant de l'objet 
 * 
 * @return {string}			Tableau contenant les coordonnées
 */
function CoordElt(id){
	var x = y = 0;
	elt=GetPtId(id);
	if(elt.offsetParent) {
		x = elt.offsetLeft;
		y = elt.offsetTop;
		while(elt = elt.offsetParent) {
			x += elt.offsetLeft;
			y += elt.offsetTop;
		}
	}
	return [x, y];
}

/********************************************
Méthodes pour la progressbar
**********************************************/

/**
 * Bar de progression javascript avec event en fin de mouvement
 * 
 * @param {Object} ev		l'événement js (normalement event)
 * @param {Object} id		
 * @param {Object} js		
 * @param {Object} pas		
 */
function modifBarreProgression(ev,id,js,pas){
	coord = MouseXYDivAbs(ev,id);
	ld = GetPtId(id+"_div").style.width;
	prct = Math.round(parseInt(coord[0])/parseInt(ld)*100);
	if(pas!=null){
		prct=Math.round(prct*(1/pas))/(1/pas);
	}
	if(prct>100)	prct=100;
	GetPtId(id+"_barre").innerHTML = prct+'%';
	ModifTaillePrct(id+'_barre',prct,-1,1);
	if(js!=null){
		js=js.replace('#PRCT#',prct);
		eval(js);
	}
}

/**
 * Modifie l'état d'avancement de la barre de progression
 * 
 * @param {Object} id		l'id de la zone
 * @param {Object} prct		l'état d'avancement en % 
 */
function modifBarreProgressionAvecPrct(id,prct){
	GetPtId(id+"_barre").innerHTML = prct+'%';
	ModifTaillePrct(id+'_barre',prct,-1,1);
}

/**
 * Modifie la position de la barre de progression
 * 
 * @param {Object} ev			l'evenement js contenant les infos
 * @param {Object} id			l'id de la progressbar
 * @param {Object} js			Javascript executer à la fin de la fonction
 * @param {Object} mini			la valeur mini de la progessbar (souvent 0)
 * @param {Object} maxi			la valeur maxi de la progessbar
 */
function modifPos(ev,id,js,mini,maxi){
	slide=GetPtId(id+'slide');
	cont=GetPtId(id+'div');
	coord = MouseXYDiv(ev,id+'div');
	w=slide.offsetWidth/2;
	coeff=cont.offsetWidth/coord[0];
	val=(maxi-mini)/coeff+mini;
	slide.style.left = (coord[0]+coord[2]-w)+'px';
	if(js!=null){
		js=js.replace('#VAL#',val);
		eval(js);
	}
}

/********************************************
Fin méthodes pour la progressbar
**********************************************/
/**
 * Fonction qui créee un input et le met dans une zone de destination
 * 
 * @param {Object} PtZDest		Le pointeur vers la zone dans laquelle sera mise l'input
 * @param {string} id			L'identifiant de l'input
 * @param {Object} val			La valeur de l'input
 * @param {Object} TAtt			Un  tableau d'attributs :
 * 									'onblur', 'maxlength', 'size', 'width'
 */
function Cree_Input(PtZDest,id,val,TAtt){
	Elt = document.createElement('INPUT') ;
	if (id != '') {
		Elt.id = id; 
	}
	if(val != ''){
		Elt.value = val ;
	}
	if (isset(TAtt)) {
		if (TAtt['onblur'] != '') {
			Elt.onblur = TAtt['onblur'];
		}
		if (TAtt['onkeyup'] != '') {
			Elt.onkeyup = TAtt['onkeyup'];
		}
		if (TAtt['onkeydown'] != '') {
			Elt.onkeydown = TAtt['onkeydown'];
		}
		if (TAtt['maxlength'] != '') {
			Elt.maxlength = TAtt['maxlength'];
		}
		if (TAtt['size']) {
			Elt.size = TAtt['size'];
		}
		if (TAtt['width']) {
			Elt.style.width = TAtt['width'];
		}

	}
	PtZDest.innerHTML='' ;
	PtZDest.appendChild(Elt);
}