﻿if (typeof(XMLHttpRequest) == "undefined") {
 XMLHttpRequest = function () {
   var msxmls = ["MSXML3", "MSXML2", "Microsoft"];
   for (var i=0; i < msxmls.length; i++) {
 try {
   return new ActiveXObject(msxmls[i]+".XMLHTTP");
 } catch (e) { }
   }
   throw new Error("No XML component installed");
 }
}

var Events = new Array();

function GetEvents( pLimit, pOffset )
{
    var req = new XMLHttpRequest();
    req.open("GET", AjaxEventLoadUrl + "?Limit=" + pLimit + "&Offset=" + pOffset, true );
    
    req.onreadystatechange = function()
        {
            if( req.readyState == 4 )
            {
            
                if( req.status == 200 )
                {
                
				    if( req.responseText != "" )
				    {
				        var EventsResponse = ( eval("(" +  req.responseText + ")" ) );
                    
                        for( var i = 0; i < EventsResponse.events.length; i++ )
                        {
                            ProcessEvent( EventsResponse.events[i] );
                        }
                        
                        FriendsChecked += PageSize;
                        UpdateStatus();
				    }
                }
            }
        };
    
    req.send( null );
}

function ProcessEvent( pEvent )
{
    for( var i = 0; i < Events.length; i++ )
    {
        if( Events[i].SocialNetworkId == pEvent.SocialNetworkId )
        {
            return;
        }
    }
    
    Events.push( pEvent );

    var Start = ConvertServerTimeToLocalTime ( new Date( Date.parse( pEvent.Start ) ) );
    var Today = new Date();
    
    var MidnightToday = new Date();
    MidnightToday.setHours( 0 );
    MidnightToday.setMinutes( 0 );
    MidnightToday.setSeconds( 0 );
    
    var MidnightTomorrow = MidnightToday.getTime() + 1000 * 60 * 60 * 24;
    MidnightTomorrow = new Date( MidnightTomorrow );
    
    var Midnight2Days = MidnightToday.getTime() + 1000 * 60 * 60 * 24 * 2;
    Midnight2Days = new Date( Midnight2Days );
    
    var dd;
    
    if( Start < MidnightToday )
    {
    }
    else if( Start < MidnightTomorrow )
    {
        var TodayElement = document.getElementById( "Today" );
        
        
        dd = AppendEvent( TodayElement, MidnightToday, pEvent );
        
        
        
    }
    /*
    else if( Start < Midnight2Days )
    {
        var TomorrowElement = document.getElementById( "Tomorrow" );
        var dd = AppendEvent( TomorrowElement, MidnightTomorrow, pEvent );
        dd.onclick = function()
            {
                var Marker = DrawMarker( pEvent.Location,
                    this
                    );
                OpenMarker( Marker, this );
            }
    }
    else
    {
        var TwoDaysElement = document.getElementById( "TwoDays" );
        var dd = AppendEvent( TwoDaysElement, Midnight2Days, pEvent );
        dd.onclick = function()
            {
                var Marker = DrawMarker( pEvent.Location,
                    this
                    );
                OpenMarker( Marker, this );
            }
    }
    */
    else
    {
        var NewMidnight = new Date( MidnightTomorrow.getTime() );
        var EventElement;
        var FutureDaysElement = document.getElementById( "FutureDays" );
        var dt;
        var dl;
        
        //alert( "Start: " + Start + "\nMidnight: " + NewMidnight );
        
        for( var i = 1; i < 6; i++ )
        {
            NewMidnight = NewMidnight.getTime() + 1000 * 60 * 60 * 24 - 1000;
            NewMidnight = new Date( NewMidnight );
            
            //alert( "(i:" + i + ") Start: " + Start + "\nMidnight: " + NewMidnight );
            if( Start <= NewMidnight )
            {
                EventElement = document.getElementById( "EventDay" + i );
                
                if( EventElement == null )
                {
                    dt = document.createElement( "dt" );
                    dt.innerHTML = Start.toLocaleDateString();
                    
                    dd = document.createElement( "dd" );
                    
                    EventElement = document.createElement( "dl" );
                    EventElement.className = "Events";
                    EventElement.id = "EventDay" + i;
                    
                    dd.appendChild( EventElement );
                    
                    var FollowingDateElement;
                    for( var j = i + 1; j <= 6; j++ )
                    {
                        if( j >= 6 )
                        {
                            FutureDaysElement.appendChild( dt );
                            FutureDaysElement.appendChild( dd );
                        }
                        else
                        {
                            FollowingDateElement = document.getElementById( "EventDay" + j );
                            if( FollowingDateElement != null )
                            {
                                FollowingDateElement.parentNode.parentNode.insertBefore( dd, FollowingDateElement.parentNode.previousSibling );
                                FollowingDateElement.parentNode.parentNode.insertBefore( dt, dd );
                                break;
                            }
                        }
                    }
                    
                    
                }
                
                
                dd = AppendEvent( EventElement, new Date( NewMidnight.getTime() - 1000 * 60 * 60 * 24 ), pEvent );
                
                
                break;
            }
        }
    }
    
    if( dd != null )
    {
        if( pEvent.Location.Precision <= 1 )
        {
            var Marker = DrawMarker( pEvent.Location,
                dd
                );
                
            dd.onclick = function()
                {
                    OpenMarker( Marker, this );
                }
            dd.style.backgroundImage = "url(" + Marker.getIcon().image + ")";
        }
        else
        {
            dd.onclick = function()
            {
                var Marker = DrawMarker( pEvent.Location,
                    this
                    );
                OpenMarker( Marker, this );
            }
        }
    }
}


function AppendEvent( pParentElement, pMidnightTonight, pEvent )
{
    var Start = new Date( Date.parse( pEvent.Start ) );
    var End = new Date( Date.parse( pEvent.End ) );

    var dt = document.createElement("dt");
    dt.innerHTML = pEvent.Title;
    dt.style.backgroundImage = "url(" + pEvent.Attendees[0].Avatar + ")";
    
    var dd = document.createElement("dd");
    dd.innerHTML = "<h3><a targget='_blank' href='http://www.facebook.com/event.php?eid=" + pEvent.SocialNetworkId + "'>" + pEvent.Title + "</a> <span class='Time'>" + ConvertServerTimeToLocalTimeFriendlyString( Start, pMidnightTonight ) + " - " + ConvertServerTimeToLocalTimeFriendlyString( End, pMidnightTonight ) + "</span></h3>";
    
    if( pEvent.TagLine + "" != "" ) dd.innerHTML += pEvent.TagLine + "<br/>";
    
    for( var i = 0; i < pEvent.Attendees.length; i++ )
    {
        dd.innerHTML += "<a href='http://www.facebook.com/profile.php?id=" + pEvent.Attendees[i].SocialNetworkId + "'>" + pEvent.Attendees[i].Name + ( i < pEvent.Attendees.length-1 ? "</a>, " : "</a>" );
    }
    
    
    pParentElement.appendChild( dt );
    pParentElement.appendChild( dd );
    
    return dd;
    
}

function ConvertServerTimeToLocalTime( ServerTime )
{
    var CurrentUTCServerTime = new Date( ServerTime );
    
    return new Date( CurrentUTCServerTime.getTime() - ( new Date() ).getTimezoneOffset() * 60000 );
    
}

function ConvertServerTimeToLocalTimeFriendlyString( ServerTime, MidnightToday )
{
    var LocalTime = ConvertServerTimeToLocalTime( ServerTime );
    
    
    if( MidnightToday == null )
    {
        MidnightToday = new Date();
        MidnightToday.setHours( 0 );
        MidnightToday.setMinutes( 0 );
        MidnightToday.setSeconds( 0 );
    }
    
    var Minutes = LocalTime.getMinutes();
    Minutes = ( Minutes < 10 ? "0" + Minutes : Minutes );
    
    var Hours = ( LocalTime.getHours() % 12 );
    Hours = ( Hours == 0 ? "12" : Hours );
    
    var MidnightYesterday = MidnightToday.getTime() - 1000 * 60 * 60 * 24;
    MidnightYesterday = ( new Date() ).setTime( MidnightYesterday );
    
    var MidnightTomorrow = MidnightToday.getTime() + 1000 * 60 * 60 * 24 + 1000 * 60 * 60 * 4;
    MidnightTomorrow = ( new Date() ).setTime( MidnightTomorrow );
    
    var MidnightTwoDays = MidnightToday.getTime() + 1000 * 60 * 60 * 24 * 2;
    MidnightTwoDays = ( new Date() ).setTime( MidnightTwoDays );
    
    
    if( LocalTime > MidnightToday && LocalTime < MidnightTomorrow )
    {
        return Hours + ":" + Minutes + " " + ( LocalTime.getHours() < 12 ? "AM" : "PM" );
    }
    else if( LocalTime > MidnightYesterday && LocalTime < MidnightToday )
    {
        return Hours + ":" + Minutes + " " + ( LocalTime.getHours() < 12 ? "AM" : "PM" ) + " yesterday";
    }
    else if( LocalTime > MidnightTomorrow && LocalTime < MidnightTwoDays )
    {
        return Hours + ":" + Minutes + " " + ( LocalTime.getHours() < 12 ? "AM" : "PM" ) + " tomorrow";
    }
    else
    {
        return LocalTime.toLocaleString();
    }
}

function Start()
{
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        //map.setCenter(new GLatLng(43.6667, -79.4167 ), 10);
        map.setCenter(new GLatLng( CurrentLatitude, CurrentLongitude ), 10);
        
          var bounds = map.getBounds();
          var southWest = bounds.getSouthWest();
          var northEast = bounds.getNorthEast();
          var lngSpan = northEast.lng() - southWest.lng();
          var latSpan = northEast.lat() - southWest.lat();
    }
    
    for( var i = 0; i < NumberOfFriends; i += PageSize )
    {
        if( i == PageSize ) i++;
        
        GetEvents( PageSize, i );
    }
}

function UpdateStatus()
{
    var Element = document.getElementById( "Status" );
    
    if( FriendsChecked < NumberOfFriends )
    {
        Element.innerHTML = "Checking events for " + ( NumberOfFriends - FriendsChecked ) + " more friends...";
    }
    else
    {
        Element.innerHTML = "";
    }
}

function DrawMarker( pLocation, pEventElement )
{
    /*var icon = new GIcon();
    icon.image = pAvatar;
    icon.iconAnchor = new GPoint(16, 16);
    icon.infoWindowAnchor = new GPoint(16, 0);
    icon.iconSize = new GSize(50, 50);
    */
    
    if( EventsFound >= 25 ) EventsFound = 0;
    
    var letter = String.fromCharCode("A".charCodeAt(0) + EventsFound++ );
    var icon = new GIcon(G_DEFAULT_ICON, "http://www.google.com/mapfiles/marker" + letter + ".png");
    
    var marker = new GMarker( new GLatLng( pLocation.Latitude, pLocation.Longitude ), {title:pLocation.Description, icon:icon} );
    
    marker.Precision = pLocation.Precision;
    
    GEvent.addListener(marker, "click", function() {
          OpenMarker( marker, pEventElement );
        });
    
    map.addOverlay(marker);
    
    return marker;   
}

function OpenMarker( marker, pEventElement )
{
      var Zoom = 5;
      switch( marker.Precision )
      {
        case 0:
            Zoom = 13;
            break;
        case 1:
            Zoom = 13;
            break;
        case 2:
            Zoom = 9;
            break;
        case 3:
            Zoom = 5;
            break;
      }
      
      
      //var ScrollUrl = ( document.location + "#" ).replace( /##/, "#" );
      //document.location = ScrollUrl;

      map.setCenter( marker.getLatLng(), Zoom);

      marker.openInfoWindowHtml( "<div class='MapInfoWindow'>" + pEventElement.innerHTML + "</div>" );
          
      var AllEventElements = document.getElementsByTagName("dd");
      for( var i = 0; i < AllEventElements.length; i++ )
      {
        AllEventElements[i].className = "";
      }
      
      pEventElement.className += " Highlighted ";
}