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

    self.hosterProfileSelector = "div[id=eventHostProfile" + self.idSuffix + "]";
    self.formHosterPopupSelector = "div[id=formEventHosterProfilePopup" + self.idSuffix + "]";
    self.formHosterInfoSelector = "div[id=eventHosterProfileInfo" + 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.hosterProfileSelector).ready(function(){
            
            $(self.hosterProfileSelector + " input[id=hoster_id]").autocompleteNative(
                {
                    source: function(request, response) {
                            if(!self.lastAutocompleteRequest)
                                 self.lastAutocompleteRequest = request.term;

                            request.requestNumber = ++self.lastAutocompleteRequestNumber;

                            $.ajax({
                                url: "/ScoutsCMS/ajax/autocomplete.php?t=eventHost",
                                dataType: "json",
                                data: request,
                                success: function( data ) {
                                    if(data.requestNumber != self.lastAutocompleteRequestNumber){
                                        $(self.hosterProfileSelector + " input[id=hoster_id]").removeClass( "ui-autocomplete-loading" );
                                        return false;
                                    }

                                    if(request.term.startsWith(self.lastAutocompleteRequest) && data.result.length < 1){
                                        $(self.hosterProfileSelector + " input[id=hoster_id]").removeClass( "ui-autocomplete-loading" );
                                        return false;
                                    }

                                    self.lastAutocompleteRequest = "";
                                    $(self.hosterProfileSelector + " input[id=hoster_id]").removeClass( "ui-autocomplete-loading" );
                                    response( data.result );
                                }
                        });
                    },
                    delay:10,
                    minLength:2,
                    select: function(event, ui)
                    {
                        self.setHosterId(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.hosterProfileSelector + " input.eventHosterProfileEditControl").css("visibility", "visible");})
            .focusin(function(event){self.focusInValue = event.target.value;/*$(self.hosterProfileSelector + " input.eventHosterProfileEditControl").css("visibility", "hidden");*/});
           

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

          self.inited = true;
    }

    self.saveHosterInfo = function()
    {
        if(checkForm(self.formHosterInfoSelector + " .eventHosterData"))
        {
           $.ajax({
                url:"/ScoutsCMS/ajax/saveEventHostInfo.php",
                type: "post",
                dataType: 'json',
                data: GetFormValues(self.formHosterInfoSelector + " .eventHosterData"),
                success: self.setHosterPopId
            });
            $(self.formHosterPopupSelector).dialog("close");
        }
        else
        {
            jAlert("Fill required fields", "Error");
        }
    }

    self.createNewHoster = function(name)
    {
        if(self.blurTimeout)
        {
            self.closeBlurTimeout();
            if($(self.hosterProfileSelector + " input#hoster_id").val() != "")
            {
                self.checkEnteredValue();
                return;
            }
        }
        resetForm(self.formHosterInfoSelector + " .eventHosterData");
        $(self.formHosterInfoSelector + " input[name=id]").val("");

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

        $(self.formHosterPopupSelector).dialog("option", "title", "Create New Host");        
        $(self.formHosterPopupSelector).dialog("open");
    }

    self.editHosterInfo = function()
    {
        var id= $(self.hosterProfileSelector + " input#hoster_id").attr("retValue");
        if(id == null || id == "") return;
         $.ajax({
                url:"/ScoutsCMS/ajax/eventHostInfo.php",
                type: "post",
                dataType: 'json',
                data: {hosterID: id},
                success: self.fillHosterInfo
            });
    }

    self.fillHosterInfo = function(data)
    {
        fillForm(self.formHosterInfoSelector + " .eventHosterData", data);

        $(self.formHosterPopupSelector).dialog("option", "title", $(self.hosterProfileSelector + " input#hoster_id").val());
        $(self.formHosterPopupSelector).dialog("open");        
    }

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

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

    self.setHosterPopId = function(id)
    {
        $(self.hosterProfileSelector + " input#hoster_id").attr("retValue", id);
        $(self.hosterProfileSelector + " input#hoster_id").val($(self.formHosterInfoSelector + " input[name=name]").val());
    }

    self.clearEventHost = function()
    {
        $(self.hosterProfileSelector + " input#hoster_id").attr("retValue", "");
        $(self.hosterProfileSelector + " input#hoster_id").val("");
    }

    self.checkEnteredValue = function()
    {
        self.closeBlurTimeout();
        var obj = $(self.hosterProfileSelector + " input#hoster_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=eventHost",
                type: "get",
                dataType: 'json',
                data: {"term": $(self.hosterProfileSelector + " input#hoster_id").val()},
                success: function(data){
                    data = data.result;
                    if(data.length == 0)
                    {
                        self.createNewHoster($(self.hosterProfileSelector + " input#hoster_id").val())
                    }
                    else
                    {
                        if(data.length == 1)
                        {
                            self.setHosterId(null, {item: data[0]});
                        }
                        else
                        {
                            var duplicateStr = "There are several hosts 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 + ".setHosterId(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.createNewHoster($(self.hosterProfileSelector + " input#hoster_id").val())
                                }
                            });
                            $.alerts.okButton = backup;
                        }
                    }
                }
            });
        }
    }

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

    self.init();
}
