function teamProfile(options)
{
    var self = this;
    self.idSuffix = options["id"];

    self.hosterType = null;
    self.hosterTypeTravelTeam = 3;

    self.teamProfileSelector = "div[id=teamProfile" + self.idSuffix + "]";

    self.formTeamPopupSelector = "div[id=formTeamPopup" + self.idSuffix + "]";
    self.formTeamInfoSelector = "div[id=teamInfo" + self.idSuffix + "]";

    self.saveCallBack = options["saveCallBack"];
    self.selectTeamCallBack = options["selectTeamCallBack"];
    self.createNewControl = options["createNewControl"];

    self.additionalSuggestParams = options["additionalSuggestParams"];

    self.autoSuggestURL = "";
    self.lastAutocompleteRequest = "";
    self.lastAutocompleteRequestNumber = 0;
    self.focusInValue = "";

    self.showPast = false;

    self.blurTimeout = null;

    self.inited = false;
    self.selectAutoSuggest = false;
    self.init = function()
    {
        if(self.inited) return;

        $(self.teamProfileSelector).ready(function(){

            self.autoSuggestURL = "/ScoutsCMS/ajax/autocomplete.php?t=team&"+createQueryString(self.additionalSuggestParams);

            $(self.teamProfileSelector + " input[id=teamAutocomplete]").autocompleteNative(
                    {
                        source:function(request, response) {
                                if(!self.lastAutocompleteRequest)
                                     self.lastAutocompleteRequest = request.term;

                                request.requestNumber = ++self.lastAutocompleteRequestNumber;
                                request.showPast = self.showPast;
                                $.ajax({
                                    url: self.autoSuggestURL,
                                    dataType: "json",
                                    data: request,
                                    success: function( data ) {
                                        if(data.requestNumber != self.lastAutocompleteRequestNumber){
                                            $(self.teamProfileSelector + " input[id=teamAutocomplete]").removeClass( "ui-autocomplete-loading" );
                                            return false;
                                        }

                                        if(request.term.startsWith(self.lastAutocompleteRequest) && data.result.length < 1){
                                            $(self.teamProfileSelector + " input[id=teamAutocomplete]").removeClass( "ui-autocomplete-loading" );
                                            return false;
                                        }

                                        self.lastAutocompleteRequest = "";
                                        $(self.teamProfileSelector + " input[id=teamAutocomplete]").removeClass( "ui-autocomplete-loading" );
                                        response( data.result );
                                    }
                            });
                        },
                        delay:10,
                        minLength:2,
                        select: function(event, ui)
                        {
                            self.setTeamInfo(event, ui);
                            self.selectAutoSuggest = true;
                        }
                }
            ).bind("keypress", function(event){
                    if(event.keyCode == 13 && !self.selectAutoSuggest && self.createNewControl)
                        self.checkEnteredValue();
                    
                    self.selectAutoSuggest = false;
                }).bind("blur", function(event){ self.blurTimeout = setTimeout(function(){self.checkEnteredValue();}, 200)})
                //.focusout(function(){ $(self.teamProfileSelector + " input.teamEditControl").css("visibility", "visible");})
                .focusin(function(event){self.focusInValue = event.target.value;});
        

        $(self.formTeamPopupSelector).dialog({
                    modal:true,
                    autoOpen: false,
                    width:550,                    
                    buttons: {
                        "Save": function() {self.saveTeamInfo();},
                        "Close": function() {$(this).dialog("close");}
                        }
                });

        registerPopupEnterPress(self.formTeamPopupSelector, self.formTeamPopupSelector + " ~ div.ui-dialog-buttonpane button:first");


         $("div[id=teamprimaryColor], div[id=teamprimaryFontColor]", $(self.formTeamInfoSelector)[0]).click(showJPicker)
            .data("liveCallback",
                function(color){

                    $(self.formTeamInfoSelector + " input[name=" + $.colorPickerElements.currentInput.attr("name") + "]").val(color.get_Hex());
                    $.colorPickerElements.currentInput.find("div[name=color]").css('background-color', '#' + color.get_Hex());
                    self.fillColorpreview();
                })
            .data("commitCallback",
                function(color){
                    $(self.formTeamInfoSelector + " input[name=" + $.colorPickerElements.currentInput.attr("name") + "]").val(color.get_Hex());
                    $.colorPickerElements.currentInput.find("div[name=color]").css('background-color', '#' + color.get_Hex());
                    self.fillColorpreview();
                    $.colorPickerElements.currentJPickerControl.hide();
                })
            .data("cancelCallback",
                function(color){
                    $(self.formTeamInfoSelector + " input[name=" + $.colorPickerElements.currentInput.attr("name") + "]").val(color.get_Hex());
                    $.colorPickerElements.currentInput.find("div[name=color]").css('background-color', '#' + color.get_Hex());
                    self.fillColorpreview();
                    $.colorPickerElements.currentJPickerControl.hide();
                })


          $(self.formTeamInfoSelector + " div[id=teamTabs]").tabs();

    });

    self.inited = true;
}

    self.createNewTeam = function(name, hosterID, hosterType)
    {
        if(self.blurTimeout)
        {
            self.closeBlurTimeout();
            if($(self.teamProfileSelector + " input[id=teamAutocomplete]").val() != "")
            {
                self.checkEnteredValue();
                return;
            }
        }
        resetForm(self.formTeamInfoSelector + " .teamData")
        $(self.formTeamInfoSelector + " input[name=id]").val("");
        $(self.formTeamInfoSelector + " input[name=image]").val("");
        $(self.formTeamInfoSelector + " input[name=name]").val(name);

        eval("if(typeof hp" + self.idSuffix + " != 'undefined'){hp" + self.idSuffix + ".selectHosterSelected(true);}");//eval("hp" + self.idSuffix).selectTeamHoster($(self.formTeamInfoSelector + " input#selectHoster")[0]);
        
        $(self.formTeamInfoSelector + " img[id=teamLogo]").attr("src", "/ScoutsCMS/images/noimage.jpg");

        if(hosterID)
        {
            $(self.formTeamInfoSelector + " input[type=hidden][name=hoster_id]").val(hosterID);
        }

        //if(hosterType)
        //{
            self.hosterType = hosterType;
            self.setVisabilityByHosterType(hosterID, hosterType);
        //}


        $(self.formTeamInfoSelector + " input[name=primaryColor]").val('000000');
        $(self.formTeamInfoSelector + " div[id=teamprimaryColor] div").css('background-color', '#000000');

        $(self.formTeamInfoSelector + " input[name=primaryFontColor]").val('ffffff');
        $(self.formTeamInfoSelector + " div[id=teamprimaryFontColor] div").css('background-color', '#ffffff');

        self.fillColorpreview();

        if(name != null && name !='')
        {
            self.fillTeamFormByName();
        }
        else
        {
            $(self.formTeamInfoSelector + " input[name=name]").val("");
        }

        $(self.formTeamPopupSelector).dialog("option", "title", "Create New Team");
        if(hosterID)
        {
            $.ajax({
                url:"/ScoutsCMS/ajax/teamDefaultsInfo.php",
                type: "post",
                dataType: 'json',
                data: {"hosterID": hosterID},
                success: function(data)
                {
                    self.fillTeamForm(data);
                    $(self.formTeamPopupSelector).dialog("open");
                }
            });
        }
        else
        {
            $(self.formTeamPopupSelector).dialog("open");
        }
    }

    self.setTeamInfo = function(event, ui)
    {
        if( ui == null || ui.item == null) return;
        var sValue = ui.item.id;
        $(self.teamProfileSelector + " input[id=teamAutocomplete]").attr("retValue", sValue);
        if(ui.item.value)
            $(self.teamProfileSelector + " input[id=teamAutocomplete]").val(ui.item.value);
        else
            self.fillAutosuggestValue();
        
        if(self.selectTeamCallBack != null && self.selectTeamCallBack != "")
            eval(self.selectTeamCallBack + "(" + sValue + ")");
        $.ajax({
            url:"/ScoutsCMS/ajax/teamInfo.php",
            type: "post",
            dataType: 'json',
            data: {"teamID": sValue},
            success: self.fillTeamForm
        });
    }

    self.fillTeamForm = function(data)
    {
        var hosterType = data["hosterType"];
        self.setVisabilityByHosterType(data["hoster_id"], hosterType);
        
        fillForm(self.formTeamInfoSelector + " .teamData", data);
        //$(self.teamProfileSelector + " input#showEditTeamForm").attr("disabled", false);
        if(data['image'])
        {
            $(self.formTeamInfoSelector + " img[id=teamLogo]").attr("src", "/teamLogo/thumbs/" + data['image']);
        }
        else
        {
            $(self.formTeamInfoSelector + " img[id=teamLogo]").attr("src", "/ScoutsCMS/images/noimage.jpg");
        }

        if(data["hoster_id"] == null)
        {
            eval("if(typeof hp" + self.idSuffix + " != 'undefined') {hp" + self.idSuffix + ".selectHosterSelected(false)}");// + self.idSuffix).selectTeamHoster($(self.formTeamInfoSelector + " input#selectDontKnownHoster")[0]);
        }
        else
        {
            eval("if(typeof hp" + self.idSuffix + " != 'undefined') {hp" + self.idSuffix + ".selectHosterSelected(true)}");//eval("hp" + self.idSuffix).selectTeamHoster($(self.formTeamInfoSelector + " input#selectHoster")[0]);
            self.setVisabilityByHosterType(data["hoster_id"], data["hosterType"]);
        }

        var color = "";

        var colors = ["primaryColor", "primaryFontColor"];
        for(var i in colors)
        {
            if(data[colors[i]])
            {
                color = '#' + data[colors[i]];
            }
            else
            {
                color = "";
            }
            $(self.formTeamInfoSelector + " div[id=team" + colors[i] + "] div").css('background-color', color);
        }

        self.fillColorpreview();

        $(self.formTeamPopupSelector).dialog("option", "title", $(self.teamProfileSelector + " input[id=teamAutocomplete]").val());
    }

    self.setVisabilityByHosterType = function(id, hosterType)
    {
        self.hosterType = hosterType;
        if(self.hosterType == self.hosterTypeTravelTeam) //Travel Team
        {
            $(self.formTeamInfoSelector + " select[name=ageGroup]").parent().parent().css("visibility", "");
            $(self.formTeamInfoSelector + " select[name=color]").parent().parent().css("visibility", "");
            self.fillTeamFormByName();
        }
        else
        {
            $(self.formTeamInfoSelector + " select[name=ageGroup]").parent().parent().css("visibility", "hidden");
            $(self.formTeamInfoSelector + " select[name=ageGroup]").val(" ");

            $(self.formTeamInfoSelector + " select[name=color]").parent().parent().css("visibility", "hidden");
            $(self.formTeamInfoSelector + " select[name=color]").val(" ");
        }
    }

    self.saveTeamInfo = function()
    {
        if(checkForm(self.formTeamInfoSelector + " .teamData"))
        {
           $.ajax({
                url:"/ScoutsCMS/ajax/saveTeamInfo.php",
                type: "post",
                dataType: 'json',
                data: GetFormValues(self.formTeamInfoSelector + " .teamData"),
                success: self.setTeamId
            });            
        }
        else
        {
            jAlert("Fill required fields", "Error");
        }
    }

    self.setTeamId = function(data)
    {
        if(data.status == "success")
        {
            if(data.id)
            {
                $(self.formTeamInfoSelector + " input[name=id]").val(data.id);
                $(self.teamProfileSelector + " input[id=teamAutocomplete]").attr("retValue", data.id);
            }
            self.fillAutosuggestValue();

            if(typeof self.saveCallBack != 'undefined' &&
                self.saveCallBack != "")
            {
                eval(self.saveCallBack + "('" + $(self.formTeamInfoSelector + " input[name=name]").val() + "'," +
                    $(self.teamProfileSelector + " input[id=teamAutocomplete]").attr("retValue") + ")");
            }
            //$(self.teamProfileSelector + " input#showEditTeamForm").attr("disabled", false);
            $(self.formTeamPopupSelector).dialog("close");
        }
        else
        {
            jAlert(data.message, "Error");
        }
    }

    self.fillTeamName = function()
    {
        if(self.hosterType != self.hosterTypeTravelTeam) return;
        
        var ageGroup = $(self.formTeamInfoSelector + " select[name=ageGroup]").val();
        var color = $(self.formTeamInfoSelector + " select[name=color]").val();
        var name = $(self.formTeamInfoSelector + " input[name=name]").val();

        
        var parts = name.match(self.getNameRegExp());
        if(parts != null)
        {
            name = parts[1]?parts[1]:"";
        }
        name = name + " " + ageGroup + (color==""?"":(" " + color));
        $(self.formTeamInfoSelector + " input[name=name]").val(name);
    }

    self.fillTeamFormByName = function()
    {
        if(self.hosterType != self.hosterTypeTravelTeam) return;
        var parts = $(self.formTeamInfoSelector + " input[name=name]").val().match(self.getNameRegExp());
        if(parts != null)
        {
            var ageGroup = parts[2];
            var color = parts[3];
            $(self.formTeamInfoSelector + " select[name=ageGroup]").val(ageGroup);
            $(self.formTeamInfoSelector + " select[name=color]").val(capitalizeString(color));
        }
        self.fillTeamName();
    }

    self.getNameRegExp = function()
    {
        var colors = "";
        var colorOptions = $(self.formTeamInfoSelector + " select[name=color] option")
        for(var i = 0; i < colorOptions.length; i++)
        {
            if(i > 0)
            {
                colors += "|";
            }
            colors += colorOptions[i].value;
        }

        var ageGroups = "";
        var ageGroupsOptions = $(self.formTeamInfoSelector + " select[name=ageGroup] option");
        for(i = 0; i < ageGroupsOptions.length; i++)
        {
            if(i > 0)
            {
                ageGroups += "|";
            }
            ageGroups += ageGroupsOptions[i].value;
        }

        return new RegExp("^(?: *\\b(.+?)\\b)? *\\b(" + ageGroups + ")\\b(?: +\\b(" + colors + ")\\b)? *$", "i");
    }

    self.clearTeamFilter = function()
    {
        $(self.teamProfileSelector + " input[id=teamAutocomplete]").val("");
        $(self.teamProfileSelector + " input[id=teamAutocomplete]").attr("retValue", "");
        if(self.selectTeamCallBack != null && self.selectTeamCallBack != "")
            eval(self.selectTeamCallBack + "()");
    }

    self.editTeam = function()
    {
        var teamID = $(self.teamProfileSelector + " input[id=teamAutocomplete]").attr("retValue");
        if(!teamID) return;

        self.setTeamInfo(null, {item:{id:teamID}});        
        setTimeout(function(){$(self.formTeamPopupSelector).dialog("open");}, 1000);
    }

    self.editTeamById = function(id)
    {
        $(self.teamProfileSelector + " input[id=teamAutocomplete]").attr("retValue", id);
        self.editTeam();
    }

    self.uploadLogo = function()
    {
        $(self.formTeamInfoSelector + " input[id=teamUploadLoading]")
            .ajaxStart(function(){
                $(this).show();
            })
            .ajaxComplete(function(){
                $(this).hide();
        });
        var teamID = $(self.formTeamInfoSelector + " input[name=id]").val();
        if(teamID  != "")
        {
            $.ajaxFileUpload
            (
                {
                    url:'/ScoutsCMS/ajax/savePlayerImage.php?type=teamLogo&teamId=' + teamID,
                    secureuri:false,
                    fileElementId:'teamUploadLogo' + self.idSuffix,
                    dataType: 'json',
                    success: function (data, status)
                    {
                        if(typeof(data.error) != 'undefined')
                        {
                            if(data.error != '')
                            {
                                jAlert(data.error, "Error");
                            }
                            else
                            {
                                $(self.formTeamInfoSelector + " input[name=image]").val(data.msg);
                                $(self.formTeamInfoSelector + " img[id=teamLogo]").attr("src", "/teamLogo/thumbs/" + data.msg);
                            }
                        }
                    },
                    error: function (data, status, e)
                    {
                        jAlert(e, "Error", "Error");
                    }
                }
            )
        }
        else
        {
            jAlert("Save team first");
        }

        return false;
    }

    self.currentTeamID = function()
    {
        return $(self.teamProfileSelector + " input[id=teamAutocomplete]").attr("retValue");
    }

    self.currentTeamName = function()
    {
        return $(self.teamProfileSelector + " input[id=teamAutocomplete]").val();
    }

    self.fillColorpreview = function()
    {
       $(self.formTeamInfoSelector + " div[id=primaryColorPreview]").css("background-color", "#" + $(self.formTeamInfoSelector + " input[name=primaryColor]").val()).
           css("color", "#" + $(self.formTeamInfoSelector + " input[name=primaryFontColor]").val());
    }

    self.setAdditionalSuggestParams = function(params)
    {
       self.autoSuggestURL = "/ScoutsCMS/ajax/autocomplete.php?t=team&" +createQueryString(params);
    }

    self.checkEnteredValue = function()
    {
        self.closeBlurTimeout();
        var obj = $(self.teamProfileSelector + " input[id=teamAutocomplete]");
        if(!self.selectAutoSuggest && obj.val() != "" && obj.is(":visible") &&
            (!self.currentTeamID() || (self.currentTeamID() && self.focusInValue != obj.val() && self.focusInValue)))
        {
            $.ajax({
                url:self.autoSuggestURL.replace("autocomplete.php", "checkAutocompleteValue.php"),
                type: "get",
                dataType: 'json',
                data: {"term": $(self.teamProfileSelector + " input[id=teamAutocomplete]").val(), showPast: self.showPast},
                success: function(data){
                    data = data.result;
                    if(data.length == 0)
                    {
                        if(self.createNewControl)
                            self.createNewTeam($(self.teamProfileSelector + " input[id=teamAutocomplete]").val())
                    }
                    else
                    {
                        if(data.length == 1)
                        {
                            self.setTeamInfo(null, {item: data[0]});
                        }
                        else
                        {
                            var duplicateStr = "There are several teams named similarly to that you just entered. Please check the list below carefully and select one if it is among them. If it isn't, create a new one with the button at the bottom.\n";
                            duplicateStr +="<table cellpadding='0' cellspacing='0' class='duplicatesTable'><thead><tr><th>Name</th><th>Season</th><th>Season Year</th><th>Next Event</th></tr></thead>";
                            for(var i in data)
                            {
                                duplicateStr += "<tr onclick='tp" + self.idSuffix + ".setTeamInfo(null, {item: " + txt2xml(JSON.stringify(data[i])) + "});$.alerts._hide();'>"
                                        + "<td>" + data[i].name + "</td>"
                                        + "<td>" + data[i].season + "</td>"
                                        + "<td>" + data[i].seasonYear + "</td>"
                                        + "<td>" + (data[i].nextEvent?data[i].nextEvent:"") + "</td>"
                                        + "</tr>";
                            }
                            var backup = $.alerts.okButton;
                            $.alerts.okButton = "Create New";
                            jConfirm(duplicateStr, "Warning", function(r){
                                if(r)
                                {
                                    self.createNewTeam($(self.teamProfileSelector + " input[id=teamAutocomplete]").val());
                                }
                            });
                            $.alerts.okButton = backup;
                        }
                    }
                }
            });
        }
    }

    self.closeBlurTimeout = function()
    {
        if(self.blurTimeout)
        {
            clearTimeout(self.blurTimeout);
        }
        self.blurTimeout = null;
    }

    self.changeShowPast = function(){
        self.closeBlurTimeout();

        self.showPast = !self.showPast;
        if(self.showPast){
            $(self.teamProfileSelector + " input.showPast").attr("src", "/ScoutsCMS/images/showPast_true.png");
        }else{
            $(self.teamProfileSelector + " input.showPast").attr("src", "/ScoutsCMS/images/showPast_false.png");
        }
    }

    self.fillAutosuggestValue = function(){
        $(self.teamProfileSelector + " input[id=teamAutocomplete]").val($(self.formTeamInfoSelector + " input[name=name]").val() +
            " (" + $(self.formTeamInfoSelector + " select[name=season]").val() + ", " + $(self.formTeamInfoSelector + " select[name=seasonYear]").val() + ")");
    }

    self.init();
}
