/* - - - - - - - - - - - - - - - - - - - - - - -
 JavaScript
 lundi 27 juillet 2009 09:27:13
 HAPedit 3.1.11.111
 - - - - - - - - - - - - - - - - - - - - - - - */

// v(0) v(1) v(2) ... v(N-1)
// ==v(0) -> i=0
// v(I-1)<x<=v(I) -> i=I
// <v(0) -> i=-1
// >v(N-1) -> i=-2
var _INDEXOFCONTAININGINTERVAL_UNDERLOWERBOUND= -1;
var _INDEXOFCONTAININGINTERVAL_OVERUPPERBOUND = -2;
var _INDEXOFCONTAININGINTERVAL_EMPTYINTERVAL = -3;
function utils_indexOfContainingInterval(v_,v,start,N)
{

 if(start==undefined)
 start = 0;
 if(N==undefined)
 N = v_.length;

 //this.intervals = v_;
 //this.val = v;

 //var N = this.intervals.length;
 if (N == 0)
 return _INDEXOFCONTAININGINTERVAL_EMPTYINTERVAL;
 //else if(this.val<this.intervals[0])
 else if(v<v_[start])
 return _INDEXOFCONTAININGINTERVAL_UNDERLOWERBOUND;
 //else if(this.val>this.intervals[N-1])
 else if(v>v_[N-1])
 return _INDEXOFCONTAININGINTERVAL_OVERUPPERBOUND;
 //else if(this.val==this.intervals[0])
 else if(v==v_[0])
 return 0;
 else
 {
 //for(var i=1;i!=N;i++)
 // if(this.val<=this.intervals[i])
 // return i;
 var d = (N - 1)*.5;
 var i = start+Math.floor(d);
 while (d > .5)
 {
 //d=Math.ceil(d);
 //if (this.val == this.intervals[i])
 if (v == v_[i])
 return i;
 else
 {
 d *= .5;
 //if (this.val < this.intervals[i])
 if (v < v_[i])
 i-=Math.ceil(d);
 else
 i+=Math.ceil(d);
 }
 d=Math.floor(d);
 }
 return i;
 }
}

//fonction prend en entrée un vector de longueur paire
//et renvoie l'index de l'interval où se trouve le montant
//ex: vector=[1,4,5,8,9,12];
//si montant=2 => résultat = 0;
//si montant=6 => résultat = 1;
//si montant=11 => résultat = 3;
//si montant=5 => résultat = 1;
//les intervals: [1,4],[5,8],[9,12]
//à rajouter: check si vector vide, impair;
//si le montant n'existe pas dans les intervals
function utils_getIndexTEGFromInterval(vector,amount){
 var j = 0;
 for(var i=0;i!=vector.length;i+=2){
 if(amount>=vector[i] && amount <= vector[i+1]){
 break;
 }
 else{
 j++;
 }
 }
 return j;
}


function utils_getURLParam(strParamName){
 var strReturn = "";
 var strHref = window.location.href;
 if ( strHref.indexOf("?") > -1 ){
 var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
 var aQueryString = strQueryString.split("&");
 for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
 if (
 aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ){
 var aParam = aQueryString[iParam].split("=");
 strReturn = aParam[1];
 break;
 }
 }
 }
 return unescape(strReturn);
}

function utils_nearestValIndex(array, val){
 var valIndex = 0;
 var currentVal = array[0];
 var smallestInterval = Math.abs(val - currentVal);

 for(var i=0;i<array.length;i++){
 currentVal = array[i];
 if(Math.abs(val - currentVal) < smallestInterval){
 smallestInterval = Math.abs(val - currentVal);
 valIndex = i;
 }
 }
 return valIndex;
}


//appelée par simGen_racDataValidator(), handleResult_showResultRac()
//cf bug 745
//si 21500, 144 mois possible
//donc, proposer 22000, pas 21000 qui donne zéro €/mois
function utils_lastNearestValIndex(array, val){
 var valIndex = 0;
 var currentVal = array[0];
 var smallestInterval = Math.abs(val - currentVal);

 for(var i=0;i<array.length;i++){
 currentVal = array[i];
 if(Math.abs(val - currentVal) <= smallestInterval){
 smallestInterval = Math.abs(val - currentVal);
 valIndex = i;
 }
 }
 return valIndex;
}

function utils_segmentValIndex(array, val){
 var valIndex = -1;
 for(var i=0;i<array.length;i+=2){
 if( val >= array[i] && val <= array[i+1]){
 valIndex = i/2;
 }
 }
 return valIndex;
}

function utils_minDouble(list){
 var min = list[0];
 for(var d=0;d<list.length;d++)
 {
 if(list[d] != 0.0)
 min = Math.min(list[d], min);
 }
 return min;
}

function utils_maxDouble(list){
 var max = list[0];
 for(var d=0;d<list.length;d++)
 {
 if(list[d] != 0.0)
 max = Math.max(list[d], max);
 }
 return max;
}

//pour un montant donnée, retourne toutes les mensualités
//associées du simulateur
function utils_getMpListForAmount(sim, amount){
 sim.amountIndex = utils_lastNearestValIndex(sim.amounts, amount);
 var j = 0;
 var res = new Array();
 for(var i=0; i<sim.monthlyFees.length; i+= sim.amounts.length){
 res[j] = sim.monthlyFees[i + sim.amountIndex];
 j++;
 }
 return res;
}

function utils_floatToStr(number,decimalsLength)
{
 var pwOfTen = Math.pow(10,decimalsLength);
 var nmbr = Math.round(number*pwOfTen)/pwOfTen;
 var str = nmbr.toString();
 var strSplit = str.split (".", 2);

 strToTreat = strSplit[0];
 var strLength = strToTreat.length;
 var strArray = [];
 while((strLength-=3)>0)
 {
 strArray.unshift(strToTreat.substr(strLength,3));
 }

 strArray.unshift(strToTreat.substr(0,3+strLength));

 if (strSplit.length == 2)
 {
 var dot =".";
 var intPart = strArray.join(" ");
 var decPart = strSplit[1];
 while(decPart.length < decimalsLength){
 decPart = decPart.concat("0");}
 str = intPart.concat(dot,decPart);

 }

 else
 {
 str = strArray.join(" ");
 if(decimalsLength>0)
 str = str.concat(".");
 for(var i=0;i<decimalsLength;i++){
 str = str.concat("0");}
 }

 return str;


}

function utils_bkgShift(elemnt,xOff,yOff)
{
 elemnt.style.backgroundPosition=xOff+" "+yOff;
}

function utils_crsbrwfix_getEventTarget(evnt)
{
 return (evnt.target) ? evnt.target : evnt.srcElement;
}
function utils_openPrintPage(url,params)
{
     if(params!=null)
     {
         var qestionMark_idx = url.indexOf('?');
         if (qestionMark_idx == -1)
         {
             if (params.charAt(0) != '?')
            url += '?';
         }
         else if (qestionMark_idx != elmnt.href.length - 1 && params.charAt(0) != '&')
         {
            url += '&';
         }
         url+=params;
         url+="&image="+IMAGE_AGENCE;
     }
     window.open(url, "title", "menubar=no, status=no, scrollbars=1, menubar=no, resizable=1, width=940px, height=1024");
}


function appendCoToUrl(url)
{
    return (co=="null")?url:url+"&origRecr="+co;
}

function utils_getElementsByName_iefix(tag, name)
{
     var elem = document.getElementsByTagName(tag);
     var arr = new Array();
     for(i = 0,iarr = 0; i < elem.length; i++) {
         att = elem[i].getAttribute("name");
         if(att == name) {
            arr[iarr] = elem[i];
            iarr++;
         }
     }
     return arr;
}

function utils_isInteger(s){
    if (s == "") return false;
    for (i = 0 ; i < s.length ; i++) {
        if ((s.charAt(i) < '0') || (s.charAt(i) > '9')) return false
    }
    return true;
}

