﻿
var sapEventsArray = MultiDimensionalArray(12, 1);
var sapSearchDistance = 10;
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;


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 = '';
        searchEvents();
    }
    else {
        searchValue = sapSearchCity + ', Sverige';

        gmap_geocoder.getLatLng(searchValue, function(point) {
            if (point) {
                sapSearchLocation = point.toString();
                sapSearchLocation = sapSearchLocation.replace(' ', '');
                sapSearchLocation = sapSearchLocation.replace('(', '');
                sapSearchLocation = sapSearchLocation.replace(')', '');
                searchEvents();
            }
        });
    }
}

function searchPoint(lat, lng) 
{
    sapSearchLocation = lat + "," + lng;
    searchEvents();
}

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) {

    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);
            
        });
        updateMap();
    }
    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);
        updateMap();
    }

    var visibleHits = (sapSearchPage * sapSearchPagesize) + result.Events.length;
    
    if (visibleHits < result.ItemsFound) {
        $('#searchMoreEvents').show();
    }
    else {
        $('#searchMoreEvents').hide();
    }

    updateSearchLegend(result.ItemsFound, result.SearchDate);
}

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 && sapSearchLocation == '') {
        gMapGotoSweden();
    }
    else if(gmap_markers.length == 0 && sapSearchLocation != '') {
        var coord = sapSearchLocation.split(',');
        showOnMap(parseFloat(coord[0]), parseFloat(coord[1]), 10);
    }
    else {
        googleMap.zoomToMarkers();
    }
}

function searchEvents() {
    sapSearchPage = 0;
    doSearchEvents();
}

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); },
            error: function(error) { 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');
}