﻿var AfrigatorManager = function(config) {
    var _contentType = 'application/json; charset=utf-8';
    var _dataType = 'json';

    var _doAfrigatorCheck = function() {
        var url = config.getStatsUrl + '?shortcode=' + config.shortcode + '&blogId=' + config.blogId;
        //$.post(url, { shortcode: config.shortcode, blogId: config.blogId }, populateStats, "json");
        _executeServiceCall(url, null, 'GET', validateData, statsNotFound, null);
    };

    function validateData(data) {
        if (data.IsUser && data.IsPending && config.isOwner == 1) {
            _toggleTables(false, false, true);
        }
        else if (data.Blogs24Rank != null) {
            _toggleTables(true, false, false);
            _toggleSpinner(true);
            populateStats(data);
        }
        else if (config.isOwner == 1 && !data.IsUser) {
            _toggleTables(false, true, false);
            // register click event for registration button
            $("#activateAfrigator").click(function(event) { _registerForAfrigator(); });
        }
        else {
            _toggleTables(false, false, false);
        }
    };

    function statsNotFound() {
        $('#24comRank').text('N/A');
        $('#SARank').text('N/A');
        $('#AfricaRank').text('N/A');
        _toggleSpinner(false);
    };

    var _registerForAfrigator = function() {
        _toggleTables(false, false, true); //toggle(showActive, showInactive, showPending) 

        var url = config.registerUrl;
        //_executeServiceCall(url, null, 'POST', returnData, null, null);
        $.post(url, { blogId: config.blogId }, populateStats, "json");
    };

    function populateStats(rankData) {        
        if (rankData.Blogs24Rank != null) {

            $('#24comRank').text(rankData.Blogs24Rank);
            $('#SARank').text(rankData.SouthAfricaRank);
            $('#AfricaRank').text(rankData.AfricaRank);

            if (config.isOwner == 0) {
                $('#MoreAfrigatorStats').attr('href', rankData.OutwardMoreStatsUrl);
            }
            else {
                $('#MoreAfrigatorStats').attr('href', rankData.InwardMoreStatsUrl);
            }
            
            if(null != $('#AfrigatorTrackingContainer'))
                $('#AfrigatorTrackingContainer').replaceWith('<img id="AfrigatorTracking" height="0" width="0" alt="Afrigator stats tracking" src="' + rankData.TrackingUrl + '" />');
              }
        
        _toggleSpinner(false);
    };

    // AJAX CALLER
    var _executeServiceCall = function(methodName, methodParams, httpRequestType, successCallback, failCallback, successCallbackParams) {
        if (methodParams == null || methodParams == '')
            methodParams = '{}';
        else {
            methodParams = JSON.stringify(methodParams);
        }
        $.ajax({
            type: httpRequestType,
            url: methodName,
            data: methodParams,
            contentType: _contentType,
            dataType: _dataType,
            success: function(response) {
                if (successCallback != null)
                    successCallback(response, successCallbackParams);
            },
            error: function(message) {
                if (failCallback != null)
                    failCallback(message);
                else
                    alert(message.responseText);
            }
        });
    };

    var _toggleTables = function toggle(showActive, showInactive, showPending) {
        if (showPending) {
            $("#afrigatorPending").show();
            $("#afrigatorInactive").hide();
            $("#afrigatorActive").hide();
        }
        else if (showInactive) {
            $("#afrigatorPending").hide();
            $("#afrigatorInactive").show();
            $("#afrigatorActive").hide();
        }
        else if (showActive) {
            $("#afrigatorPending").hide();
            $("#afrigatorInactive").hide();
            $("#afrigatorActive").show();
        }
        else {
            $("#afrigatorPending").remove();
            $("#afrigatorInactive").remove();
            $("#afrigatorActive").remove();
            $('#afrigatorHeading').remove();
            $('#internalStats').attr('width', '100%');
            $('#internalStats').attr('align', '');
        }
    };

    var _toggleSpinner = function toggleSpinner(show) {
        if (show) {
            $("#spinnerAfrigator").show();
        }
        else {
            $("#spinnerAfrigator").hide();
        }
    };

    var _setup = function() {
        $.ajaxSetup({ cache: false, timeout: 10000 });
        _doAfrigatorCheck();
    };

    return {
        Setup: function() {
            return _setup();
        }
    };
}; 
