﻿if (typeof (window.HomePartnerModule) == "undefined") {
    window.HomePartnerModule = {};
}

(function(HomePartnerModule, $) {
    // Retrieves the results from the web service.
    HomePartnerModule.Init = function (id, serviceUrl, contentName, urlRoot, rotationTimeSeconds) {
        //load initial content
        getResults(id, serviceUrl, contentName, urlRoot);
        
        //start the timed rotation of items
        setInterval(function () {
            displayNextResult(id, urlRoot);
        }, rotationTimeSeconds * 1000);
    }

    function getResults(id, serviceUrl, contentName, urlRoot) {
        $.ajax({
            type: 'POST',
            url: serviceUrl + '/GetPartnerItems',
            data: "{ContentName:\"" + contentName + "\"}",
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function(result)
                 {
                    if (result.d != null && result.d.length > 0)
                    {
                        //store the item data for this module, as well as a list of valid indexes (used by the randomizer)
                        $("#" + id).data("items", result.d)
                            .data("indexes", getIndexArray(result.d));
                        //show the first (random) item using the retrieved data
                        displayNextResult(id, urlRoot);
                    }
                 },
            failure: function(error)
                 {
                    //TODO: Do something
                 }
        });
    }

    // Displays the next (random) result. Assumes that data has been loaded by a prior call to getResults.
    function displayNextResult(id, urlRoot) {
      
        var module = $('#' + id),
            item = pickNextItem(module);
        
        if (module.length > 0 && item) {
            module.find('.Title').html(item.Title);
            module.find('.Text').html(item.Text);
            module.find('.Image').empty().append('<img src="' + item.ImageURL + '" alt="' + item.ImageLabel + '" />');
            module.find('.divMoreLink').find('a').attr('href', item.URL.replace('~/', urlRoot));

        }
    }
    
    // Uses the module's item list and list of valid (i.e. not yet shown) indices to pick a random successor.
    function pickNextItem($module) {
        var items = $module.data("items"),
            indexes = $module.data("indexes");
        if (items.length == 1)
        {
            return items[0];
        }
        else if (indexes.length > 1) {
            var randIdx = randomNumber(indexes.length);
            var result = items[indexes[randIdx]];
            $module.data("indexes", removeIndex(indexes, randIdx));
            return result;
        } else if (indexes.length == 1) {
            //last index
            var result = items[indexes[0]];
            $module.data("indexes", getIndexArray(items));
            return result;
        } else {
            return null;
        }
    }
    
    function randomNumber(max) {
        //note that max is exclusive (i.e. will never return max)
        return Math.floor(Math.random() * (max));
    }
    
    function getIndexArray(items) {
        // returns an array of all possible indices in array "items"
        var result = [];
        for (var i = 0; i < items.length; i++) {
            result[i] = i;
        }
        return result;
    }
    
    function removeIndex(indexArray, index) {
        //removes the item at the given index from the given array
        return indexArray.slice(0, index).concat(indexArray.slice(index+1));
    }
    
})(HomePartnerModule, jQuery);