/*scs_rainfall.js
SCS 24-HOUR RAINFALL DISTRIBUTION
USE AT YOUR OWN RISK
NO RESTRICTION TO COPY, MIDIFY OR DISTRIBUTE
*/

function scs_i(t_hour,distribution_type,depth_24hr,del_t_min)
{
	//SCS RAINFALL INTENSITY AT A GIVEN TIME
	var Pt=scs_rainfall_incremental_depth(t_hour,distribution_type,depth_24hr,del_t_min);
	return Pt/(del_t_min/60.0);
}


function scs_rainfall_incremental_depth(t_hour,distribution_type,depth_24hr,del_t_min)
{
	//RETURNS INCREMENTAL DEPTH FOR THE TIME STEP CHOSEN
	var P2=scs_depth(t_hour,distribution_type,depth_24hr);

	var T1=t_hour-del_t_min/60;	//previous time
	var P1=scs_depth(T1,distribution_type,depth_24hr);
	
	if(T1>=0)
	{	return P2-P1;	}
	else
	{
		return 0; //this is before the starting time
	}
}


function scs_other_duration_k(short_duration_hr,type,del_t)
{
	//RETURNS THE MULTIPLICATION FACTOR FOR SHORT DURATION SCS CURVE
	//THIS HAS TO BE OBTAINED FROM THE  K FACTORS OF 24HR DURATION
	//LOGIC
	var A=new Array();
	for(var i=0;i<=24/(del_t/60);i++)
	{
		A[i]=scs_rainfall_incremental_depth(i*del_t/60,type,1000,del_t);
	}
	var K=new Array();
	K=A.max_consequtive_sum(short_duration_hr/(del_t/60));

	//K must be normalized by total sum
	var L=new Array();
	for(i=0;i<K.length;i++)
	{	
		L[i]=K[i]/sum(K); //normalize
	}
	return L;
}


function intense_portion(t_hour,type,del_t)
{
	//Which is the most intense period of rainfall?
	//Returns the beginning point of that intense period
	var i=0;
	var t=0;
	var a=0;
	var max=0;
	var K=new Array();	//K holds scaling factor for each 5 minute interval

	for(var i=0;i<=(24*60/del_t-t_hour/del_t);i++)
	{
		var kDepth=scs_k((i+t_hour/del_t)*del_t/60,type)-scs_k(i*del_t/60,type);
		if(kDepth>max){max=kDepth;}
		 document.write(i+"==="+i*del_t+"=========="+kDepth+"========"+max+"<br>");
	}
	return max;
}
function scs_depth(t_hour,distribution_type,depth_24hr)
{
	//RETURNS CUMULATIVE SCS RAINFALL DEPTH UPTO t_hour FROM THE BEGINNING OF THE STORM
	//UNIT SAME AS THAT OF depth_24hr
	return scs_k(t_hour,distribution_type)*depth_24hr;
}


function scs_k(t_hour,distribution_type)
{
	//returns the multiplication factor to obtain scs rainfall depth for time=t_hour
	switch (distribution_type.toUpperCase())
	{
	case "I":
	{var K= new Array(0,8,17,26,35,45,55,65,76,87,99,112,125,140,156,174,194,219,254,303,515,583,624,654,682,706,728,748,766,783,799,815,830,844,857,870,882,893,905,916,926,936,946,956,965,974,983,992,1000);}
	  break;
	case"IA":
	{var K=new Array(0, 10, 22, 36, 51, 67, 83, 99, 116, 135, 156, 179, 204, 233, 268, 310, 425, 480, 520, 550, 577, 601, 623, 644, 664, 683, 701, 719, 736, 753, 769, 785, 800, 815, 830, 844, 858, 871, 884, 896, 908, 936, 946, 956, 965, 974, 983, 992, 1000);}
	  break;
	case "II":
	{var K=new Array( 0, 5, 11, 17, 23, 29, 35, 41, 48, 56, 64, 72, 80, 90, 100, 110, 120, 133, 147, 163, 181, 203, 236, 283, 663, 735, 776, 804, 825, 842, 856, 869, 881, 893, 903, 913, 922, 930, 938, 946, 953, 959, 965, 971, 977, 983, 989, 995, 1000);}
	  break;
	default:
	{var K=new Array(0, 5, 10, 15, 20, 26, 32, 37, 43, 50, 57, 65, 72, 81, 89, 102, 115, 130, 148, 167, 189, 216, 250, 298, 600, 702, 751, 765, 811, 830, 848, 867, 886, 895, 904, 913, 922, 930, 939, 948, 957, 962, 968, 973, 979, 984, 989, 995, 1000);}
	}



	return K.interpolate(t_hour*2)/1000.0;
}

/*Disabled function 
//Moved to array.ja
Array.prototype.interpolate=function(x)
{
	//interpolation of y at x WHERE x is not necessarily an integer
	return this[Math.floor(x)]+(this[Math.ceil(x)]-this[Math.floor(x)])*(x-Math.floor(x));
}
*/
