﻿//global vars
var locationIsValid = false;
var veLong = "";
var veLat = "";
var isSubmit = false;

//
//For getting report details
//START
function GetReportDetails(lat, lon, city, state, showBackToSearchResults, isCurrentSeasonReports) 
{
    ShowProgress('labelReportDetails', 'Retrieving report details... please wait...');
    
    ShowMask();
    
    currentView = "reportDetails";
    
    document.getElementById('formWrapper').style.display = "block";
    
    document.getElementById('formWrapper').style.width = "800px";
        
    document.getElementById('reportDetails').style.display = "block";
    
    document.getElementById('reportDetails').style.height = "500px";

	document.getElementById('helpContent').style.display = "none";
    
    document.getElementById('reportSearchDetails').style.display = "none";
    
    document.getElementById('subscribeForm').style.display = "none";
    
    document.getElementById('weatherDetails').style.display = "none";
    
    document.getElementById('submitForm').style.display = "none";
    
    document.getElementById('labelToolbarTitle').innerHTML = "Report Details";
    
    //urchinTracker('/migrationMap/viewReportDetails/' + city + '_' + state);
	pageTracker._trackPageview('/migrationMap/viewReportDetails/' + city + '_' + state);
    
    Migmap_pageMethods.GetReportDetails(lat, lon, city, state, showBackToSearchResults, isCurrentSeasonReports, GetReportSuccess, GetReportFailed);

}

function ShowProgress(div, msg)
{
    document.getElementById(div).innerHTML = msg;
}

function GetReportSuccess(response)
{
    // set the destination textbox value with the ContactName 
    document.getElementById('labelReportDetails').innerHTML = response;

	MoveObj('reportSearchDetails',0,100);

	MoveMask(0,65);

	//reload ad frame. do here as not to cause potential IO conflict
	reloadGoogleAd();

}

function GetReportFailed(response)
{
    // alert message on some failure
    alert(response.get_message());
}
//For getting report details
//END

//For getting avery details
//START
function GetAveryReportDetails(lat, lon, city, state, reportID, showBackToSearchResults) 
{

	//map.ClearInfoBoxStyles(); close but no cigar. hides current infobox but disables all others

    ShowProgress('labelAveryReportDetails', 'Retrieving report details... please wait...');
    
    ShowMask();
    
    currentView = "averyReportDetails";
    
    document.getElementById('formWrapper').style.display = "block";
    
    document.getElementById('formWrapper').style.width = "800px";
        
    document.getElementById('averyReportDetails').style.display = "block";
    
    document.getElementById('averyReportDetails').style.height = "500px";

	document.getElementById('helpContent').style.display = "none";
    
    document.getElementById('reportSearchDetails').style.display = "none";
    
    document.getElementById('subscribeForm').style.display = "none";
    
    document.getElementById('weatherDetails').style.display = "none";
    
    document.getElementById('submitForm').style.display = "none";

	document.getElementById('reportDetails').style.display = "none";
    
    document.getElementById('labelToolbarTitle').innerHTML = "Avery Report Details";

	document.getElementById('averyReportDetails').style.zIndex = 2000;
    
    //urchinTracker('/migrationMap/viewReportDetails/' + city + '_' + state);
	pageTracker._trackPageview('/migrationMap/viewAveryReportDetails/' + city + '_' + state);
    
    Migmap_pageMethods.GetAveryReportDetails(lat, lon, city, state, reportID, showBackToSearchResults, GetAveryReportSuccess, GetAveryReportFailed);

}

function GetAveryReportSuccess(response)
{
    // set the destination textbox value with the ContactName 
    document.getElementById('labelAveryReportDetails').innerHTML = response;

	MoveObj('averyReportDetails',0,100);

	MoveMask(0,65);

	//reload ad frame. do here as not to cause potential IO conflict
	reloadGoogleAd();

}

function GetAveryReportFailed(response)
{
    // alert message on some failure
    alert(response.get_message());
}
//For getting avery details
//END

//For submitting a new report
//START

function SubmitReport()
{
    document.getElementById('submitReportProgress').style.display = "inline";
    document.form1.buttonSubmit.value = "please wait...";
    document.form1.buttonSubmit.disabled = true;
    
    var firstName = document.form1.txtFirstName.value;
    var lastName = document.form1.txtLastName.value;
    var email = document.form1.txtEmail.value;
    var allowContact = false;
    
    if (document.form1.chkContact.checked)
    {
        allowContact = true;
    }
    
    var countryID = 1;
    
    if (document.form1.rbCa.checked)
    {
        countryID = 2;
    }
    
    var city = document.form1.txtCity.value;
    var stateProvinceID = document.form1.ddUsStates.selectedIndex;
    
    var stateProvinceName = document.form1.ddUsStates.options[stateProvinceID].text;
    stateProvinceID = document.form1.ddUsStates.options[stateProvinceID].value;
    
    if (countryID == 2)
    {
        stateProvinceID = document.form1.ddCaProvinces.selectedIndex;
        
        stateProvinceName = document.form1.ddCaProvinces.options[stateProvinceID].text;
        stateProvinceID = document.form1.ddCaProvinces.options[stateProvinceID].value;
    }
    
    var zip = document.form1.txtZip.value;
    var classificationID = document.form1.ddClass.selectedIndex;
    var activityLevelID = document.form1.ddActivityLevel.options.value;
    var timeID = document.form1.ddTime.selectedIndex;
    var weatherID = document.form1.ddWeather.selectedIndex;
    var tempID = document.form1.ddTemp.selectedIndex;
    var windID = document.form1.ddWind.selectedIndex;
    var windDirectionID = document.form1.ddWindDir.selectedIndex;
    var newsletter = false;
    
    if (document.form1.chkNewsletter.checked)
    {
        newsletter = true;
    }
    
    var comments = document.form1.txtComments.value;
    var clientBrowser = document.form1.txtClientBrowser.value;
    var clientScreenSize = document.form1.txtScreenSize.value;
    var clientIP = document.form1.txtClientIP.value;
    
    //validate input
    var reportErrors = document.getElementById('reportErrors');
    reportErrors.innerHTML = "";
    reportErrors.style.display = "none";
      
    if (firstName == "" || lastName == "" || email == "" || city == "" || stateProvinceID <= 0 || classificationID <= 0)
    {
        reportErrors.innerHTML = "Please complete all required fields.";
        reportErrors.style.display = "inline";
    }
    else if (document.getElementById('locationValid').value == "false")
    {
        //added to catch if location was validated since it is a page method and is asynch. without it, there is a way to get around an invalid location when submitting.
        document.getElementById('reportErrors').innerHTML = "We were unable to pinpoint the location you provided.  Please check your spelling or provide another nearby city.";
        document.getElementById('reportErrors').style.display = "inline";
    }
    else
    {
        if (email != "")
        {
            var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;

            if (!pattern.test(email))
            {
                reportErrors.innerHTML += "Email address is invalid.";
                reportErrors.style.display = "inline";
            }
        }
        if (activityLevelID <= 0)
        {
            if (reportErrors.innerHTML != "")
            {
                reportErrors.innerHTML += "<br/>";
            }
            reportErrors.innerHTML += "Please select an activity level.";
            reportErrors.style.display = "inline";
        }
    }
        
    if (reportErrors.innerHTML == "")  //no problems
    {
        if ((veLat) && (veLong))
        {
		//	alert("countryID="+countryID+";stateProvID="+stateProvinceID+";city="+city+". the form may not submit. currently testing some functionality. thanks for testing bad words");
            Migmap_pageMethods.SubmitReport(firstName, lastName, email, allowContact, classificationID, countryID, city, stateProvinceID, zip, veLong,
            veLat, activityLevelID, timeID, weatherID, tempID, windID, windDirectionID, newsletter, comments, clientBrowser, clientScreenSize,
            clientIP, stateProvinceName, SubmitReportSuccess, SubmitReportFailed);
        }
    }
    
    document.getElementById('submitReportProgress').style.display = "none";
    document.form1.buttonSubmit.value = "submit report";
    document.form1.buttonSubmit.disabled = false;
}

function SubmitReportSuccess(response)
{
    document.getElementById('panelReportStatus').style.display = "inline";
    document.getElementById('panelReportDefault').style.display = "none";
    currentView = "reportStatus";
    //urchinTracker('/migrationMap/submitReportSuccess');
	pageTracker._trackPageview('/migrationMap/submitReportSuccess');
}

function SubmitReportFailed(response)
{
    document.getElementById('panelReportStatus').style.display = "inline";
    document.getElementById('panelReportDefault').style.display = "none";
}

function VerifyLocation()
{
    document.getElementById('verifyLocationStatus').innerHTML = "";
    document.getElementById('reportErrors').innerHTML = "";
    document.getElementById('reportErrors').style.display = "none";
    document.getElementById('locationValid').value = "";
    
    var countryID = 1;
    
    if (document.form1.rbCa.checked)
    {
        countryID = 2;
    }
    
    var city = document.form1.txtCity.value;
    var stateProvinceID = document.form1.ddUsStates.selectedIndex;
    var stateProvinceName = document.form1.ddUsStates.options[stateProvinceID].text;
    
    if (countryID == 2)
    {
        stateProvinceID = document.form1.ddCaProvinces.selectedIndex;
        stateProvinceName = document.form1.ddCaProvinces.options[stateProvinceID].text;
    }
    
    if ((city) && (stateProvinceID != 0))
    {
        document.form1.buttonSubmit.disabled = true;
        //document.getElementById('verifyLocationStatus').innerHTML = "verifying location...";
        
        //run verify and set VE long/lat asynch
        Migmap_pageMethods.ValidateLocation(city, stateProvinceName, countryID, ValidateLocationSuccess, ValidateLocationFailed);
        
        SetVELongLat(city, stateProvinceName);
    }
    
    return locationIsValid;
}

function ValidateLocationSuccess(response)
{       
    if (response != "")
    {
        response = response.toString().split("|");
        
        locationIsValid = true;
        //document.getElementById('verifyLocationStatus').innerHTML = "<span style=\"color:#009900\">location ok</span>";
        
        document.form1.txtCity.value = response[0];
        document.form1.txtZip.value = response[1];
    }
    else
    {
        locationIsValid = false;
        //document.getElementById('verifyLocationStatus').innerHTML = "<span style=\"color:#ff0000\">invalid location</span>";
        
        document.getElementById('reportErrors').innerHTML = "We were unable to pinpoint the location you provided.  Please check your spelling or provide another nearby city.";
        document.getElementById('reportErrors').style.display = "inline";
        document.getElementById('locationValid').value = "false";
    }
    
    document.form1.buttonSubmit.disabled = false;
}

function ValidateLocationFailed(response)
{
    document.form1.buttonSubmit.disabled = false;
    //document.getElementById('verifyLocationStatus').innerHTML = "<span style=\"color:#ff0000\">invalid location</span>";
    document.getElementById('reportErrors').innerHTML = "We were unable to pinpoint the location you provided.  Please check your spelling or provide another nearby city.";
    document.getElementById('reportErrors').style.display = "inline";
    document.getElementById('locationValid').value = "false";
    document.txtComments.value = response;
}

function SetVELongLat(city, stateProvincename)
{
    //this is going to get the long/lat from VE.  it will not be used if the zip code database doesn't verify that the location is valid,
    //but we do this anyway asynchronously to save process time.
    map.Find(null, city + " " + stateProvincename, null, null, null, null, null, null, false, false, SetVELongLatSuccess);
}

function SetVELongLatSuccess(shapeLayer, findResults, places, moreResults, errorMsg)
{
    if (places)
    {
        veLat = places[0].LatLong.Latitude;
        veLong = places[0].LatLong.Longitude;
    }
}
//for submitting a new report
//END



//Search location for reports
//START
function LocationSearchReports(lat, lon, countryID)
{
    //search for reports by lat lon
    Migmap_pageMethods.LocationSearchReports(lat, lon, countryID, LocationSearchReportsSuccess, LocationSearchReportsSuccess);
}

function LocationSearchReportsSuccess(response)
{
    if (response)
    {
        ShowMask();
        
        currentView = "searchDetails";
        
        document.getElementById('formWrapper').style.width = "800px";
        
        document.getElementById('formWrapper').style.display = "block";
        
        document.getElementById('reportDetails').style.display = "none";

		document.getElementById('helpContent').style.display = "none";
        
        document.getElementById('reportSearchDetails').style.display = "block";
        
        document.getElementById('reportSearchDetails').style.height = "500px";
        
        document.getElementById('submitForm').style.display = "none";
        
        document.getElementById('subscribeForm').style.display = "none";
        
        document.getElementById('weatherDetails').style.display = "none";
        
        document.getElementById('labelToolbarTitle').innerHTML = "Report Details";
        
        document.getElementById('reportSearchDetails').innerHTML = response;
        
        //urchinTracker('/migrationMap/searchForReportsResults/');
		pageTracker._trackPageview('/migrationMap/searchForReportResults');

		MoveObj('reportSearchDetails',0,100);

		MoveMask(0,65);

		reloadGoogleAd();

    }
    else
    {
        alert("No reports have been submited for 24 hours within 100 miles of this location.  Please try another search from a different location.");
    }
}
//Search location for reports
//END

//Get weather for location
function LocationWeather(lat, lon, location)
{
    ShowMask();

	MoveObj('labelWeatherDetails',0,100);

	MoveMask(0,65);

	reloadGoogleAd();
    
    currentView = "weatherDetails";
    
    document.getElementById('formWrapper').style.width = "835px";
    
    //document.getElementById('formWrapper').style.height = "495px";
    
    document.getElementById('formWrapper').style.display = "block";
    
    document.getElementById('reportDetails').style.display = "none";
    
    document.getElementById('reportSearchDetails').style.display = "none";
    
    document.getElementById('weatherDetails').style.display = "block";
    
    document.getElementById('submitForm').style.display = "none";

	document.getElementById('averyReportDetails').style.display = "none";

	document.getElementById('helpContent').style.display = "none";
    
    document.getElementById('subscribeForm').style.display = "none";
    
    document.getElementById('labelToolbarTitle').innerHTML = "Weather Details";
    
    document.getElementById('labelWeatherDetails').innerHTML = "Please wait while we fetch the latest data for " + location + "...";
    
    //urchinTracker('/migrationMap/viewWeather/');
	pageTracker._trackPageview('/migrationMap/viewWeather');
    
    Migmap_pageMethods.GetLocationWeather(lat, lon, location, GetWeatherSuccess, GetWeatherFailed);
}

function GetWeatherSuccess(response)
{
    if (response)
    {      
        document.getElementById('labelWeatherDetails').innerHTML = response;
    }
    else
    {
        document.getElementById('labelWeatherDetails').innerHTML = response;
    }
}

function GetWeatherFailed(response)
{
    alert("Weather could not be retrieved. Please try again later.");
}
//END

//Start Save Subscription
function SaveSubscription(lat, lon, email)
{
	strEmail = new String(email);
	if(strEmail == "")
	{
		alert("Please enter your email address.");
	}
	else
	{
		Migmap_pageMethods.SaveSubscription(lat, lon, email, SubscriptionFailed, SubscriptionSuccess);
	}
}

function SubscriptionSuccess(response)
{
    if (!response)
    {
        CancelSubscription();
        alert("You will receive an email when a report is submitted for this location");
    }
}

function SubscriptionFailed(response)
{
    //for now just say everything's ok -revisiting this soon.
    CancelSubscription();
    alert("You will receive an email when a report is submitted for this location");
}
//end save subscription