// 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;
        

	}


	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;
}