var m_MaxValue = -99999, m_MinValue = 99999, nInc, nMnt, ryLR;

function AdjustFRigthScaleGrid( dMaxValue, dMinValue,  num)
{
	var volary  = new Array();
	var arysize = num;	
	var temp = "";		

	if (dMinValue < 0)
	{
				var dT = 0.0;
				var uptemp  = Math.abs(dMaxValue);
				var lowtemp = Math.abs(dMinValue);
		
				var up = Math.max(Math.abs(uptemp), Math.abs(lowtemp));
				var dv= up/2;
				if (num > 5 )
					dv= up/3;
				if (lowtemp < dv)
					lowtemp = dv;
				var arr = "";
			
				while (dT < uptemp+dv)
				{
				    if (arr == "")
				      arr = toTwo(dT);
				    else
					  arr = arr +"|"+toTwo(dT) 
					dT  = dT + dv;
				}			
				dT = dv;
				while (dT <lowtemp+dv)
				{		
					arr = ("-"+ toTwo(dT)) + "|" +arr;	
					if (dT >= Math.abs(dMinValue))
						break;
					dT = dT + dv;				
				}
				var strArr = arr.split('|');
				arysize = strArr.length;
				for (var i=0;i<arysize;i++)
				{				
					var strTemp= strArr[i];	
					if (temp == "" )
					     temp = strTemp;	
					else
						 temp = temp +"|"+ strTemp;	
				}
	}
	else
	{	

				var uptemp  = dMaxValue;
				var lowtemp = dMinValue;			
				var t = (uptemp - lowtemp)/(arysize-1);	
			//	var ss = t+"";
			//	ss = ss.substring(0, ss.indexOf("."));		
				//t = eval(ss);	
				for (var k=0; k< arysize; k++)
				{
					volary[k]= lowtemp + k*eval(t);
				}
				temp = "";
				for (var i=0;i<volary.length;i++ )
				{
					var fITemp= toTwo(volary[i]);
					if (temp == "")
						temp = fITemp;	
					else
						temp = temp +"|"+ fITemp;	
				}
	}
	return temp;
}
function GetDColumn(sdates, points, width)
{	
		var dates = sdates.split('|');
		var DataPointRatio   = 0;
		var ColumnPointVect  = new Array();
		var ColumnLabel      = new Array();
		var ColumnPointVectD = new Array();
		var ColumnLabelD     = new Array();
	    var DataPointRatio   = width/points;
		var PriceGridXStart  = 65;
		for (var i= 0; i<dates.length; i++)
		{
			ColumnPointVectD[i]= (DataPointRatio*i+PriceGridXStart);
			ColumnLabelD[i] = dates[i];	
		}
		ColumnPointVectD[ColumnPointVectD.length]= 565;		  
	    ColumnLabelD[ColumnLabelD.length] = "";	
		var Col = "";
		var Dat = "";	
		for ( i=0; i< ColumnPointVectD.length; i++)
		{
			   if (Col == "")
			   {
			      Col = ColumnPointVectD[i];
			      Dat = ColumnLabelD[i];	
				}else{
				  Col = Col + "|"+ColumnPointVectD[i];
				  Dat = Dat  +"|" +  ColumnLabelD[i];	
				}				
		}
		return Dat+"^"+ Col;
}
function GetColumn(sdates, xStart, width)
{		
		var nStart = 0;
		var dates = sdates.split('|');
		//  DataPointRatio is calculated with total data points minus one
		var DataPointRatio   = width / dates.length;
		var PriceGridXStart  = xStart;
	    var ColumnPointVect  = new Array();
		var ColumnLabel      = new Array();
		var ColumnPointVectD = new Array();
		var ColumnLabelD     = new Array();
	 //	alert(sdates)
		var nYear  = GetYears(dates);
		var nMonth = GetMonths(dates);	
		var old= parseInt(GetYear(dates[nStart]));
		var i =0;
		var n =0;
		var dx = 1;		
		if (nYear > 11 )
			dx = Math.ceil((nYear/10));
    	var xstr = "";
		var xlabels= "";
		var year = "";
		var Col = "";
		var Dat = "";
	 	//alert("dx: "+dx  +"  "+dates.length +" m "+ nMonth +"  y=  "+  nYear)
		if (dates.length < 14 )
		{
		   		old  = GetDay(dates[dates.length-1]);	
				var mon = GetMonth(dates[dates.length-1]);			
				var m = 0;
				for (i= 0; i<dates.length; i++)
				{
				   ColumnPointVectD[i]= parseInt(DataPointRatio*i+PriceGridXStart);
				   if (dates[i].indexOf(",") < 0)
				       ColumnLabelD[i] =  toMonth(GetMonth(dates[i])) +" " +GetDay(dates[i]);		
				   else
				       ColumnLabelD[i] =  toMonth(GetMonth(dates[i]));
				}
				ColumnPointVectD[dates.length-1]=  565;
				if (dates[dates.length-1].indexOf(",") < 0)
				     ColumnLabelD[dates.length-1 ]   =  toMonth(GetMonth(dates[dates.length-1])) +" " +GetDay(dates[dates.length-1]);	
				else	
			         ColumnLabelD[dates.length-1 ]   =  toMonth(GetMonth(dates[dates.length-1]));
			    for (i= 0; i<ColumnLabelD.length; i++)
				{
					if (Col == "")
					{
						Col = ColumnPointVectD[i];
						Dat = ColumnLabelD[i];	
					}else{
						Col = Col  + "|"+ ColumnPointVectD[i];
						Dat = Dat  +"|" + ColumnLabelD[i];	
					}
				}
				return Dat+"^"+ Col;
						
		}else if (dates.length < 28 )
		{
		        ColumnPointVectD[0]= 565;		  
		   		old  = GetDay(dates[dates.length-1]);	
				var mon = GetMonth(dates[dates.length-1]);
			    ColumnLabelD[0] = toMonth(mon) +" " +old;				
				var m = 1;
				for (i= dates.length-1; i> 0; i--)
				{
				    if (i%2 == 0)
				       continue;
				    ColumnPointVectD[m]= parseInt(DataPointRatio*(i+1)+PriceGridXStart);
					ColumnLabelD[m] =  toMonth(mon) +" " +old;		
					m++;	
					old  = GetDay(dates[i]) ;
					mon  = GetMonth(dates[i]);	
				}
				ColumnPointVectD[m]= PriceGridXStart;
				ColumnLabelD[m] =  toMonth(mon) +" " +old;		
						
		}else if (nMonth <= 1 && nYear <= 1)
		{
		        ColumnPointVectD[0]= 565;
		  
		   		old  = GetDay(dates[dates.length-1]);	
				var mon = GetMonth(dates[dates.length-1]);
			    ColumnLabelD[0] = toMonth(mon) +" " +old;				
				var m = 1;
				for (i= dates.length-1; i> 0; i--)
				{
				    if (dates.length > 14 && i%2 == 0)
				       continue;
				  	if (GetMonth(dates[i]) != mon)
					{
					   ColumnPointVectD[m]= parseInt(DataPointRatio*(i+1)+PriceGridXStart);
					   ColumnLabelD[m] =  toMonth(mon) +" " +old;		
					   m++;			
					}
					old  = GetDay(dates[i]) ;
					mon  = GetMonth(dates[dates.length-i]);	
				}
				ColumnPointVectD[m]= PriceGridXStart;
				ColumnLabelD[m] =  toMonth(mon) +" " +old;	
		}else if (nMonth <= 2 && nYear < 2)
		{
		        ColumnPointVectD[0]= 565;		  
		   		old  = GetDay(dates[dates.length-1]);	
				var mon = GetMonth(dates[dates.length-1]);
			    ColumnLabelD[0] = toMonth(mon) +" " +old;				
				var m = 0;
				for (i= dates.length-1; i>= 0; i--)
				{
				  //  if (dates.length > 14 && i%dx == 0)
				  //     continue;
				    if (GetMonth(dates[i]) != mon)
				    {
						ColumnPointVectD[m]= parseInt(DataPointRatio*(i+1)+PriceGridXStart);
						ColumnLabelD[m] =  toMonth(mon) +" " +old;		
						m++;
					}
					old  = GetDay(dates[i]) ;
					mon  = GetMonth(dates[i]);	
				}
			
				ColumnPointVectD[m]= PriceGridXStart;
				ColumnLabelD[m]= toMonth(mon) +" " +old;	
			
		}else if (nYear < 3 )
		{
				var mon = GetMonth(dates[dates.length-1]);	
				year = GetYear(dates[dates.length-1]);	
				ColumnPointVectD[0]= 565;
		        ColumnLabelD[0] = " ";			
				var m = 1;
				for (i= dates.length-1; i>= 0; i--)
				{
				  	if (GetMonth(dates[i]) != mon)
					{
					   ColumnPointVectD[m]= parseInt(DataPointRatio*i+PriceGridXStart);
					   ColumnLabelD[m] = toMonth(mon)+" "+year.substring(2);		
					   m++;				
					}
					mon  = GetMonth(dates[i]);
					year = GetYear(dates[i]);	
				}
				if(ColumnPointVectD[m-1] - PriceGridXStart > 32)
				{
					ColumnPointVectD[m]= PriceGridXStart;
					ColumnLabelD[m] = toMonth(mon)+" "+year.substring(2);
				}	
		}else if (nYear <= 11)
		{
			    ColumnPointVectD[0]= 525;
		        ColumnLabelD[0] = "";	
				old  = parseInt(GetYear(dates[dates.length-1]));	
				n = 0;
				var m =1;
				for (i= dates.length-1; i>= 0; i--)
				{
				    if (i>=0 &&  n == dx && parseInt(GetYear(dates[i])) != old)
					{
					   ColumnPointVectD[m]= parseInt(DataPointRatio*i+PriceGridXStart);
					   ColumnLabelD[m] = (old);		
					   m++;				
					}					
					if (  n == dx)
						n = 0;
					if (n < dx)
						n++;
					old  = parseInt(GetYear(dates[i]));
				}
				ColumnPointVectD[m]= PriceGridXStart;
				ColumnLabelD[m]= old;				  
		}else if (nYear > 11)
		{
				old  = parseInt(GetYear(dates[dates.length-1]));	
				n = 0;
				var m =0;
				ColumnPointVectD[m]= parseInt(DataPointRatio*(dates.length - curMonth)+PriceGridXStart);
				ColumnLabelD[m]    = (old);	
				for (i= dates.length-1; i>= 0; i--)
				{	
				    if (parseInt(GetYear(dates[i])) == old)
				       continue;
				    else if (parseInt(GetYear(dates[i])) != old && n <= dx)
				    {
				       n++;
				       old  = parseInt(GetYear(dates[i]));
				       continue;
				    }
				    n = 0;
				    m++;
				    ColumnPointVectD[m]= parseInt(DataPointRatio*i+PriceGridXStart);
				    ColumnLabelD[m] = (old);
					old  = parseInt(GetYear(dates[i]));
				}
			    ColumnPointVectD[m]= PriceGridXStart;
				ColumnLabelD[m]= old;	
		}
		
	//	alert("ColumnPointVectD.length=  " + ColumnPointVectD.length)
		for ( i=0; i< ColumnPointVectD.length; i++)
		{
			   if (Col == "")
			   {
			      Col = ColumnPointVectD[i];
			      Dat = ColumnLabelD[i];	
				}else{
				  Col = ColumnPointVectD[i] + "|"+ Col;
				  Dat = ColumnLabelD[i] +"|" + Dat;	
				}				
		}
		
		return Dat+"^"+ Col;
}
function toMonth(nMonthsStr)
{
	var MonthsStr= nMonthsStr;
	if (MonthsStr == "12")
		MonthsStr     = "Dec";
	else if (MonthsStr == "11")
		MonthsStr     = "Nov";
	else if (MonthsStr == "10")
		MonthsStr     = "Oct";
	else if (MonthsStr == "9")
		MonthsStr     = "Sep";
	else if (MonthsStr == "8")
		MonthsStr     = "Aug";
	else if (MonthsStr == "7")
		MonthsStr     = "Jul";
	else if (MonthsStr == "6")
		MonthsStr     = "Jun";
	else if (MonthsStr == "5")
		MonthsStr     = "May";
	else if (MonthsStr == "4")
		MonthsStr     = "Apr";
	else if (MonthsStr == "3")
		MonthsStr     = "Mar";
	else if (MonthsStr == "2")
		MonthsStr     = "Feb";
	else if (MonthsStr == "1")
		MonthsStr     = "Jan";	
	return MonthsStr;
}
function GetYear(str ) 
{
	var l= str;
	if (l.indexOf("S")>0)
			     l = l.substring(0, l.indexOf("S"));
	if (l.lastIndexOf("/") >= 0)
			     l = l.substring(l.lastIndexOf("/") +1);	
	else if (l.lastIndexOf(",") >= 0)
			     l = l.substring(l.lastIndexOf(",") +1);
	return l;													 
}
function GetYears(dates)
{
	var f = dates[0];
	var l = dates[dates.length-1];
	if (l.indexOf("S")>0)
		l = l.substring(0, l.indexOf("S"));
	if (f.lastIndexOf("/") >0)
	{
		f = f.substring(f.lastIndexOf("/") +1);
		l = l.substring(l.lastIndexOf("/") +1);	
	}else  if (f.lastIndexOf(",") >0)
	{
		f = f.substring(f.lastIndexOf(",") +1);
		l = l.substring(l.lastIndexOf(",") +1);	
	}
	return parseInt(l) - parseInt(f) + 1;	
														 
}
function GetMonths(dates)
{
	var f = dates[0];
	var l = dates[dates.length-1];
	var fy, ly;
	if (l.indexOf("S")>0)
		l = l.substring(0, l.indexOf("S"));
	if (f.lastIndexOf("/") >0)
	{ 
	    fy = f.substring(f.lastIndexOf("/")+1);
		ly = l.substring(l.lastIndexOf("/")+1);
		f = f.substring(0,f.indexOf("/"));
		l = l.substring(0,l.indexOf("/"));	
	}else  if (f.lastIndexOf(",") >0)
	{
	    fy = f.substring(f.lastIndexOf(",")+1);
		ly = l.substring(l.lastIndexOf(",")+1);
		f = f.substring(0,f.lastIndexOf(","));
		l = l.substring(0,l.lastIndexOf(","));	
	}
	if (fy == ly )
	    return parseInt(l) - parseInt(f) + 1;	
    else
        return 12 - parseInt(f) + parseInt(l) + 1;				 
}
function GetMonth(str ) 
{
	var l  = str;
	if (l.indexOf("S")>0)
		l = l.substring(0, l.indexOf("S"));
	if (l.indexOf("/") >= 0)
	{
		l = l.substring(0,l.indexOf("/"));	
				
	}else if (l.lastIndexOf(",") >= 0)
		l = l.substring(0,l.indexOf(","));			 	
	return parseInt(l);															 
}
function GetDay(str ) 
{
	var l  = str;
	if (l.indexOf("S")>0)
		l = l.substring(0, l.indexOf("S"));
	if (l.indexOf("/") >= 0)
	{
	    l = l.substring(l.indexOf("/")+1);	
		l = l.substring(0,l.indexOf("/"));	
	}	 	
	return parseInt(l);															 
}

function toTwo(d)
{
   d = ""+d;
   if (d.indexOf(".") < 0)
      return d+".00";
   else{
      d = d.substring(0, d.indexOf(".")+ 3 );
      return d;
   }  
}
function toFive(d)
{
   var t = d+"";
   if (t.indexOf(".") >= 0)
   {
     if (t.length - t.indexOf(".") > 5)
		t = t.substring(0, t.indexOf(".") + 6);
     
   }else
     t = t+".0";
   return t;
}
function doLog10(value)
{
	var log = log10(value);
	return log;
}
/**
 * Calculates and returns the base-10 logarithm of a number.
 *
 * @summary             base-10 logarithm
 * @author              Stuart Wigley
 * @author              Randolph Fielding
 * @version             1.2, 08/08/03
 * @interface           <code>Math.log10(fX)</code>
 * @param fX            a floating-point number greater than or equal to 0
 * @return              the base-10 logarithm of <code>fX</code>
 * @return              <code>NaN</code> if <code>fX < 0</code>
 * @return              <code>null</code> if an exception is encountered
 * @throws              IllegalArgumentException
 * @throws              TypeMismatchException
 */
function log10(fX) {

    try {

        var vError = null;
        var iNumArguments = arguments.length;

        if (iNumArguments != 1) {
            throw vError = new IllegalArgumentException('Math.log10', 1, iNumArguments);
        }

        if (typeof fX != 'number') {
            throw vError = new TypeMismatchException('Math.log10', 'number', typeof fX);
        }

        var fBase10Log = Math.LOG10E * Math.log(fX);
    }
    catch (vError) {

        if (vError instanceof Error) {
            vError.handleError();
        }
    }
    finally {

        return vError ? null : fBase10Log;
    }
}
function FindLogRangeY(rMax, rMin, nOS,nCH )
//----------------------------------------------------------------------------------------
//
//   Find Logarithmic Scale for Y Axis
//
//----------------------------------------------------------------------------------------             
{ 
			/// power of maxValue
	var  nPower = doLog10(rMax)  - 1;
	nPower      = parseInt(nPower);
	var nMin = Math.pow(10, parseInt(nPower));
	/// max value for 10k
	var nTP = (Math.pow(10, parseInt(nPower)) * Math.ceil(rMax/Math.pow(10, parseInt(nPower))));
	var nTMR, nTI = 1;    
	var nRatio  = new Array("0.2", "0.5", "0.7", "1.0", "2.0", "2.5", "3.0", "4.0", "5.0", "7.0","10.0");  
	  
	if (rMin > 1)
		nPower = doLog10(rMin);
	else
		nPower = 0; 
		/// min value for 10k
    var lk = Math.pow(10, parseInt(nPower)) * Math.floor(rMin/Math.pow(10, parseInt(nPower)));
	nTMR  = Math.min(lk, nOS);
	for (var i = 0; i < 10; i++)
	{
		nTI = nMin * nRatio[i];
		if ((nTP - nTMR)/nTI >= 2 && (nTP - nTMR)/nTI <= 6)
			break;
	}	
	if ((nTP - (nTP/nTI)) == 0)
		nTP = Math.floor(nTP/nTI)*nTI;  
	else
		nTP = (Math.floor(nTP/nTI) + 1)*nTI;  

		    
	var nTemp = nTMR;  
	var nInterval = Math.min(nTI, nMin);
	while(nTemp > 0)  
	{
		/// find ratio of 10k to min and max value to min
		var rRatio = (doLog10(nOS) - doLog10(nTemp))/(doLog10(nTP) - doLog10(nTemp));
		if (rRatio * nCH > 6) 
		{
			nTMR = nTemp;
			break;      
		} 
		nTemp -= nMin;            
	}
	nMnt      = Math.min(nMin, nTI);
	nInc      = nTI;	 // increase y value
	m_MaxValue = nTP;   // maximum 10k  
	m_MinValue = nTMR; // minimum 10k
 	if (m_MinValue == 0)
		m_MinValue = 1;
	/// scale come from from 1 to MaxValue/MinValue
	var rt = nCH/doLog10(Math.max(m_MaxValue/m_MinValue,1));
	return rt; 
	
}

function get10KGrowthYLabel(data,  MaxValue, MinValue,CType, stype)
{
	var sp ="";
	if ( CType == "10k" )
		sp =process10k(data, DateStr, MaxValue, MinValue, stype, 200, 274);
	else
		sp =process10k(data, DateStr, MaxValue, MinValue, stype, 120, 120);
	return sp;
}

function process10k(compStr, DateStr, MaxValue, MinValue, stype, h, yb)
{
	var temp3 = compStr.split('|');
	var dMaxValue = getMaxValue(temp3);
	var dMinValue = getMinValue(temp3);	
	try
	{
		dMinValue = Math.max(dMinValue, 1);
		if (MaxValue != "" && MinValue != "" && stype == "ADD")
		{
			dMaxValue = Math.max(dMaxValue, MaxValue/1000);
			dMinValue = Math.min(dMinValue, MinValue/1000);
		}
		ryLR     =  FindLogRangeY(dMaxValue*1000,dMinValue*1000,10000, h);	
	}	
	catch(e)
	{}

	var to10K ="", from10K = "";
	var d10k =   h;
	try
	{
		d10k =  CPtoLP(10000, m_MinValue, yb, ryLR);		
		to10K = DrawLogAxisYto10K(10000,  m_MinValue, m_MinValue, yb);
	}	
	catch(e)
	{
	}
	try
	{
		if (m_MinValue  >= 10)
		{
			from10K = DrawLogAxisY(m_MaxValue,  10000, m_MinValue, yb);
			
		}
	}	
	catch(e)
	{
	}
	var ato10K, afrom10K, adto10K, adfrom10K;
	try
	{
		var t1= to10K.split('^');
		var t2= from10K.split('^');
		if (t1.length >=1)
		{
					ato10K   = t1[0].split('|');
					adto10K  = t1[1].split('|');
		}
		if (t2.length >= 1)
		{
					afrom10K   = t2[0].split('|');
					adfrom10K  = t2[1].split('|');
		}
	}catch(e)
	{}
	
	var pstr = "", pstr1 = "";	
	if (ato10K.length > 0)
	{
		for (var i=0; i< ato10K.length;i++)
		{
			try
			{
				if (pstr == "" )
				{
							pstr  = ato10K[i];
							pstr1 = adto10K[i];
				}
				else
				{
							pstr  = pstr +"|"+ato10K[i];
							pstr1 = pstr1 +"|"+adto10K[i];
				}
			}	
			catch(e)
			{}
		}
	}

	if (d10k > 0)
	{
		try
		{
			if (pstr == "" )
			{
				pstr  = d10k;
				pstr1 = "10.0";
			}
			else
			{
				pstr  = pstr +"|"+ d10k;
				pstr1 = pstr1 +"|"+ "10.0";
			}
		}	
		catch(e)
		{}
	}
	if (afrom10K.length > 0 )
	{
		for (var i=0; i< afrom10K.length;i++)
		{
			try
			{
				if (pstr == "" )
				{
					pstr  = afrom10K[i];
					pstr1 = adfrom10K[i];
				}
				else
				{
					pstr  = pstr +"|"+afrom10K[i];
					pstr1 = pstr1 +"|"+adfrom10K[i];
				}
			}	
			catch(e)
			{}				
		}
	}
	//alert(pstr1+"^"+pstr +"^"+m_MaxValue +"|"+ m_MinValue+"|"+ryLR )
	return pstr1+"^"+pstr +"^"+m_MaxValue +"|"+ m_MinValue+"|"+ryLR;
	

}
function DrawLogAxisYto10K(ryMax, ryMin,  MinPrice, h)
{ 
			//determine the ticker position.			
			//int  dxText = 40, lineX = 40;
 	var dInc = (nInc > 0) ? nInc : nMnt; ;
	if (dInc == 500 ) dInc = 600;
	var yPos, prep = 0, prery = ryMin;
	var nPower =  doLog10(ryMax)  - 1 ;
		//	int  dy = -3;
	var ry, rxIncrement =0;
	
	var yP10 = CPtoLP(10000, MinPrice, h, ryLR);
	var ds = "10.0";
	var yPMax = CPtoLP(ryMax, MinPrice, h, ryLR);
	var dLabel, dInc1 = dInc;
	if (ryMin < 9000)
		dInc1 = 1000;
	var ylabels = "", yPosition="";
	var N = 0;
 	for( ry = ryMin; ry < 10000; )
    { 
		N++;
		if (N > 10) break;
		yPos = CPtoLP(ry, MinPrice, h, ryLR);
		dLabel = ry;
		while (rxIncrement > 0 && (Math.abs(prep - yPos) < 20 || Math.abs(yPos-yP10)< 10))
		{
			ry  += rxIncrement/5;
			yPos = CPtoLP(ry, MinPrice,h , ryLR);
		}
		var dlab = dLabel/1000;	
		if (dlab > 0.1)
		{
			ds = toTwo(dlab);
			prep  = yPos;
		}
		var rxIncrement = Math.min(Math.pow(10, Math.floor(doLog10(ry))+1),dInc1);
		ry        += rxIncrement;	
		if (yPosition == ""  )
		{
			yPosition= toTwo(yPos);
			ylabels  = ds;
		}
		else if (yPos - yP10 > 15)
		{
			yPosition = yPosition +"|"+toTwo(yPos);
			ylabels   = ylabels +"|"+ds;
		}
	}
	if (yPosition == ""  && ylabels == "") 
		return "";
	else
		return yPosition +"^"+ ylabels;
	 
} 
		
function DrawLogAxisY( ryMax,  ryMin,  MinPrice,   h)
{ 
 	if (ryMin < 10 ) ryMin -= - 3; 
	var dInc = dInc = (nInc > 0) ? nInc : nMnt; ;
	if (dInc == 500 ) dInc = 600;
	var yPos, prep = 0, prery = ryMin;
	var nPower = doLog10(ryMax)  - 1 ;
	var ds = "";	 
 	var ry, rxIncrement = 0;		
	/// draw 10k line
	var yPMax = CPtoLP(ryMax, MinPrice, h, ryLR);
	var dLabel, nd = 10000;
	if (ryMax <= 30000)
		nd = 1000;
	var ylabels = "", yPosition="";
	var N = 0;
	for(ry = ryMin; ry < ryMax; )
	{ 
	
	    N++;
		if (N > 10 ) break;
		yPos = CPtoLP(ry, MinPrice, h, ryLR);
		while (rxIncrement > 0 && Math.abs(prep - yPos) < 20)
		{
			ry  += rxIncrement/5;
			ry = (ry/nd)*nd;
			yPos = CPtoLP(ry, MinPrice, h, ryLR);
		} 
		dLabel = ry;
		if (ry > ryMin && (Math.abs(yPos -yPMax) > 8 || yPos == yPMax))
		{
			var dlab = (dLabel/1000);	
			ds = toTwo(dlab);
			prep  = yPos;
			if (yPosition == "")
			{
				yPosition= toTwo(yPos);
				ylabels  = ds;
			}
			else
			{
				yPosition = yPosition +"|"+toTwo(yPos);
				ylabels   = ylabels +"|"+ds;
			}
		}
		rxIncrement = Math.min(Math.pow(10, Math.floor(doLog10(ry))+1),dInc);
		ry        += rxIncrement;
				
	}	
	return yPosition +"^"+ ylabels;
 
} 
function CPtoLP(yvalue, minVal, PriceGridYEnd, ryLR)
{	

	var d     = yvalue/minVal;
	var ypos  = PriceGridYEnd - (doLog10(d)*ryLR); 	
	return ypos;
}

function processDay1(date)
{
    var day = date.substring(0,date.indexOf(" "));
	var st= day + " 9:30 AM(ET)", ap = " AM(ET)";
	var date=new Date();
	var yr = date.getFullYear();       // Year
			//	string mn =	DateTime.Now.Month.ToString();        // Month
	var dy = date.getDay();	          // Day
	var hr = 9, ar = 9;
	var mn = 35, pmn = 35;
	var md = 5;	
	for (var i=1; i< 90;i++)
	{
		if (hr == 16)
			break;
		if (mn >= 60)
		{
			hr++;
			if (hr >= 12)
			{
				if (hr > 12)
					ar = hr - 12;
				else
					ar = hr;
				ap = " PM(ET)";
			}
			else
				ar = hr;
			ar = day +" "+ ar;
			mn = 0;
			st = st +"|"+ ar +":00" + ap;
			pmn = mn;
			mn  += md;
		}
		else
		{
			if (hr > 12 )
				ar = hr - 12;
			else
				ar = hr;
			ar = day +" "+ ar;		
			if (mn < 10)
				st = st +"|"+ ar +":0" + (parseInt(mn))  + ""+ ap;
			else
				st = st +"|"+ ar +":" + (parseInt(mn))  + ""+ ap;
			pmn = mn;
			mn += md;
		}
	}
	return st;
}
function ProceeD1D5TimeLabels(timePeriod, sIntraDayTime)
{
	var  st="";
	if (timePeriod == "D1")
	{
		st = processDay1(sIntraDayTime);			
	}
	else if (timePeriod == "D5")
	{
	    var tt = sIntraDayTime.split("|");
		st = "";
		for (var k=0; k< 5; k++)
		{
			if (st == "" )
				st = processDay1(tt[k]);
			else
				st = st +"|"+ processDay1(tt[k]);	
		}
	}
	var hh= st.split('|');
	return hh;
}
