﻿
var sapEventsArray = MultiDimensionalArray(12, 1);
var sapSearchDistance = 30;
var sapSearchPagesize = 10;
var sapSearchLocation = '';
var sapSearchCity = '';
var sapEventType = '';
var sapSearchDateTime = dateToString(new Date(), true);
var sapSearchDate = dateToString(new Date(), false); ;
var sapSearchTime = ' 00:00:00';
var sapSearchPage = 0;

var resp1 = 0;
var resp2 = 0;

function MultiDimensionalArray(iRows,iCols) 
{ 
   var i; 
   var j; 
   var a = new Array(iRows); 
   for (i=0; i < iRows; i++) 
   { 
       a[i] = new Array(iCols); 
       for (j=0; j < iCols; j++) 
       { 
           a[i][j] = null; 
       } 
   } 
   return(a); 
}

function dateToString(date, addTime) {

    var month = (date.getMonth() + 1).toString();
    var dom = date.getDate().toString();
    if (month.length == 1) month = "0" + month;
    if (dom.length == 1) dom = "0" + dom;

    var retVal = date.getFullYear() + "-" + month + "-" + dom;

//    if (addTime) {
//        retVal += ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
//    }

    return retVal;
}

function setStartTime(startTime) {
    sapSearchTime = startTime;
    sapSearchDateTime = sapSearchDate + sapSearchTime;
}

function changeSearchDate(dateString) {
    if (dateString == '') {
        sapSearchDateTime = dateToString(new Date(), false) + sapSearchTime;
    }
    else {
        sapSearchDate = dateString;
        sapSearchDateTime = sapSearchDate + sapSearchTime;
    }
}

function changeSearchDistance(e) {
    sapSearchDistance = parseInt(e.value);
}

function DatehasEvent(date) {

    if (sapEventsArray[date.getMonth()] == null || sapEventsArray[date.getMonth()] == '') {
        $.ajax(
        { type: 'POST',
            async: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: '/templates/SAPEvents/SAPEventService.asmx/GetEventsForMonth',
            data: "{ 'year': '" + date.getFullYear() + "', 'month': '" + (parseInt(date.getMonth()) + 1) + "' }",
            success: function(result) { sapEventsArray[date.getMonth()][0] = eval('(' + result.d + ')'); },
            error: function(error) { alert('Error: ' + error); }
        });
    }

    var retVal = false;
    var event = '';
    
    for (var i = 0; i < sapEventsArray[date.getMonth()][0].Days.length; i++) {
        if (date.getDate() == sapEventsArray[date.getMonth()][0].Days[i]) {
            var retVal = true;
            var event = 'event-day';
        }
    }

    return [retVal, event];
}

function searchBoxFocus(ctrlId) {
    if ($('#' + ctrlId).val() == 'Sök på plats, ort eller postnummer') {
        $('#' + ctrlId).val('');
    }
}

function searchMoreResults() {
    sapSearchPage++;
    doSearchEvents();
}

function searchCity(searchBoxId) {

    if (searchBoxId == '' || searchBoxId == null)
        searchBoxId = 'mapSearchLocation';
    
    
    sapSearchCity = $('#' + searchBoxId).val();

    var searchValue = sapSearchCity;
    
    if(sapSearchCity == '' || sapSearchCity.toLowerCase() == 'sverige') {
        searchValue = 'sverige';
        sapSearchCity = '';
        sapSearchLocation = '';
        searchEventsAndElectionCenters();
    }
    else {
        searchValue = sapSearchCity + ', Sverige';

        gmap_geocoder.getLatLng(searchValue, function(point) {
            if (point) {
                sapSearchLocation = point.toString();
                sapSearchLocation = sapSearchLocation.replace(' ', '');
                sapSearchLocation = sapSearchLocation.replace('(', '');
                sapSearchLocation = sapSearchLocation.replace(')', '');
                searchEventsAndElectionCenters();
            }
        });
    }
}

function searchPoint(lat, lng) {
    sapSearchLocation = lat + "," + lng;
    searchEventsAndElectionCenters();
}

function searchPointEvents(lat, lng) 
{
    sapSearchLocation = lat + "," + lng;
    searchEvents();
}

function searchPointElectionCenters(lat, lng) {
    sapSearchLocation = lat + "," + lng;
    searchElectionCenters();
}

function searchFilter(linkCtrl, filter) {
    $('#eventSearchFilter a.selected').removeClass('selected');

    if (linkCtrl) {
        $(linkCtrl).addClass('selected');
    }

    if (filter == 'alla') {
        sapEventType = '';
        $('#eventSearchLegend .event_sri .event_sri_inner .searchFilter').remove();
    }
    else {
        sapEventType = filter;
    }
    
    searchEvents();
}

function removeSearchFilter() {
    sapEventType = '';

    $('#eventSearchFilter a.selected').removeClass('selected');
    $('#eventSearchFilter a.filter:first').addClass('selected');

    searchEvents();
}

function monthRenderFix() {
    $("#eventSearchResult .eventdate .month").hide();
    $("#eventSearchResult .eventdate .month").show();
}

function searchEventsComplete(response,searchType) {

    var result = eval('(' + response.d + ')');
    removeMapMarkers();
    for (var i = 0; i < result.Events.length; i++) 
    {
        if (result.Events[i].Guid != null && result.Events[i].Latitude != null) {
            var point = new GLatLng(result.Events[i].Latitude, result.Events[i].Longitude, false);
            addMapMarker(point, result.Events[i].OverlayHtml, result.Events[i].IsCentral);
        }
    }
   
    if (sapSearchPage == 0) {
        $('#eventSearchResult').slideUp('fast', function() {
            $('#eventSearchResult').empty();
            

            // Render the search hits
            for (var i = 0; i < result.Events.length; i++) 
            {
                $('#eventSearchResult').append(result.Events[i].Html);
            }

            $('#eventSearchResult').slideDown('fast', monthRenderFix);

        });
    }
    else {
        var div = $('<div/>').hide();

        for (var i = 0; i < result.Events.length; i++) {
            if (result.Events[i].Latitude != null) {
                var point = new GLatLng(parseFloat(result.Events[i].Latitude), parseFloat(result.Events[i].Longitude), false);
                addMapMarker(point, result.Events[i].OverlayHtml, result.Events[i].IsCentral);
            }
            
            div.append(result.Events[i].Html);
        }

        $('#eventSearchResult').append(div);
        div.slideDown('fast', monthRenderFix);
    }

    var visibleHits = (sapSearchPage * sapSearchPagesize) + result.Events.length;
    
    if (visibleHits < result.ItemsFound) {
        $('#searchMoreEvents').show();
    }
    else {
        $('#searchMoreEvents').hide();
    }

    updateSearchLegend(result.ItemsFound, result.SearchDate);

    // Makes sure that the map is only updated once when searching for both electioncenters and events.
    if (searchType) {
        if (resp2 == 1) {
            updateMap();
            resp1 = 0;
            resp2 = 0;
        } else {
            resp1 = 1;
        }
    } else {
        updateMap();
    }
}

function searchElectionCentersComplete(response,searchType) {

    var result = eval('(' + response.d + ')');
    removeBlueMapMarkers();
    
    for (var i = 0; i < result.ElectionCenters.length; i++) {
        if (result.ElectionCenters[i].ykoordinat != null && result.ElectionCenters[i].xkoordinat != null) {
            var point = new GLatLng(result.ElectionCenters[i].ykoordinat, result.ElectionCenters[i].xkoordinat, false);
            addBlueMapMarker(point, result.ElectionCenters[i].html);
        }
    }

    //showing the nearest center is only necessary when searching for both
    if (searchType) {
        if (result.NearestElectionCenter != null) {
            $('#electionCenterSearchResultContent').children().remove();
            $('#electionCenterSearchResultContent').append(result.NearestElectionCenter.nearestHtml);
            $('#electionCenterSearchResult').show();
        } else {
            $('#electionCenterSearchResult').hide();
        } 
    }

    // Makes sure that the map is only updated once when searching for both electioncenters and events.
    if (searchType) {
        if (resp1 == 1) {
            updateMap();
            resp1 = 0;
            resp2 = 0;
        } else {
            resp2 = 1;
        }
    } else {
        updateMap();
    }
}

function updateSearchLegend(resultCount, searchDate) {
    $('#eventSerchHits').text(resultCount);
    $('#eventSearchLegend .event_sri .event_sri_inner .searchFilter').remove();

    if (sapSearchCity == '') {
        $('#eventSearchLegend .event_sri .event_sri_inner').append('<span class="searchFilter">Hela sverige</span>');
    }
    else {
        var div = $('<span class="searchFilter removeable">' + sapSearchCity + '</span>').click(function() {
            $('#mapSearchLocation').val('');
            searchCity();
            $('#mapSearchLocation').blur();
        });

        $('#eventSearchLegend .event_sri .event_sri_inner').append(div);
    }

    if (sapEventType != '') {
        var div = $('<span class="searchFilter removeable">' + sapEventType + '</span>').click(function() {
            removeSearchFilter();
        });

        $('#eventSearchLegend .event_sri .event_sri_inner').append(div);
    }

    $('#eventSearchLegend .event_sri .event_sri_inner').append('<span class="searchFilter">' + searchDate + ' och framåt</span>');
}

function updateMap() {
    if (gmap_markers.length == 0 && blue_gmap_markers.length == 0 && sapSearchLocation == '') {
        gMapGotoSweden();
    }
    else if (gmap_markers.length == 0 && blue_gmap_markers.length == 0 && sapSearchLocation != '') {
        var coord = sapSearchLocation.split(',');
        showOnMap(parseFloat(coord[0]), parseFloat(coord[1]), 8);
    }
    else {
        googleMap.zoomToMarkers();
    }
}

function searchEvents() {
    sapSearchPage = 0;
    doSearchEvents();
}

function searchElectionCenters() {
    sapSearchPage = 0;
    doSearchElectionCenters();
}

function searchEventsAndElectionCenters() {
    sapSearchPage = 0;
    doSearchEventsAndElectionCenters();
}

// only search for electioncenters 
function doSearchElectionCenters() {
    $.ajax(
        { type: 'POST',
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            scriptCharset: "utf-8",
            url: '/templates/SAPEvents/SAPEventService.asmx/FindElectionCenters',
            data: "{ 'gpsPosition': '" + sapSearchLocation +
                  "', 'maxDistance': '" + (sapSearchDistance) +
                  "' }",
            success: function(result) { searchElectionCentersComplete(result,false); },
            error: function(error) {alert('Error: ' + error); }
        });
}

// only search for events
function doSearchEvents() {

    $.ajax(
        { type: 'POST',
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            scriptCharset: "utf-8",
            url: '/templates/SAPEvents/SAPEventService.asmx/FindEvents',
            data: "{ 'gpsPosition': '" + sapSearchLocation +
                  "', 'eventType': '" + sapEventType +
                  "', 'startDate': '" + sapSearchDateTime +
                  "', 'maxDistance': '" + (sapSearchDistance * 10000) +
                  "', 'pageSize': '" + sapSearchPagesize +
                  "', 'resultPage': '" + sapSearchPage +
                  "' }",
            success: function(result) { searchEventsComplete(result,false); },
            error: function(error) { resp1 = 0; alert('Error: ' + error); }
        });
}

// Search for both election centers and events
function doSearchEventsAndElectionCenters() {
    
        $.ajax(
        { type: 'POST',
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            scriptCharset: "utf-8",
            url: '/templates/SAPEvents/SAPEventService.asmx/FindEvents',
            data: "{ 'gpsPosition': '" + sapSearchLocation +
                  "', 'eventType': '" + sapEventType +
                  "', 'startDate': '" + sapSearchDateTime +
                  "', 'maxDistance': '" + (sapSearchDistance * 10000) +
                  "', 'pageSize': '" + sapSearchPagesize +
                  "', 'resultPage': '" + sapSearchPage +
                  "' }",
            success: function(result) { searchEventsComplete(result,true); },
            error: function(error) { resp1 = 0; alert('Error: ' + error); }
        });

  
        $.ajax(
        { type: 'POST',
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            scriptCharset: "utf-8",
            url: '/templates/SAPEvents/SAPEventService.asmx/FindElectionCenters',
            data: "{ 'gpsPosition': '" + sapSearchLocation +
                  "', 'maxDistance': '" + (sapSearchDistance) +
                  "' }",
            success: function(result) { searchElectionCentersComplete(result,true); },
            error: function(error) { resp2 = 0; alert('Error: ' + error); }
        });
}


function showOnMap(lat, lng, zoomLevel) {
    if (zoomLevel == null)
        zoomLevel = 15;
        
    var point = new GLatLng(lat, lng, false);
    if (point) {
        googleMap.setCenter(point, zoomLevel-1);
        googleMap.zoomIn(point, true, true);
    }
}

function joinedEvent(response) {
    var result = eval('(' + response.d + ')');

    if (result.Success) {
        var text = (result.SignUps == 1) ? ' anmäld' : ' anmälda';
        $('#eid' + result.EventId + ' .signedup span').text(result.SignUps + text);

        if ($('#eid' + result.EventId + ' .signupLink').text() == 'Delta') {
            $('#eid' + result.EventId + ' .signupLink').text('Avanmäl');
        }
        else {
            $('#eid' + result.EventId + ' .signupLink').text('Delta');
        }
    }
}

function joinEvent(eventId) {

    $.ajax(
        { type: 'POST',
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: '/templates/SAPEvents/SAPEventService.asmx/Signup',
            data: "{ 'eventId': '" + eventId + "' }",
            success: function(result) { joinedEvent(result); },
            error: function(error) { alert('Error: ' + error); }
        });
}

function signIn() {
    $("#loginDialog").dialog('open');
}
