﻿var forecastUrl = null;

function getForecastData()
{
    forecastUrl = WebRoot + "/DataService/GetForecast.ashx?" + getLocationQueryString(locat) + "&" + getUnitsQueryString(units);
    var dataReq = new httpReq(forecastUrl, parseForecast);
    dataReq.load();
}

var foreData = null;
var foreTextElements = ["MainForecastLabel", "MainForecastConditions", "Dotw0", "Dotw1", "Dotw2", 
    "Dotw3", "Hi0", "Hi1", "Hi2", "Hi3", "Lo0", "Lo1", "Lo2", "Lo3", "ForecastDetailsDate"];
var foreLeftTop = {};
var foreFirstTime = true;

function parseForecast(fdata)
{
    foreData = fdata;
    
    if (null == foreData && typeof(this.getJsonObj) == "function")
        foreData = this.getJsonObj();
    
    if (null != foreData)
    {
        try
        {
            if (foreFirstTime)
            {
                foreLeftTop = captureLeftTop(foreTextElements);
                foreFirstTime = false;
            }
            
            if (null != foreData.forecastList)
            {
                for (var i = 0; i < foreData.forecastList.length; i++)
                {
                    var fore = foreData.forecastList[i];
                    var icon = (fore.hasDay) ? getIconSrc(fore.dayIcon, iconType.medium) : getIconSrc(fore.nightIcon, iconType.medium);
                    if (0 == i)
                    {
                        //main screen forecast
                        plugin.content.findName("MainForecastIconFore").Source = icon;
                        plugin.content.findName("MainForecastConditions").Text = (fore.hasDay) ? fore.dayDesc : fore.nightDesc;
                        plugin.content.findName("MainForecastHi").Text = (null == fore.high) ? "--" : fore.high + DegSymbol;
                        plugin.content.findName("MainForecastLo").Text = (null == fore.low) ? "--" : fore.low + DegSymbol;
                        plugin.content.findName("MainForecastLabel").Text = (fore.hasDay) ? fore.dayTitle : fore.nightTitle;
                        //getIconSrc(foreData.forecastList[i].icon, iconType.medium); 
                    }
                    
                    //forcast screen forecast
                    plugin.content.findName("Dotw" + i).Text = getDayAbrv(fore.title) + "\n" + (fore.dateTime.getMonth() + 1) + "/" + fore.dateTime.getDate();
                    plugin.content.findName("icon" + i).Source = icon;
                    //foreData.forecastList[i].high = 120;
                    plugin.content.findName("Hi" + i).Text = (null == fore.high) ? "--" : fore.high + DegSymbol;
                    setForecastBar(i, fore.high, true, unitType.english);
                    //foreData.forecastList[i].low = -20;
                    plugin.content.findName("Lo" + i).Text = (null == fore.low) ? "--" : fore.low + DegSymbol
                    setForecastBar(i, fore.low, false, unitType.english);
                    
                }
            }
            centerText(foreTextElements, foreLeftTop);
            
        }
        catch(error)
        {
            writeLine(error.name + ": " + error.description);
        }
    }
}

function updateForecastDetails(dayName)
{
    if (null != foreData)
    {
        var index = getDayIndex(dayName);
        try
        {
             var fore = foreData.forecastList[index];
             plugin.content.findName("ForecastDetailsDateDayName").Text = getDayOfWeek(fore.dateTime.getDay());
             plugin.content.findName("ForecastDetailsDateStr").Text = getMonthName(fore.dateTime.getMonth()) + " " + fore.dateTime.getDate().toString()
                + ", " + fore.dateTime.getFullYear().toString();
             
             if (fore.hasDay)
             {
                plugin.content.findName("ForecastDetailsHiTab").Visibility = "Visible";
                plugin.content.findName("ForecastDetailsHi").Text = "Hi: \n" + fore.high + DegSymbol;
                plugin.content.findName("ForecastDetailsHiIcon").Source = getIconSrc(fore.dayIcon, iconType.small);
                plugin.content.findName("ForecastDetailsDayText").Text = fore.dayPred;
             }
             else
             {
                plugin.content.findName("ForecastDetailsHiTab").Visibility = "Collapsed";
             }
             
             if (fore.hasNight)
             {
                plugin.content.findName("ForecastDetailsLoTab").Visibility = "Visible";
                plugin.content.findName("ForecastDetailsLo").Text = "Lo: \n" + fore.low + DegSymbol;
                plugin.content.findName("ForecastDetailsLoIcon").Source = getIconSrc(fore.nightIcon, iconType.small)
                plugin.content.findName("ForecastDetailsNightText").Text = fore.nightPred;
             }
             else
             {
                plugin.content.findName("ForecastDetailsLoTab").Visibility = "Collapsed";
             }
             
             if (fore.hasDay)
             {
                plugin.content.findName("LoTabShadow").Visibility = "Visible";
                plugin.content.findName("HiTabShadow").Visibility = "Collapsed";
                plugin.content.findName("ForecastDetailsDayText").Visibility = "Visible";
                plugin.content.findName("ForecastDetailsNightText").Visibility = "Collapsed";
             }
             else if (fore.hasNight)
             {
                plugin.content.findName("HiTabShadow").Visibility = "Visible";
                plugin.content.findName("LoTabShadow").Visibility = "Collapsed";
                plugin.content.findName("ForecastDetailsDayText").Visibility = "Collapsed";
                plugin.content.findName("ForecastDetailsNightText").Visibility = "Visible";
             }
             
             centerText(foreTextElements, foreLeftTop);
        }
        catch(error)
        {
            writeLine(error.name + ": " + error.description);
        }
    }
}

var IndexStart = "Day";
function getDayIndex(dayName)
{
    var index = 0;
    if (dayName.indexOf(IndexStart) >= 0)
    {
        if ((dayName.indexOf(IndexStart) + IndexStart.length) < dayName.length)
            index = parseInt(dayName.substring(dayName.indexOf(IndexStart) + IndexStart.length, dayName.length));
        
        if (index == NaN)
            index = 0;
    }   
    return index;
}

function getDayAbrv(day)
{
    var abrv = "";
    switch (day)
    {
        case "Sunday": abrv = "Sun"; break;
        case "Monday": abrv = "Mon"; break;
        case "Tuesday": abrv = "Tue"; break;
        case "Wednesday": abrv = "Wed"; break;
        case "Thursday": abrv = "Thu"; break;
        case "Friday": abrv = "Fri"; break;
        case "Saturday": abrv = "Sat"; break;
    }
    return abrv;
}

var NoTemperature = "--";
var MaxFahrenheit = 120;
var MinFahrenheit = -20;
var MaxCelsius = convertToCelsius(MaxFahrenheit);
var MinCelsius = convertToCelsius(MinFahrenheit);
var RangeFahrenheit = MaxFahrenheit - MinFahrenheit;
var RangeCelsius = MaxCelsius - MinCelsius;
var StretchRatio = 1.2;


function convertToCelsius(fahrenheit)
{
    return 100/(212-32) * (fahrenheit - 32);
} 

function setForecastBar(day, temper, hi, units)
{
    var range = (units == unitType.english) ? RangeFahrenheit : RangeCelsius;
    var max = (units == unitType.english) ? MaxFahrenheit : MaxCelsius;
    var min = (units == unitType.english) ? MinFahrenheit : MaxCelsius;
    
    var scale;
    
    if (temper > max)
        scale = 1;
    else if (temper < min || temper == null)
        scale = 0;
    else
    {
        var diff = temper - min;
        scale = diff/range * StretchRatio;
    }
    
    if (scale > 1) scale = 1;
    if (scale < 0) scale = 0;
    
    scaleBar(day, hi, scale);
}