﻿//EVENT HANDLERS
$(function() {
    $("#btnClose").click(function() { $("#CountyInfoPopup").hide("fast"); })
    $("#btnSave").click(function() { UpdateCountyInfo(); }) 
});

var DataType = { "Links":"Links","Analyses":"Analyses","Contacts":"Contacts"};

//UPDATE SINGLE based on type links or analyses
function UpdateCountyInfoByType(type, clickedButton) {
    $(clickedButton).html("Saving...");

    if (type == DataType.Contacts) {
        var element = $(clickedButton).next().next();
        var Name = $(element).children()[0].value;
        var Phone = $(element).children()[1].value;
        var Email = $(element).children()[2].value;
        var ID = $(element).children()[3].value;

        var jsonData = "{";
        jsonData += "\"ID\":" + ID;
        jsonData += ",\"Name\":\"" + Name + "\"";
        jsonData += ",\"Phone\":\"" + Phone + "\""
        jsonData += ",\"Email\":\"" + Email + "\"";
        jsonData += "}";

        url = "SuitabilityAnalyses.aspx/UpdateSuitabilityContactsData";        
    }
    else { //LINKS + ANALYSES
        var element = $(clickedButton).next().next();
        var Link = $(element).children()[0].value;
        var Description = $(element).children()[1].value;
        var ID = $(element).children()[2].value;

        var jsonData = "{";
        jsonData += "\"ID\":" + ID;
        jsonData += ",\"fips\":" + CurrentFips;
        jsonData += ",\"link\":\"" + Link + "\""
        jsonData += ",\"description\":\"" + Description + "\"";
        jsonData += "}";

        var url;

        if (type == DataType.Links)
            url = "SuitabilityAnalyses.aspx/UpdateSuitabilityLinksData";
        else if (type == DataType.Analyses)
            url = "SuitabilityAnalyses.aspx/UpdateSuitabilityAnalysisData";
    }

    DoAJAX(jsonData,url,
        function(msg) {
            //alert(msg);
            $(clickedButton).html("Saved");
        },
        function(msg) {
            alert(msg);
        });
}
//UPDATE STATUS BY FIPS
function updateStatusByFips(clickedElement) {
    var Fips = $("#Fips").val();
    var url = "SuitabilityAnalyses.aspx/UpdateSuitabilityStatus";
    var status;

    $(clickedElement).html("Saving...");

    $("#StatusRbl").children().each(function() 
        {
            if (this.checked == true) 
                status = this.title;
        }
    );

    var jsonData = "{";
    jsonData += "\"fips\":" + Fips;
    jsonData += ",\"status\":\"" + status + "\""
    jsonData += "}";

    $.ajax({
        type: "POST",
        cache: false,
        url: url,
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            //alert(msg);
            $(clickedElement).html("Saved");
            window.location = "SuitabilityAnalyses.aspx";
            $("#MapImage").attr("src", "map/MapLatest.png?a=" + Math.random() * 100);
         },
         /*This isn't doing it right. msg is an XMLHttpRequest object.
          See http://encosia.com/2009/03/04/use-jquery-to-catch-and-display-aspnet-ajax-service-errors/ */
        error: function(msg) {
            alert(msg);
        }
    });
}

//INSERTING INFO
function InsertCountyInfo(type, clickedElement) {
    var url;
    var Fips = $("#Fips").val();
    var jsonData = '';

    //shared functionality
    $(clickedElement).html("Adding ...");
    
    if (type == DataType.Links)
        url = "SuitabilityAnalyses.aspx/InsertSuitabilityLinksData";
    else if (type == DataType.Analyses)
        url = "SuitabilityAnalyses.aspx/InsertSuitabilityAnalysisData";
    else if (type == DataType.Contacts)
        url = "SuitabilityAnalyses.aspx/InsertSuitabilityContactsData";

    //LINKS and ANALYSES

    if (type == DataType.Analyses || type == DataType.Links) {
        jsonData = "{";
        jsonData += "\"fips\":" + Fips;
        jsonData += ",\"link\":\"\"";
        jsonData += ",\"description\":\"\"";
        jsonData += "}";
    }
    if (type == DataType.Contacts) {
        jsonData = "{";
        jsonData += "\"Fips\":" + Fips;
        jsonData += ",\"Name\":\"\"";
        jsonData += ",\"Phone\":\"\"";
        jsonData += ",\"Email\":\"\"";
        jsonData += "}";
    }

    DoAJAX(jsonData,url,
        function(msg) {
            //alert(msg);
            getCountyInfo(CurrentFips, CurrentCountyName, CurrentRegionName);
            $(clickedElement).html("Add +");
        },
        function(msg) {
            alert(msg);
        });    
}

function DoAJAX(jsonData,url, successFunction, errorFunction) {
    $.ajax({
        type: "POST",
        cache: false,
        url: url,
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success:successFunction,
        error: errorFunction
    });
}

 //DELETING INFO
function DeleteItemSingle(type, clickedElement) {
    var ID = $(clickedElement).next().children()[2].value;

    if (type == DataType.Contacts)
        ID = $(clickedElement).next().children()[3].value;
    
    var jsonData = "{";
    jsonData += "\"ID\":" + ID;
    jsonData += "}";

    $(clickedElement).html("Deleting ...");                 

    var url;

    if (type == DataType.Links)
        url = "SuitabilityAnalyses.aspx/DeleteSuitabilityLinksData";
    else if (type == DataType.Analyses)
        url = "SuitabilityAnalyses.aspx/DeleteSuitabilityAnalysisData";
    else if (type == DataType.Contacts)
        url = "SuitabilityAnalyses.aspx/DeleteSuitabilityContactsData";

    DoAJAX(jsonData, url,
        function(msg) {
            //alert(msg);
            getCountyInfo(CurrentFips, CurrentCountyName, CurrentRegionName);
            $(clickedElement).html("Add +");
        },
        function(msg) {
            alert(msg);
        });    
 }
 var CurrentFips, CurrentCountyName, CurrentRegionName;
//LOADING INFO   
function getCountyInfo(i_fips, i_county_name, i_region_name) {

    CurrentFips = i_fips;
    CurrentCountyName = i_county_name;
    CurrentRegionName = i_region_name;
    
     $('#CountyInfoContent').html('<br/><img src="images/ajax-loader-Large.gif" />');
     $('#CountyInfoPopup').show("fast");
     $("#CountyInfoPopup").draggable();
     $("#Fips").val(i_fips);
     $("#ParishName").html(i_county_name + " Parish");

     var jsonData = "{\"fips\":" + i_fips + "}";
     var url = "SuitabilityAnalyses.aspx/GetSuitabilityDataByFips";

     DoAJAX(jsonData,url,   
        function(msg) {
                 getCountyInfoSuccess(msg,UserIsAdmin());
         },
        function(msg) {
             getCountyInfoFailure(msg);
         });
 }


function getCountyInfoSuccess(msg,isAdmin) {
    if (msg != "") {
        var data;
        try {
            data = JSON.parse(msg);
        }
        catch (e) {
            alert(e);
            return false;
        }

        var CountyInfo = $('#CountyInfoContent');
        var CountyContent = "";

        ///BUILD STATUS CONTROLS

        CountyContent += "<div id='Status' class='ContentSubTitle'>Status</div>";
        if (isAdmin == true){
            CountyContent += "<div><span class='SaveButton' onclick=\"updateStatusByFips(this)\">Save</span><span id='StatusRbl'>";
            
            var Statuses = [ "Pending","Available"];
            
            for(var i =0;i < Statuses.length;i++) {
                var checked = data.Status == Statuses[i] ? "Checked='checked'" : "";
                CountyContent += "<input type='radio'  Title='" + Statuses[i] + "' " + checked + " name='StatusRbl'/><span>" + Statuses[i] + "</span>";          
            }

            CountyContent += "</span></div>";                        
        }
        else
            CountyContent += "<div class='ContentChildren'>" + data.Status + "</div>";

        CountyContent += loadData(data.SuitabilityAnalyses, DataType.Analyses, isAdmin);
        CountyContent += loadData(data.SuitabilityLinks, DataType.Links, isAdmin);
        CountyContent += loadData(data.SuitabilityContacts, DataType.Contacts, isAdmin);

        CountyInfo.html(CountyContent);
        //$("#ErrorLabel").html(CountyContent);
    }
    else {
        CountyInfo.html('<p>No community information for selected county</p>')
    }
    $("#CountyInfoFooter div").hover(function() { $(this).addClass("PointerCursor") }, function() { $(this).removeClass("PointerCursor") });
    $("#ContentChildren").hover(function() { $(this).addClass("ContentChildrenHover") }, function() { $(this).removeClass("ContentChildrenHover") });
    $(".SaveButton").hover(
        function() {
                            $(this).removeClass("SaveButton");
                            $(this).addClass("SaveButtonHover")
                        },
        function() {
                            $(this).removeClass("SaveButtonHover");
                            $(this).addClass("SaveButton");                 
        });
        $(".AddButton").hover(
        function() {
                            $(this).removeClass("AddButton");        
                            $(this).addClass("AddButtonHover")
                        },
        function() {
                            $(this).addClass("AddButton");        
                            $(this).removeClass("AddButtonHover") 
                         });        
    
}
//LOAD DATA
function loadData(collection, type,isAdmin) {
    var result = "<div class='ContentSubTitle'>";
    if (isAdmin == true)
        result += "<div onclick=\"InsertCountyInfo('" + type + "',this)\" class='AddButton'>Add+</div>";
    result +="<div>" +  type + "</div></div>";
    result += "<div id='" + type + "'>";    
   
    if (collection.length != 0) {
        if (collection[0]  != undefined) {
            for (var i = 0; i < collection.length; i++) {
                var r = collection[i];
                var values;

                if (isAdmin == true) {
                    if (r.Name != undefined || r.Link != undefined) {

                        if (type == DataType.Contacts)
                            values = [{ "Key": "Name", "Value": r.Name == undefined ? '' : r.Name }, { "Key": "Phone", "Value": r.Phone == undefined ? '' : r.Phone }, { "Key": "Email", "Value": r.Email == undefined ? '' : r.Email}];
                        else
                            values = [{ "Key": "Link", "Value": r.Link == undefined ? '' : r.Link }, { "Key": "Description", "Value": r.Description == undefined ? '' : r.Description}];

                        result += loadAdminControls(r.ID, values, type);
                    }
                }
                else {
                    if (r.Name != undefined || r.Link != undefined) {
                        if (type == DataType.Contacts)
                            result += "<div class='ContentChildren'>" + (r.Name == undefined ? "" : r.Name) + ", " + (r.Phone == undefined ? "" : r.Phone) + ", " + (r.Email == undefined ? "" : r.Email) + "</div>";
                        else
                            result += "<div class='ContentChildren'>" + (r.Link == undefined ? '' : r.Link) + ", " + (r.Description == undefined ? '' : r.Description) + "</div>";
                    }
                }
            }
        }
    }

    result += "</div>";        
    
    return result;
}

function loadAdminControls(id, values, type) {
    var saveButton = "<span class='SaveButton' onclick=\"UpdateCountyInfoByType('" + type + "',this)\">Save</span>";
    var deleteButton = "<span class='SaveButton' onclick=\"DeleteItemSingle('" + type + "',this)\">Delete</span>";
    var content = "<span class='ContentChildren'>";
    for (var i = 0; i < values.length; i++) {
        var r = values[i];
        if (type == DataType.Contacts)
            content += r.Key + ":<input type='text' value='" + r.Value + "' style='width:135px;'/>";
        else
            content += r.Key + ":<input type='text' value='" + r.Value + "'/>";
    }
    content += "<input type='hidden' value='" + id + "'/></span><br/>"
    return saveButton + deleteButton + content;
}
function getCountyInfoFailure(msg) {
    $('#CountyInfoContent').html(msg);
}

// DONE - Status disappears/doesn't show up again in IE6, when adding a new analysis
// Add in mouseover event for IE6 :hover equivalent
// Buttons are too tall in IE6
// Close button is too small in FF - make the close button an image instead of a div

// DONE -  Status saving
// DONE - Analyses inserting
// DONE - Analyses saving
// DONE - Analyses deleting

// DONE - Links adding
// DONE - Links saving
// DONE - Links deleting

// DONE - Contacts adding
// DONE - Contacts saving
// DONE - Contacts deleting 
