//Global Variables
var MAX_GRAPH_WIDTH = 610;
var MAX_GRAPH_HEIGHT = 233;
var MAX_LOWER_GRAPH_HEIGHT = 44;
var MAX_GRAPH_HEIGHT_COMPLETE = 250;
var GRAPH_Y_OFFSET = 24;
var TIMELINE_Y_OFFSET = 257;
var LOWER_GRAPH_Y_OFFSET = 0;
var DEWPOINT = 0;
var FEELSLIKE = 1;
var GUST = 2;
var HUMIDITY = 3;
var PRESSURE = 4;
var RAINRATE = 5;
var TEMPERATUREAVG = 6;
var TEMPERATUREMAX = 7;
var TEMPERATUREMIN = 8;
var WINDDIR = 9;
var WINDSPEED = 10;
var local_og_data = new Object();
var textShow = 0;
var numUnits = 0;
var dateStart = 0;
var dateFinal = 0;
var currStat = 7;
var dateCurr1 = 0;
var dateCurr2 = 0;
var data = new Array();
var dates = new Array();
var dataHourly = new Object();
var datesHours = new Array();
var boolHourly = false;
var numM = 0;
var numB = 0;
var numUnits = 0;
var numDivisionsVert = 0;
var numMouseDown = -1;
var numLastSliderX = 0;
var numLastSliderX2 = 0;
var boolReleasingHandle = false;
var degreeSymbol = "\u00B0";

function getNumDays(startDate, endDate)
{
    return Math.abs(Math.round((startDate-endDate)/86400000)) + 1;
}

function getStatReqVal(statReq, numReq, boolHourly )
{
    try
    {    
        statReq = parseInt(statReq);
        if ((!boolHourly) && (local_og_data != null))
        {
            switch (statReq)
	        {
                case DEWPOINT: return local_og_data[numReq].dewpoint;
                case FEELSLIKE: return local_og_data[numReq].feelsLike;
                case GUST: return local_og_data[numReq].gust; 
                case HUMIDITY: return local_og_data[numReq].humidity;
                case PRESSURE: return local_og_data[numReq].pressure;
                case RAINRATE: return local_og_data[numReq].rainRate; 
                case TEMPERATUREAVG: return local_og_data[numReq].temperatureAvg; 
                case TEMPERATUREMAX: return local_og_data[numReq].temperatureMax; 
                case TEMPERATUREMIN: return local_og_data[numReq].temperatureMin; 
                case WINDDIR: return local_og_data[numReq].windDir;
                case WINDSPEED: return local_og_data[numReq].windSpeed;
            }
        }
        else if ((boolHourly) && (hourlyData != null))
        {
            switch (statReq)
	        {
                case DEWPOINT: return hourlyData[numReq].dewpoint;
                case FEELSLIKE: return hourlyData[numReq].feelsLike;
                case GUST: return hourlyData[numReq].gust; 
                case HUMIDITY: return hourlyData[numReq].humidity;
                case PRESSURE: return hourlyData[numReq].pressure;
                case RAINRATE: return hourlyData[numReq].rainRate; 
                case TEMPERATUREAVG: return hourlyData[numReq].temperatureAvg; 
                case TEMPERATUREMAX: return hourlyData[numReq].temperatureMax; 
                case TEMPERATUREMIN: return hourlyData[numReq].temperatureMin; 
                case WINDDIR: return hourlyData[numReq].windDir;
                case WINDSPEED: return hourlyData[numReq].windSpeed;
            }
        }
        return 0;
    }
    catch (e)
    {
        return 0;
    }
}

function SwitchData(the_og_data, dateBegin, dateEnd, stat)
{            
    //Declaration and Initialization of Function
    
    //debugger;
    var numDays = 0;
    var one_day = 1000*60*60*24;
	numDays = getNumDays(dateCurr1, dateCurr2); //Math.ceil((dateCurr2.getTime()-dateCurr1.getTime())/(one_day));
    //Main Execution Block of Function
    if (numDays > 7)
    {
        DrawGraphGrid(the_og_data, dateBegin, dateEnd, stat);
    }
    else
    {        
        getHourlyData(dateCurr1, dateCurr2, stat);
    }
}

function DrawHourlyGraph(hourlyData, the_og_data, stat)
{    
    //Declaration and Initialization of Variables
    //debugger;		
	var numTemp = 0;
	var numCounter = 0;
	//Main Execution Block of Function
	currStat = stat;
	dateBegin = hourlyData.dataPoints[0].date;
	dateEnd = hourlyData.dataPoints[hourlyData.dataPoints.length-1].date;
	
	//If args is undefined, draw a default grid for 12 months...
	if (hourlyData != undefined)
	{	
		numTemp = 0;
		datesHours = new Array();
        dataHourly = new Object();
                        
		//Copy data to our big boy..
		for (numCounter = 0; numCounter < hourlyData.dataPoints.length; numCounter++)
		{   
			if ((hourlyData.dataPoints[numCounter].date.getTime() >= dateBegin.getTime()) &&
			    (hourlyData.dataPoints[numCounter].date.getTime() <= dateEnd.getTime()))
			{
				dataHourly[numTemp] = new weather_data(hourlyData.dataPoints[numCounter].dewpoint,
				hourlyData.dataPoints[numCounter].feelsLike, hourlyData.dataPoints[numCounter].gust,
				hourlyData.dataPoints[numCounter].humidity, hourlyData.dataPoints[numCounter].pressure,
				hourlyData.dataPoints[numCounter].rainRate, hourlyData.dataPoints[numCounter].temperatureAvg,
				hourlyData.dataPoints[numCounter].temperatureMax, hourlyData.dataPoints[numCounter].temperatureMin,
				hourlyData.dataPoints[numCounter].windDir, hourlyData.dataPoints[numCounter].windSpeed
				);
				datesHours[numTemp] = hourlyData.dataPoints[numCounter].date;
							
				numTemp++;	
			}
		}
		DrawGraphGridHourly(the_og_data, dateBegin, dateEnd, currStat, dataHourly);
	}
}

function releaseHandleLeft(sender, mouseEventArgs)
{
    //debugger;
    if (boolReleasingHandle == true)
    {
        return;
    }
    else
    {
        boolReleasingHandle = true;
    }
    //Declaration and Initialization of Function
    var numCounter = 0;
    var one_day = 1000*60*60*24;
    var numDays = 0;
    
    //Main Execution Block of Function
    if (numMouseDown != -1)
    {
        if (numMouseDown == 1)
        {
            numMouseDown = -1;    
            numLastSliderX -= 5;    
            while ((numCounter * (MAX_GRAPH_WIDTH/(dates.length-1))) < numLastSliderX)
            {   
                //Increment our numCounter.
                numCounter++;
            }
            if (getNumDays(dates[numCounter], dateCurr2) >= 7)
            {
                boolHourly = false;
                DrawGraphGrid(local_og_data, dates[numCounter], dateCurr2, currStat);
            }
            else
            {
                boolHourly = true;
                getHourlyData(dates[numCounter], dateCurr2, currStat);
            }                
        }
        else
        if (numMouseDown == 2)
        {
            numMouseDown = -1;
            numLastSliderX2 -= 4;
            while ((numCounter * (MAX_GRAPH_WIDTH/(dates.length-1))) < numLastSliderX2)
            {   
                //Increment our numCounter.
                numCounter++;
            }      
            if (getNumDays(dateCurr1,dates[numCounter]) >= 7)
            {
                boolHourly = false;
                DrawGraphGrid(local_og_data, dateCurr1, dates[numCounter], currStat);
            }
            else
            {
                boolHourly = true;
                getHourlyData(dateCurr1, dates[numCounter], currStat);
            }      
        }
    }     
    boolReleasingHandle = false;
}

function moveHandleLeft(sender, mouseEventArgs)
{
    //debugger;
    //Declaration and Initialization of Variables
    var objTemp = "";
    var strTemp = "";
    var numMouseX = 0;
    var numRec1 = 0;
    var sl9 = document.getElementById("HistoricalGraphSilverlightPlugin");
	var gphMain = sl9.content.findName("canvasMainGraph");
	//Main Execution Block of Function
    if (numMouseDown != -1)
    {
        //Left handle
        if (numMouseDown == 1)
        {
            objTemp = gphMain.children.findName("myResize1");
	        if (objTemp != undefined)
	        {   
	            //Retrieve the current position of the mouse.
                numMouseX = mouseEventArgs.getPosition(null).x;
                if ((numMouseX >= 4) && (numMouseX <= (numLastSliderX2-10)))
                {
                    numRec1 = numMouseX-4;
                    strTemp = numRec1 + ",284 " + (numRec1+8) + ",278 " + (numRec1) + ",278 " + numRec1 + ",284 ";
        	        objTemp.points = strTemp;
    	            numLastSliderX = numMouseX;
                }
	        }
        }
        else
        if (numMouseDown == 2)
        {
            objTemp = gphMain.children.findName("myResize2");
	        if (objTemp != undefined)
	        {   
	            //Retrieve the current position of the mouse.
                numMouseX = mouseEventArgs.getPosition(null).x;
                    
                if ((numMouseX >= (numLastSliderX+10)) && (numMouseX <= (MAX_GRAPH_WIDTH)))
                {
                    numRec2 = numMouseX-4;
            
                    strTemp = numRec2 + ",284 " + (numRec2-8) + ",278 " + (numRec2) + ",278 " + numRec2 + ",284 ";
        	        objTemp.points = strTemp;
    	        
    	            numLastSliderX2 = numMouseX;
                }        
            }
        }
    }
}

function pressHandleLeft()
{
	//Main Execution Block of Function
	if (numMouseDown == -1)
	{
	    numMouseDown = 1;
	}
}

function pressHandleRight()
{
    //Main Execution Block of Function
	if (numMouseDown == -1)
	{
	    numMouseDown = 2;
	}
}

function weather_units(temperatureUnit, humidityUnit, pressureUnit, rainUnit, windSpeedUnit)
{
    this.temperatureUnit = temperatureUnit;
	this.humidityUnit = humidityUnit;
	this.pressureUnit = pressureUnit;
	this.rainUnit = rainUnit;
	this.windSpeedUnit = windSpeedUnit;
}

function weather_data(dewpoint, feelsLike, gust, humidity, pressure, rainRate, temperatureAvg, temperatureMax,
                      temperatureMin, windDir, windSpeed)
{
	this.dewpoint = dewpoint;
	this.feelsLike = feelsLike;	
	this.gust = gust;
	this.humidity = humidity;
	this.pressure = pressure;
	this.rainRate = rainRate;
	this.temperatureAvg = temperatureAvg;
	this.temperatureMax = temperatureMax;
	this.temperatureMin = temperatureMin;
	this.windDir = windDir;
	this.windSpeed = windSpeed;	
}

function DrawLowestGraph(the_og_data)
{   
    stat = currStat;
    dateBegin = dateCurr1;
    dateEnd = dateCurr2;
    //Declaration and Initialization of Variables
    var numDays = 0;
    var numCounter = 0;
    var intCounter = 0;
    var sl9 = document.getElementById("HistoricalGraphSilverlightPlugin");
	var gphMain = sl9.content.findName("canvasLowestGraph");
	var numRec1 = 0;
	var numRec2 = 0;
	var numTemp2 = 0;
	if ((gphMain != null) && (gphMain != 'undefined'))
	{
	    try
	    {
	        gphMain.children.clear();
	    }catch (e){}
	}
    
    /***PLOT THE LOWEST GRAPH***/
	//Plot the lower graph...
	data = new Array();
	for (numCounter = 0; numCounter < dates.length; numCounter++)
	{	
		data[numCounter] = getStatReqVal(currStat, numCounter )
	}
	var numHighest = FindHighest(data);
	var numLowest = FindLowest(data);	
	var numDiff = numHighest - numLowest;
	var numRange = ((numDiff * .10)*2)+numDiff;
	numVertSpacing = 0;
	var numGraphLowest = numLowest - (numDiff * .10);
	var numGraphHighest = numHighest + (numDiff *.10);
	if (numDiff > 1)
	{
	    numGraphLowest = Math.round(numGraphLowest);
	    numGraphHighest = Math.round(numGraphHighest);
	}
	//First we'll generate a y scale based on the points at hand. This will be accomplished by figuring out the M and B in y=MX+B
	// relative to the data we have and space we're working in.
	var numMb = MAX_LOWER_GRAPH_HEIGHT / (numGraphLowest - numGraphHighest);
	var numBb = LOWER_GRAPH_Y_OFFSET - (numMb * numGraphHighest);
	var numLineTemp = 0;
    var objTemp = "";
    numDivisionsVert = data.length-1;
	//Add the top leftmost point of the graph.
	var strHiPoints = "0," + ((numMb * data[0]) + numBb) + " ";
	//Add all the points in between...
	for (intCounter = 1; intCounter < dates.length; intCounter++)
	{
		numTemp = intCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
		strHiPoints += numTemp + "," + ((numMb * data[intCounter]) + numBb) + " ";
	}
	//Add the top right most point...
	strHiPoints += MAX_GRAPH_WIDTH + "," + ((numMb * data[dates.length-1]) + numBb) + " ";
	objTemp = gphMain.children.findName("myGraphLineLower");
	if (objTemp == undefined)
	{
		objTemp = addPolyToXamlGraph("", strHiPoints, "#555555", "1", "1", "", gphMain, sl9, objTemp);
	}
	else
	{
		objTemp.points = strHiPoints;
	}
	//Finish it up by adding the fill for the graph...
	strHiPoints += MAX_GRAPH_WIDTH + "," + (MAX_LOWER_GRAPH_HEIGHT + LOWER_GRAPH_Y_OFFSET) + " 0," + (MAX_LOWER_GRAPH_HEIGHT + LOWER_GRAPH_Y_OFFSET) + " 0," + ((numMb * data[0]) + numBb);	
	objTemp = gphMain.children.findName("myGraphFillLower");
	if (objTemp == undefined)
	{
		objTemp = addPolyToXamlGraph("myGraphFillLower", strHiPoints, "#0F6FDF", "1", ".1", "#222222", gphMain, sl9, objTemp);
	}
	else
	{
		objTemp.points = strHiPoints;
	}
	/***Draw selection slider***/
	//Start by figuring out the x coords that correspond to the time span currently selected.
	numCounter = 0;
	while (dates[numCounter].getTime() < dateCurr1.getTime())
	{
	    numCounter++;
	}
	numRec1 = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
    //Get X coord...
	numTemp = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
	//Make our line points...
	strTemp = numTemp + ",0 " + numTemp + ",44";
	//Create line...
	objTemp = addPolyToXamlGraph("", strTemp, "Black", "1", "1", "", gphMain, sl9, objTemp);
	numCounter = 0;
	while (dates[numCounter].getTime() < dateCurr2.getTime())
	{
	    numCounter++;
	}
	numRec2 = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
    //Get X coord...
	numTemp = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
	//Make our line points...
	strTemp = numTemp + ",0 " + numTemp + "," + MAX_LOWER_GRAPH_HEIGHT;
	//Create line...
	objTemp = addPolyToXamlGraph("", strTemp, "Black", "1", "1", "", gphMain, sl9, objTemp);
	numDays = dates.length;
    
    //Add a timeline to the graph...
    for (numCounter = 1; numCounter <= 7; numCounter++)
    {
        numTemp = (numCounter * (MAX_GRAPH_WIDTH/8));
        strTemp = numTemp + ",39" + " " + numTemp + ",44";
        objTemp = addPolyToXamlGraph("", strTemp, "Black", "1", "1", "", gphMain, sl9, objTemp);
        //Create some text for the Lower Graph
	}
	
	//Create white rectangle...
	objTemp = addRectToXamlGraph("", (numRec2-numRec1), "45", "white", numRec1, "0", "", gphMain, sl9, objTemp);
    numDivisionsVert = dates.length-1;
	strHiPoints = "";
	//Add all the points in between...
    intCounter = 0;
    while (dates[intCounter].getTime() < dateCurr2.getTime())	
	{
	    if ((dates[intCounter].getTime() >= dateCurr1.getTime()) && (dates[intCounter].getTime() <= dateCurr2.getTime()))
	    {
	        numTemp = intCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
		    if (strHiPoints == "")
		    {
		        numStart = ((numMb * data[intCounter]) + numBb);
		    }
		    strHiPoints += numTemp + "," + ((numMb * data[intCounter]) + numBb) + " ";
		    numTemp2 = intCounter;
		}
		
		intCounter++;
	}
    numTemp = (intCounter) * (MAX_GRAPH_WIDTH / numDivisionsVert);
    strHiPoints += numTemp + "," + ((numMb * data[(intCounter)]) + numBb) + " ";
	if (boolHourly == true)
	{
	    numTemp = (numTemp2+1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
	    strHiPoints += numTemp + "," + ((numMb * data[(numTemp2+1)]) + numBb) + " "
	}
	strHiPoints += numTemp + ",45 " + numRec1 + ",45 " + numRec1 + "," + numStart;
	objTemp = addPolyToXamlGraph("", strHiPoints, "#0F6FDF", "1", "1", "#EAF4FD", gphMain, sl9, objTemp);
    numDays = dates.length;
    
    //Create some text for the Lower Graph
    strHiPoints = (dates[0].getMonth()+1) + "/" + dates[0].getDate();
    objTemp = addTextToXamlGraph("", "44", "0", "8", strHiPoints, "1", gphMain, sl9, objTemp);
    //Add a timeline to the graph...
    for (numCounter = 1; numCounter <= 7; numCounter++)
    {
        numTemp = Math.floor(numCounter * (numDays / 8));
        strHiPoints = (dates[numTemp].getMonth()+1) + "/" + dates[numTemp].getDate();
        objTemp = addTextToXamlGraph("", "44", ((numCounter * (MAX_GRAPH_WIDTH/8))-9) , "8", strHiPoints, "1", gphMain, sl9, objTemp);
	}
	
	//Create some text for the Lower Graph
    strHiPoints = (dates[numDays-1].getMonth()+1) + "/" + dates[numDays-1].getDate();
    objTemp = addTextToXamlGraph("", "44", ((8 * (MAX_GRAPH_WIDTH/8))-24), "8", strHiPoints, "1", gphMain, sl9, objTemp);
}

function GetUnits(thisData)
{
	//Declaration and Initialization of Variables
	//debugger;
	var strReturn = "";
	//Main Execution Block of Function

	switch (parseInt(currStat))
	{
	        case DEWPOINT: strReturn = the_og_units.temperatureUnit; break;
			case FEELSLIKE: strReturn = the_og_units.temperatureUnit; break;
			case GUST: strReturn = the_og_units.windSpeedUnit; break;
			case HUMIDITY: strReturn = the_og_units.humidityUnit; break;
			case PRESSURE: strReturn = the_og_units.pressureUnit; break;   
			case RAINRATE: strReturn = the_og_units.rainUnit; break;
			case TEMPERATUREAVG: strReturn = the_og_units.temperatureUnit; break;
			case TEMPERATUREMAX: strReturn = the_og_units.temperatureUnit; break;
			case TEMPERATUREMIN: strReturn = the_og_units.temperatureUnit; break;
			case WINDDIR: strReturn = degreeSymbol; break;
			case WINDSPEED: strReturn = the_og_units.windSpeedUnit; break;
	}
	//We're currently experiencing a bit of a problem with the celsius and fahrenheit units displaying as "deg;"
	// and quotes displaying as "quot;" so we'll manually set the units now...
	if (strReturn.indexOf("C") != -1)
	{
	    strReturn = degreeSymbol + "C";
	}	
	if (strReturn.indexOf("F") != -1)
	{
         strReturn = degreeSymbol + "F";	    
	}
	if (strReturn.indexOf("quot") != -1)
	{
	    strReturn = "\"";
	}
	//Return Result of Function
	return strReturn;
}

function ReadMonth(date)
{
	//Declaration and Initialization of Variables
	var strMonth = "";
	//Main Execution Block of Function
	switch (date.getMonth())
	{
		case 0 : strMonth = "Jan"; break;
		case 1 : strMonth = "Feb"; break;
		case 2 : strMonth = "Mar"; break;
		case 3 : strMonth = "Apr"; break;
		case 4 : strMonth = "May"; break;
		case 5 : strMonth = "Jun"; break;
		case 6 : strMonth = "Jul"; break;
		case 7 : strMonth = "Aug"; break;
		case 8 : strMonth = "Sep"; break;
		case 9 : strMonth = "Oct"; break;
		case 10 : strMonth = "Nov"; break;
		case 11 : strMonth = "Dec"; break;
	}
	//Return Result of Function
	return strMonth;	
}

function ResetData(sender, mouseEventArgs)
{   
	//Declaration and Initialization of Variables
	var objTemp = "";
	var strTemp = "";
	var sl9 = document.getElementById("HistoricalGraphSilverlightPlugin");
	var gphMain = sl9.content.findName("canvasHeader");	
	//Main Execution Block of Function
	objTemp = gphMain.children.findName("myGraphLine");
	if (objTemp == undefined)
	{
			return;
	}
	//Find the text that describes the points, and then output whatever our range of dates is...
	//Attempt to the find the text block, and if we can't, create the text box.
	objTemp = gphMain.children.findName("txtPoint");
	if (objTemp == undefined)
	{
		objTemp = addTextToXamlGraph("txtTimeSpan", "3", "5", "12", "", "0", gphMain, sl9, objTemp);
	}
	//Now that we're sure the text box exists, display our date range in it.
	objTemp = gphMain.children.findName("txtTimeSpan");
	objTemp["Text"] = ReadMonth(dateCurr1) + " " + dateCurr1.getDate() + ", " + dateCurr1.getFullYear();
	objTemp["Text"] += " - " + ReadMonth(dateCurr2) + " " + dateCurr2.getDate() + ", " + dateCurr2.getFullYear();
	objTemp["Opacity"] = 1;
	
}

function DrawPoint(sender, mouseEventArgs)
{
	//Declaration and Initialization of Variables
	var numCounter = 0;
	var numTemp = 0;
	var numTemp2 = 0;
	var objTemp = "";
	var numDateCounter = 0;
	var numDateTemp = 0;
	var strDate = "";
	var strTemp = "";
	var sl9 = document.getElementById("HistoricalGraphSilverlightPlugin");
	var gphMain = sl9.content.findName("canvasHeader");
	objTemp = gphMain.children.findName("myGraphLine");
	if (objTemp == undefined)
	{
		return;
	}
	//Main Execution Block of Function
	numCounter = 0;
	numDivisionsVert = data.length-1;
	do
	{
		numTemp = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
		numTemp2 = mouseEventArgs.getPosition(null).x-7;
		if (numTemp2 >= 620)
		{
		    numTemp2 = 619;
		}
		if (numTemp > numTemp2)
		{			
		    //First find where CurrDate1 is in our dates array...
		    numDateCounter = 0;
		    if (boolHourly == false)
		    {
		        while ((numDateCounter < dates.length) && (dates[numDateCounter] < dateCurr1))
		        {
		            numDateCounter++;
		        }
		    }
		    else
		    {
		        while ((numDateCounter < datesHours.length) && (datesHours[numDateCounter] < dateCurr1))
		        {
		            numDateCounter++;
		        }
		    }
		    numDateCounter += numCounter;
			if (boolHourly == false)
			{
			    strDate = ReadMonth(dates[numDateCounter]);
			    strDate += " " + dates[numDateCounter].getDate() + ", " + dates[numDateCounter].getFullYear();
			}
			else
			{
			    //debugger;
			    strDate = ReadMonth(datesHours[numDateCounter]);
			    strDate += " " + datesHours[numDateCounter].getDate() + ", " + datesHours[numDateCounter].getFullYear();
			    strDate += " " + datesHours[numDateCounter].getHours() + ":00";
			}
			strTemp = data[numCounter];
			if (textShow == 0)
			{
				objTemp = gphMain.children.findName("txtPoint");
				if (objTemp == undefined)
				{
					strTemp = strDate + " : " + strTemp + " " + (GetUnits(data[numCounter]));
					objTemp = addTextToXamlGraph("txtPoint", "3", "100", "12", strTemp, "", gphMain, sl9, objTemp);
				}		
				gphMain = sl9.content.findName("canvasMainGraph");
                objTemp = addEllipseToXamlGraph("ellpoint", "5", "5", "Blue", (numTemp-2.5), (((numM * data[numCounter]) + numB)-2), gphMain, sl9, objTemp);
			    strTemp = (numTemp+.2) + "," + (((numM * data[numCounter]) + numB+2)) + " " + (numTemp+.2) + "," + (MAX_GRAPH_HEIGHT + GRAPH_Y_OFFSET);
                objTemp = addPolyToXamlGraph("lineCurr", strTemp, "#828282", "1", "1", "", gphMain, sl9, objTemp);
                textShow = 1;			
			}
			else
			{
				objTemp = gphMain.children.findName("txtPoint");
				if (objTemp == undefined)
				{
					strTemp = strDate + " : " + strTemp + " " + (GetUnits(data[numCounter]));
					objTemp = addTextToXamlGraph("txtPoint", "3", "100", "12", strTemp, "", gphMain, sl9, objTemp);
				}
				objTemp["Text"] = strDate + " : " + strTemp + " " + (GetUnits(data[numCounter]));					
				objTemp["Canvas.Left"] = MAX_GRAPH_WIDTH - Number(objTemp["ActualWidth"]) - 5;				
				gphMain = sl9.content.findName("canvasMainGraph");
				objTemp = gphMain.children.findName("ellPoint");
				if (objTemp == undefined)
				{
					objTemp = addEllipseToXamlGraph("ellpoint", "5", "5", "Blue", (numTemp-2.5), (((numM * data[numCounter]) + numB)-2), gphMain, sl9, objTemp);
				}
				objTemp["Canvas.Left"] = numTemp-2.5;				
				objTemp["Canvas.Top"] = ((numM * data[numCounter]) + numB)-2;
				strTemp = (numTemp+.2) + "," + (((numM * data[numCounter]) + numB+2)) + " " + (numTemp+.2) + "," + (MAX_GRAPH_HEIGHT + GRAPH_Y_OFFSET);
				objTemp = gphMain.children.findName("lineCurr");
				if (objTemp == undefined)
				{
				    objTemp = addPolyToXamlGraph("lineCurr", strTemp, "#828282", "1", "1","", gphMain, sl9, objTemp);
				}				
				objTemp.points = strTemp;  		    
			}
			numCounter = -1;
		}
		else
		{
			numCounter++;
		}
	} while (numCounter != -1);
} 

function FindHighest(data)
{
	//Declaration and Initialization of Variables
	var numCounter = 0;
	var numIndex = 0; //By default, set the highest value to first element in array.
	//Main Execution Block of Function
	//Go through the data and find the highest value...
	for (numCounter = 0; numCounter < data.length; numCounter++)
	{
		//If we find a value higher than the previous one, update our Index.
		if ((data[numCounter] > data[numIndex]) && (data[numCounter] != undefined))
		{
			numIndex = numCounter;
		}
	}
	//Return result of function.
	return data[numIndex];
}

function FindLowest(data)
{
	//Declaration and Initialization of Variables
	var numCounter = 0;
	var numIndex = 0; //By default, set the lowest value to first element in array.
	//Main Execution Block of Function
	//Go through the data and find the lowest value...
	for (numCounter = 0; numCounter < data.length; numCounter++)
	{
		//If we find a value higher than the previous one, update our Index.
		if ((data[numCounter] < data[numIndex]) && (data[numCounter] != undefined))
		{
			numIndex = numCounter;			
		}
	}
	//Return result of function.
	return data[numIndex];
}

function DrawGraph(dataRaw, the_og_data, dateBegin, dateEnd, units, stat)
{	
	//Declaration and Initialization of Variables		
	numUnits = units;
	//Main Execution Block of Function
	//If args is undefined, draw a default grid for 12 months...
	if (dataRaw != undefined)
	{	
		numTemp = 0;
		dates = new Array();
		//Copy data to our big boy..
		for (numCounter = 0; numCounter < dataRaw.dataPoints.length; numCounter++)
		{
			if ((dataRaw.dataPoints[numCounter].date.getTime() >= dateBegin.getTime()) &&
			    (dataRaw.dataPoints[numCounter].date.getTime() <= dateEnd.getTime()))
			{
				the_og_data[numCounter] = new weather_data(dataRaw.dataPoints[numCounter].dewpoint,
				dataRaw.dataPoints[numCounter].feelsLike, dataRaw.dataPoints[numCounter].gust,
				dataRaw.dataPoints[numCounter].humidity, dataRaw.dataPoints[numCounter].pressure,
				dataRaw.dataPoints[numCounter].rainRate, dataRaw.dataPoints[numCounter].temperatureAvg,
				dataRaw.dataPoints[numCounter].temperatureMax, dataRaw.dataPoints[numCounter].temperatureMin,
				dataRaw.dataPoints[numCounter].windDir, dataRaw.dataPoints[numCounter].windSpeed
				);
				local_og_data[numCounter] = new weather_data(dataRaw.dataPoints[numCounter].dewpoint,
				dataRaw.dataPoints[numCounter].feelsLike, dataRaw.dataPoints[numCounter].gust,
				dataRaw.dataPoints[numCounter].humidity, dataRaw.dataPoints[numCounter].pressure,
				dataRaw.dataPoints[numCounter].rainRate, dataRaw.dataPoints[numCounter].temperatureAvg,
				dataRaw.dataPoints[numCounter].temperatureMax, dataRaw.dataPoints[numCounter].temperatureMin,
				dataRaw.dataPoints[numCounter].windDir, dataRaw.dataPoints[numCounter].windSpeed
				);
				the_og_units = new weather_units(dataRaw.temperatureUnit, dataRaw.humidityUnit, dataRaw.pressureUnit, dataRaw.rainUnit, 
				dataRaw.windSpeedUnit);
				
				dates[numTemp] = dataRaw.dataPoints[numCounter].date;
				numTemp++;
			}
		}	
		
DrawGraphGrid(the_og_data, dates[0], dates[numCounter-1], stat);
	}
	return (the_og_data);
}

function DrawGraphGridHourly(the_og_data, dateOrgBegin, dateOrgEnd, stat, hourlyData)
{     
    currStat = stat;
    var dateBegin;
    var dateEnd;
    if ((dateOrgBegin != -1) && (dateOrgEnd != -1))
    {
        dateBegin = dateOrgBegin;
        dateEnd = dateOrgEnd;           
    }
    else
    {        
        dateBegin = dateCurr1;
        dateEnd = dateCurr2;
    }
    dateCurr1 = dateBegin;
    dateCurr2 = dateEnd;
	/***DECLARATION AND INITIALIZATION OF VARIABLES***/		
	var one_day = 1000*60*60*24;
	var boolVertFlag = false;
	var data2 = new Array();
	var dates2 = new Array();
	var numDays = 0;
	var numTemp = 0;
	var numRec1 = 0;
	var numRec2 = 0;
	var strTemp = "";
	var numStart = 0;
	var objTemp = "";
	var numCounter = 0;
	var numShow = 0;
	var numLength = 0;
	var numPoint = 0;
	var strPoints = "";
	var numHeightAndY = GRAPH_Y_OFFSET + MAX_GRAPH_HEIGHT_COMPLETE;
	numTemp = 0;
	
	stat = parseInt(stat);
	
	if (boolHourly)
	{
	    data = null;
	    data = new Array();
        for (numCounter = 0; numCounter < datesHours.length; numCounter++)
	    {
	        
		    if ((datesHours[numCounter].getTime() >= dateBegin.getTime()) &&
		        (datesHours[numCounter].getTime() <= dateEnd.getTime()))
		    {		
		        data[numTemp] = getStatReqVal(stat, numCounter)
		        numTemp++;
		    }
	    }	    
	}
	
	
	numTemp = datesHours.length;
	numTemp = 0;
	dateStart = datesHours[0];
	dateFinal = datesHours[(datesHours.length-1)];
	var numHighest = FindHighest(data);
	var numLowest = FindLowest(data);
	var numDiff = numHighest - numLowest;
	var numRange = ((numDiff * .10)*2)+numDiff;
	var numVertSpacing = 0;
	var numGraphLowest = numLowest - (numDiff * .10);
	var numGraphHighest = numHighest + (numDiff *.10);
	if (numDiff > 1)
	{
	    numGraphLowest = Math.round(numGraphLowest);
	    numGraphHighest = Math.round(numGraphHighest);
	}
	var numRightSpacing = 0;
	var sl9 = document.getElementById("HistoricalGraphSilverlightPlugin");
	var gphMain = sl9.content.findName("canvasMainGraph");
	//debugger;
	if ((gphMain != null) && (gphMain != 'undefined'))
	{
	    try
	    {
	        gphMain.children.clear();
	    }catch (e){}
	}
	
	/***MAIN EXECUTION BLOCK OF FUNCTION***/	
	//First compute how many data points we're looking at since data.length seems unreliable and we're working under a deadline.	
	while (data[numLength] != undefined)
	{
		numLength++;
	}
	/***DRAW VERTICAL GRID LINES***/
	numDivisionsVert = data.length-1;
	//Get number of days in our current span...
	numDays = getNumDays (dateCurr2, dateCurr1); //Math.ceil((dateCurr2.getTime()-dateCurr1.getTime())/(one_day));
	//First find where CurrDate1 is in our dates array...
	var numDateCounter = 0;
	while ((numDateCounter < datesHours.length) && (dateCurr1 != datesHours[numDateCounter]))
	{
	    numDateCounter++;
	}
	for (numCounter = 2; numCounter <= numDivisionsVert; numCounter++)
	{	
		if (numDays > 60)
		{
			//If day is Saturday
			if (datesHours[(numCounter-1+numDateCounter)].getDate() == 1) 
			{
				numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
				strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
				objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1", "", gphMain, sl9, objTemp);//Create the line.
			}	
		}
		//Weekly divisions
		if ((numDays > 7) && (numDays <= 60))
		{
			//If day is Saturday
			if (datesHours[(numCounter-1+numDateCounter)].getDay() == 6)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1", "", gphMain, sl9, objTemp);//Create the line.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		//Weekly divisions
		if (numDays <= 7)
		{
			//If day is Saturday
			if (datesHours[(numCounter-1+numDateCounter)].getHours() == 0)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1", "", gphMain, sl9, objTemp);//Create the line.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
	}
	/***DRAW HORIZONTAL GRID LINES***/
	//First we'll generate a y scale based on the points at hand. This will be accomplished by figuring out the M and B in y=MX+B
	// relative to the data we have and space we're working in.
    if (numDiff > 0)
    {
	numM = MAX_GRAPH_HEIGHT / (numGraphLowest - numGraphHighest);
	numB = GRAPH_Y_OFFSET - (numM * numGraphHighest);
	numLineTemp = 0;
	//Set our vertical divisions based on the range in our data...
	if (numRange > 150)
	{
	    //Have divisions ever 50
	    numVertSpacing = 50;
	}
	else
	if ((numRange >= 80) && (numRange <= 150))
	{
	 	//Have divisions every 20
		numVertSpacing = 20;				
	}
	else 
	if ((numRange >= 20) && (numRange < 80))
	{
		//Have divisions ever 10
		numVertSpacing = 10;		
	}
	else
	if (numRange < 1)
	{
		//Have divisions ever .1
		numVertSpacing = .1;
	}
	else
	{
	    //Have divisions ever 2
	    numVertSpacing = 2;
	}
	//Start the drawing of our horizontal lines by drawing the topmost horizontal line of our graph.
	objTemp = addPolyToXamlGraph("", "0," + GRAPH_Y_OFFSET + " " + MAX_GRAPH_WIDTH + "," + GRAPH_Y_OFFSET, "#D5DDD5", "1", "1", "", gphMain, sl9, objTemp);//Create the line.
	//Now we draw our horizontal lines every time we reach one of our vertical spacing "thresholds".
	if (numRange > 1)
	{
	    numCounter = numGraphLowest;
	}
	else
	{
	    numCounter = ((Math.floor(numGraphLowest * 10)) / 10);
	}
	while (numCounter <= numGraphHighest)
	{
		//If we've reached a "threshold"...
		if ((numCounter % numVertSpacing == 0) || (numRange < 1))
		{
			//Compute our Y value and draw the line.			
			numTemp = (numM * numCounter) + numB;
			if (numTemp < TIMELINE_Y_OFFSET) //So that we're now drawing anything in the "highs and lows" section
			{
			    objTemp = addPolyToXamlGraph("", "0," + numTemp + " " + MAX_GRAPH_WIDTH + "," + numTemp, "#D5DDD5", "1", "1", "", gphMain, sl9, objTemp);//Create the line.
			    //Add text indicating the value of this line, first compute the spacing we'll need based on the value of line...
			    numShow = numCounter;
			    if (numRange < 1)
			    {    					      	    
	    		    numCounter = ((Math.floor(numCounter * 10)) / 10);
		    	    numShow = numCounter.toFixed(1);
			    }
			    numTemp = Math.floor(numTemp-15);
			    //Add the units
			    if (GetUnits("") == "\"")
			    {			       
			         strTemp = numShow;
			    }
			    else
			    {
			        //Draw the text.
			        strTemp = numShow + GetUnits("");
			    }
                			
			    //Add the text to our Silverlight object.			
			    objTemp = addTextToXamlGraph("", numTemp, "5", "12", strTemp, "", gphMain, sl9, objTemp);
            }			  
		}
		if (numRange > 1)
		{
		    numCounter++;
		}
		else
		{
		    numCounter += .1;
		}
	}	
	}
	/***DRAW THE VERT DIVISION BAR AND TEXT***/
	objTemp = addRectToXamlGraph("", MAX_GRAPH_WIDTH, 17, "#CDE2F8", "0", TIMELINE_Y_OFFSET, "1", gphMain, sl9, objTemp);  
	boolVertFlag = false;
	for (numCounter = 1; numCounter <= numDivisionsVert; numCounter++)
	{	
		if (numDays > 60)
		{
			//If day is Saturday
			if (datesHours[(numCounter-1+numDateCounter)].getDate() == 1) 
			{
				numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
				strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
				strTemp = ReadMonth(datesHours[numCounter-1+numDateCounter]);
				numTemp = 0;
				if (datesHours[numCounter-1].getDate() < 10)
				{
					numTemp = 4;
				}					
				strTemp += " " + datesHours[numCounter-1+numDateCounter].getDate();
				objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);
			}	
		}	
		else
		//Weekly divisions
		if ((numDays > 7) && (numDays <= 60))
		{
			//If day is Saturday
			if (datesHours[(numCounter-1+numDateCounter)].getDay() == 6)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					strTemp = ReadMonth(datesHours[numCounter-1+numDateCounter]);
					numTemp = 0;
					if (datesHours[numCounter-1+numDateCounter].getDate() < 10)
					{
						numTemp = 4;
					}
					strTemp += " " + datesHours[numCounter-1+numDateCounter].getDate();
					objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);//Create the text.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		else
		//Daily divisions
		if (numDays <= 7)
		{
			//If day is Saturday
			if (datesHours[(numCounter-1+numDateCounter)].getHours() == 0)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					strTemp = ReadMonth(datesHours[numCounter-1+numDateCounter]);					
					numTemp = 0;
					if (datesHours[numCounter-1+numDateCounter].getDate() < 10)
					{
						numTemp = 4;
					}
					strTemp += " " + datesHours[numCounter-1+numDateCounter].getDate();
					objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);//Create the text.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
	}	
	/***PLOT THE GRAPH***/
	if (numDiff > 0)
	{
	//Add the top leftmost point of the graph.
	var strHiPoints = "0," + ((numM * data[0]) + numB) + " ";
	//Add all the points in between...
	for (intCounter = 1; intCounter < numLength-1; intCounter++)
	{
		numTemp = intCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
		strHiPoints += numTemp + "," + ((numM * data[intCounter]) + numB) + " ";
	}
	//Add the top right most point...
	strHiPoints += MAX_GRAPH_WIDTH + "," + ((numM * data[numLength-1]) + numB) + " ";

	objTemp = gphMain.children.findName("myGraphLine");
	if (objTemp == undefined)
	{
		objTemp = addPolyToXamlGraph("myGraphLine", strHiPoints, "#0F6FDF", "1", "1", "", gphMain, sl9, objTemp);
	}
	else
	{
		objTemp.points = strHiPoints;
	}
	//Finish it up by adding the fill for the graph...
	strHiPoints += MAX_GRAPH_WIDTH + "," + (MAX_GRAPH_HEIGHT + GRAPH_Y_OFFSET) + " 0," + (MAX_GRAPH_HEIGHT + GRAPH_Y_OFFSET) + " 0," + ((numM * data[0]) + numB);	
	objTemp = gphMain.children.findName("myGraphFill");
	if (objTemp == undefined)
	{
		objTemp = addPolyToXamlGraph("myGraphFill", strHiPoints, "#0F6FDF", "1", ".1", "#329CEE", gphMain, sl9, objTemp);
	}
	else
	{
		objTemp.points = strHiPoints;
	}
	}
	/***PLOT THE HI LO GRAPH -- TBD***/
	DrawLowestGraph(the_og_data);
	numCounter = 0;
	while (dates[numCounter].getTime() < dateCurr1.getTime())
	{
	    numCounter++;
	}
	numRec1 = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
	numCounter = 0;
	while (dates[numCounter].getTime() < dateCurr2.getTime())
	{
	    numCounter++;	    
	}
	numRec2 = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
	/***Draw resizing handles***/
    //Let's start with the top left...    
    objTemp = gphMain.children.findName("myResize1");
	if (objTemp == undefined)
	{
	    strTemp = numRec1 + ",284 " + (numRec1+8) + ",278 " + (numRec1) + ",278 " + numRec1 + ",284 ";
	    objTemp = 
	        sl9.content.createFromXaml(
	            '<Polygon Name = "myResize1" Points = "' + strTemp + '" Stroke="Black" StrokeThickness="1" Fill="White" Opacity="1" MouseLeftButtonDown="pressHandleLeft" MouseLeftButtonUp="releaseHandleLeft" MouseMove="moveHandleLeft" />');
	    //Add the handle to our Silverlight object.
        gphMain.children.Add(objTemp);
	}
	else
	{
	    objTemp.points = strTemp;
	}
	numLastSliderX = numRec1-4;
	objTemp = gphMain.children.findName("myResize2");
	if (objTemp == undefined)
	{
	    strTemp = numRec2 + ",284 " + (numRec2-8) + ",278 " + (numRec2) + ",278 " + numRec2 + ",284 ";
	    objTemp = 
	        sl9.content.createFromXaml(
	            '<Polygon Name = "myResize2" Points = "' + strTemp + '" Stroke="Black" StrokeThickness="1" Fill="White" Opacity="1" MouseLeftButtonDown="pressHandleRight" MouseLeftButtonUp="releaseHandleLeft" MouseMove="moveHandleLeft" />');
	    //Add the handle to our Silverlight object.
        gphMain.children.Add(objTemp);
	}
	else
	{
	    objTemp.points = strTemp;
	}
	numLastSliderX2 = numRec2-4;
	data = new Array();
	numTemp = 0;
	if (boolHourly)
	{
        for (numCounter = 0; numCounter < datesHours.length; numCounter++)
	    {
		    if ((datesHours[numCounter].getTime() >= dateBegin.getTime()) &&
		        (datesHours[numCounter].getTime() <= dateEnd.getTime()))
		    {	
		        data[numTemp] = getStatReqVal(stat, numCounter );
			    numTemp++;
		    }
	    }	    
	}
	ResetData("", "");
}

function DrawGraphGrid(the_og_data, dateOrgBegin, dateOrgEnd, stat)
{
    //debugger;
    currStat = stat;
    var dateBegin;
    var dateEnd;
    if ((dateOrgBegin != -1) && (dateOrgEnd != -1))
    {    
        dateBegin = dateOrgBegin;
        dateEnd = dateOrgEnd;           
    }
    else
    {        
        dateBegin = dateCurr1;
        dateEnd = dateCurr2;
    }
    dateCurr1 = dateBegin;
    dateCurr2 = dateEnd;
    
	/***DECLARATION AND INITIALIZATION OF VARIABLES***/		
	var one_day = 1000*60*60*24;
	var boolVertFlag = false;
	var data2 = new Array();
	var dates2 = new Array();
	var numDays = 0;
	var numTemp = 0;
	var numRec1 = 0;
	var numRec2 = 0;
	var strTemp = "";
	var numStart = 0;
	var objTemp = "";
	var numCounter = 0;
	var numShow = 0;
	var numLength = 0;
	var numPoint = 0;
	var strPoints = "";
	var numHeightAndY = GRAPH_Y_OFFSET + MAX_GRAPH_HEIGHT_COMPLETE;
	numTemp = 0;
	data = new Array();
	
	if (boolHourly == false)
	{	
	    numCounter = 0;	    
	    
	    for (var numCounter = 0; numCounter < dates.length; numCounter++)
	    {
	    
		    if ((dates[numCounter].getTime() >= dateBegin.getTime()) &&
		        (dates[numCounter].getTime() <= dateEnd.getTime())) 
		    {			
		        
		    
			    data[numTemp] = getStatReqVal(stat, numCounter )
			    numTemp++;
			    
		    }
		    
	    }
	}	
	
	dateStart = dates[0];
	dateFinal = dates[numTemp-1];
	var numHighest = FindHighest(data);
	var numLowest = FindLowest(data);
	var numDiff = numHighest - numLowest;
	var numRange = ((numDiff * .10)*2)+numDiff;
	var numVertSpacing = 0;
	var numGraphLowest = numLowest - (numDiff * .10);
	var numGraphHighest = numHighest + (numDiff *.10);
	if (numDiff > 1)
	{
	    numGraphLowest = Math.round(numGraphLowest);
	    numGraphHighest = Math.round(numGraphHighest);
	}
	var numRightSpacing = 0;
	var sl9 = document.getElementById("HistoricalGraphSilverlightPlugin");
	var gphMain = sl9.content.findName("canvasMainGraph");
	
	if ((gphMain != null) && (gphMain != 'undefined')){try{gphMain.children.clear();}catch (e){}}
    
    
	/***MAIN EXECUTION BLOCK OF FUNCTION***/	
	//First compute how many data points we're looking at since data.length seems unreliable and we're working under a deadline.	
	while (data[numLength] != undefined)
	{
		numLength++;
	}	
	
	/***DRAW VERTICAL GRID LINES***/
	numDivisionsVert = data.length-1;
	//Get number of days in our current span...	
	numDays = getNumDays(dateCurr2, dateCurr1); //Math.ceil((dateCurr2.getTime()-dateCurr1.getTime())/(one_day));
	//First find where CurrDate1 is in our dates array...
	var numDateCounter = 0;
	while ((numDateCounter < dates.length) && (dates[numDateCounter] < dateCurr1))
	{
	    numDateCounter++;
	}

    for (numCounter = 2; numCounter <= numDivisionsVert; numCounter++)
	{
		if (numDays > 90)
		{
			//If day is Saturday
			//if (dates[(numCounter-1+numDateCounter)].getDate() == 1) 
			if ((numCounter % 15) == 0)
			{
				numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
				strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
				objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
			}	
		}
		//Weekly divisions
		if ((numDays > 60) && (numDays <= 90))
		{		
			//If day is Saturday			
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 8) == 0)
			{			    
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					strPoints = numPoint + "," + (numHeightAndY-30) + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#676767", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		//Weekly divisions
		else if ((numDays > 40) && (numDays <= 60))
		{		    
			//If day is Saturday			
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 6) == 0)
			{			    
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					strPoints = numPoint + "," + (numHeightAndY-30) + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#676767", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		//Weekly divisions
		else if ((numDays > 20) && (numDays <= 40))
		{		
			//If day is Saturday			
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 4) == 0)
			{			    
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					strPoints = numPoint + "," + (numHeightAndY-30) + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#676767", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		else if ((numDays > 7) && (numDays <= 20))
		{		 
			//If day is Saturday			
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 2) == 0)
			{			    
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					strPoints = numPoint + "," + (numHeightAndY-30) + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#676767", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		//Weekly divisions
		if (numDays <= 7)
		{
			//If day is Saturday
			if (dates[(numCounter-1+numDateCounter)].getHours() == 0)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					objTemp = addPolyToXamlGraph("", strPoints, "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
	}
	
	/***DRAW HORIZONTAL GRID LINES***/
	//First we'll generate a y scale based on the points at hand. This will be accomplished by figuring out the M and B in y=MX+B
	// relative to the data we have and space we're working in.
	if (numDiff > 0)
	{
	numM = MAX_GRAPH_HEIGHT / (numGraphLowest - numGraphHighest);
	numB = GRAPH_Y_OFFSET - (numM * numGraphHighest);
	numLineTemp = 0;
	//Set our vertical divisions based on the range in our data...
	if (numRange > 150)
	{
	    //Have divisions ever 50
	    numVertSpacing = 50;
	}
	else
	if ((numRange >= 80) && (numRange <= 150))
	{
	 	//Have divisions every 20
		numVertSpacing = 20;				
	}
	else 
	if ((numRange >= 20) && (numRange < 80))
	{
		//Have divisions ever 10
		numVertSpacing = 10;		
	}
	else
	if (numRange < 1)
	{
		//Have divisions ever .1
		numVertSpacing = .1;
	}
	else
	{
	    //Have divisions ever 2
	    numVertSpacing = 2;
	}
	//Start the drawing of our horizontal lines by drawing the topmost horizontal line of our graph.
	objTemp = addPolyToXamlGraph("", "0," + GRAPH_Y_OFFSET + ' ' + MAX_GRAPH_WIDTH + ',' + GRAPH_Y_OFFSET , "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
	//Now we draw our horizontal lines every time we reach one of our vertical spacing "thresholds".
	if (numRange > 1)
	{
	    numCounter = numGraphLowest;
	}
	else
	{
	    numCounter = ((Math.floor(numGraphLowest * 10)) / 10);
	}
    while (numCounter <= numGraphHighest)
	{
		//If we've reached a "threshold"...
		//alert(numCounter + " % " + numVertSpacing + " = " + (numCounter % numVertSpacing));
		if ((numCounter % numVertSpacing == 0) || (numRange < 1))
		{
			//Compute our Y value and draw the line.			
			numTemp = (numM * numCounter) + numB;
			if (numTemp < TIMELINE_Y_OFFSET) //So that we're now drawing anything in the "highs and lows" section
			{
			    objTemp = addPolyToXamlGraph("", "0," + numTemp + ' ' + MAX_GRAPH_WIDTH + ',' + numTemp , "#D5DDD5", "1", "1" , "", gphMain, sl9, objTemp); //Create the line.
			    //Add text indicating the value of this line, first compute the spacing we'll need based on the value of line...
			    numShow = numCounter;
			    if (numRange < 1)
			    {    					      	    
	    		    numCounter = ((Math.floor(numCounter * 10)) / 10);
		    	    numShow = numCounter.toFixed(1);
			    }
			    numTemp = Math.floor(numTemp-15);
			    //Add the units
			    if (GetUnits("") == "\"")
			    {			       
			        strTemp = numShow;
			    }
			    else
			    {
			        //Draw the text.
			        strTemp = numShow + GetUnits("");
			    }
                //Add the text to our Silverlight object.			
			    objTemp = addTextToXamlGraph("", numTemp, "5", "12", strTemp, "", gphMain, sl9, objTemp);
            }			  
		}
		if (numRange > 1)
		{
		    numCounter++;
		}
		else
		{
		    numCounter += .1;
		}
	}	
    }
    
	/***DRAW THE VERT DIVISION BAR AND TEXT**AFR CHECK*/
	objTemp = addRectToXamlGraph("", (MAX_GRAPH_WIDTH-1), "17", "#CDE2F8", "0", TIMELINE_Y_OFFSET, "", gphMain, sl9, objTemp);
	boolVertFlag = false;
	
	/*
	var numPointsBetween = 0;
	numCounter = 0;
	while (numCounter < dates.length)
    {			
        if ((dates[numCounter].getTime() >= dateCurr1.getTime()) &&
		    (dates[numCounter].getTime() <= dateCurr2.getTime()))
		{
	        numPointsBetween++;
	    }
	    numCounter++;
	}
		
	var numCurr1Index = 0;	
	while (dates[numCurr1Index].getTime() < dateCurr1.getTime())
	{	    
	     numCurr1Index++;
	}
	//numCurr1Index--;
		
	//Add a timeline to the graph...
    for (numCounter = 1; numCounter <= 6; numCounter++)
    {
        numTemp = Math.ceil(numCounter * (numPointsBetween / 8));   
        numTemp += numCurr1Index;     
        strTemp = (dates[numTemp].getMonth()+1) + "/" + dates[numTemp].getDate();
    
        //numTemp = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
        
        //Create some text for the Lower Graph
        objTemp =
		    sl9.content.createFromXaml('<TextBlock Canvas.Top = "' + (MAX_GRAPH_HEIGHT + GRAPH_Y_OFFSET + 1) + '" Canvas.Left = "' + ((numCounter * (MAX_GRAPH_WIDTH/8))) + '" FontSize = "10" Text = "' + strTemp+ '" Opacity = "1" />');	
				
		//Add the text to our Silverlight object.
		gphMain.children.Add(objTemp);
	}	
	*/
	
	for (numCounter = 1; numCounter <= numDivisionsVert; numCounter++)
	{	
	
		if (numDays > 90)
		{   
			//If day is Saturday
			//if (dates[(numCounter-1+numDateCounter)].getDate() == 1) 
			if ((numCounter % 15) == 0)
			{
				numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
				strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
				strTemp = ReadMonth(dates[numCounter-1+numDateCounter]);
				numTemp = 0;
				if (dates[numCounter-1].getDate() < 10)
				{
					numTemp = 4;
				}					
				strTemp += " " + dates[numCounter-1+numDateCounter].getDate();
				objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);
			}	
		}	
		else
		if ((numDays > 60) && (numDays <= 90))
		{
			//If day is Saturday
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 8) == 0)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					strTemp = ReadMonth(dates[numCounter-1+numDateCounter]);
					numTemp = 0;
					if (dates[numCounter-1+numDateCounter].getDate() < 10)
					{
						numTemp = 4;
					}
					strTemp += " " + dates[numCounter-1+numDateCounter].getDate();
					objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);//Create the text.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		else
		if ((numDays > 40) && (numDays <= 60))
		{
			//If day is Saturday
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 6) == 0)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					strTemp = ReadMonth(dates[numCounter-1+numDateCounter]);
					numTemp = 0;
					if (dates[numCounter-1+numDateCounter].getDate() < 10)
					{
						numTemp = 4;
					}
					strTemp += " " + dates[numCounter-1+numDateCounter].getDate();
					objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);//Create the text.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		else
		//Weekly divisions
		if ((numDays > 20) && (numDays <= 40))
		{
			//If day is Saturday
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 4) == 0)
			{
				if (boolVertFlag == false)
				{
				try{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					strTemp = ReadMonth(dates[numCounter-1+numDateCounter]);
					numTemp = 0;
					if (dates[numCounter-1+numDateCounter].getDate() < 10)
					{
						numTemp = 4;
					}
					strTemp += " " + dates[numCounter-1+numDateCounter].getDate();
					objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);//Create the text.
					boolVertFlag = true;
					}
					catch(e){}
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		else
		if ((numDays > 7) && (numDays <= 20))
		{
			//If day is Saturday
			//if (dates[(numCounter-1+numDateCounter)].getDay() == 6)
			if ((numCounter % 2) == 0)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					strTemp = ReadMonth(dates[numCounter-1+numDateCounter]);
					numTemp = 0;
					if (dates[numCounter-1+numDateCounter].getDate() < 10)
					{
						numTemp = 4;
					}
					strTemp += " " + dates[numCounter-1+numDateCounter].getDate();
					objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);//Create the text.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
		else
		//Daily divisions
		if (numDays <= 7)
		{
			//If day is Saturday
			if (dates[(numCounter-1+numDateCounter)].getHours() == 0)
			{
				if (boolVertFlag == false)
				{
					numPoint = (numCounter - 1) * (MAX_GRAPH_WIDTH / numDivisionsVert);
					strPoints = numPoint + "," + GRAPH_Y_OFFSET + " " + numPoint + "," + numHeightAndY;
					strTemp = ReadMonth(dates[numCounter-1+numDateCounter]);					
					numTemp = 0;
					if (dates[numCounter-1+numDateCounter].getDate() < 10)
					{
						numTemp = 4;
					}
					strTemp += " " + dates[numCounter-1+numDateCounter].getDate();
					objTemp = addTextToXamlGraph("", (TIMELINE_Y_OFFSET+1), (numPoint-19+numTemp), "10", strTemp, "", gphMain, sl9, objTemp);//Create the text.
					boolVertFlag = true;
				}				
			}
			else
			{
				boolVertFlag = false;
			}
		}
	}	
		
	/***PLOT THE GRAPH***/
	if (numDiff > 0)
	{
	//Add the top leftmost point of the graph.
	var strHiPoints = "0," + ((numM * data[0]) + numB) + " ";
	//Add all the points in between...
	for (intCounter = 1; intCounter < numLength-1; intCounter++)
	{
		numTemp = intCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
		strHiPoints += numTemp + "," + ((numM * data[intCounter]) + numB) + " ";
	}
	//Add the top right most point...
	strHiPoints += MAX_GRAPH_WIDTH + "," + ((numM * data[numLength-1]) + numB) + " ";	
	objTemp = gphMain.children.findName("myGraphLine");
	if (objTemp == undefined)
	{
		objTemp = addPolyToXamlGraph("myGraphLine", strHiPoints, "#0F6FDF", "1", "1", "", gphMain, sl9, objTemp);
	}
	else
	{
		objTemp.points = strHiPoints;
	}
	//Finish it up by adding the fill for the graph...
	strHiPoints += MAX_GRAPH_WIDTH + "," + (MAX_GRAPH_HEIGHT + GRAPH_Y_OFFSET) + " 0," + (MAX_GRAPH_HEIGHT + GRAPH_Y_OFFSET) + " 0," + ((numM * data[0]) + numB);	
	objTemp = gphMain.children.findName("myGraphFill");
	if (objTemp == undefined)
	{
		objTemp = addPolyToXamlGraph("myGraphFill", strHiPoints, "#0F6FDF", "1", ".1", "#329CEE", gphMain, sl9, objTemp);
	}
	else
	{
		objTemp.points = strHiPoints;
	}
    }
	/***PLOT THE HI LO GRAPH -- INCOMPLETE***/ 
	DrawLowestGraph(the_og_data);
	
	numCounter = 0;
	while (dates[numCounter].getTime() < dateCurr1.getTime())
	{
	    numCounter++;
	}
	numRec1 = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
	
	numCounter = 0;
	while ((dates[numCounter].getTime() < dateEnd.getTime()) && (numCounter < dates.length))
	{
	    numCounter++;
	}
	numRec2 = numCounter * (MAX_GRAPH_WIDTH / numDivisionsVert);
	/***Draw resizing handles***/
    //Let's start with the top left...    
    objTemp = gphMain.children.findName("myResize1");
    
	strTemp = numRec1 + ",284 " + (numRec1+8) + ",278 " + (numRec1) + ",278 " + numRec1 + ",284 ";
	if (objTemp == undefined)
	{	    
	    objTemp = 
	        sl9.content.createFromXaml(
	            '<Polygon Name = "myResize1" Points = "' + strTemp + '" Stroke="Black" StrokeThickness="1" Fill="White" Opacity="1" MouseLeftButtonDown="pressHandleLeft" MouseLeftButtonUp="releaseHandleLeft" MouseMove="moveHandleLeft" />');
	    //Add the handle to our Silverlight object.
        gphMain.children.Add(objTemp);
	}
	else
	{
	    objTemp.points = strTemp;
	}
	numLastSliderX = numRec1-4;
	objTemp = gphMain.children.findName("myResize2");
	strTemp = (numRec2) + ",284 " + ((numRec2)-8) + ",278 " + (numRec2) + ",278 " + (numRec2) + ",284 ";
	if (objTemp == undefined)
	{	    
	    objTemp = 
	        sl9.content.createFromXaml(
	            '<Polygon Name = "myResize2" Points = "' + strTemp + '" Stroke="Black" StrokeThickness="1" Fill="White" Opacity="1" MouseLeftButtonDown="pressHandleRight" MouseLeftButtonUp="releaseHandleLeft" MouseMove="moveHandleLeft" />');
	    //Add the handle to our Silverlight object.
        gphMain.children.Add(objTemp);
	}
	else
	{
	    objTemp.points = strTemp;
	}
	numLastSliderX2 = numRec2-4;
	/***Get original "data" back into proper structure or else DrawPoint gets all screwed up***/
	data = new Array();
	numTemp = 0;
	for (numCounter = 0; numCounter < dates.length; numCounter++)
	{
		if ((dates[numCounter].getTime() >= dateBegin.getTime()) &&
		    (dates[numCounter].getTime() <= dateEnd.getTime()))
		{
			data[numTemp] = getStatReqVal(stat, numCounter );
			numTemp++;
		}
	}
	ResetData("", "");
}

function changeFill(sender, args)
{
	var sl9 = document.getElementById("HistoricalGraphSilverlightPlugin");
	sl9.content.findName("myGraphLine").points = "0,100 624,100 624,278 0,278 0,100"; 	
}

function addPolyToXamlGraph(strName, strPoints, stroke, thickness, opacity, fill, svGraph, svo, objXaml)
{
	if (strName != "")
	{
	    if (fill != "") objXaml = svo.content.createFromXaml('<Polyline Name="' + strName + '" Points = "' + strPoints + '" Stroke="' + stroke + '" StrokeThickness="' + thickness + '"  Opacity="' + opacity +'" Fill="' + fill + '"/>');	
	    else objXaml = svo.content.createFromXaml('<Polyline Name="' + strName + '" Points = "' + strPoints + '" Stroke="' + stroke + '" StrokeThickness="' + thickness + '" Opacity="' + opacity +'"/>');	
	}
	else
	{
	    if (fill != "") objXaml = svo.content.createFromXaml('<Polyline Points = "' + strPoints + '" Stroke="' + stroke + '" StrokeThickness="' + thickness + '" Opacity="' + opacity +'" Fill="' + fill + '"/>');	
	    else objXaml = svo.content.createFromXaml('<Polyline Points = "' + strPoints + '" Stroke="' + stroke + '" StrokeThickness="' + thickness + '" Opacity="' + opacity +'" />');	
	}
	//Add the line to our Silverlight object.
	try{svGraph.children.Add(objXaml);}catch(e){}
	return objXaml;
}

function addTextToXamlGraph(strName, top, left, fontSize, strText, opacity, svGraph, svo, objXaml)
{
	if (strName != "")
	{
	    if (opacity != "") objXaml = svo.content.createFromXaml('<TextBlock Name = "' + strName + '" Canvas.Top = "' + top + '" Canvas.Left = "' + left + '" FontSize = "' + fontSize + '" Text = "' + strText + '" Opacity = "' + opacity + '" />');	
	    else objXaml = svo.content.createFromXaml('<TextBlock Name = "' + strName + '" Canvas.Top = "' + top + '" Canvas.Left = "' + left + '" FontSize = "' + fontSize + '" Text = "' + strText + '" />');	
	}
	else
	{
	    if (opacity != "") objXaml = svo.content.createFromXaml('<TextBlock Canvas.Top = "' + top + '" Canvas.Left = "' + left + '" FontSize = "' + fontSize + '" Text = "' + strText + '" Opacity = "' + opacity + '" />');		
	    else objXaml = svo.content.createFromXaml('<TextBlock Canvas.Top = "' + top + '" Canvas.Left = "' + left + '" FontSize = "' + fontSize + '" Text = "' + strText + '" />');		
	}
	//Add the point to our Silverlight object.
	try{svGraph.children.Add(objXaml);}catch(e){}
	return objXaml;
}

function addEllipseToXamlGraph(strName, width, height, fill, left, top, svGraph, svo, objXaml)
{
	if(strName != "") objXaml = svo.content.createFromXaml('<Ellipse Name = "ellPoint" Width = "5" Height = "5" Fill = "Blue" Canvas.Left = "' + left + '" Canvas.Top = "' + top + '" />');
	else objXaml = svo.content.createFromXaml('<Ellipse Width = "5" Height = "5" Fill = "Blue" Canvas.Left = "' + left + '" Canvas.Top = "' + top + '" />');
	try{svGraph.children.Add(objXaml);}catch(e){}
	return objXaml;
}

function addRectToXamlGraph(strName, width, height, fill, left, top, opacity, svGraph, svo, objXaml)
{
    if (strName != "")
    {
        if (opacity != "") objXaml = svo.content.createFromXaml('<Rectangle Name="' + strName + ' Canvas.Left = "' + left + '" Canvas.Top = "' + top + '" Width = "' + width + '" Height = "' + height + '" Fill="' + fill + '" Opacity="' + opacity + '"/>');    
        else objTemp = svo.content.createFromXaml('<Rectangle Name="' + strName + ' Canvas.Left = "' + left + '" Canvas.Top = "' + top + '" Width = "' + width + '" Height = "' + height + '" Fill="' + fill + '" />');    
    }
    else
    {
        if (opacity != "") objXaml = svo.content.createFromXaml('<Rectangle Canvas.Left = "' + left + '" Canvas.Top = "' + top + '" Width = "' + width + '" Height = "' + height + '" Fill="' + fill + '" Opacity="' + opacity + '"/>');    
        else objXaml = svo.content.createFromXaml('<Rectangle Canvas.Left = "' + left + '" Canvas.Top = "' + top + '" Width = "' + width + '" Height = "' + height + '" Fill="' + fill + '" />');    
    }
    try{svGraph.children.Add(objXaml);}catch(e){}
    return objXaml;
}