﻿var buddy_data = function() {
    buddy_data.populateHistory = function(onComplete) {
        buddy_data.loadSection('/Extentions/Comcast.Customer.Web.UI.UserControls/Layout/customer_comcast_com/Ajax.aspx?MID=1',
            'buddyYourRecentlyViewed',
            function(data, container) {
                if (data != null) {
                    jQuery.each(data, function(key, val) {
                        var text = '',
                            url = '';

                        jQuery.each(val, function(key, val) {
                            switch (key.toLowerCase()) {
                                case 'text':
                                    {
                                        text = val;
                                        break;
                                    }   //case
                                case 'subtext':
                                    {
                                        subText = val;
                                        break;
                                    }   //case
                                case 'url':
                                    {
                                        url = val;
                                        break;
                                    }   //case
                            }   //switch
                        });

                        if (text != '') {
                            var li = jQuery('<li />');
                            var a = jQuery('<a />');
                            var p = jQuery('<p />');
                            a.html(text)
                            if (url != '') {
                                a.attr('href', url);
                            }
                            p.html(subText);
                            li.append(a);
                            li.append(p);
                            container.append(li);
                        }   //if
                    });
                }   //if
            },
            onComplete,
            buddy_data.defaultDetermineHide);
    }

    buddy_data.populateEquipment = function(onComplete) {
        buddy_data.loadSection('/Extentions/Comcast.Customer.Web.UI.UserControls/Layout/customer_comcast_com/Ajax.aspx?MID=0', 'buddyYourEquipment', function(data, container) {
            jQuery.each(data, function(key, val) {
                jQuery.each(val, function(key, val) {
                    if (key == 'Devices') {
                        jQuery.each(val, function(key, val) {
                            var make, model, img;

                            jQuery.each(val, function(key, val) {
                                switch (key) {
                                    case 'CanonicalMake':
                                        {
                                            make = val;
                                            break;
                                        }   //case
                                    case 'CanonicalModel':
                                        {
                                            model = val;
                                            break;
                                        }   //case
                                    case 'ThumbNailImageUrl':
                                        {
                                            img = val;
                                            break;
                                        }   //case
                                }   //key
                            });

                            // append
                            var li = jQuery('<li />').addClass('h_clearfix'),
                                        elemImg = jQuery('<img />').attr('src', img).width(45).height(45);
                            li.append(jQuery('<div />').append(jQuery('<h4 />').html(make + model)));
                            li.append(jQuery('<div />').addClass('img').append(elemImg));
                            container.append(li);
                        });
                    }   //if
                });
            });

            container.find('.count').html('(' + container.find('li').length + ')');
        }, onComplete, buddy_data.defaultDetermineHide, 'text');
    }

    buddy_data.populateServiceStatuses = function(onComplete) {
        buddy_data.loadSection('/Extentions/Comcast.Customer.Web.UI.UserControls/Layout/customer_comcast_com/Ajax.aspx?MID=2', 'buddyConnectionInfo', function(data, container) {
            if (data != null) {
                jQuery.each(data, function(key, val) {
                    var li = jQuery('<li />');
                    var name = jQuery('<h4 />');
                    var status = jQuery('<span />');
                    var info = jQuery('<p class="info" />');
                    var more = jQuery('<a href="javascript:;" class="showMore">More...</a>');

                    jQuery.each(val, function(key, val) {
                        switch (key) {
                            case 'Name':
                                {
                                    name.html(val);
                                    break;
                                }   //case
                            case 'StatusMessage':
                                {
                                    status.html(val);
                                    break;
                                }   //case
                            case 'Message':
                                {
                                    info.html(val);
                                    break;
                                }   //case
                            case "IsUp":
                                {
                                    if (val) {
                                        name.addClass('buddyConnectionTrue');
                                    }   //if
                                    else {
                                        name.addClass('buddyConnectionFalse');
                                    }   //else
                                    break;
                                }   //case
                        }   //switch
                    });

                    container.append(li);
                    li.append(name);
                    if (info.html() != '') {
                        li.append(info);
                    }   //if

                    // Get the actual message height to see if the more button needs to be displayed
                    var infoHeight = 0;

                    if (info.html() != '') {
                        var testHeight = jQuery('<div id="testHeight" />');
                        testHeight.html(info.html());
                        testHeight.css({
                            position: 'absolute',
                            visible: 'hidden',
                            top: '100px',
                            left: '0px',
                            fontSize: info.css('font-size'),
                            lineHeight: info.css('line-height'),
                            width: container.width()
                        });
                        jQuery('body').append(testHeight);
                        var infoHeight = testHeight.height();
                        testHeight.remove();
                    }   //if

                    if (infoHeight > info.height()) {
                        li.append(more);
                    }   //if
                    name.append(status);

                    li = null;
                    name = null;
                    status = null;
                });
            }   //if
        }, onComplete, buddy_data.defaultDetermineHide);
    }

    buddy_data.populateApppointments = function() {
        buddy_data.loadSection('/Extentions/Comcast.Customer.Web.UI.UserControls/Layout/customer_comcast_com/Ajax.aspx?MID=3', 'buddyServiceInfo', function(data, container) {
            if (data != null) {
                jQuery.each(data, function(key, val) {
                    if (key == 'FormattedDate') {
                        container.find('span').html(val);
                    }   //if
                });
            }   //if
        }, null, function() {
            return jQuery('#buddyServiceInfo').find('span').html() == '';
        });
    }

    buddy_data.populateAccountSelector = function(onComplete) {
        buddy_data.loadSection('/Extentions/Comcast.Customer.Web.UI.UserControls/Layout/customer_comcast_com/Ajax.aspx?MID=4', 'buddyMultiService', function(data, container) {
            if (data != null) {
                var showing = container.find('h3 span');
                var ul = container.find('#buddyMultiServiceList ul');
                var first = true;

                jQuery.each(data, function(key, val) {
                    if (first) {
                        showing.html('SHOWING: ' + val);
                        first = false;
                    }   //if

                    var li = jQuery('<li />');
                    var a = jQuery('<a />');
                    a.html(val);
                    a.attr('href', '/changeAccount.ashx?an=' + key + '&backUrl=' + window.location.href);
                    li.append(a);
                    ul.append(li);
                });

                ul.find('li:last-child').addClass('last');
            }   //if
        }, onComplete, buddy_data.defaultDetermineHide);
    }

    buddy_data.fixUrls = function() {
        //        jQuery('body').find('a').each(function() {
        //            jQuery(this).attr('href', '/historyRedirect.ashx?redirect=' + encodeURIComponent(jQuery(this).attr('href')));
        //        });
    }

    buddy_data.loadSection = function(endPoint, topDivID, processData, onComplete, determineHide, dataType) {
        var topContainer = jQuery('#' + topDivID);
        var whitebox = topContainer.find('.whiteBox');
        var container = whitebox.find('ul');
        if (!dataType || dataType == '') {
            dataType = 'text';
        }   //if

        jQuery.ajax({
            url: endPoint,
            dataType: dataType,
            success: function(data) {
                try {
                    var json = jQuery.parseJSON(data);
                    if (json != null) {
                        if (processData) {
                            processData(json, container.length > 0 ? container : topContainer);
                        }   //if

                        // Add last class on the last li of the ul
                        var ul = jQuery('#' + topDivID).find('ul');
                        if (ul.length == 1) {
                            var lastLi = ul.find('li:last-child');
                            if (lastLi.length == 1) {
                                lastLi.addClass('last');
                            }   //if
                        }   //if
                    }   //if
                }   //try
                catch (err) {
                    if (data != '') {
                        if (data.indexOf('wait') == -1) {
                            // Show failure message
                            var unavailable = jQuery('<li />');
                            unavailable.addClass('last');
                            unavailable.html(data);
                            unavailable.attr('style', 'margin-left:0px !important;color:#000;font-size:1em;');
                            container.append(unavailable);
                            whitebox.data().min = null;
                        }   //if
                        else {
                            // Retry
                            var wait = parseInt(data.split(':')[0]);
                            setTimeout(function() {
                                buddy_data.loadSection(endPoint, topDivID, processData, onComplete, determineHide, dataType)
                            }, wait);
                            return;
                        }   //else
                    }   //if
                }   //catch

                buddy_data.hideLoader(topContainer);

                // toggle hidden class
                topContainer.removeClass('hidden');

                if (determineHide == null) {
                    determineHide = buddy_data.defaultDetermineHide;
                }   //if
                if (determineHide(topContainer)) {
                    topContainer.hide();
                }   //if

                // Size
                if (whitebox.data() != null && whitebox.data().min) {
                    HELP_BUDDY.defaultHeight(topContainer);
                }   //if

                if (onComplete != null) {
                    onComplete();
                }   //if
            },
            error: function() {
                buddy_data.hideLoader(topContainer);

                if (container.find('li').length == 0) {
                    topContainer.hide();
                }   //if
            }
        });
    }

    buddy_data.defaultDetermineHide = function(container) {
        return container.find('li').length == 0;
    }

    buddy_data.hideLoader = function(container) {
        var loadingDiv = container.find('.loading-message');
        if (loadingDiv.length > 0) {
            loadingDiv.remove();
        }   //if

        loadingDiv = container.find('.loading');
        if (loadingDiv.length > 0) {
            loadingDiv.remove();
        }   //if
    }
}

jQuery(document).ready(function() {
    buddy_data();
    //buddy_data.fixUrls();

    // Accounts drop down
    buddy_data.populateAccountSelector(function() {
        // Multi service
        var oBuddyMultiService = jQuery('#buddyMultiServiceList');
        jQuery('#buddyMultiService h3').click(function() {

            if (oBuddyMultiService.css('display') === 'block') {
                oBuddyMultiService.hide();
            }
            else {
                oBuddyMultiService.show();
            }

        });

        // To close buddy multiservice results
        jQuery(document).click(function(e) {

            if (!jQuery(e.target).parents().andSelf().is('#buddyMultiServiceList') && !jQuery(e.target).parents().andSelf().is('#buddyMultiService h3')) {
                //oBuddyMultiService.hide();
            }

        });
    });

    // Appointments
    if (jQuery('#buddyServiceInfo').length == 1) {
        buddy_data.populateApppointments();
    }   //if

    // History
    if (jQuery('#buddyYourRecentlyViewed').length == 1) {
        buddy_data.populateHistory();
    }   //if

    // Connection statuses
    if (jQuery('#buddyConnectionInfo').length == 1) {
        buddy_data.populateServiceStatuses(function() {
            // Read more
            jQuery('#buddyConnectionInfo .showMore').click(function(e) {
                e.preventDefault();
                jQuery(this).prev().css('height', 'auto').end().hide();
                //$(this).html('Less');
            });
        });
    }   //if

    // Equipment
    if (jQuery('#buddyYourEquipment').length == 1) {
        buddy_data.populateEquipment();
    }   //if
});
