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

    self.familyProfileSelector = "div[id=eventFamilyProfile" + self.idSuffix + "]";
    self.formFamilyPopupSelector = "div[id=formEventFamilyProfilePopup" + self.idSuffix + "]";
    self.formFamilyInfoSelector = "div[id=eventFamilyProfileInfo" + self.idSuffix + "]";

    self.lastAutocompleteRequest = "";
    self.lastAutocompleteRequestNumber = 0;
    self.focusInValue = "";

    self.blurTimeout = null;

    self.inited = false;
    self.selectAutoSuggest = false;
    self.init = function()
    {
        if(self.inited) return;

        $(self.familyProfileSelector).ready(function(){

            $(self.familyProfileSelector + " input#family_id").autocompleteNative(
                {
                    source: function(request, response) {
                            if(!self.lastAutocompleteRequest)
                                 self.lastAutocompleteRequest = request.term;

                            request.requestNumber = ++self.lastAutocompleteRequestNumber;
                            $.ajax({
                                url: "/ScoutsCMS/ajax/autocomplete.php?t=eventFamily",
                                dataType: "json",
                                data: request,
                                success: function( data ) {
                                    if(data.requestNumber != self.lastAutocompleteRequestNumber){
                                        $(self.familyProfileSelector + " input#family_id").removeClass( "ui-autocomplete-loading" );
                                        return false;
                                    }
                                    
                                    if(request.term.startsWith(self.lastAutocompleteRequest) && data.result.length < 1){
                                        $(self.familyProfileSelector + " input#family_id").removeClass( "ui-autocomplete-loading" );
                                        return false;
                                    }

                                    self.lastAutocompleteRequest = "";
                                    $(self.familyProfileSelector + " input#family_id").removeClass( "ui-autocomplete-loading" );
                                    response( data.result );
                                }
                        });
                    },
                    delay:10,
                    minLength:2,
                    select: function(event, ui)
                    {
                        self.setFamilyId(event, ui);
                        self.selectAutoSuggest = true;
                    }
                }
            ).bind("keyup", function(event){
                    if(event.keyCode == 13 && !self.selectAutoSuggest)
                        self.checkEnteredValue();

                    self.selectAutoSuggest = false;
                }).bind("blur", function(event){ self.blurTimeout = setTimeout(function(){self.checkEnteredValue();}, 200)})
            //.focusout(function(){ $(self.familyProfileSelector + " input.familyProfileEditControl").css("visibility", "visible");})
             .focusin(function(event){self.focusInValue = event.target.value;/*$(self.familyProfileSelector + " input.familyProfileEditControl").css("visibility", "hidden");*/});


            $(self.formFamilyPopupSelector).dialog({
                modal:true,
                autoOpen: false,
                width:300,
                buttons: {
                    "Save": function() {self.saveFamilyInfo();},
                    "Close": function() {$(this).dialog("close");}
                    }
             });
             registerPopupEnterPress(self.formFamilyPopupSelector, self.formFamilyPopupSelector + " ~ div.ui-dialog-buttonpane button:first");
          });

          self.inited = true;
    }

    self.saveFamilyInfo = function()
    {
        if(checkForm(self.formFamilyInfoSelector + " .eventFamilyData"))
        {
           $.ajax({
                url:"/ScoutsCMS/ajax/saveEventFamilyInfo.php",
                type: "post",
                dataType: 'json',
                data: GetFormValues(self.formFamilyInfoSelector + " .eventFamilyData"),
                success: self.setFamilyPopId
            });
            $(self.formFamilyPopupSelector).dialog("close");
        }
        else
        {
            jAlert("Fill required fields", "Error");
        }
    }

    self.createNewFamily = function(name)
    {
        if(self.blurTimeout)
        {
            self.closeBlurTimeout();
            if($(self.familyProfileSelector + " input#family_id").val() != "")
            {
                self.checkEnteredValue();
                return;
            }
        }
        resetForm(self.formFamilyInfoSelector + " .eventFamilyData");
        $(self.formFamilyInfoSelector + " input[name=id]").val("");

        $(self.formFamilyPopupSelector + " input[name=event]").val(name);

        $(self.formFamilyPopupSelector).dialog("option", "title", "Create New Family");
        $(self.formFamilyPopupSelector).dialog("open");
    }

    self.editFamilyInfo = function()
    {
        var id= $(self.familyProfileSelector + " input#family_id").attr("retValue");
        if(id == null || id == "") return;
         $.ajax({
                url:"/ScoutsCMS/ajax/eventFamilyInfo.php",
                type: "post",
                dataType: 'json',
                data: {familyID: id},
                success: self.fillFamilyInfo
            });
    }

    self.fillFamilyInfo = function(data)
    {
        fillForm(self.formFamilyInfoSelector + " .eventFamilyData", data);

        $(self.formFamilyPopupSelector).dialog("option", "title", $(self.familyProfileSelector + " input#family_id").val());
        $(self.formFamilyPopupSelector).dialog("open");
    }

    self.setFamilyId = function(event, ui)
    {
        if( ui == null || ui.item == null) return;

        var sValue = ui.item.id;
        $(self.familyProfileSelector + " input#family_id").attr("retValue", sValue);
        $(self.familyProfileSelector + " input#family_id").val(ui.item.label);
    }

    self.setFamilyPopId = function(id)
    {
        $(self.familyProfileSelector + " input#family_id").attr("retValue", id);
        $(self.familyProfileSelector + " input#family_id").val($(self.formFamilyInfoSelector + " input[name=event]").val());
    }

    self.clearEventFamily = function()
    {
        $(self.familyProfileSelector + " input#family_id").attr("retValue", "");
        $(self.familyProfileSelector + " input#family_id").val("");
    }

    self.checkEnteredValue = function()
    {
        self.closeBlurTimeout();
        var obj = $(self.familyProfileSelector + " input#family_id");
        if(!self.selectAutoSuggest && obj.val() != "" && obj.is(":visible") &&
                (!obj.attr("retValue") || (obj.attr("retValue") && self.focusInValue != obj.val() && self.focusInValue)))
        {
            $.ajax({
                url:"/ScoutsCMS/ajax/checkAutocompleteValue.php?t=eventFamily",
                type: "get",
                dataType: 'json',
                data: {"term": $(self.familyProfileSelector + " input#family_id").val()},
                success: function(data){
                    data = data.result;
                    if(data.length == 0)
                    {
                        self.createNewFamily($(self.familyProfileSelector + " input#family_id").val())
                    }
                    else
                    {
                        if(data.length == 1)
                        {
                            self.setFamilyId(null, {item: data[0]});
                        }
                        else
                        {
                            var duplicateStr = "There are several familyes 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";
                            for(var i in data)
                            {
                                duplicateStr += "<a class='a_button duplicatesLabel' onclick='ehp" + self.idSuffix + ".setFamilyId(null, {item: " + txt2xml(JSON.stringify(data[i])) + "});$.alerts._hide();'>" + data[i].label + "</a>\n";
                            }
                            var backup = $.alerts.okButton;
                            $.alerts.okButton = "Create New";
                            jConfirm(duplicateStr, "Warning", function(r){
                                if(r)
                                {
                                   self.createNewFamily($(self.familyProfileSelector + " input#family_id").val())
                                }
                            });
                            $.alerts.okButton = backup;
                        }
                    }
                }
            });
        }
    }

    self.closeBlurTimeout = function()
    {
        if(self.blurTimeout)
        {
            clearTimeout(self.blurTimeout);
        }
        self.blurTimeout = null;
    }

    self.init();
}
