
function format(x, chap)
{
    var sepg = 3, sepg = ' ', sepd = ',', chpg = 3;
    x = "" + x;
    var str = "";
    var w = Math.pow(10, chap);
    var s = "" + Math.round( x * w ) / w;


    if (chap > 0)
    {
        var i = s.indexOf(".");
        if ( i == -1 ) s += ".";
        var i = s.indexOf(".");
        i = s.substring(i+1).length;

        while (i < chap) { s += "0";  i++; }
    }
    i = s.indexOf(".");
    if ( i == -1 ) i = s.length;
    var k = s.substring( 0, i );
    var k2 = s.substring( i + 1 );
    var n = 0;
    for ( var i = k.length - 1 ; i >= 0 ; i-- )
    {
        if (k.charAt(i)!='-') n++;
        str = k.charAt(i) + str;

        if (n >= chpg && i > 0)
        {
            str = sepg + str;
            n = 0;
        }
    }

    if ( chap > 0 && x.indexOf(".") != -1)
        str += "." + k2;

    return str.split(".").join(sepd);
}

/* ************ fonctions utiles pour le constructeur simulateur ************ */
function s_findObj(n,c)
{
	var x,d = c ? c.document : document;
	if ( !(x = d[n] ) && d.all )
		x = d.all[n];
	if( !x && d.getElementById)
		x = d.getElementById(n);
	return x;
}

function S_getBounds(obj)
{
	obj.X = 0;
	obj.Y = 0;
	obj.W = obj.offsetWidth;
	obj.H = obj.offsetHeight;
	var tempObj = obj;
	while ( tempObj.tagName != 'BODY' )
	{
		obj.X += tempObj.offsetLeft;
		obj.Y += tempObj.offsetTop;
		if ( !tempObj.offsetParent )
			break;
		tempObj = tempObj.offsetParent;
	}
	return obj;
}

/* ************ capture mouse down et up document ************ */
function getMouseEvent(obj)
{
	if ( self.objToDrag == null )
		self.objToDrag = false;
	var NavEvent, x_mouse, y_mouse, retVal;
	NavEvent = self.event || getMouseEvent.caller.arguments[0];
	retVal = NavEvent.returnValue;
	typevent = NavEvent.type;
	var sx = self.scrollX || (document.body.scrollLeft + document.documentElement.scrollLeft) || 0;
	var sy = self.scrollY || (document.body.scrollTop + document.documentElement.scrollTop) || 0;
	x_mouse = NavEvent.clientX + sx || NavEvent.x;
	y_mouse = NavEvent.clientY + sy || NavEvent.y;
	if ( typevent == 'mousedown' && obj )
	{
		objToDrag = obj;
		obj.x_in = x_mouse-obj.X;
		obj.y_in = y_mouse-obj.Y;
		if ( document.selection )
		{
			document.selection.empty();
			if ( /msie 4.+windows/i.test(navigator.userAgent) )
				self.scrollTo(sx,sy);
		}
		retVal = false;
		return retVal;
	}
	if ( typevent == 'mousedown' && objToDrag )
	{
		document.onmousemove = Function("return getMouseEvent(objToDrag)");
		objToDrag.activeIt(x_mouse - objToDrag.x_in, y_mouse - objToDrag.y_in);
		retVal = false;
		return retVal;
	}
	if ( typevent == 'mouseup' && objToDrag )
	{
		document.onmousemove = null;
		objToDrag.stopIt(x_mouse - objToDrag.x_in, y_mouse - objToDrag.y_in);
		objToDrag = false;
		retVal = true;
		return retVal;
	}
	if( typevent == 'mousemove' && objToDrag )
	{
		objToDrag.activeIt(x_mouse - obj.x_in, y_mouse - obj.y_in);
		retVal = false;
		return retVal;
	}
}

/* ************ Constucteur de reglette ************ */
// basid = nom du div de la reglette
// sens = h:horizontal, v:vertical
// valeurs = nom du tableau contenant les valeurs de la reglette (dans le doc html)
// basidvaleurs = nom des div affichant les valeurs de la reglette
// depart = position de la première valeur
// arrive = position de la dernière valeur
// objref = objet référent
// useIndexWith = nom de l'objet avec lequel utiliser l'index. Il sera alors créé AVANT (pendant en fait) la création de celui-ci
function scroller (basid, sens, valeurs, basidvaleurs, depart, arrive, objref, useIndexWith)
{
	var obj = s_findObj(basid);
	obj.affichelib = s_findObj("lib_" + basid + "affiche");
	obj.affichelib2 = s_findObj("lib_" + basid + "affiche2");
	obj.affichetaux = s_findObj("recap_teg");
	obj.inverse = false;
	obj.sens = sens;
	obj.basid = basid;
	obj.valeurs  = valeurs;
	obj.valeurstx = self.taux;
	obj.basidvaleurs = basidvaleurs;
	var n = obj.valeurs.length - 1, x = depart, locks = new Array();
	var d = Math.max(depart, arrive) - Math.min(depart, arrive);
	var p = depart < arrive ? d/n : -(d/n);
	if( depart > arrive )
		obj.inverse = true;
	for (var i=0; i<=n ; i++, x += p)
		locks[i] = Math.round(x);
	obj.pas = Math.abs(p);
	obj.locks = locks;
	obj.index = 0;
	obj.objref = objref;
	obj.useIndexWith = useIndexWith;
	if ( useIndexWith )
		eval(useIndexWith + "(" + obj.index + ")");
	obj.HG = s_findObj(basid + "_1"); // up/left
	obj.B = s_findObj(basid + "_2"); // barre
	obj.BD = s_findObj(basid + "_3"); // down/right
	obj.HG.ref = obj.B.ref = obj.BD.ref = obj;
	obj.minPos = (sens == 'v') ? obj.B.offsetTop + obj.HG.offsetHeight : obj.B.offsetLeft + obj.HG.offsetWidth;
	obj.basePx = obj.minPos;
	obj.maxPos = (sens == 'v') ? obj.offsetHeight - obj.BD.offsetHeight : obj.offsetWidth - obj.BD.offsetWidth;
	obj.actionFrom = null;
	obj.BD.onmousedown = obj.HG.onmousedown = obj.B.onmousedown = Function("this.ref.actionFrom = this;");
	obj.onmousedown = Function("S_getBounds(this); return getMouseEvent(this);");
	obj.divs = new Array();
	for ( var i = 0; i < obj.locks.length; i++ )
	{
		var div = s_findObj(String(basidvaleurs + i));
		obj.divs[i] = div;
		obj.divs[i].ref = obj;
		obj.divs[i].onclick = Function("this.ref.activeIt(0, 0, " + i + "); this.ref.stopIt();");
        div.innerHTML = obj.valeurs[i] + " &euro;";
	}
	obj.affichelib.innerHTML = obj.valeurs[obj.index] + " &euro;";
	obj.affichelib2.innerHTML = obj.valeurs[obj.index] + " &euro;";
	obj.affichetaux.innerHTML = format(obj.valeurstx[self.montmens[obj.index][2]], 1) + " %"
	obj.divs[obj.index].style.visibility = "visible";
	obj.sens == 'v' ? obj.B.style.top = obj.locks[0] + "px" : obj.B.style.left = obj.locks[0] + "px" ;
	obj.basePx = obj.sens == 'v' ? obj.B.offsetTop : obj.B.offsetLeft;
	obj.activeIt = function(x,y,px)
	{
		this.maxPos = (this.sens == 'v') ? this.BD.offsetTop - this.B.offsetHeight : this.BD.offsetLeft - this.B.offsetWidth;
		this.minPos = (this.sens == 'v') ? this.HG.offsetTop + this.HG.offsetHeight : this.HG.offsetLeft + this.HG.offsetWidth;
		var movePx;
		if ( this.actionFrom == this.HG )
			movePx = this.basePx - this.pas;
		else if ( this.actionFrom == this.BD )
			movePx = this.basePx + this.pas;
		else if ( this.actionFrom == this.B )
		{
			x = x - this.X;
			y = y - this.Y;
			movePx = (this.sens == 'v') ? (y + this.basePx) : (x + this.basePx);
		}
		else if ( px != null )
			movePx = px * this.pas + this.locks[0];
		else
			return;
	    movePx = movePx <= this.minPos ? this.minPos : movePx >= this.maxPos ? this.maxPos : movePx;
	    var tempIndex = Math.max(0, Math.min(this.locks.length - 1, Math.floor((movePx - this.locks[0] + (this.pas/2)) / this.pas)));
	    if ( this.inverse )
		tempIndex = Math.abs(tempIndex - (this.locks.length - 1));
	    if ( tempIndex != this.index )
	    {
		    this.divs[this.index].style.visibility = "hidden";
		    this.index = tempIndex;
		    this.divs[this.index].style.visibility = "visible";
		    if ( this.useIndexWith )
			    eval(this.useIndexWith + "("+this.index+")");
	    }
	    this.sens == 'v' ? obj.B.style.top = movePx + "px" : obj.B.style.left = movePx + "px" ;
	    if ( this.objref && this.objref.updateIt )
		    this.objref.updateIt(this.index);
	    if ( this.onRelease )
	        this.onRelease(this.index);
	    this.affichelib.innerHTML = this.valeurs[this.index] + " &euro;";
	    this.affichelib2.innerHTML = this.valeurs[this.index] + " &euro;";
    }
    obj.updateIt = function(idx)
    {
        if (this.basid == "mensualite")
        {
            idx = self.montmens[idx][1];
            if (this.index != idx)
            {
                this.activeIt(0,0,idx);
                this.stopIt();
            }  
        }
        else if (this.basid == "montant")
        {
            tempIdx = this.index;
            while (montmens[tempIdx][1] < idx)
                tempIdx++;
            while (montmens[tempIdx][1] > idx)
                tempIdx--;
            if ( tempIdx != this.index)
            {
                this.activeIt(0,0,tempIdx);
                this.stopIt();
            }
        }
				this.affichetaux.innerHTML = format(self.taux[self.montmens[Objectmontant.index][2]], 1) + " %";
    }
    obj.stopIt = function(x,y)
    {
        this.sens == 'v' ? this.B.style.top = this.locks[this.index] + "px" : this.B.style.left = this.locks[this.index] + "px";
        this.basePx = (this.sens == 'v') ? this.B.offsetTop : this.B.offsetLeft;
        this.actionFrom = null;
        if ( this.objref && this.objref.updateIt )
            this.objref.updateIt(this.index);
        if ( this.onRelease )
            this.onRelease(this.index);
        this.affichelib.innerHTML = this.valeurs[this.index] + " &euro;";
        this.affichelib2.innerHTML = this.valeurs[this.index] + " &euro;";
    }
    return obj;
}

onload = function()
{
	/* creation de la reglette montant (pour future référence) */
	Objectmontant = new scroller('montant', 'h', self.montants, 'montant', 28, 245, false, false);
	/* creation de la reglette mensualite */
	Objectmensualite = new scroller('mensualite', 'h', self.mensualites, 'mensualite', 28, 245, Objectmontant, false);
    /* remplacement de la reglette montant (définitive) */
    Objetmontant = new scroller('montant', 'h', self.montants, 'montant', 28, 245, Objectmensualite, false);
    /* capture des evenements souris down et up */    
    document.onmousedown = Function("return getMouseEvent();");
    document.onmouseup = Function("getMouseEvent();");
}


