/* Place holder. */
var LEMON_LIST_SEARCH_DEFAULT_VALUE = 'enter name or ticker symbol here';
var ETF_PERFORMANCE_SEARCH_DEFAULT_VALUE = 'enter name or ticker symbol here';


function showRawContent(url)
{
    document.getElementById('rawContentXMLViewer').src = url;
    $('#rawContentXMLBox').show();
    $('#rawContentXMLViewer').show();
    $('#rawContentXMLViewer').focus();
    //alert(document.getElementById('rawContentXMLViewer').document.body.focus);
    try {
        document.getElementById('rawContentXMLViewer').document.body.focus();
    } catch (error) {
        //
    }

    return;
}


function updateMarketPulse()
{
    // Dow Jones Industrial Average.
    jQuery.get('/marketpulsedata/dow/', {},
            function (data, status) {
                    //alert("Status: " + status);
                    //alert(data.("//*[@id=\"ref_983582_l\"]").text());
                    //alert(data);
                    index = $(data).find('number').text();
                    $('#DOWValue').html(index);

                    $('#DOWChange').html(
                        $(data).find('change').text()
                    );

                    $('#DOWPercent').html(
                        '(' + $(data).find('percent').text() + ')'
                    );

                    var direction = $(data).find('direction').text();
                    direction = direction.replace(/^\s+/, "");
                    direction = direction.replace(/\s+$/, "");
                    if (direction == 'down') {
                        $('#DOWChange').css('color', 'red');
                        $('#DOWPercent').css('color', 'red');
                        $('#DOWArrow').attr('src', '/images/market_index_down_arrow.jpg');
                    } else {
                        $('#DOWChange').css('color', 'green');
                        $('#DOWPercent').css('color', 'green');
                        $('#DOWArrow').attr('src', '/images/market_index_up_arrow.jpg');
                    }

                }
            , 'xml'
    );

    // NASDAQ index.
    jQuery.get('/marketpulsedata/nasdaq/', {},
            function (data, status) {
                    //alert("Status: " + status);
                    //alert(data.("//*[@id=\"ref_983582_l\"]").text());
                    //alert(data);
                    index = $(data).find('number').text();
                    $('#NASDAQValue').html(index);

                    $('#NASDAQChange').html(
                        $(data).find('change').text()
                    );

                    $('#NASDAQPercent').html(
                        '(' + $(data).find('percent').text() + ')'
                    );

                    var direction = $(data).find('direction').text();
                    direction = direction.replace(/^\s+/, "");
                    direction = direction.replace(/\s+$/, "");
                    if (direction == 'down') {
                        $('#NASDAQChange').css('color', 'red');
                        $('#NASDAQPercent').css('color', 'red');
                        $('#NASDAQArrow').attr('src', '/images/market_index_down_arrow.jpg');
                    } else {
                        $('#NASDAQChange').css('color', 'green');
                        $('#NASDAQPercent').css('color', 'green');
                        $('#NASDAQArrow').attr('src', '/images/market_index_up_arrow.jpg');
                    }

                }
            , 'xml'
    );

    // S&P 500 index.
    jQuery.get('/marketpulsedata/sp500/', {},
            function (data, status) {
                    //alert("Status: " + status);
                    //alert(data.("//*[@id=\"ref_983582_l\"]").text());
                    //alert(data);
                    index = $(data).find('number').text();
                    $('#SP500Value').html(index);

                    $('#SP500Change').html(
                        $(data).find('change').text()
                    );

                    $('#SP500Percent').html(
                        '(' + $(data).find('percent').text() + ')'
                    );

                    var direction = $(data).find('direction').text();
                    direction = direction.replace(/^\s+/, "");
                    direction = direction.replace(/\s+$/, "");
                    if (direction == 'down') {
                        $('#SP500Change').css('color', 'red');
                        $('#SP500Percent').css('color', 'red');
                        $('#SP500Arrow').attr('src', '/images/market_index_down_arrow.jpg');
                    } else {
                        $('#SP500Change').css('color', 'green');
                        $('#SP500Percent').css('color', 'green');
                        $('#SP500Arrow').attr('src', '/images/market_index_up_arrow.jpg');
                    }

                }
            , 'xml'
    );

}


/**
 * Pre-submit callback.
 *
 * @return bool
 * @todo Complete docs.
 * @todo Not sure why the calls to the fck.update are not trapped by try/catch properly.  Investigate.
 */
function showRequest(e, formData, jqForm, options) { 
    // formData is an array; here we use $.param to convert it to a string to display it 
    // but the form plugin does this for you automatically when it submits the data 
    var queryString = $.param(formData); 

    try {
        // jqForm is a jQuery object encapsulating the form element.  To access the 
        // DOM element for the form do this: 
        var form = jqForm[0];

    } catch (error) {
        alert(error.message);
    }

 
    // here we could return false to prevent the form from being submitted; 
    // returning anything other than false will allow the form submit to continue 
    return true; 
} 


/**
 * Handles the result from a login request.  This is called regardless of the authentication result.
 *
 * @param  xml
 * @param  statusText
 * @return void
 */
function doLoginCallback(xml, statusText)  { 
    // for normal html responses, the first argument to the success callback 
    // is the XMLHttpRequest object's responseText property 
 
    // if the ajaxForm method was passed an Options Object with the dataType 
    // property set to 'xml' then the first argument to the success callback 
    // is the XMLHttpRequest object's responseXML property 
 
    // if the ajaxForm method was passed an Options Object with the dataType 
    // property set to 'json' then the first argument to the success callback 
    // is the json data object returned by the server 
    var msg = $('message', xml).text();

    $(xml).find('message').each(function(){
        var resultText  = $(this).find('result').text()
        var contentText = $(this).find('content').text()
        var infoText    = $(this).find('info').text()
        var idText      = $(this).find('id').text()
        var color;

        if (resultText == 'Success') {
            color = 'green';
        } else {
            color = 'red';
        }

        $('#response').html(
            $('<span style="color: ' + color + ';"></span>')
                .html(
                    'Result: ' + resultText + "<br />" + 
                    'Content: ' + contentText + "<br />" + 
                    'Info: ' + infoText + "<br />" + 
                    ''
                )
        );

        $('<span></span>')
            .html(
                'Result: ' + resultText + "<br />" + 
                'Content: ' + contentText + "<br />" + 
                'Info: ' + infoText + "<br />" + 
                'ID: ' + idText + "<br />" + 
                ''
            )
            .appendTo('#debugger');

        function handleLoginRefreshCounter() {
            if (typeof(window.count) == 'undefined') {
                window.count = 3;
            }

            $('#LoginRefreshCounter').text('Refreshing in ' + window.count);

            if (count == 0) {
                document.location.reload();
            } else {
                window.count = count - 1;
                setTimeout(handleLoginRefreshCounter, 1000);
            }

            return;
        }

        if (resultText == 'Success') {
            if ($(this).find('method').text() == 'login') {
                $('#LoginMessageBoxMessage').text('You have logged in successfully.');
            } else {
                $('#LoginMessageBoxMessage').text('You have logged out successfully.');
            }
            $('#MessageBoxShroud').show();
            $('#LoginMessageBox').show();
            handleLoginRefreshCounter();

        } else {
            if ($(this).find('method').text() == 'login') {
                $('#LoginMessageBoxMessage').text('Your log in failed.');
            } else {
                $('#LoginMessageBoxMessage').text('Your log out failed.');
            }
            $('#MessageBoxShroud').show();
            $('#LoginMessageBox').show();
            handleLoginRefreshCounter();

        }
    }); //close each(

    //alert(msg);
 
    //alert('status: ' + statusText + '\n\nresponseText: \n' + xml + 
    //   '\n\nThe output div should have already been updated with the responseText.'); 

    return;
}


function removeDefaultText(sourceElement, elementName) {
    // Globals.
    if (typeof(FORM_INPUT_DEFAULT_TEXT) == 'undefined') {
        FORM_INPUT_DEFAULT_TEXT = {};
    }

    // Check that this field has not been handled yet.
    if (typeof(FORM_INPUT_DEFAULT_TEXT[elementName]) != 'undefined') {
        return;
    }

    $(sourceElement).val('');

    FORM_INPUT_DEFAULT_TEXT[elementName] = true;

    return;
}


/**
 * Saves the selected page size in a cookie.
 *
 * @param  int size Required page size.
 * @return void
 */
function saveLemonListPageSizePreference(size) {
    try {
        var cookie = new Cookie(document);
        var today = new Date();
        var expires = new Date(today.getTime() + 60 * 60 * 24 * 365 * 10);
        cookie.saveCookie('lemonlist_page_size', size, expires, '/');

    } catch (error) {
        debugmessage('saveLemonListPageSizePreference failed: ' + error.message);
    }


    return;
}


/**
 * Populates the Lemon List table via.  This is done via an Ajax to an XML feed.
 *
 * @param  int    offset Optional query offset (paging).
 * @return void
 */
function populateLemonList(options) {
    // Locals.
    var options = (typeof(options) == 'undefined') ? {} : options;
    var pageSize;
    var cookie = new Cookie(document);

    // Save the user's page size setting.
    if (typeof(options.pagesize) == 'undefined') {
        pageSize = cookie.getCookie('lemonlist_page_size');
        if (!pageSize) {
            pageSize = 25;
        }
    } else {
        pageSize = options.pagesize;
    }

    // Save the page size if not in top 10 mode.
    if (typeof(options.search) == 'undefined') {
        saveLemonListPageSizePreference(pageSize);
    }

    var offset = (typeof(options.offset) == 'undefined') ? 0 : options.offset;
    var currentPage = (offset == 0) ? 1 : (offset / pageSize) + 1;
    var target = $('#lemons');
    if (options.search) {
        var searchletter = '';
        var term = '';
        var pageSize = 10;
        $('#PerPage').val(pageSize);
    } else if (options.searchletter) {
        var searchletter = options.searchletter;
        var term = '';
    } else {
        var term = ($('#LemonListSearchTerm').val() == LEMON_LIST_SEARCH_DEFAULT_VALUE) ? '' : $('#LemonListSearchTerm').val();
        var searchletter = '';
    }
    var sortColumn = (typeof(options.sortcolumn) == 'undefined') ? '' : options.sortcolumn;
    var sortDirection = '';

    // Sort column and direction.
    if (sortColumn == '') {
        sortColumn = LAST_LEMONLIST_SORT_COLUMN;
        sortDirection = LAST_LEMONLIST_SORT_DIRECTION;
    } else {
        if (typeof(LAST_LEMONLIST_SORT_DIRECTION) == 'undefined') {
            LAST_LEMONLIST_SORT_DIRECTION = '';
        }
        if (typeof(LAST_LEMONLIST_SORT_COLUMN) == 'undefined') {
            LAST_LEMONLIST_SORT_COLUMN = '';
        }
        if (sortColumn == '') {
            sortDirection = 'ASC';
        } else if (LAST_LEMONLIST_SORT_COLUMN == sortColumn) {
            if (LAST_LEMONLIST_SORT_DIRECTION == 'ASC') {
                sortDirection = 'DESC';
            } else {
                sortDirection = 'ASC';
            }
        } else if (LAST_LEMONLIST_SORT_COLUMN != sortColumn) {
            sortDirection = 'ASC';
        }
        LAST_LEMONLIST_SORT_COLUMN = sortColumn;
        LAST_LEMONLIST_SORT_DIRECTION = sortDirection;
    }

    var requestData = {
        __TARGET__: BASE_URL_CONTENT + '/lemonlist/read/',
        __METHOD__: 'get',
        displaycount: pageSize,
        start: offset,
        searchword: term,
        orderby: sortColumn,
        sortdir: sortDirection,
        searchletter: searchletter
    };

    $.ajax({
        url: '/ajaxproxy/',
        data: requestData,
        error: function (data, status)
        {
            //debugmessage(data);
            //debugmessage(status);
        },

        success: function (data, status)
        {
            if (target.children('tbody').length == 1) {
                $('#lemons').children('tbody').remove(0);
            }

            $(data).find('fund').each(
                function()
                {
                    var cols = ''
                        + sprintf('<td onmouseover="showFullData(\'%s\', \'%s\');" onmouseout="hideFullData();">%s</td>',
                            $(this).find('fulldata').text(),
                            $(this).find('fundid').text(),
                            '<img src="/images/makingmoneyalert/lemon_list_detail_icon.gif" width="30" height="16" border="0" alt="" />')
                        + sprintf('<td id="%s">%s</td>', $(this).find('fundid').text(), $(this).find('symbol').text())
                        + '<td>' + $(this).find('name').text() + '</td>'
                        + '<td>' + $(this).find('assets').text() + '</td>'
                        + '<td>' + $(this).find('qtr').text() + '</td>'
                        + '<td>' + $(this).find('oneyear').text() + '</td>'
                        + '<td>' + $(this).find('threeyear').text() + '</td>'
                        + '<td>' + $(this).find('fiveyear').text() + '</td>'
                        + '<td>' + $(this).find('tenyear').text() + '</td>'
                        + '<td>' + $(this).find('load').text() + '</td>'
                        + '<td>' + $(this).find('expratio').text() + '</td>'
                        + '<td>' + $(this).find('redemption').text() + '</td>'
                        + '';
                    $("#lemons").append("<tr>" + cols + "</tr>");
                }
            );

            $(data).find('reportdate').each(function()
            {
                $('#ReportDate').html('<h3>List is current as of ' + $(this).text() + '</h3>');

                return;
            });

            $(data).find('fundcount').each(
                function()
                {
                    // Locals.
                    var totalRecords = $(this).text();
                    var totalPages = Math.floor(totalRecords / pageSize);

                    // Clear the control buttons.
                    $("#LemonListPages").empty();

                    $('#PreviousButton').unbind('click');
                    $('#NextButton').unbind('click');
                    $('#LastButton').unbind('click');


                    // Previous button.
                    if ((offset - pageSize) >= 0) {
                        $('#FirstButton').removeAttr('disabled');
                        $('#PreviousButton').removeAttr('disabled');
                        $('#PreviousButton').click(function () {
                            populateLemonList({offset: offset - pageSize});
                        });
                    } else {
                        $('#FirstButton').attr('disabled', 'disabled');
                        $('#PreviousButton').attr('disabled', 'disabled');
                        $('#PreviousButton').click(function () {
                            return;
                        });
                    }


                    // Next and last buttons.
                    var link = jQuery('<button class="previousNext" style="float: right;">Last</button> | ');
                    if (offset < (pageSize * totalPages)) { // Disable on last page.
                        $('#NextButton').removeAttr('disabled');
                        $('#LastButton').removeAttr('disabled');

                        $('#NextButton').attr('offset', offset);
                        $('#NextButton').click(function () {
                            var _offset = parseInt($(this).attr('offset')) + parseInt(pageSize);
                            populateLemonList({offset: _offset});
                        });

                        $('#LastButton').click(function () {
                            var _offset = pageSize * totalPages;
                            populateLemonList({offset: pageSize * totalPages});
                        });
                    } else {
                        $('#NextButton').attr('disabled', 'disabled');
                        $('#NextButton').removeAttr('offset');
                        $('#NextButton').click(function () {
                            return;
                        });

                        $('#LastButton').attr('disabled', 'disabled');
                        $('#LastButton').click(function () {
                            return;
                        });
                    }


                    var startPageButton = 0;
                    if (currentPage == 1) {
                        startPageButton = 1;
                    } else if (currentPage > (totalPages - 10)) {
                        startPageButton = (totalPages + 1) - 10; // Damn zero based indexing.
                    } else if (currentPage <= 5) {
                        startPageButton = 1;
                    } else {
                        startPageButton = currentPage - 5;
                    }

                    /*
                    debugmessage(
                            'total = ' + $(this).text()
                            + ' :: offset = ' + offset
                            + ' :: pageSize = ' + pageSize
                            + ' :: calc = ' + (pageSize * totalPages)
                            + ' :: totalPages = ' + totalPages
                            + ' :: startPageButton = ' + startPageButton
                            );
                    */

                    for (var i = startPageButton; i <= startPageButton + 10; i++) {
                        var link = jQuery('<button>' + i + '</button>');
                        if (i == currentPage) {
                            link.attr('disabled', 'disabled');
                            link.removeAttr('offset');
                        } else {
                            var buttonOffset = (i - 1) * pageSize;
                            link.attr('offset', buttonOffset);
                            link.click(
                                function (s) {
                                    var _offset = $(this).attr('offset');
                                    populateLemonList({offset: _offset});
                                }
                            );
                        }
                        $("#LemonListPages").append(link);
                        $("#LemonListPages").append('&nbsp;');
                    }

                }
            );

            $('#PerPage').val(pageSize);
        }
    });


}


/**
 * Computes the sort direction.  If a column is clicked twice, the direction is reversed.
 *
 * @return object
 */
function getETFSortColumnAndDirection(column) {
    // Locals.
    var direction;

    // Globals.
    if (typeof(LAST_ETF_SORT_DIRECTION) == 'undefined') {
        LAST_ETF_SORT_DIRECTION = '';
    }
    if (typeof(LAST_ETF_SORT_COLUMN) == 'undefined') {
        LAST_ETF_SORT_COLUMN = '';
    }

    // Sort column and direction.
    if (column == '' ) {
        column = LAST_ETF_SORT_COLUMN;
        direction = LAST_ETF_SORT_DIRECTION;
    } else {
        if (column == '') {
            direction = 'ASC';
        } else if (LAST_ETF_SORT_COLUMN == column) {
            if (LAST_ETF_SORT_DIRECTION == 'asc') {
                direction = 'desc';
            } else {
                direction = 'asc';
            }
        } else if (LAST_ETF_SORT_COLUMN != column) {
            if (column == 'group_name' || column == 'ticker_symbol' || column == 'name') {
                direction = 'asc';
            } else {
                direction = 'desc';
            }
        }
        LAST_ETF_SORT_COLUMN    = column;
        LAST_ETF_SORT_DIRECTION = direction;
    }

    return {
        column: column,
        direction: direction
    };
}




/**
 * Populates the ETF performance report table.
 *
 * @param  int    parameters.offset       Offset to start query from.  Defaults to zero.
 * @param  string parameters.sortby   Column to sort records by.  Defaults to null.
 * @param  string parameters.searchletter Letter to search funds by.  Will match the first letter of a fund name.
 * @return void
 */
function populateETFPerformanceReport(parameters, e) {
    var sourceElement;
    if (!e || !e.target) {
        sourceElement = $('#FundName');
    } else {
        sourceElement = $(e.target);
    }

    // Parameter check.
    var parameters   = (typeof(parameters) == 'undefined') ? {} : parameters;
    var offset       = (typeof(parameters.offset) == 'undefined') ? 0 : parameters.offset;
    var sortColumn   = (typeof(parameters.sortby) == 'undefined') ? '' : parameters.sortby;
    var searchletter = (typeof(parameters.letter) == 'undefined') ? '' : parameters.letter;

    // Locals.
    var pageSize    = 25;
    var currentPage = (offset == 0) ? 1 : (offset / pageSize) + 1;
    var target      = $('#ETFs');
    var term        = '';

    // Process query values and defaults.
    var sort = getETFSortColumnAndDirection(sortColumn);
    if (searchletter) {
        term = '';
    } else if ($('#ETFSearchTerm').val() != ETF_PERFORMANCE_SEARCH_DEFAULT_VALUE) {
        term = $('#ETFSearchTerm').val();
    }

    try {
        // Remove highlighting from all table headers.
        $('#ETFs').find('th').each(function ()
        {
            $(this).removeAttr('class');
        });

        if (sort.direction == 'asc') {
            sourceElement.attr('class', 'asc');
        } else {
            sourceElement.attr('class', 'desc');
        }
    } catch (e) {
        //
    }

    // HTTP parameters.
    var requestData = {
        __TARGET__:   BASE_URL_CONTENT + '/etfperformancereport/read/',
        __METHOD__:   'get',
        displaycount: pageSize,
        start:        offset,
        searchword:   term,
        orderby:      sort.column,
        sortdir:      sort.direction,
        searchletter: searchletter
    };

    jQuery.get(
        '/ajaxproxy/',
        requestData,
        function (data, status)
        {
            // Populate the data rows.
            // -----------------------

            // Remove the first row (placeholder).
            if (target.children('tbody').length == 1) {
                $('#ETFs').children('tbody').remove(0);
            }

            $(data).find('fund').each(function()
            {
                //cols += '<td>' + sprintf('%01.2f', parseFloat($(this).find('price').text())) + '</td>';
                var cols = '';
                cols += '<td class="group">' + $(this).find('group').text() + '</td>';
                cols += '<td class="ticker">' + $(this).find('symbol').text() + '</td>';
                cols += '<td class="name">' + $(this).find('name').text() + '</td>';

                cols += '<td>' + $(this).find('price').text() + '</td>';
                cols += '<td>' + $(this).find('previous').text() + '</td>';
                cols += '<td>' + $(this).find('change1week').text() + '</td>';
                cols += '<td>' + $(this).find('change1month').text() + '</td>';
                cols += '<td>' + $(this).find('change3month').text() + '</td>';
                cols += '<td>' + $(this).find('yeartodate').text() + '</td>';
                cols += '<td>' + $(this).find('high').text() + '</td>';
                cols += '<td>' + $(this).find('dd50').text() + '</td>';
                cols += '<td>' + $(this).find('dd200').text() + '</td>';
                cols += '<td>' + $(this).find('averagevolume').text() + '</td>';

                //cols += '<td>' + $(this).find('fulldata').text() + '<td>';
                $("#ETFs").append("<tr>" + cols + "</tr>");
            });

            // Populate the report date.
            $(data).find('reportdate').each(function()
            {
                $('#ReportDate').html('<h3>Report is current as of ' + $(this).text() + '</h3>');

                return;
            });


            // Handle first, previous, next, last buttons, and populate page number buttons.
            // -----------------------------------------------------------------------------

            // Locals.
            var totalRecords = $(data).find('fundcount').text();
            var totalPages = Math.ceil(totalRecords / pageSize);

            // Clear the control buttons click handlers.
            $('#FirstButton').unbind('click');
            $('#PreviousButton').unbind('click');
            $('#NextButton').unbind('click');
            $('#LastButton').unbind('click');

            // First button, enable if not on page one.
            if (currentPage != 1) {
                $('#FirstButton').removeAttr('disabled');
                $('#FirstButton').click(function (event) {
                    var params = {
                        offset: 0,
                        letter: searchletter
                    };
                    populateETFPerformanceReport(params, event);
                });
            } else {
                $('#FirstButton').attr('disabled', 'disabled');
            }

            // Previous button.
            if ((offset - pageSize) >= 0) {
                // Previous button.
                $('#PreviousButton').removeAttr('disabled');
                $('#PreviousButton').attr('offset', offset);
                $('#PreviousButton').click(function (event)
                {
                    var params = {
                        offset: parseInt($(this).attr('offset')) - pageSize,
                        letter: searchletter
                    };
                    populateETFPerformanceReport(params, event);
                });
            } else {
                $('#PreviousButton').attr('disabled', 'disabled');
            }

            // Next and last buttons.
            if (pageSize * currentPage < pageSize * totalPages) {
                $('#NextButton').removeAttr('disabled');
                $('#LastButton').removeAttr('disabled');

                $('#NextButton').attr('offset', offset);
                $('#NextButton').click(function (event)
                {
                    var params =  {
                        offset: parseInt($(this).attr('offset')) + parseInt(pageSize),
                        letter: searchletter
                    };
                    populateETFPerformanceReport(params, event);
                });

                $('#LastButton').click(function (event)
                {
                    var params = {
                        offset: (pageSize * totalPages) - pageSize,
                        letter: searchletter
                    };
                    populateETFPerformanceReport(params, event);
                });

            // Disable on last page.
            } else {
                $('#NextButton').attr('disabled', 'disabled');
                $('#LastButton').attr('disabled', 'disabled');
            }


            var startPageNumber = 1; // Default start page is 1.
            // Start numbering at 1 for buttons 2 through 5.
            if (currentPage <= 5) {
                startPageNumber = 1;

            // Start numbering at last page - 10 if we are close to the last page.
            } else if (currentPage > (totalPages - 10)) {
                startPageNumber = (totalPages - 10) + 1; // Handle zero based indexing.

            // Start numbering at current page - 5 otherwise.
            } else {
                startPageNumber = currentPage - 5;
            }

            // Clear the current page buttons.
            $("#ETFPerformanceReportPages").empty();
            for (var i = startPageNumber; i <= startPageNumber + 10; i++) {
                // Stop if on last page.
                if (i > totalPages) {
                    break;
                }

                var link = jQuery('<button>' + i + '</button>');
                if (i == currentPage) {
                    link.attr('disabled', 'disabled');
                } else {
                    var buttonOffset = (i - 1) * pageSize;
                    link.attr('offset', buttonOffset);
                    link.click(function (event)
                    {
                        var params = {
                            offset: $(this).attr('offset'),
                            letter: searchletter
                        };
                        populateETFPerformanceReport(params, event);
                    });
                }
                $("#ETFPerformanceReportPages").append(link);
                $("#ETFPerformanceReportPages").append('&nbsp;');
            }
        }
    );


}


function populateMMAVideos(thumbnailWidth) {
    var requestParams = {
        __TARGET__: 'http://ajax.googleapis.com/ajax/services/search/video?v=1.0&q=ytchannel:dougfabian&rsz=large&scoring=d',
        //__TARGET__: 'http://fabian.dev.soa.eaglepub.com/js/googleresult.js',
        __METHOD__: 'get'
    };

    thumbnailWidth = (!thumbnailWidth) ? '110': thumbnailWidth;

    $.ajax(
        {
            url: '/ajaxproxy/',
            data: requestParams,
            dataType: 'json',
            success: function (data) {

                /** @todo Need to make sure this fails gracefully.  Had some IE errors I have to track down when the data
                 * set was not returned properly. */
                if (!data.responseData) {
                    return;
                }
				
				
                for (var i = 0; i < data.responseData.results.length; i++) {
                    var result      = data.responseData.results[i];
                    var cssClass    = (i == 0) ? ' first' : '';
                    var publishDate = new Date(Date.parse(result.published));
                    var day         = publishDate.getDate();
                    var month       = publishDate.getMonth() + 1; // Returns a zero index value.
                    var year        = publishDate.getFullYear();
                    var hr          = (i != data.responseData.results.length - 1) ? '<hr />' : '';

                    var entry = jQuery(''
                          + '<div class="video-entry' + cssClass + '">'
                          + '    <h2>' + result.titleNoFormatting + '</h2>'
                          + '    <div class="thumbnail">'
                          + '        <a href="/makingmoneyalert/video-alerts/watch/?title=' + result.titleNoFormatting + '&video=' + result.url.split("=")[1] + '">'
                          + '            <img '
                          + '                src="' + result.tbUrl + '" '
                          + '                width="' + thumbnailWidth + '" '
                          + '                alt="Video Thumbnail" '
                          + '                border="0" />'
                          + '        </a>'
                          + '    </div>'
                          + '    <div class="info">'
                          + '        <dl>'
                          + '            <dt>'
                          + '                Published: '
                          + '            </dt>'
                          + '            <dd>'
                          + '                ' + month + '/' + day + '/' + year
                          + '            </dd>'
                          + '            <dt>'
                          + '                Views: '
                          + '            </dt>'
                          + '            <dd>'
                          + '                ' + result.viewCount
                          + '            </dd>'
                          + '        <div class="watch">'
                          + '            <a href="/makingmoneyalert/video-alerts/watch/?title=' + result.titleNoFormatting + '&video=' + result.url.split("=")[1] + '">'
                          + '                Watch'
                          + '            </a>'
                          + '        </div>'
                          + '    </div>'
                          + '    ' + hr
                          + '</div>'
                          + '');

                    $('#RecentVideoList').append(entry);
                }

            }
        }
    );

    return;
}


function populateSITable() {
    $("#PortfolioTableLarge").flexigrid(
        {
        url: '/ajaxproxy/?__METHOD__=get&__TARGET__=' + encodeURIComponent(BASE_URL_CONTENT + '/recommendations/read/index.php'),
        dataType: 'xml',
        colModel : [
            {display: 'Company Name', name : 'company_name', width : 200, sortable : true, align: 'center'},
            {display: 'Ticker Symbol', name : 'ticker_symbol', width : 80, sortable : true, align: 'center'},
            {display: 'Date Recommended', name : 'date_recommended', width : 120, sortable : true, align: 'left'},
            {display: 'Buy Price', name : 'buy_price', width : 80, sortable : true, align: 'left'},
        ],
        searchitems : [
            {display: 'Company Name', name : 'company_name'},
            {display: 'Name', name : 'name', isdefault: true}
            ],
        sortname: "company_name",
        sortorder: "asc",
        usepager: false,
        title: 'Recommendations',
        useRp: true,
        rp: 5,
        showTableToggleBtn: false,
        width: 700,
        //onSubmit: addFormData,
        height: 120
        }
    );

    return;
}


function doMenu() {
    var options = {
        minWidth: 120,
        arrowSrc: 'arrow_right.gif',
        onClick: function(e, menuItem) {
            alert('you clicked item "' + $(this).text() + '"');
        }
    };
    //$('#menuone').menu(options);

    var options = {
        minWidth: 120,
        arrowSrc: 'arrow_right.gif',
        offsetTop: -50,
        offsetLeft: 100,
        hoverOpenDelay: '50',
        showDelay: '200',
        hideDelay: '100',
        visible: true
    };

    var items = [   {src: 'test', url:'http://www.jquery.com'},   
    {src: ''}, // separator
    {src: 'test2', subMenu: [   {src: 'sub 1'},  
    {src: 'sub 2', url: 'http://p.sohei.org', target: '_blank'},  
    {src: 'sub 3'}]}];

    $('#freecontent').menu(options);//, items);

    $('#freecontent span').click(
        function () {
            debugmessage($(this).menu);
        }
    );

}


/**
 * Prints debug messages to console on Firefox, or custom handling in IE.
 */
function debugmessage(message)
{
    // Locals.
    var target;

    try {
        console.log(message);
    } catch (error) {
        var target = $('#JavascriptDebugger');
        if (!target) {
            return;
        }
        target.append(message + '<br />');

        if (typeof('DEBUG_MODE') != undefined && DEBUG_MODE == true) {
            target.css('display', 'block');
        }
    }

    return;
}


function showFullData(inData, objID)
{
    /*
    0 = fundid
    1 = symbol 
    2 = fundname 
    3 = obj
    4 = assets
    5 = nav
    6 = qtr
    7 = oneyear
    8 = fiveyear
    9 = tenyear
    10 = load
    11 = expratio
    12 = redemption
    13 = toprank
    14 = obj name
    15 = obj one year
    16 = obj three year
    17 = obj five year
    18 = fundname1
    */
    rowdata = findPos(document.getElementById(objID));
    coldata = findPos(document.getElementById('fundnameheader'));

    allvals = inData.split("/*/");
    for (var i =0;i < allvals.length;i++) {
        vals = allvals[i].split("=");
        if (vals[0] != '') {
            try {
                document.getElementById(vals[0]).innerHTML = vals[1];
            } catch(e) {
                //debugmessage(sprintf('0 = %s :: 1 = %s :: %s', vals[0], vals[1], e.message));
            }
        }
    }

    var positionTop = rowdata[1]+14;
    var positionLeft = coldata[0] - 130;
    //debugmessage(sprintf('top = %s :: left = %s', positionTop, positionLeft));

    $('#alldata').css('display', 'block');
    $('#alldata').css('top', positionTop);
    $('#alldata').css('left', positionLeft);
}


function hideFullData() {
    $('#alldata').hide();
}


function say(val)
{
    //oldval = document.getElementById('statusfield').innerHTML
    //document.getElementById('statusfield').innerHTML = val + '<br>' + oldval
}



function findPos(obj) 
{
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
    return [curleft,curtop];
}



function toggleCacheHandler(current) {
    console.log(window.location.href);

    var query = location.search.substring(1);
    var sep = (query) ? '&' : '?';


    var value = (current == 0) ? 1 : 0;

    //window.location.replace(window.location.href + sep + 'disable_cache=' + value);
    /*
    if (location.port == 80 || location.port == '') {
        location.port = 8080;
    } else {
        location.port = 80;
    }
    */

    var requestData = {
        call: 'toggleCache'
    };

    $.ajax({
        url: '/ajaxio/',
        data: requestData,
        error: function (data, status)
        {
            debugmessage(data);
            debugmessage(status);
        },

        success: function (data, status)
        {
            window.location.reload();
        }
    });

    return;
}


function testSSL()
{
    var requestData = {
        username: 'afhil',
        password: 'barb'
    }

    var blah = $.ajax({
        //url: 'https://' + HOST_FABIAN + '/login/',
        url: 'https://fabian.dev.soa.eaglepub.com/login/index.php',
        //url: '/login/index.php',
        //dataType: 'xml',
        type: 'POST',
        data: requestData,
        async: true,
        error: function (data, status, e)
        {
            debugmessage('doh error');
            debugmessage(data);
            debugmessage(data.status);
            debugmessage(e);
        },

        success: function (data, status)
        {
            debugmessage('doh success');
            debugmessage(data);
            debugmessage(status);
            alert(data);
        }
    });

    console.log('status?');
    console.log(blah);
}


// vim: set foldmethod=indent foldnestmax=1:

