﻿var STREET_UPDATE_INTERVAL;
var CONTINUE_UPDATING_STREET = true;
var LAST_VEHICLES = null;
var LAST_BUILDINGS = null;
var LAST_PEOPLE = null;
var STEAL_CAR_INTERVAL = null;
var VEHICLE_ID_OF_INTEREST = null;
var PERSON_ID_OF_INTEREST = null;
var BUILDING_ID_OF_INTREST = null;

var CURRENT_ROOM_ID;
var CURRENT_VEHICLE_ID_WITHIN;
var CURRENT_STREET_ID;

var UPDATE_STREET_USE_AJAX = true;
var UPDATE_STREET_INITIALISE_WITH_AJAX = true;

$(function () {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(InitUpdateStreet);
    InitUpdateStreet();
    $(window).focus(function () { WINDOW_IS_IN_FOCUS = true; })
    $(window).blur(function () { WINDOW_IS_IN_FOCUS = false; })
});

function ResetUpdateStreetVars() {
    clearInterval(STREET_UPDATE_INTERVAL);
    CONTINUE_UPDATING_STREET = true;
    LAST_VEHICLES = null;
    LAST_PEOPLE = null;
}

function InitUpdateStreet() {
    ResetUpdateStreetVars();

    if (UPDATE_STREET_INITIALISE_WITH_AJAX) {
        UpdateStreet();
    }

    if (UPDATE_STREET_USE_AJAX) {
        STREET_UPDATE_INTERVAL = setInterval('UpdateStreet();', 5000);
    }

    InitMessaging();

    /*$('#vehicleDetailDialog').dialog({ modal: true, autoOpen: false, width: 430 });
    $('#personDetailDialog').dialog({ modal: true, autoOpen: false, width: 430 });*/

    //$('#expandable').mouseleave(function () {
    //    $(this).slideUp('slow');
    //    //VEHICLE_ID_OF_INTEREST = null ;
    //});
}

var WINDOW_IS_IN_FOCUS = true;

function UpdateStreet() {
    if (CONTINUE_UPDATING_STREET && GlobalGetUrlVar("noupdate") == "" && globalLoggedIn) {
        if (WINDOW_IS_IN_FOCUS) {
            //UpdateVehiclesInstreet();
            //UpdatePeopleInstreet();
            //$('title').html(Math.floor(Math.random() * 100));
            UpdateViewstate();
        }
    } else {
        clearInterval(STREET_UPDATE_INTERVAL);
    }
}

function UpdateViewstate(optCallbackFunc) {
    $.ajax({ type: "POST", url: "WebService.asmx/UpdateViewstate", contentType: "application/json; charset=utf-8", data: "{'CurrentRoomID':" + CURRENT_ROOM_ID + ",'CurrentVehicleIdWithin':" + CURRENT_VEHICLE_ID_WITHIN + ",'CurrentStreetIdWithin':" + CURRENT_STREET_ID + "}", dataType: "json", success: function (result) { ViewstateUpdated(result, optCallbackFunc); }, error: StreetUpdateError });
}
function UpdateVehiclesInstreet() {
    $.ajax({ type: "POST", url: "WebService.asmx/GetRealVehicles", contentType: "application/json; charset=utf-8", data: "{}", dataType: "json", success: VehiclesInStreetUpdated, error: StreetUpdateError });
}
function UpdatePeopleInstreet() {
    $.ajax({ type: "POST", url: "WebService.asmx/GetPeopleSimple", contentType: "application/json; charset=utf-8", data: "{}", dataType: "json", success: PeopleInstreetUpdated, error: StreetUpdateError });
}
function UpdateBuildingsInstreet() {
    $.ajax({ type: "POST", url: "WebService.asmx/GetBuildingReals", contentType: "application/json; charset=utf-8", data: "{}", dataType: "json", success: BuildingsInstreetUpdated, error: StreetUpdateError });
}

function FakeResult(d) {
    this.d = d;
}
function ViewstateUpdated(result, optCallbackFunc) {
    var kvp = null;
    for (var i in result.d) {
        kvp = result.d[i];
        switch (kvp.Key) {
            case "page": PageLocationUpdated(new FakeResult(kvp.Value)); break;
            case "vehicles": VehiclesInStreetUpdated(new FakeResult(kvp.Value)); break;
            case "people": PeopleInstreetUpdated(new FakeResult(kvp.Value)); break;
            case "unreadmessages": UnreadMessagesUpdated(new FakeResult(kvp.Value)); break;
            case "chat": ChatMessagesRecieved(new FakeResult(kvp.Value)); break;
            case "buildings": BuildingsInstreetUpdated(new FakeResult(kvp.Value)); break;
            case "cash": CashUpdated(new FakeResult(kvp.Value)); break;
            case "energy": EnergyUpdated(new FakeResult(kvp.Value)); break;
            case "xp": XpUpdated(new FakeResult(kvp.Value)); break;
        }
    }
    if (typeof optCallbackFunc !== "undefined" && optCallbackFunc.d !== null) {
        optCallbackFunc();
    }
}

function CashUpdated(result) {
    if (window.location.toString().toLowerCase().indexOf('casino') == -1) {
        GlobalUpdateCash(result.d);
    }
}
function EnergyUpdated(result) {
    $('.myEnergyInfo').html("Energy:<br />" + result.d[0].Value + result.d[1].Value);
    LOGIN_ENERGY_MAX_SECS = result.d[2].Value;
    LoginUpdateEnergyProgressBar();
    LoginCheckEnergy();
}
function XpUpdated(result) {
    $('.myXpInfo').html("XP Level: <br />" + result.d[0].Value + result.d[1].Value);
}

function UnreadMessagesUpdated(result) {
    if (result.d > 0) {
        $('#messageAlert span').html(result.d);
        $('#messageAlert').show().animate({ 'bottom': 0 }, 1000);
        $('#messageAlert').click(function () {
            $('#messageAlert').fadeOut(function () { $(this).hide(); });
        });
    }
}

function PageLocationUpdated(result) {
    if (result.d != "") {
        window.location = result.d;
    }
}

function VehiclesInStreetUpdated(response) {
    $(".vehiclesInStreet").setTemplateElement("vehiclesInStreetTemplate");
    LAST_VEHICLES = response.d;
    $(".vehiclesInStreet").processTemplate(LAST_VEHICLES);
    if (response.d.length == 0) {
        $(".uxNumberOfVehiclesInStret").html("<b>0 Vehicles</b>").hide();
    } else if (response.d.length == 1) {
        $(".uxNumberOfVehiclesInStret").html("<b>1 Vehicle</b> (click to interact)").show();
    } else {
        $(".uxNumberOfVehiclesInStret").html("<b>" + response.d.length + " Vehicles</b> (click to interact)").show();
    }
    //return;
    try {
        var change = false;
        if (LAST_VEHICLES == null) {
            change = true;
        } else if (response.d.length == LAST_VEHICLES.length) {
            for (var i in response.d) {
                if (response.d[i].StateHash != LAST_VEHICLES[i].StateHash) {
                    change = true;
                    break;
                }
            }
        }
        LAST_VEHICLES = response.d;
        if (change) {
            $(".vehiclesInStreet").processTemplate(LAST_VEHICLES);
        }
    } catch (e) {
        LAST_VEHICLES = null;
        CONTINUE_UPDATING_STREET = false;
    }
}
function PeopleInstreetUpdated(response) {
    $(".peopleInStreet").setTemplateElement("peopleInStreetTemplate");
    LAST_PEOPLE = response.d;
    $(".peopleInStreet").processTemplate(LAST_PEOPLE);

    if (response.d.length == 0) {
        $(".uxNumberOfPeopleInStret").html("0 People").hide();
    } else {
        var count = 0;
        for (var i in response.d) {
            if (!response.d[i].IsInVehicle) {
                count++;
            }
        }

        if (count == 1) {
            $(".uxNumberOfPeopleInStret").html("<b>1 Person</b> (click to interact)").show();
        } else {
            $(".uxNumberOfPeopleInStret").html("<b>" + count + " People</b> (click to interact)").show();
        }
    }
    return;
    try {
        var change = false;
        if (LAST_PEOPLE == null) {
            change = true;
        } else if (response.d.length == LAST_PEOPLE.length) {
            for (var i in response.d) {
                if (response.d[i].CharacterId != LAST_PEOPLE[i].CharacterId) {
                    change = true;
                    break;
                }
            }
        } else {
            change = true;
        }

        LAST_PEOPLE = response.d;
        if (change) {
            $(".peopleInStreet").processTemplate(LAST_PEOPLE);
        }
    } catch (e) {
        LAST_PEOPLE = null;
        CONTINUE_UPDATING_STREET = false;
    }
}

function BuildingsInstreetUpdated(response) {
    $(".buildingsInStreet").setTemplateElement("buildingsInStreetTemplate");
    LAST_BUILDINGS = response.d;
    $(".buildingsInStreet").processTemplate(LAST_BUILDINGS);

    if (response.d.length == 0) {
        $(".uxNumberOfBuildingsInStret").html("0 Buildings").hide();
    } else if (response.d.length == 1) {
        $(".uxNumberOfBuildingsInStret").html("<b>1 Building</b> (click to interact)").show();
    } else {
        $(".uxNumberOfBuildingsInStret").html("<b>" + response.d.length + " Buildings</b> (click to interact)").show();
    }
    return;
}
function UpdateStreetDriveIntoBuilding(brid) {
    var buildingReal = GlobalFindObjectWithBuildingIdInArray(brid, LAST_BUILDINGS);
    if (buildingReal != null) {
        if (buildingReal.CanDriveIntoBuilding == true) {
            window.location = "View-building.aspx?br=" + brid;
        } else {
            GlobalShowGenericDialog("A problem occured", buildingReal.Title + " can not be driven into");
        }
    }
}

function EnterVehicle(callBackFuncOrUndefined,confirm) {
    if (VEHICLE_ID_OF_INTEREST != parseInt(VEHICLE_ID_OF_INTEREST)) { return; }
    /*$('#UxGenericModal')
     .attr("title", "Enter vehicle")
     .html("Are you sure you wish to enter this vehicle?")
     .dialog({
         modal: true,
         buttons: {
             Cancel: function () { $(this).dialog('close'); },
             Ok: function () {
                 $(this).dialog('close');
                 GlobalBlockUi();
                 //window.location = "View-Vehicle.aspx?vr=" + VEHICLE_ID_OF_INTEREST + "&enter=true";
                 $.ajax({ type: "POST", url: "WebService.asmx/EnterOrExitVehicle", contentType: "application/json; charset=utf-8", data: "{'vrid':" + VEHICLE_ID_OF_INTEREST + ",'enter':true}", dataType: "json", success: function () { VehicleRelationshipChanged(callBackFuncOrUndefined); }, error: StreetUpdateError });
             }
         }
     });*/
    if (typeof confirm === "undefined" || confirm == true) {
        GlobalShowGenericDialog("Enter vehicle", "Are you sure you wish to enter this vehicle?", {
            Cancel: function () { $(this).dialog('close'); },
            Ok: function () {
                $(this).dialog('close');
                GlobalBlockUi();
                //window.location = "View-Vehicle.aspx?vr=" + VEHICLE_ID_OF_INTEREST + "&enter=true";
                EnterVehicleNoPrompt(callBackFuncOrUndefined);
            }
        });
    } else {
        EnterVehicleNoPrompt(callBackFuncOrUndefined);
    }
}
function EnterVehicleNoPrompt(callBackFuncOrUndefined) {
    $.ajax({ type: "POST", url: "WebService.asmx/EnterOrExitVehicle", contentType: "application/json; charset=utf-8", data: "{'vrid':" + VEHICLE_ID_OF_INTEREST + ",'enter':true}", dataType: "json", success: function () { VehicleRelationshipChanged(callBackFuncOrUndefined); }, error: StreetUpdateError });
}
 function VehicleRelationshipChanged(callBackFunc) {
     GlobalUnblockUi();
     UpdateStreetResetUi();
     //UpdateStreet();
     UpdateViewstate();
     SlideItUp();
     if (typeof callBackFunc !== "undefined" && callBackFunc.d !== null) {
         callBackFunc();
     }
 }
function ExitVehicle() {
    //window.location = "View-Vehicle.aspx?vr=" + VEHICLE_ID_OF_INTEREST + "&exit=true";
    $.ajax({ type: "POST", url: "WebService.asmx/EnterOrExitVehicle", contentType: "application/json; charset=utf-8", data: "{'vrid':0,'enter':false}", dataType: "json", success: VehicleRelationshipChanged, error: StreetUpdateError });
}
function StealVehicle() {
    $.ajax({ type: "POST", url: "WebService.asmx/StealVehicle", contentType: "application/json; charset=utf-8", data: "{'vrid':" + VEHICLE_ID_OF_INTEREST + ", 'cancel': 'false'}", dataType: "json", success: StealVehicleResponse, error: StreetUpdateError });
    $('#expandable').unbind('mouseleave');
    $('#btnVehicleDetailEnterExit').unbind('click').text('...');

}
function CancelStealVehicle() {
    $.ajax({ type: "POST", url: "WebService.asmx/StealVehicle", contentType: "application/json; charset=utf-8", data: "{'vrid':" + VEHICLE_ID_OF_INTEREST + ", 'cancel': 'true'}", dataType: "json", success: CancelStealVehicleResponse, error: StreetUpdateError });
    $('#expandable').unbind('mouseleave');
    $('#btnVehicleDetailEnterExit').unbind('click').text('...');
}

function StealVehicleResponse(result) {
    if (result.d.indexOf("|") > -1) {

        var x = result.d.split("|");

        GlobalShowGenericDialog("Success", x[1]);

        ShowStealProgressBar(x[0], x[0]);
        //SlideItUp();
        UpdatePeopleInstreet();

    } else {
        
        if(result.d.indexOf("~")>-1){
            var splitResult = result.d.split("~");
            ShowStealProgressBar(splitResult[1], splitResult[2]);
            result.d = splitResult[0];
        }
        
        var insClass = GlobalFindObjectWithItemRealIdInArray(VEHICLE_ID_OF_INTEREST, LAST_VEHICLES).VehicleTemplate.InsuranceClass;

        $('#btnVehicleDetailEnterExit').html('<del>Steal</del>').addClass('disabled');

        $('#UxGenericModal').html(result.d).find('p').css('margin-bottom', '10px');

        $('#UxGenericModal')
         .dialog({
             modal: true,
             title: "Class " + insClass + " Vehicles Locked",
             width: 600,
             buttons: {
                 Ok: function () {
                     $(this).dialog('close');
                 }
             }
         });
     }
}

function ShowStealProgressBar(secsLeft,secTotal) {
    $('#btnVehicleDetailEnterExit').unbind('click').click(CancelStealVehicle).text('Cancel');
    $('#uxVehicleProgress1').progressbar({ value: 100 });
    //$('#uxVehicleProgress2').progressbar({ value: 50 });
    $('#uxVehicleDetailInteraction').slideDown();
    $('.uxVehicleDetailPoliceArrivalTime').hide();
    clearInterval(STEAL_CAR_INTERVAL);
    STEAL_CAR_SECONDS_LEFT = secsLeft;
    STEAL_CAR_SECONDS_TOTAL = secTotal;
    STEAL_CAR_INTERVAL = setInterval('UpdateStreetStealCarInterval();', 1000);
}

var STEAL_CAR_SECONDS_TOTAL = 0
var STEAL_CAR_SECONDS_LEFT = 0

function UpdateStreetStealCarInterval() {
    STEAL_CAR_SECONDS_LEFT--;
    if (STEAL_CAR_SECONDS_LEFT < 0) {
        STEAL_CAR_SECONDS_LEFT = 0;
        clearInterval(STEAL_CAR_INTERVAL);
        ShowVehicleDetail(VEHICLE_ID_OF_INTEREST);
    }
    $('.interactionEta').html(STEAL_CAR_SECONDS_LEFT);
    $('#uxVehicleProgress1').progressbar({ value: (100 / STEAL_CAR_SECONDS_TOTAL) * STEAL_CAR_SECONDS_LEFT });
}
function CancelStealVehicleResponse(result) {
    $('#btnVehicleDetailEnterExit').unbind('click').click(StealVehicle).text('Steal');
    $('#uxVehicleDetailInteraction').slideUp();
    clearInterval(STEAL_CAR_INTERVAL);
}
function UpdateStreetResetUi() {
    SlideItUp();
    $('#expandable').hide();
    $('#vehicleDetail').hide();
    $('#personDetail').hide();
}



function ShowVehicleDetail(id) {
    //$('#vehicleDetailDialog').dialog('close');

    UpdateStreetResetUi();

    var vr = GlobalFindObjectWithItemRealIdInArray(id, LAST_VEHICLES);
    if (vr == null) {
        $('.vehicleRealThumb' + id).hide();
    } else {
        if (VEHICLE_ID_OF_INTEREST == id) {
            SlideItUp();
            return;
        }
        $("#expandableTop").html(vr.VehicleTemplate.Manufacturer + ' ' + vr.VehicleTemplate.Model + ' ' + vr.VehicleTemplate.Trim);

        VEHICLE_ID_OF_INTEREST = vr.ItemRealId;
        HideSlideDowns();

        $("#viewVehicleStatTable").setTemplateElement("viewVehicleStatTableTemplate");
        $("#viewVehicleStatTable").processTemplate(vr).show();

        if (vr.ThisPlayerOwnsOrControlsThis) {
            if (vr.ThisPlayerIsInInside) {
                $('#btnVehicleDetailEnterExit').unbind('click').text('Exit').click(ExitVehicle).attr('href', 'javascript:void(0);');
            } else {
                $('#btnVehicleDetailEnterExit').unbind('click').text('Enter').click(EnterVehicle).attr('href', 'javascript:void(0);');
            }
        } else {
            $('#btnVehicleDetailEnterExit').unbind('click').text('Steal').click(StealVehicle).attr('href', 'javascript:void(0);');
        }

        $('#btnVehicleDetailView').attr('href', 'View-vehicle.aspx?vr=' + vr.ItemRealId);
        $('#expandable').slideDown();
        
        UpdateFancyBox();
    }
}

function UpdateFancyBox() {
    $("a[rel=popupImage]").fancybox({
        'transitionIn': 'none',
        'transitionOut': 'none',
        'titlePosition': 'over',
        'titleFormat': function (title, currentArray, currentIndex, currentOpts) {
            return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
        }
    });
}


function ShowPersonDetail(id) {
    UpdateStreetResetUi();
    var pr = GlobalFindObjectWithCharacterIdInArray(id, LAST_PEOPLE);
    if (pr == null) {
        SlideItUp();
    } else {
        if (PERSON_ID_OF_INTEREST == id) {
            SlideItUp();
            return;
        }

        $("#expandableTop").html(pr.displayName);

        HideSlideDowns();
        PERSON_ID_OF_INTEREST = id;

        $("#uxViewPersonStatTable").setTemplateElement("uxViewPersonStatTableTemplate");
        $("#uxViewPersonStatTable").processTemplate(pr).show();

        $('#expandable').slideDown();
        UpdateFancyBox();
    }
}


function ShowBuildingDetail(id) {
    UpdateStreetResetUi();
    var br = GlobalFindObjectWithBuildingIdInArray(id, LAST_BUILDINGS);
    if (br == null) {
        $('.buildingRealThumb' + id).hide();
    } else {
        if (BUILDING_ID_OF_INTREST == id) {
            SlideItUp();
            return;
        }

        $("#expandableTop").html(br.Title);

        HideSlideDowns();
        BUILDING_ID_OF_INTREST = id;

        $("#uxViewBuildingStatTable").setTemplateElement("uxViewBuildingStatTableTemplate");
        $("#uxViewBuildingStatTable").processTemplate(br).show();

        $('#expandable').slideDown();
    }
}

function StreetUpdateError(response) {
    debugger;
    CONTINUE_UPDATING_STREET = false;
}

var OWNERSHIP_COLOR = "#008";
var IS_WITHIN_COLOR = "#800";
var IS_FOR_SALE_COLOR = "#050";

function UpdateStreetGetBuildingThumbBorderColor(Building) {
    if (Building.OwnedByCurrentCharacter) {
        return "border-color:" + OWNERSHIP_COLOR + ";";
    } else if (Building.IsForSale) {
        return "border-color:" + IS_FOR_SALE_COLOR + ";";
    } 
    return "";
}

function UpdateStreetGetVehicleThumbBorderColor(playerControlsThis, playerIsInside) {
    if (playerControlsThis) {
        if (playerIsInside) {
            return "border-color:" + IS_WITHIN_COLOR + ";";
        }
        return "border-color:" + OWNERSHIP_COLOR + ";";
    }
    return "";
}
function UpdateStreetGetPersonThumbBorderColor(IsCurrentCharacter) {
    if (IsCurrentCharacter) {
        return "border-color:#800;";
    }
    return "";
}

function UpdateStreetMugPlayer() {
    $.ajax({ type: "POST", url: "WebService.asmx/MugPlayer", contentType: "application/json; charset=utf-8", data: "{'ctid':" + PERSON_ID_OF_INTEREST + "}", dataType: "json",
        success: function (result) {
            var x = result.d;
            var t = GlobalFindObjectWithCharacterIdInArray(PERSON_ID_OF_INTEREST, LAST_PEOPLE);
            LOGIN_ENERGY_MAX_SECS = parseInt(x[0].Value);
            $('#uxLoginCurrentEnergy').html(x[1].Value);
            $('#ctl00_UxLoginControl_UxEnergyLevel').width(x[2].Value);
            GlobalUpdateCash(x[3].Value);
            LoginCheckEnergy();
            SlideItUp();
            GlobalShowGenericDialog(x[4].Value, x[5].Value);
            UpdateViewstate();
        },
        error: StreetUpdateError
    });
}

function SlideItUp() {
    PERSON_ID_OF_INTEREST = null;
    VEHICLE_ID_OF_INTEREST = null;
    BUILDING_ID_OF_INTREST = null;
    HideSlideDowns();
    $('#expandable').slideUp();
}

function HideSlideDowns() {
    $('#uxViewPersonStatTable').hide();
    $('#viewVehicleStatTable').hide();
    $('#uxViewBuildingStatTable').hide();
    $('#uxVehicleDetailInteraction').hide();
    $('#uxViewGenericPlaceHolder').hide();
}
function SlideDownWithNewContent(el) {
    SlideItUp();
    $('#uxViewGenericPlaceHolder').html($(el).html()).show();
    $('#expandable').slideDown();
}

function InitMessaging() {
    $('#UxComposeMessage').dialog({ modal: true, autoOpen: false, width: 430 });
}
function SendMessage() {
    $('#UxComposeMessage').dialog('open');
}

function UpdateStreetRemoveFromCar() {
    $.ajax({ type: "POST", url: "WebService.asmx/RemoveFromCar", contentType: "application/json; charset=utf-8",
        data: "{'targetID':" + PERSON_ID_OF_INTEREST + "}", dataType: "json", success: UpdateStreetRemovedFromCar, error: StreetUpdateError
    });
}
function UpdateStreetRemovedFromCar(result) {
    var t = GlobalFindObjectWithCharacterIdInArray(PERSON_ID_OF_INTEREST, LAST_PEOPLE);
    GlobalShowGenericDialog("Success", "You pulled " + t.displayName + " out of the vehicle they were in.");
    SlideItUp();
}



