﻿// globals
var breadcrumbCurrentId = "";
var advSearchOpen = false;
var mapSearchOpen = false;
var errtxt = ""
var locationMarker = null;
var map = null;

function setupTableSorter() {
    $(".PostsView").tablesorter({
        //sortList: [[2, 1]],
        headers: {
            // assign the secound column (we start counting zero) 
            0: {
                // disable it by setting the property sorter to false 
                sorter: false
            },
            //5: {
            //    // disable it by setting the property sorter to false 
            //    sorter: false
            //},
            // assign the third column (we start counting zero) 
            6: {
                // disable it by setting the property sorter to false 
                sorter: false
            },
            7: {
                // disable it by setting the property sorter to false 
                sorter: false
            }
        }
    });

    $(".PostsView tr th.header").prepend("<span style='float:right;' class='ui-icon ui-icon-triangle-2-n-s'>ud</span>");
    $(".PostsView tr th.headerSortUp").children(".ui-icon").removeClass("ui-icon-triangle-2-n-s").removeClass("ui-icon-triangle-1-n").addClass("ui-icon-triangle-1-s");
    $(".PostsView tr th.headerSortDown").children(".ui-icon").removeClass("ui-icon-triangle-2-n-s").removeClass("ui-icon-triangle-1-s").addClass("ui-icon-triangle-1-n");
}

function setupAccordion(hide) {
    //alert("1. setupAccordion(hide)");

    // Accordion
    if (hide) {
        //alert("2. setupAccordion(hide=true)");

        $('#accordion a').click(function() {
            toggleSearchAccordion(this, $(this).attr("id"));
            return false;
        });
        hideSearchAccordion("advancedSearch");
        hideSearchAccordion("mapSearch");
    }
    else {
        //alert("3. setupAccordion(hide=false)");
        
        $('#accordion a').click(function() {
            toggleSearchAccordion(this, $(this).attr("id"));
            return false;
        });
    }
    //alert("4 setupAccordion - End");
}

// Toggle the advanced search options for the click event.
function toggleSearchAccordion(thisObj, panel) {
    //alert("1. toggleSearchAccordion");
    
    $("." + panel + "Panel").toggle('fast');
    $(thisObj).children("span.ui-icon").toggleClass("ui-icon-triangle-1-e");
    $(thisObj).children("span.ui-icon").toggleClass("ui-icon-triangle-1-s");
    if (panel.indexOf("advanced") >= 0) {
        advSearchOpen = !advSearchOpen;
        if (advSearchOpen) {
            hideSearchAccordion("mapSearch");
            toggleSearchInfoBoxContents();
        }
    }
    else {

        //alert("2. toggleSearchAccordion - mapsearch");

        //mapSearchOpen = !mapSearchOpen;

        toggleSearchInfoBoxContents();
        if (!mapSearchOpen) {
            //alert("3. toggleSearchAccordion - mapsearch = false");
            $("#hiddenLatLng input[id$='mapLat']").val(0);
            //alert("3a. toggleSearchAccordion - mapLat");
            $("#hiddenLatLng input[id$='mapLng']").val(0);
            //alert("3b. toggleSearchAccordion - mapLng");
            //setupMap(setLatLng);



        }
        else {
            //alert("4. toggleSearchAccordion - mapsearch = true");

            hideSearchAccordion("advancedSearch");
        }

        mapSearchOpen = !mapSearchOpen; // gary new
        
        //alert("5. toggleSearchAccordion - End");
    }

    //alert("5 toggleSearchAccordion - end");

}

function toggleSearchInfoBoxContents() {
    $("#searchInfoDialog #quickLinksDialog2").toggle();
}

// Hide the advanced search options.
function showSearchAccordion(panel) {
    //alert("1. showSearchAccordion");

    $("." + panel + "Panel").show();
    $('#accordion a#' + panel).children("span.ui-icon").removeClass("ui-icon-triangle-1-e");
    $('#accordion a#' + panel).children("span.ui-icon").addClass("ui-icon-triangle-1-s");
    if (panel == "advancedSearch") {
        advSearchOpen = true;
    }
    else {  // "mapSearch"
        mapSearchOpen = true;

        //alert("2. showSearchAccordion - mapSearchOpen = true");
    }
    //alert("3. showSearchAccordion - End");
}

// Show the advanced search options.
function hideSearchAccordion(panel) {
    //alert("1. hideSearchAccordion");

    $("." + panel + "Panel").hide();
    $('#accordion a#' + panel).children("span.ui-icon").addClass("ui-icon-triangle-1-e");
    $('#accordion a#' + panel).children("span.ui-icon").removeClass("ui-icon-triangle-1-s");
    if (panel == "advancedSearch") {
        advSearchOpen = false;
    }
    else {  // "mapSearch"
        mapSearchOpen = false;
        //alert("2. hideSearchAccordion - mapSearchOpen = false");
    }
    //alert("3. hideSearchAccordion - End");

}

function EndPostBackChangeRequestHandler(sender, args) {
    //alert("1. EndPostBackChangeRequestHandler");

    setupAccordion(false);

    if (advSearchOpen) {
        showSearchAccordion("advancedSearch");
    }
    if (mapSearchOpen) {
        showSearchAccordion("mapSearch");
    }

    if ($(".mapSearchPanel").length > 0) {
        var setLatLng = false;
        if ($("#hiddenLatLng input[id$='mapLat']").val() != 0) {
            setLatLng = true;
        }
        setupMap(setLatLng);
    }

    //alert("2. EndPostBackChangeRequestHandler - End");

}

function EndCreatePostWizardChangeRequestHandler(sender, args) {
    //Scroll to the top of the page if the post wizard changes stage
    if (breadcrumbCurrentId.length > 0) {
        if (breadcrumbCurrentId != $("span.current").attr("id")) {
            window.scrollTo(0, 0);
            breadcrumbCurrentId = $("span.current").attr("id");
        }
    }
}

// jQuery document loading and init code

$(document).ready(function() {
    setupTableSorter();

    $('div.submitButtons a.button').hover(
      function() { $(this).addClass('ui-state-hover'); },
      function() { $(this).removeClass('ui-state-hover'); }
    );

    $('div#submitButtons a.button').hover(
      function() { $(this).addClass('ui-state-hover'); },
      function() { $(this).removeClass('ui-state-hover'); }
    );

    $('div#submitButtons a.searchbutton').hover(
      function() { $(this).addClass('ui-state-hover'); },
      function() { $(this).removeClass('ui-state-hover'); }
    );

    $('input.button').hover(
      function() { $(this).addClass('ui-state-hover'); },
      function() { $(this).removeClass('ui-state-hover'); }
    );

    setupAccordion(true);

    if ($("#accordion").length > 0) {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndPostBackChangeRequestHandler);
    }

    if ($(".breadcrumb").length > 0) {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndCreatePostWizardChangeRequestHandler);

        breadcrumbCurrentId = $("span.current").attr("id");
    }

    if ($(".mapSearchPanel").length > 0) {
        var setLatLng = false;
        if ($("#hiddenLatLng input[id$='mapLat']").val() != 0) {
            setLatLng = true;
        }
        setupMap(setLatLng);
    }

    // Only on vendor directory page
    if ($(".vendor_category").length > 0) {
        $(".ui-dialog-titlebar").css("cursor", "pointer");
        $(".ui-dialog-titlebar").click(function() {
            $(this).children("span.ui-icon").toggleClass("ui-icon-triangle-1-w");
            $(this).children("span.ui-icon").toggleClass("ui-icon-triangle-1-s");
            $(this).next().toggle('fast');
        });
        if (window.location.search.length > 0) {
            $(".ui-dialog-titlebar").prepend("<span class='ui-icon ui-icon-triangle-1-w' style='float: right;'></span>");
            $(".ui-dialog-titlebar").next().hide();
        }
        else {
            $(".ui-dialog-titlebar").prepend("<span class='ui-icon ui-icon-triangle-1-s' style='float: right;'></span>");
        }
    }

    var pattern = /.+(prt=1).*/g;
    if (pattern.test(window.location)) {
        $(".removeOnPrint").hide();
    }
    else {
        $(".showOnPrint").hide();
    }
});

function setupMap(setLatLng) {
    //alert("In setupMap");
    
    map = new GMap2(document.getElementById('map_canvas'), { size: new GSize(400, 400) });
    var point = new GLatLng(43.9216647, -122.4026154);
    map.setCenter(point, 7);
    map.setUIToDefault();
    map.disableScrollWheelZoom();
        
    GEvent.addListener(map, "click", mapClick);

    if (setLatLng) {
        //alert("setupMap - 1. if setLatLng = true");

        if ($("#hiddenLatLng input[id$='mapLat']").val() != 0 && $("#hiddenLatLng input[id$='mapLng']").val() != 0) {
            var latitude = $("#hiddenLatLng input[id$='mapLat']").val();
            var longitude = $("#hiddenLatLng input[id$='mapLng']").val();
            point = new GLatLng(latitude, longitude);
        }

        map.setCenter(point, 7);

        $("#searchInfoDialog").show();
    }

    Create_Draggable_Icon(point);

    // Click event handlers from button
    $("#getresults").click(function() {
        var pt = locationMarker.getPoint();

        GetSeedZones(pt);

    });

    if (setLatLng) {
        showSearchAccordion("mapSearch");
        
        var pt = locationMarker.getPoint();

        GetSeedZones(pt);
        
        //alert("2. setupMap - if setLatLng = true");

    }

    //alert("3. setupMap - End of function");

}

function GetSeedZones(pt) {

    var stateNumber = $(".stateDDL").val();
    var productGroupNumber = $(".productGroupDDL").val();
    var speciesNumber = $(".speciesDDL").val();
    var sessionKey = $("span#keyDDL input").val();
    var latitude = pt.lat();
    var longitude = pt.lng();
    
    // Get json results from json_service
    $.getJSON("JSON_service.aspx", { key: sessionKey, st: stateNumber, pg: productGroupNumber, sp: speciesNumber, lat: latitude, lng: longitude }, function(data) {
    //$.getJSON("JSON_service.aspx", { st: stateNumber, pg: productGroupNumber, sp: speciesNumber, lat: latitude, lng: longitude }, function(data) {

        var ca = new Array();
        ca.push("#FF0000");
        ca.push("#00FF00");
        ca.push("#0000FF");
        ca.push("#0F0F0F");
        ca.push("#FF9900");
        ca.push("#FF00FF");
        ca.push("#00FF99");
        ca.push("#0066FF");
        ca.push("#339966");
        ca.push("#330033");

        clearMap();
        Create_Draggable_Icon(locationMarker.getLatLng());
        
        var zonesDiv = $("#zones");
        zonesDiv.html("");

        if (data.length > 0) {
            for (j = 0; j < data.length; j++) {
                var searchData = data[j];
                var polyPoints = new Array();

                for (i = 0; i < searchData.polygon.length; i++) {
                    polyPoints.push(new GLatLng(searchData.polygon[i].lat, searchData.polygon[i].lng));
                }

                draw_Polygon(polyPoints, ca[j % 10], 2, 0.7, ca[j % 10], 0.1);

                zonesDiv.append("<p style='color: " + ca[j % 10] + ";'><span>__</span> " + data[j].St + ", " + data[j].zoneType_Name + ": #" + data[j].zoneName + " <em>(" + data[j].speciesName + ")</em></p>");
            }

            //var point = new GLatLng(searchData.centroid[0].lat, searchData.centroid[0].lng);
            map.setCenter(pt, 7);
        }
    });
}

function Create_Draggable_Icon(point) {
    //var latlang = map.getCenter();
    var icon = new GIcon();

    var imageUrl = "/Images/man_arrow-0.png";
    //"http://maps.google.com/intl/en_us/mapfiles/cb/man_arrow-0.png";

    icon.image = imageUrl;
    icon.iconSize = new GSize(49, 52);
    icon.iconAnchor = new GPoint(25, 36);
    icon.infoWindowAnchor = new GPoint(25, 6);
    
    locationMarker = new GMarker(point, { "icon": icon, "draggable": true });

    GEvent.addListener(locationMarker, "click",
        function() {
            displayPoint(locationMarker, i);
        }
    );

    GEvent.addListener(locationMarker, "dragend",
        function(position) {
            setDragPoint(position);
        }
    );
    
    map.addOverlay(locationMarker);
}

function mapClick(marker, clickedPoint) {
    try {
        if (marker == null) {
            $("#hiddenLatLng input[id$='mapLat']").val(clickedPoint.lat());
            $("#hiddenLatLng input[id$='mapLng']").val(clickedPoint.lng());

            locationMarker.setLatLng(clickedPoint);
        }
        else if (clickedPoint != null) {
            map.panTo(clickedPoint);
        }
    }
    catch (err) {
        errtxt = "There was an error on this page.\n\n";
        errtxt += "Error description (mapClick): " + err.description + "\n\n";
        errtxt += "Click OK to continue.\n\n";
        alert(errtxt);
    }
}

function setDragPoint(dragPoint) {
    try 
    {
        $("#hiddenLatLng input[id$='mapLat']").val(dragPoint.lat());
        $("#hiddenLatLng input[id$='mapLng']").val(dragPoint.lng());

        locationMarker.setLatLng(dragPoint);
    }
    catch (err) 
    {
        errtxt = "There was an error on this page.\n\n";
        errtxt += "Error description: " + err.description + "\n\n";
        errtxt += "Click OK to continue.\n\n";
        alert(errtxt);
    }
}

function displayPoint(marker, i) {
    map.panTo(locationMarker.getLatLng());
    var markerOffset = map.fromLatLngToDivPixel(locationMarker.getPoint());
}

function draw_Polygon(polyPoints, strokeColor, strokeWeight, strokeOpacity, fillColor, fillOpacity) 
{
    polyShape = new GPolygon(polyPoints, strokeColor, strokeWeight, strokeOpacity, fillColor, fillOpacity);

    GEvent.addListener(polyShape, "click", function(point) { if (point) GEvent.trigger(map, "click", null, point) });

    map.addOverlay(polyShape);
}

function draw_Polyline(polyPoints, strokeColor, strokeWeight, strokeOpacity) {
    var polyShape = new GPolyline(polyPoints, strokeColor, strokeWeight, strokeOpacity);
    
    map.addOverlay(polyShape);
}

function clearMap() {
    if (map != null) {
        map.clearOverlays();
    }
} 