function ErlangB(As, Churn){
	var B;
     if(As < 0 || Churn < 0){
	               B = 0;
 } else {

	 var Iterations = Constrain(As, 1, As);
     var Val = Churn;
     var LastVal = 1;
     for(var Count =1; Count<= Iterations; Count++){
          B = (Val * LastVal) / (Count + (Val * LastVal));
          LastVal = B;    
}
}
     return Constrain(B, 0, 1)

}


function ErlangC(As, Churn) {
	var B;
	var C;
     if(As < 0 || Churn < 0){
	      C = 0;
} else {
	B = ErlangB(As, Churn);
	C = B / ((B * Churn / As) + (1 - (Churn / As)));
}
     return Constrain(C, 0, 1);
}


function ErlangAs(SLA, Threshold, Calls, Sec, AHT){
		Calls = Math.abs(Calls);
		AHT = Math.abs(AHT);
		Threshold = Math.max(0,Threshold);
		SLA = Constrain(SLA, 0 ,1);
	   var As;
	if ((Calls*AHT) <= 0){
		As=0;		
	} else {
		
     var Genesis = Calls * 3600 / Sec;
     var Armageddon = 3600 / AHT;
     var Churn = Genesis / Armageddon;
     var Erlangs = (Genesis * AHT) / 3600;
     
     if(Erlangs < 1){     
     As = Erlangs;
} else {
	
//     As = Math.floor(Erlangs);
//     As = Math.max(Churn,1);
     As = Erlangs;
     Occ = Churn / As;
     while(Occ >=1){
     As = As + .1;
     Occ = Churn / As;
	   }
//     alert(As);
//     As = Math.max(As, 1);
     var Iterations = As * 10000;
//alert(Iterations);     
     for(Countr = 0; Countr < Iterations; Countr++){
          Occ = Churn / As;
          if(Occ < 1){
               TempAs = As;
               C = ErlangC(TempAs, Churn);
//               alert(C);
               SLQ = 1 - C * Math.exp((Churn - TempAs) * Threshold / AHT)
               //SLQ = (1 - C) + ((Threshold / (QTime * 3600)) * C);
               //SLQ = Math.max(SLQ, 0);
  //             alert(SLQ);
  //             alert(SLA);
               if(SLQ >= SLA){
	//              alert(SLQ);
	             Countr = Iterations;
              }
              if(SLQ > 0.99999){
	           //   Count = Iterations;
              }
      }
          
          if(Countr != Iterations){
//	          alert(Counter);
	           As = As + .1;
	       }
		}    
	}
}

As = Math.round(As*10,0)/10;
return As;
}

function Constrain(Val, mn, mx){
	if(Val<mn){Val=mn;}	
	if(Val>mx){Val=mx;}
	return Val;
}

