﻿
function initializeProductList( id,                                 
                                hasResultNumber, 
                                hasDate,                                 
                                hasUserRating,
                                widgetId,
                                query) {
    $('#' + id + ' table').dataTable({
        "bJQueryUI": true,
        "bAutoWidth": false,
        "bStateSave": true,
        "bFilter": false,
        "bInfo": true,
        "bLengthChange": true,
        "sPaginationType": "two_button",
        "bProcessing": true,
        "bServerSide": true,
        "bSort": true,
        "bSortClasses": false,
        "aoColumns": [{ "sWidth": hasResultNumber == 'True' ? "5%" : "0%",
            "bVisible": hasResultNumber == 'True',
            "bSortable": false,
            "fnRender": function(obj) { return '<div class=\"center product_title\">' + obj.aData[0] + '</div>'; }
        },
                        { "sTitle": "Title",
                            "fnRender": function(obj) {
                                var toReturn = '<a id="search_product_title" href="/Details/Information/' + obj.aData[1].id + '">' + obj.aData[1].title + '</a><br/>'
                                                        + obj.aData[1].mediaType;
                                if (obj.aData[1].credits != '') {
                                    toReturn = toReturn + "<br/>Credits: "+obj.aData[1].credits;
                                }
                                toReturn = toReturn + '<br/><a href="/Details/Information/' + obj.aData[1].id + '">More Information</a>&nbsp;&nbsp;&nbsp;<a id="search_buy_now" href="/Pricing/PricingSelection/' + obj.aData[1].id + '\">Buy Now!</a>';
                                return toReturn;
                            }
                        },
                        { "sTitle": hasDate == 'True' ? "Date" : "",
                            "bVisible": hasDate == 'True',
                            "bSortable": hasDate == 'True',
                            "sWidth": hasDate == 'True' ? "10%" : "0%"
                        },
                        { "sTitle": hasUserRating == 'True' ? "User Rating" : "",
                            "sWidth": hasUserRating == 'True' ? "25%" : "0%",
                            "bVisible": hasUserRating == 'True',
                            "bSortable": hasUserRating == 'True',
                            "fnRender": function(obj) {
                                if (hasUserRating == 'True') {
                                    var toReturn = '<div><ul class="inreach_user_rating">';
                                    for (var i = 0; i < 5; i++) {
                                        var style = (obj.aData[3] > i) ? 'inreach_star_on' : 'inreach_star_off';
                                        toReturn = toReturn + '<li class="' + style + '">&nbsp;</li>\n';
                                    }
                                    toReturn = toReturn + '</ul></div>';
                                    return toReturn;
                                }
                                return '&nbsp;';
                            }
                        },
                        { "sTitle": "Price", "sWidth": "10%",
                            //have to make this non-sortable because member pricing throws off pagination
                            "bSortable": false,
                            "fnRender": function(obj) { return '<div class="right">' + obj.aData[4] + '</div>'; }
}],
        "sAjaxSource": "/Search/Paginate",
        "fnServerData": function(sSource, aoData, fnCallback) {

            //aoData[0] - sEcho
            //aoData[3] - iDisplayStart
            //aoData[4] - iDisplayLength
            //aoData[6] - sortColumn
            //aoData[7] - sortColumn Direction            


            //sEcho counts the number of times getData is called.  want to scroll back up on pagination events
            if (aoData[0].value > 1) {
                $.scrollTo('#' + id, 'medium');
            }

            $.getJSON(sSource,
                        { echo: aoData[0].value,
                            lastResultNumber: aoData[3].value,
                            resultsPerPage: aoData[4].value,
                            widgetId: widgetId,
                            sortColumn: aoData[6].value,
                            sortDirection: aoData[7].value,
                            query: query
                        }, function(data) {
                            fnCallback(data);
                        });
        }
    });       
}  
