/* ----- ----- ----- Free software Foundation - Affero Licence ----- ----- -----

bulle.js - Title managment
    Copyright (C) 2008  Thibault Garcia (thibault.garcia@revaweb.com)

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as
    published by the Free Software Foundation, either version 3 of the
    License, or (at your option) any later version.

    This program 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 Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

----- ----- ----- Free software Foundation - Affero Licence ----- ----- ----- */

function bulleInit() {
	var items=document.getElementsByTagName('*');
	var nb=0;

	for (var i=0;i<items.length;i++) {
		var item=items[i];
		if(item.title) {

			if(!item.id) {
				nb++;
				item.id='bulleId'+nb;
			}

			eventAddBefore(item,'onmouseover','bulleAppear("'+item.id+'");');
			eventAddAfter(item,'onmouseout','bulleDisappear("'+item.id+'");');

			item.bulleTitle=item.title;
			item.title='';
		}
	}

	/* ----- Déplacement souris ----- */
	eventAddAfter(document,'onmousemove','bulleMouse(e)','e');
	eventAddAfter(document,'onscroll','bulleScroll()'); /* pour FF */
	eventAddAfter(window,'onscroll','bulleScroll()'); /* pour IE */

	/* ----- bulleDiv ----- */
	var item=document.getElementById('bulleDiv');

	item.style.display='none';
	item.style.opacity=0;
	item.style.filter='alpha(opacity=0)';
	item.style.position='absolute';

	item.bulleDx=15;
	item.bulleDy=15;

	item.bulleX=0;
	item.bulleY=0;

	item.bulleTime=25;
	item.bulleValue=0;
	item.bulleFactor=0.1;
	item.bulleMinStep=0.05;
}

/*
bullePlace(x,y)
*/
function bullePlace(x,y) {
	var item=document.getElementById('bulleDiv');

	/* ----- Tjrs entièrement dans l'écran ----- */
	var max=document.documentElement.clientWidth-item.offsetWidth;
	if(x>max) x=max;
	var max=document.documentElement.clientHeight-item.offsetHeight;
	if(y>max) y=max;
	if(x<0) x=0; if(y<0) y=0;

	/* ----- Placement ----- */
	item.bulleX=x;
	item.bulleY=y;
	item.style.left=(document.documentElement.scrollLeft+x)+'px';
	item.style.top=(document.documentElement.scrollTop+y)+'px';
}

/*
event bulleMouse
*/
function bulleMouse(e) {
	var item=document.getElementById('bulleDiv');

	if(item.bulleValue) {
		if (navigator.appName!='Microsoft Internet Explorer') { // Merci Damien Alexandre
			var x=e.pageX-document.documentElement.scrollLeft;
			var y=e.pageY-document.documentElement.scrollTop;
		} else {
			var x=event.x;
			var y=event.y;
		}

		x+=item.bulleDx;
		y+=item.bulleDy;

		bullePlace(x,y);
	}
}

/*
event bulleScroll
*/
function bulleScroll() {
	var item=document.getElementById('bulleDiv');

	if(item.bulleValue) {
		var x=item.bulleX;
		var y=item.bulleY;

		bullePlace(item.bulleX,item.bulleY);
	}
}

function bulleTimer() {
	var item=document.getElementById('bulleDiv');

	if(item.bulleTimer) clearTimeout(item.bulleTimer);

	var delta=item.bulleFactor*(item.bulleFinal-item.bulleValue);
	if(delta>0) delta=Math.max(item.bulleMinStep,delta); else delta=Math.min(-item.bulleMinStep,delta);

	if(Math.abs(item.bulleFinal-item.bulleValue)>item.bulleMinStep) {
		item.bulleValue+=delta;

		item.style.opacity=item.bulleValue;
		item.style.filter='alpha(opacity='+Math.round(100*item.bulleValue)+')';

		item.style.display='block';

		item.bulleTimer=setTimeout('bulleTimer()',item.bulleTime);
	} else if(item.bulleFinal) {
		item.bulleValue=item.bulleFinal;
		item.style.opacity=item.bulleValue;
		item.style.filter='alpha(opacity='+Math.round(100*item.bulleValue)+')';

		item.style.display='block';
	} else {
		item.bulleValue=0;
		item.style.display='none';
		item.style.opacity=0;
		item.style.filter='alpha(opacity=0)';
	}
}

function bulleAppear(id) {
	var item=document.getElementById('bulleDiv');
	item.innerHTML=document.getElementById(id).bulleTitle;

	item.bulleFinal=0.9;
	bulleTimer();
}

function bulleDisappear(id) {
	var item=document.getElementById('bulleDiv');

	item.bulleFinal=0;
	bulleTimer();
}