	//time Series Object
	function timeSeries(A,sec)
	{
		//A is an array
		//sec is time interval in seconds
		//example : sec=300 means the record in A is recorded at 5 minutes interval

		//timeSeries Object methods
		this.showMe=showMe;
		this.sortMe=sortMe;
		this.getRate=getRate;	
		this.getCumulative=getCumulative;
		this.gchart=gchart;

		//timeSeries Object properties	
		this.getTotal=getTotal;

		function getArray()
		{	
			alert('getArray()....');
			return A;
		}

		function showMe(factor)
		{
			console.log('timeSeries Object . showMe()...');
			var msg='';
			for(var k=0;k<A.length;k++){msg=msg+eval(sec*k/factor)+' : '+A[k]+'\n';}
			return msg;
		}

		function getTotal()
		{	alert('getTotal()...')
			var total=0;
			for(var i=0;i<A.length;i++)
			{total=total+A[i];}
			return total;
		}


		function getRate(factor)

		{	alert('getRate()...');
			//Returns an array of Increment Rate in per second when factor=1
			//factor converts to other units
			//for example factor=60 for per minute
			var B=new Array();
			for(k=0;k<A.length;k++)
			{	
				if(k==0)
				{B[k]=A[k]/sec*factor;}

				else
				{B[k]=(A[k]-A[k-1])/sec*factor;}
			}
			var C=new timeSeries(B,sec);
			return C;
		}

		//sort descending
		function sortMe()
		{
			alert('sortMe()...');
			var B=new timeSeries(A.sort(function(a,b){return b - a}),sec);
			return B;
		}

		function getCumulative()
		{
			alert('getCumulative()...');
			var B=new Array();
			for(var k=0;k<A.length;k++)
			{	var sum=0;
				for(var j=0;j<=k;j++)
				{sum=sum+A[j];}
				B[k]=sum;
			}
			var C=new timeSeries(B,sec);
			return C;
		}
		
		function gchart(xfactor)
		{
			//returns html image tag
			//usage
			//$('body').prepend(timeSeriesObject.gchart(1)+'<br/>');
			var msg=('function timeSeries.gchart(xfactor)..');

			var a='<img src="http://chart.apis.google.com/chart?cht=lxy&chs=300x225&chd=';


			//find maxvalues
			var max_y=Math.max.apply({},A)*1.10;	//needed for scaling
			var max_x=sec*(A.length-1);
			var msg=msg+'\n'+('max X = '+max_x+'\nmax Y = '+max_y);
			alert(msg);

			//create x-data points
			var b='t:';
			for(var k=0;k<A.length;k++)
			{	//x-axis
				if(k==A.length-1){var commaChar='';}
				else{var commaChar=',';}
				b=b+eval(k*sec*100/max_x)+commaChar;
			}
			b=b+'|';

			for(var k=0;k<A.length;k++)
			{	//y-axis
				if(k==A.length-1){var commaChar='';}
				else{var commaChar=',';}

				b=b+A[k]*100/max_y+commaChar;
			}
			
			var c='&chco=3072F3,ff0000,00aaaa&chls=1,10,2&chg=20,50&chtt=';

			var d='TimeSeries+Chart';	//title control
			var e='&chxt=x,y,t,r&chxr=';

			var f='0,0,'+max_x/60;	//x-axis label
			var g='|1,0,'+max_y;	//y-axis label

			var h='&chm=s,FF0000,0,-1,5|s,0000ff,1,-1,5|s,00aa00,2,-1,5" alt="gchart error"/>';

			var chartTag=a+b+c+d+e+f+g+h;
			return chartTag;
		}
	}