// ......... Scroll v 3.0 - 24 juin 2009 ...........

// scroll progressif vers l'objet id, ou vers début de page si id=_top
var scroll_doc1
function scroll_to_object(id) {
	// compensation d'offset pour FF/Safari/Opera, et IE (dépend du design de la page)
	if(typeof(comp)=='undefined') var comp=0;
	if(typeof(iecomp)=='undefined') var iecomp=170;

	var target=-1
	if(id=='_top') target=0
	else {
		var x=document.getElementById(id)
		if(x) {
			target=x.offsetTop-5
			if(target<0) target=0
			else target+=comp+(document.all? iecomp : 0)
		}
	}
	if(target>-1) {
		var doc=document.compatMode && document.compatMode=="BackCompat" ? document.body : document.documentElement
		scroll_doc1=navigator.userAgent.toLowerCase().indexOf('safari')>-1? document.body : doc	// Forcage obligatoire avec 3.1 (525.13)
		var offset=scroll_doc1.scrollTop
		var down=target>=offset
		var hwin=doc.clientHeight	// hauteur de la fenêtre
		var stepdiv=2000/hwin
		if(down) {
			// scroll vers le bas : si la cible est hors de portée on s'arrête au scroll maxi possible
			// nécessaire pour avoir l'effet de ralentisement
			var max_target=Math.max(scroll_doc1.scrollHeight,doc.clientHeight)-doc.clientHeight	// scroll maxi possible
			target=Math.min(max_target,target)
		}
		var distance=Math.abs(target-offset),step=1, old_offset=offset-1
		setTimeout('do_scroll('+target+','
			+distance+','+old_offset+','+offset+','+stepdiv+','+down+')',30)	// IE6/7 : blocage du scroll pendant 1/2 sec après le premier
																				// Avec ce timeout, le premier arrive APRES le blocage. Pas top, mais mieux
	}
}

function do_scroll(target,distance,old_offset,offset,stepdiv,down) {
	if(distance) {
		old_offset=offset
		var step=Math.round(distance/stepdiv)
		if(step<1) step=1
		offset+=down? step : -step
		self.scrollTo(0,offset)
		offset=scroll_doc1.scrollTop
		distance=Math.abs(target-offset)
		if(distance && old_offset!=offset)
			setTimeout('do_scroll('+target+','+distance+','+old_offset+','+offset+','+stepdiv+','+down+')',30)
	}
}

