﻿Cwo.RegisterNamespace("Cwo.Favourites");

Cwo.Favourites.FavouriteButtonHandler = function (InstructionID, ButtonID, ActionType) {
    // private variables
    var favourites = this,
        instructionID = InstructionID,
        actionButton = $("#" + ButtonID),
        favouriteMenuContainer = $("#FavouritesLink"),
        favouriteMenuContainerNumberLabel = $("#FavouritesLink span"),
        serviceUrl = "/webservices/Favourites.asmx",
        actionType = ActionType;

    // public methods
    this.Add = function () {
        // Consume the Add or Remove To / From Favourites web service
        var serviceData = "{ InstructionID:" + instructionID + "}",
            ajaxCall = new Cwo.AjaxCall(serviceUrl + "/AddFavourite", serviceData, favourites.Added, null, null);
    };
    this.AddTransition = function () {
        actionButton.effect("transfer", { to: favouriteMenuContainer, className: "FavouritesTransition" }, 1200, null);
    };
    this.Added = function (data) {
        favouriteMenuContainerNumberLabel.text(data.d.FavouriteTotalRowCount);
    };
    this.Remove = function () {
        var serviceData = "{ InstructionID:" + instructionID + "}";
        new Cwo.AjaxCall(serviceUrl + "/RemoveFavourite", serviceData, favourites.Removed, null, null);
    };
    this.Removed = function (data) {
        // Calculate the page number from the total number of favourites
        var totalFavouritesCount = $("#FavouritesTotalCount").text(),
            calculatedLastPageNumber = 0.00,
            pagesize = 10,
            resultPage = 0;

        $("#ListingContainer" + instructionID).remove();
        // Top menu total favourite count
        favouriteMenuContainerNumberLabel.text(data.d.FavouriteTotalRowCount);
        $("#Information").html("<h1><span><span>" + data.d.FavouriteTotalRowCount + "</span> Properties saved in your favourites</span></h1>");

        calculatedLastPageNumber = parseFloat((totalFavouritesCount - 1) / pagesize);

        if (parseFloat(Cwo.Search.Favourites.CurrentPage) === parseFloat(calculatedLastPageNumber) + 1) {
            resultPage = Cwo.Search.Favourites.CurrentPage - 1;
        } else {
            resultPage = Cwo.Search.Favourites.CurrentPage;
        }
        // Reload favourites pages
        window.location.reload();
    };

    // bind the events
    if (actionType === "remove") {
        actionButton.click(function () { favourites.Remove(); });
    } else {
        actionButton.click(function () { favourites.AddTransition(); favourites.Add(); });
    }
};

Cwo.Favourites.BindFavouritesListClicks = function () {
    Cwo.Favourites.BindResultsListClicks("remove");
};

Cwo.Favourites.BindResultsListClicks = function (ActionType) {
    $(".Buttons .Favourites a").each(function () {
        var elementID = $(this).attr("id"),
            instructionID = elementID.replace(/[^\d]/g, "");

        new Cwo.Favourites.FavouriteButtonHandler(instructionID, elementID, ActionType);
    });
};
