﻿// JScript File
function OnSatelliteChanged()
{
    document.Form1.Downlink.disabled = (document.Form1.Band.selectedIndex < 1);
    var satelliteCombo = document.Form1.Satellite;
    if(satelliteCombo != null && satelliteCombo.selectedIndex != -1)
    {  
        var satSystem = satelliteCombo.options[satelliteCombo.selectedIndex].value;
        SunOutageWebService.GetEphemeris(satSystem,EnableEphemeris);
       
    }
}

function EnableEphemeris(result,eventArgs)
{
  if(result == 'true')
  {
    document.Form1.cbEphemeris.disabled = false;
  }
  else
  {
   document.Form1.cbEphemeris.disabled = true;
  }
}

function onBandChanged()
{
    var bandCombo = document.Form1.Band;
    document.Form1.Downlink.disabled = true;
    if (bandCombo != null && bandCombo.selectedIndex > 0)
    {
        
        //value setup as SYSTEM_NAME:SAT_NAME:XPDR_NAME:XPDR_DLK_CENTER_FREQ
        var value = bandCombo.options[bandCombo.selectedIndex].value.split(":");
        if(value.length == 4)
        {
            document.Form1.Downlink.value = value[3];
        }
    }
    else
    {
        //None option selected, so use must enter value manually
        document.Form1.Downlink.disabled = false;
    }
}

function onCityChanged()
{
    var cityCombo = document.Form1.City;
    if (cityCombo != null && cityCombo.selectedIndex > 0)
    {
        //value setup as INST_ID:CITY_LAT:CITY_LONG
        var value = cityCombo.options[cityCombo.selectedIndex].value.split(":");
        if(value.length == 3)
        {
            document.Form1.Latitude.value = value[1];
            document.Form1.Longitude.value = value[2];
        }
    }
    else
    {
        //no selection or error so clear lat/lon fields
        document.Form1.Latitude.value = "";
        document.Form1.Longitude.value = "";
    }
}



//enable/disable fields based on the selected input type
function onInputChanged()
{ 

    var inputRadios = document.Form1.Input;
    var countryCombo = document.Form1.Country;
    var cityCombo = document.Form1.City;
    var latTextBox = document.Form1.Latitude;
    var lonTextBox = document.Form1.Longitude;
    if(inputRadios[0].checked)
    {
        //city/country input selected
        countryCombo.disabled = false;
        cityCombo.disabled = (countryCombo.selectedIndex < 0);//enabled based on country selection
        onCityChanged();//be sure to update the lat/lon fields
        latTextBox.disabled = true;
        lonTextBox.disabled = true;
    }
    else
    {
        //direct input selected
        countryCombo.disabled = true;
        cityCombo.disabled = true;
        latTextBox.disabled = false;
        lonTextBox.disabled = false;
    }
}

var DHTML = (document.getElementById || document.all || document.layers);
function getObj(name)
{   
    if (document.getElementById)
    {
        this.obj = document.getElementById(name);
        this.style = document.getElementById(name).style;
    }
    else if (document.all)
    {
        this.obj = document.all[name];
        this.style = document.all[name].style;
    }
    else if (document.layers)
    {
        this.obj = document.layers[name];
        this.style = document.layers[name];
    }
}

function validate()
{  
    //inputs to validate
    var satellite = document.Form1.Satellite;
    var downlink = document.Form1.Downlink;
    var input = document.Form1.Input;
    var country = document.Form1.Country;
    var city = document.Form1.City;
    var latitude = document.Form1.Latitude;
    var longitude = document.Form1.Longitude;
    var diameter = document.Form1.Diameter;
     
    //validators
    var downlinkValidator = new getObj('FrequencyValidator');
    var countryValidator = new getObj('CountryValidator');
    var cityValidator = new getObj('CityValidator');
    var latitudeValidator = new getObj('LatitudeValidator');
    var longitudeValidator = new getObj('LongitudeValidator');
    var diameterValidator = new getObj('DiameterValidator');

    //necessary numbers
    //SYSTEM_NAME@SAT_NAME@SAT_LONG_NOM
    var slon = parseFloat(satellite.options[satellite.selectedIndex].value.split('@')[2]);
    var dlk = parseFloat(downlink.value);
    var lat = parseFloat(latitude.value);
    var lon = parseFloat(longitude.value);
    var diam = parseFloat(diameter.value);

    var isValid = true;
 
    if(isNaN(dlk))
    {
        downlinkValidator.obj.innerHTML = '(Required)';
        downlinkValidator.style.visibility = 'visible';
        isValid = false;
    }
    else if(dlk <= 1000.0 || dlk >= 40000.0)
    {
        downlinkValidator.obj.innerHTML = '(1000 MHz < Frequency < 40000 MHz)';
        downlinkValidator.style.visibility = 'visible';
        isValid = false;
    }
    else
    {
        downlinkValidator.style.visibility = 'hidden';
    }

    if(input[0].checked)
    {
        //Country/City selected so validate the selections
        if(country.selectedIndex < 0)
        {
            countryValidator.obj.innerHTML = '(Required)';
            countryValidator.style.visibility = 'visible';
            isValid = false;
        }
        else
        {
            countryValidator.style.visibility = 'hidden';
            
        }

        if(city.selectedIndex <= 0)
        {
            cityValidator.obj.innerHTML = '(Required)';
            cityValidator.style.visibility = 'visible';
            isValid = false;
        }
        else
        {
            cityValidator.style.visibility = 'hidden';
            
        }

        //don't bother validating the format of the numbers because they are auto stuffed
        //but we do still need to validate the loose box around the satellite
        if(lat <= -85.0 || lat >= 85.0)
        {
            latitudeValidator.obj.innerHTML = '(Not visible from satellite)';
            latitudeValidator.style.visibility = 'visible';
            isValid = false;
        }
        else
        {
            latitudeValidator.style.visibility = 'hidden';
        }

        if(getLongitudeDistance(slon, lon) > 85.0)
        {
            longitudeValidator.obj.innerHTML = '(Not visible from satellite)';
            longitudeValidator.style.visibility = 'visible';
            isValid = false;
        }
        else
        {
            longitudeValidator.style.visibility = 'hidden';
        }
    }
    else
    {
        //Latitude/Longitude option is selected so we don't need to valide the country/city
        countryValidator.style.visibility = 'hidden';
        cityValidator.style.visibility = 'hidden';

        //validate the latitude and longitude
        if(isNaN(lat))
        {
            latitudeValidator.obj.innerHTML = '(Required)';
            latitudeValidator.style.visibility = 'visible';
            isValid = false;
        }
        else
        {
            if(lat <= -90.0 || lat >= 90.0)
            {
                latitudeValidator.obj.innerHTML = '(-90.0 < Latitude < 90.0)';
                latitudeValidator.style.visibility = 'visible';
                isValid = false;
            }
            else if(lat <= -85.0 || lat >= 85.0)
            {
                latitudeValidator.obj.innerHTML = '(Not visible from satellite)';
                latitudeValidator.style.visibility = 'visible';
                isValid = false;
            }
            else
            {
                //validation passes
                latitudeValidator.style.visibility = 'hidden';
            }
        }

        if(isNaN(lon))
        {
            longitudeValidator.obj.innerHTML = '(Required)';
            longitudeValidator.style.visibility = 'visible';
            isValid = false;
        }
        else
        {
            if(lon <= -360.0 || lon >= 360.0)
            {
                longitudeValidator.obj.innerHTML = '(-360.0 < Longitude < 360.0)';
                longitudeValidator.style.visibility = 'visible';
                isValid = fals粑;
            }
            else if(getLongitudeDistance(slon, lon) >= 85.0)
            {
                longitudeValidator.obj.innerHTML = '(Not visible from satellite)';
                longitudeValidator.style.visibility = 'visible';
                isValid = false;
            }
            else
            {
                longitudeValidator.style.visibility = 'hidden';
            }
        }
    }

    if(isNaN(diam))
    {
        diameterValidator.obj.innerHTML = '(Required)';
        diameterValidator.style.visibility = 'visible';
        isValid = false;
    }
    else if(diam <= 0.1 || diam >= 100.0)
    {
        diameterValidator.obj.innerHTML = '(0.10 m < Frequency < 100.00 m)';
        diameterValidator.style.visibility = 'visible';
        isValid = false;
    }
    else
    {
        diameterValidator.style.visibility = 'hidden';
    }

    var spring = document.Form1.Season_0;
    var fall = document.Form1.Season_1;
    var seasonValidator = new getObj('SeasonValidator');
    if(!spring.checked && !fall.checked)
    {
        seasonValidator.obj.innerHTML = '(Select a season)';
        seasonValidator.style.visibility = 'visible';
        isValid = false;
    }
    else
    {
        seasonValidator.style.visibility = 'hidden';
    }

    return isValid;
}

function getLongitudeDistance(satLon, lon)
{
    //get both in the [0, 360) range
    if (satLon < 0)
        satLon += 360.0;

    if (lon < 0)
        lon += 360.0;

    //now determine the distance between the points directly
    //and wrapping around the 0.0/360.0 longitude
    var straight = 0.0;
    var wrap = 0.0;
    if (lon < satLon)
    {
        straight = satLon - lon;
        wrap = (360.0 - satLon) + lon;
    }
    else
    {
        straight = lon - satLon;
        wrap = (360.0 - lon) + satLon;
    }

    //return the smaller value
    return straight < wrap ? straight : wrap;
}

//latitude/longitude auto-format function
function formatNumber(sender, precision)
{
    if(sender != null)
    {
        var num = (parseFloat(sender.value)).toFixed(precision);
        if(!isNaN(num)) sender.value = num;
    }
}
function onBlurDownlink()
{
    formatNumber(document.Form1.Downlink, 0);
}
function onBlurLatitude()
{
    formatNumber(document.Form1.Latitude, 2);
}
function onBlurLongitude()
{
    formatNumber(document.Form1.Longitude, 2);
}
function onBlurDiameter()
{
    formatNumber(document.Form1.Diameter, 2);
}



function OpenTimeZoneWindow()
{
    win = window.open('TimeZone.aspx', 'TimeZoneWindow_OSI', 'resizable=0,width=445,height=460');
    win.focus();
    return false;
}

function UpdateTimeZone()
{
    __doPostBack('TimeZoneLink','')
}

function OpenHelpWindow()
{
    win = window.open('SunOutageHelp.htm', 'MainHelpWindow_OSI', 'resizable=1,scrollbars=1,width=450,height=400');
    win.focus();
    return false;
}

function OpenTermsOfUseWindow()
{
    win = window.open('TermsOfUse.htm', 'TermsOfUseWindow_OSI', 'resizable=1,scrollbars=1,width=450,height=425');
    win.focus();
    return false;
}



/*KNOWN AJAX BUG(WORKITEM #12189) :CascadingDropDown not obeying
 * disabled state of DropDownList, hence setting it forcefully  */
   function onPopulated()
   {   
       $get("City").disabled = $get("Country").disabled
   }
    
    function pageLoad(sender, args)
    {
        var casc = $find("cityddl");
        casc.add_populated(onPopulated);
        
    }