function massScoutinReports(options)
{
    var self = this;
    self.idSuffix = options["id"];
    self.massScoutinReportsPopup = options['massScoutinReportsPopup'];

    self.eventId = null;
    self.selectedType = "all";
    self.maxSortRows = 200;

    self.historyFields = [
                            {name:"historyID", type:"input", inputType:"hidden", "title":""},
                            {name:"playerID", type:"input", inputType:"hidden", "title":""},
                            {name:"team_id", type:"input", inputType:"hidden", "title":""},
                            {name:"team_name", type:"input", inputType:"hidden", "title":""},
                            {name:"lastName", type:"input", inputType:"hidden", "title":""},            
                            //{name:"height", type:"input", inputType:"text","title":"Height"},
                            //{name:"weight",type:"input", inputType:"text","title":"Weight"},
                            {name:"fb_min",type:"input", inputType:"text","title":"FB min", bb_type:"pitching"},
                            {name:"fb_max",type:"input", inputType:"text","title":"FB max", bb_type:"pitching"},
                            {name:"bb_min",type:"input", inputType:"text","title":"BB min", bb_type:"pitching"},
                            {name:"bb_max",type:"input", inputType:"text","title":"BB max", bb_type:"pitching"},
                            {name:"ch_min",type:"input", inputType:"text","title":"CH min", bb_type:"pitching"},
                            {name:"ch_max",type:"input", inputType:"text","title":"CH max", bb_type:"pitching"},
                            {name:"60_time",type:"input", inputType:"text","title":"60 time", bb_type:"speed"},
                            {name:"40_time",type:"input", inputType:"text","title":"40 time", bb_type:"speed"},
                            {name:"home_first",type:"input", inputType:"text","title":"H to 1st Time", bb_type:"speed"},
                            {name:"hitting_pw",type:"input", inputType:"text","title":"PW Hit", bb_type:"hitting"},
                            {name:"power_pw",type:"input", inputType:"text","title":"PW Pow", bb_type:"hitting"},

                            {name:"if_arm",type:"input", inputType:"text","title":"If Arm", bb_type:"defensive"},
                            {name:"of_arm",type:"input", inputType:"text","title":"Of Arm", bb_type:"defensive"},

                            {name:"arm_grade_pw",type:"input", inputType:"text","title":"PW Arm", bb_type:"defensive"},
                            {name:"defensive_pw",type:"input", inputType:"text","title":"PW Def Actions", bb_type:"defensive"},
                            {name:"c_popTime",type:"input", inputType:"text","title":"Pop Time", bb_type:"catching"},
                            {name:"c_velocity",type:"input", inputType:"text","title":"C Velocity", bb_type:"catching"}
                            //{name:"strengths",type:"textarea", inputType:"","title":"Strengths"},
                            //{name:"weaknesses",type:"textarea", inputType:"","title":"Weaknesses"},
                            //{name:"scouting_report_internal",type:"textarea", inputType:"","title":"Internal Scouting Notes"},
                            //{name:"player_feed",type:"textarea", inputType:"","title":"Player Feed"}
                        ];

    self.historyFieldsGroupsHeaders = [
                                        {bb_type:"pitching", header: "Pitching"},
                                        {bb_type:"speed", header: "Speed"},
                                        {bb_type:"hitting", header: "Hitting"},
                                        {bb_type:"defensive", header: "Defensive"},
                                        {bb_type:"catching", header: "Catching"}
                                      ];

    self.selector = "div[id=massScoutinReports" + self.idSuffix + "]";

    self.init = function()
    {
        $(self.selector).ready(function(){

            if(self.massScoutinReportsPopup)
            {
                $(self.selector).dialog({
                    modal:true,
                    autoOpen: false,
                    width:1000,
                    buttons: {
                        "Close": function() {$(this).dialog("close");}
                        }
                });
            }

            var headHtml = "<tr>";
            var headGroupHtml = "<tr>";
            var colSpanHeader = "";
            var colSpanCounter = 0;
            headHtml += "<th style='width:25px;'></th>";
            headHtml += "<th>Name</th>";
            headGroupHtml += "<td colspan='1'>&nbsp;</td><td colspan='1'>&nbsp;</td>";

            for(var i in self.historyFields)
            {
                if(self.historyFields[i].inputType != "hidden")
                {
                    if(colSpanHeader == "")
                    {
                        colSpanHeader = self.historyFields[i].bb_type;
                    }

                    headHtml += "<th bb_type='" + self.historyFields[i].bb_type + "'>" + self.historyFields[i].title + "</th>";
                    if(colSpanHeader != self.historyFields[i].bb_type)
                    {
                        headGroupHtml += "<td colspan='" + colSpanCounter + "' bb_type='" + self.historyFields[i-1].bb_type + "'>" + self.getGroupHeaderName(colSpanHeader) +"</td>";
                        colSpanHeader = self.historyFields[i].bb_type;
                        colSpanCounter = 1;
                    }
                    else
                    {
                        colSpanCounter++;
                    }
                }
            }
            headHtml += "</tr>";
            headGroupHtml += "<td colspan='" + colSpanCounter + "' bb_type='" + self.historyFields[i].bb_type + "'>" + self.getGroupHeaderName(colSpanHeader) +"</td></tr>";

            $(self.selector + " table#content thead").html(headGroupHtml + headHtml);

            var headers = {};

            for(i in self.historyFields)
            {
                 headers[i]= { sorter: false};
            }            
            headers[1] = {sorter:'nameTeam'};

            $.tablesorter.addWidget({
                // give the widget a id
                id: "repeatHeaders",
                // format is called when the on init and when a sorting has finished
                format: function(table) {                    
                    if($(self.selector + " table#content tr").length >= self.maxSortRows) return;

                    $("tr.teamName",table).remove();

                    var teamName = "";
                   
                    for(var i=table.tBodies[0].rows.length - 1; i >= 0 ; i--) {
                        if(i == table.tBodies[0].rows.length - 1)
                        {
                            teamName = $("tbody tr:eq(" + i + ") input[name=team_name]",table).val()
                        }
                        
                        if(teamName != $("tbody tr:eq(" + i + ") input[name=team_name]",table).val())
                        {
                            var temp = teamName;
                            teamName = $("tbody tr:eq(" + i + ") input[name=team_name]",table).val();
                            $("tbody tr:eq(" + i + ")",table).after(
                                "<tr class='teamName'><td colspan='19'>" + (temp?"Team name: " + temp:"Individual Players") + "</td></tr>"
                            );
                        }
                        else
                        {
                            teamName = $("tbody tr:eq(" + i + ") input[name=team_name]",table).val();
                        }
                    }

                    $("tbody tr:eq(0)",table).before(
                        "<tr class='teamName'><td colspan='19'>" + (teamName?"Team name: " + teamName:"Individual Players") + "</td></tr>"
                    );
                }
            });

            $.tablesorter.addParser({
                // set a unique id
                id: 'nameTeam', 
                is: function(s) {
                    // return false so this parser is not auto detected
                    return false;
                },
                format: function(s, table,cell) {                    
                    return $(cell).parent().find("input[name=team_id]").val() + $(cell).parent().find("input[name=lastName]").val() + " " + s;
                },
                // set type, either numeric or text
                type: 'text'
            });

            $(self.selector + " table#content").tablesorter({"headers":headers, widgets: ['repeatHeaders']});

             $(self.selector + " table#content").bind("sortStart",function() {
                
            }).bind("sortEnd",function() {

            });

            $(self.selector + " table#content .massiveReportPlayerClass").live('blur', self.savePlayerData);
            $(self.selector + " table#content .remove_massiveReportPlayerClass").live('click', self.deletePlayerData);
            $(self.selector + " table#content .detail_massiveReportPlayerClass").live('click', self.detailPlayerData);
        });
    }

    self.open = function(eventId)
    {
        if(!eventId) return false;

        self.eventId = eventId;

        self.loadTeamsList(eventId);

        if(self.massScoutinReportsPopup)
        {
            $(self.selector).dialog("open");
        }
        else
        {
            $(self.selector).show();
        }
    }

    self.close = function()
    {
        if(self.massScoutinReportsPopup)
        {
            $(self.selector).dialog("close");
        }
        else
        {
            $(self.selector).hide();
        }
    }

    self.loadPlayersData = function(eventId, teamID, rank1, rank2)
    {
        if(!eventId) return false;

        var sendData = {"eventID": eventId};

        if(teamID)
        {
            sendData.teamID = teamID;
        }

        if(rank1)
        {
            sendData.rank1 = rank1;
        }

        if(rank2)
        {
            sendData.rank2 = rank2;
        }

        $.ajax({
                url:"/ScoutsCMS/ajax/palyersHistoryInfo.php",
                type: "post",
                dataType: 'json',
                data: sendData,
                success: self.fillPlayersData
            });
    }

    self.fillPlayersData = function(data)
    {
        var  html = "";
        var i = 0;
        for(i in data["playersData"])
        {
            html += self.getPlayerDataHtml(data["playersData"][i]);
        }

        $(self.selector + " table#content tbody").html(html);

        self.showColumns();
        self.sortTable();
        if(i > 0)
            $(self.selector + " table#content").trigger("sorton",[[[1,0]]]);
        self.addMask();

        self.fillPager(data.pager, data.rank);
    }

    self.fillPager = function(data, currentRank)
    {
        var html = "";

        if(data.length > 1)
        {
            var teamID = $(self.selector + " select[id=teamsList]").val();
            teamID = teamID?teamID:null;
            for(var i in data)
            {
                html += "<a class='pager_button " + (data[i].rank == currentRank?"pager_button_disabled":"a_button") + "'";
                if(data[i].rank != currentRank)
                {
                    html +=" onclick=" +
                    "'msr" + self.idSuffix + ".loadPlayersData(" + self.eventId +
                    ", " + teamID +
                    ", " + data[i].rank +
                    ", " + data[i].rank2 +
                    ")'" ;
                }
                html += ">" + data[i].interv + "</a>";
            }
        }

        $(self.selector + " div#pager").html(html);
    }

    self.getPlayerDataHtml = function(data)
    {
        var html = "<tr>";        
        html += "<td><input type='image' title='Delete' src='/ScoutsCMS/images/remove.png' class='remove_massiveReportPlayerClass'/></td>";
        html += "<td class='detail_massiveReportPlayerClass' name='playerName'>" + data["name"];

        hiddenHtml = "";
        restHtml = "";
        for(var i in self.historyFields)
        {
            var name =  self.historyFields[i].name;
            /*
            if(self.historyFields[i].inputType != "hidden") html += "<td bb_type='" + self.historyFields[i].bb_type + "'>"
            html += self.getInputHTML(name, "", self.historyFields[i].type, data[name], self.historyFields[i].inputType);
            if(self.historyFields[i].inputType != "hidden") html += "</td>";
            */

            if(self.historyFields[i].inputType != "hidden"){
                restHtml += "<td bb_type='" + self.historyFields[i].bb_type + "'>";
                restHtml += self.getInputHTML(name, "", self.historyFields[i].type, data[name], self.historyFields[i].inputType);
                restHtml += "</td>";
            } else {
                hiddenHtml += self.getInputHTML(name, "", self.historyFields[i].type, data[name], self.historyFields[i].inputType);
            }

        }

        html += hiddenHtml + "</td>" + restHtml + "</tr>";

        return html;
    }

    self.getInputHTML = function(name, className, type, value, inputType)
    {
        inputType = inputType || "text";
        className = className || "massiveReportPlayerClass";
        value = value?txt2xml(value.toString()):"";
        switch(type)
        {
            case "input":
                    return "<input class='" + className + "' name='" + name +"' type='" + inputType + "' value='" + value +"'/>";
            break;
            case "textarea":
                    return "<textarea cols='50' rows='5' class='" + className + "' name='" + name +"'>" + value +"</textarea>";
            break;
        }
    }

    self.loadTeamsList = function(eventId)
    {
        if(!eventId) return false;

        $.ajax({
                url:"/ScoutsCMS/ajax/eventTeamListInfo.php",
                type: "post",
                dataType: 'json',
                data: {"eventID": eventId},
                success: self.fillTeamList
            });
    }

    self.fillTeamList = function(data)
    {
        var html = "";
        var noPlayersTeams = "";
        for(var i in data["teamList"])
        {
            if( data["teamList"][i].historyPlayerCount > 0)
            {
                html += "<option value='" + data["teamList"][i].id +"'>" + data["teamList"][i].name + "</option>";
            }
            if( data["teamList"][i].noHistoryPlayerCount > 0)
            {
                if(noPlayersTeams != "")
                    noPlayersTeams += "<br/>";

                noPlayersTeams += data["teamList"][i].name;             
            }
        }
        html += "<option value='0'>All individual players</option>";
        html += "<option value=''>All teams</option>";
        $(self.selector + " select[id=teamsList]").html(html);
        $(self.selector + " select[id=teamsList]").val($(self.selector + " select[id=teamsList] option:first").val());

        self.loadPlayersData(self.eventId, $(self.selector + " select[id=teamsList]").val());

        if(noPlayersTeams != "")
        {
            jConfirm("The following teams are registered for this event, but their players have no history records and therefore are not shown on this page:<br/>"
                    + noPlayersTeams + "<br/>Shall we create history records for them?","",
                        function(r)
                        {
                            if(!r) return;

                            self.addTeamsPlayer(function(){
                                self.loadTeamsList(self.eventId);
                            });
                        }
                    )
        }
    }

    self.getGroupHeaderName = function(type)
    {
        for(var i in self.historyFieldsGroupsHeaders)
        {
            if(self.historyFieldsGroupsHeaders[i].bb_type == type)
            {
                return self.historyFieldsGroupsHeaders[i].header;
            }
        }
        return "";
    }

    self.addPlayer = function(playerId, playerName)
    {
        if(!self.eventId || !playerId) return;

        pp_massScoutsReportsPlayer.close();

        //create record
       var playerEventData = {};
       playerEventData["playerID"] = playerId;
       playerEventData["eventID"] = self.eventId;
       $.ajax({
            url:"/ScoutsCMS/ajax/savePalyerEventInfo.php",
            type: "post",
            dataType: 'json',
            data: playerEventData,
            success: function(historyId)
            {
                var name = pp_massScoutsReportsPlayer.getPlayerAutosuggestText() || playerName;
                pp_massScoutsReportsPlayer.clearPlayerFilter();
                if($(self.selector + " table#content tr").find("input[name=historyID][value=" + historyId + "]").length > 0)
                    return;


                $.ajax({
                    url:"/ScoutsCMS/ajax/palyerEventInfo.php",
                    type: "post",
                    dataType: 'json',
                    data: {"eventID": self.eventId, "palyerID": playerId},
                    success:function(data)
                    {
                        var teamInList = false;
                        for(var i in data.teams)
                        {
                            if($(self.selector + " select[id=teamsList]").val() == data.teams[i].id)
                            {
                                teamInList = true;
                                break;
                            }
                        }

                        if($(self.selector + " select[id=teamsList]").val() == "" || teamInList)
                        {
                            data.name = name;
                            $(self.selector + " table#content tbody tr.teamName").remove();
                            $(self.selector + " table#content tbody").append(self.getPlayerDataHtml(data));
                            self.showColumns();
                            self.sortTable();
                            self.addMask();
                        }
                    }
                });
            }
        });
    }

    self.savePlayerData = function(event)
    {
        if($(event.target).is("input"))
        {
           var playerEventData = {};//GetFormValues(" .massiveReportPlayerClass", $(event.target).parents("tr")[0]);
           playerEventData.historyID = $(event.target).parents("tr").find("input[name=historyID]").val();
           playerEventData[$(event.target).attr("name")] = $(event.target).val();
           $.ajax({
                url:"/ScoutsCMS/ajax/savePalyerEventInfo.php",
                type: "post",
                dataType: 'json',
                data: playerEventData
            });
        }
    }

    self.sortTable = function()
    {
        $(self.selector + " table#content").trigger("update");
        if($(self.selector + " table#content tr").length < self.maxSortRows)
        {
            if($(self.selector + " table#content").find("tbody tr").length > 0 && $(self.selector + " table#content")[0].config.sortList)
            {
                //$(self.selector + " table#content").trigger("sorton", [$(self.selector + " table#content")[0].config.sortList]);
            }
        }

        //var sorting = [[1,1]];
        //$(self.selector + " table#content").trigger("sorton", [sorting]);

    }

    self.addMask = function()
    {
        $(self.selector + " table#content tr").find("input[name=height]").mask("9'?99|\"");
        $(self.selector + " table#content tr").find("input[name=weight]").mask("999");
    }

    self.deletePlayerData = function(event)
    {
        if($(event.target).is("input"))
        {
           var historyID = $(event.target).parents("tr").find("input[name=historyID]").val();
           $.ajax({
                url:"/ScoutsCMS/ajax/deletePalyerEventInfo.php",
                type: "post",
                dataType: 'json',
                data: {"historyID":historyID},
                success: function()
                   {
                       $(event.target).parents("tr").remove();
                       self.sortTable();                      
                   }
            });
        }
    }

    self.showColumns = function(type, obj)
    {
        type = type || self.selectedType;
        self.selectedType  = type;

        $(self.selector + " table#content tr").find("td,th").show();

        if(obj)
        {
            $(self.selector + " div[id=links]").find("a").css("font-weight", "normal");
            $(obj).css("font-weight", "bold");
        }

        if(type.toLowerCase() == "all") return;

        $(self.selector + " table#content thead").find("th").each(function(){
            if(!$(this).attr("bb_type") || $(this).attr("bb_type") == type.toLowerCase()) return true;

            var curType = $(this).attr("bb_type");
            $(self.selector + " table#content tr").find("td[bb_type=" + curType + "]").hide();
            $(self.selector + " table#content thead").find("th[bb_type=" + curType + "]").hide();
        });
        
        $(self.selector + " table#content thead").find("td[bb_type=" + type + "]").show();
    }

    self.detailPlayerData = function(event)
    {
        if($(event.target).is("td"))
        {
           var playerID = $(event.target).parents("tr").find("input[name=playerID]").val();
            if(!playerID) return;
            ep_massScoutingEvent.selectedEventID = self.eventId;
            ep_massScoutingEvent.getPlayerEventInfo(playerID);
        }
    }

    self.closeDetailPopupCallback = function()
    {
         self.loadPlayersData(self.eventId, $(self.selector + " select[id=teamsList]").val());
    }

    self.addTeamsPlayer = function(callback)
    {
       $.ajax({
            url:"/ScoutsCMS/ajax/getEventTeamPlayers.php",
            type: "post",
            dataType: 'json',
            data: {"eventID": self.eventId},
            success: function(data){
                self.fillTeamsPlayer(data);
                if(typeof callback == "function")
                    callback();
                else
                    eval(callback);
            }
        });

    }

    self.fillTeamsPlayer = function(data)
    {
        for(var i in data["playersData"])
        {
            self.addPlayer(data["playersData"][i].playerID, data["playersData"][i].name);            
        }
    }

    self.init();
}
