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

    self.profileSelector = "div#facilityProfile" + self.idSuffix ;
    self.popupSelector = "div#facilityPopup"+self.idSuffix;

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

    self.blurTimeout = null;

    self.selectAutoSuggest = false;

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

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

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

                                request.requestNumber = ++self.lastAutocompleteRequestNumber;

                                $.ajax({
                                    url: "/ScoutsCMS/ajax/autocomplete.php?t=facility",
                                    dataType: "json",
                                    data: request,
                                    success: function( data ) {
                                        if(data.requestNumber != self.lastAutocompleteRequestNumber){
                                            $(self.profileSelector + " input#facilityAutocomplete").removeClass( "ui-autocomplete-loading" );
                                            return false;
                                        }

                                        if(request.term.startsWith(self.lastAutocompleteRequest) && data.result.length < 1){
                                            $(self.profileSelector + " input#facilityAutocomplete").removeClass( "ui-autocomplete-loading" );
                                            return false;
                                        }

                                        self.lastAutocompleteRequest = "";
                                        $(self.profileSelector + " input#facilityAutocomplete").removeClass( "ui-autocomplete-loading" );
                                        response( data.result );
                                    }
                            });
                        },
                        delay:10,
                        minLength:2,
                        select: function(event, ui)
                        {
                            self.setFacilityIdFormAutosuggest(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();}, 500)})
                  .focusin(function(event){self.focusInValue = event.target.value;});
        });
    }

    self.setFacilityIdFormAutosuggest = function(event, ui)
    {
        if( ui == null || ui.item == null) return;
        
        $(self.profileSelector + " input#facilityAutocomplete").attr("retValue", ui.item.id);
        $(self.profileSelector + " input#facilityAutocomplete").val(ui.item.label);
    }

    self.createNewFacility = function(name)
    {
        if(self.blurTimeout)
        {
            self.closeBlurTimeout();
            if($(self.profileSelector + " input#facilityAutocomplete").val() != "")
            {
                self.checkEnteredValue();
                return;
            }
        }
        self.clearForm();

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

        $(self.popupSelector).dialog("option", "title", "Create New Facility");
        $(self.popupSelector).dialog("open");
    }

    self.editFacility = function()
    {
        if(!self.getCurrentFacilityID()) return;

        self.clearForm();
        $.ajax({
                url:"/ScoutsCMS/ajax/facilityInfo.php",
                type: "post",
                dataType: 'json',
                data: {id:self.getCurrentFacilityID()},
                success: self.fillFacilityData
            });
    }

    self.fillFacilityData = function(data)
    {
        fillForm(self.popupSelector + " .facilityData", data);

        if(data["image"])
        {
            $(self.popupSelector + " img[id=image]").attr("src", "/facilityLogo/thumbs/" + data["image"]);
        }
        else
        {
            $(self.popupSelector + " img[id=image]").attr("src", "/ScoutsCMS/images/noimage.jpg");
        }

        $(self.popupSelector).dialog("option", "title", $(self.profileSelector + " input#facilityAutocomplete").val());
        $(self.popupSelector).dialog("open");
    }

    self.saveFacilityInfo = function()
    {
        if(checkForm(self.popupSelector + " .facilityData"))
        {
         $.ajax({
                url:"/ScoutsCMS/ajax/saveFacilityInfo.php",
                type: "post",
                dataType: 'json',
                data: GetFormValues(self.popupSelector + " .facilityData"),
                success: self.setFacilityId
            });
        }
        else
        {
            jAlert("Fill required fields", "Error");
        }
    }

    self.setFacilityId = function(id)
    {
        jAlert("Saved successful", "Message");
        
        if(id)
        {
            $(self.profileSelector + " input#facilityAutocomplete").attr("retValue", id);
        }

        $(self.profileSelector + " input#facilityAutocomplete").val($(self.popupSelector + " input[name=name]").val());
    }

    self.cleartAutosuggest = function()
    {
        $(self.profileSelector + " input#facilityAutocomplete").val("");
        $(self.profileSelector + " input#facilityAutocomplete").attr("retValue", "");
    }

    self.getCurrentFacilityID = function()
    {
        return $(self.profileSelector + " input#facilityAutocomplete").attr("retValue");
    }

    self.clearForm = function()
    {
        resetForm(self.popupSelector + " .facilityData");

        $(self.popupSelector + " input[name=id]").val("");
        $(self.popupSelector + " img[id=image]").attr("src", "/ScoutsCMS/images/noimage.jpg");
    }

    self.uploadImage = function()
    {
        $(self.popupSelector + " input[id=facilityUploadImageLoading]")
            .ajaxStart(function(){
                $(this).show();
            })
            .ajaxComplete(function(){
                $(this).hide();
        });
        var id = self.getCurrentFacilityID();
        if(id  != "")
        {
            $.ajaxFileUpload
            (
                {
                    url:'/ScoutsCMS/ajax/savePlayerImage.php?type=facilityImage&facilityId=' + id,
                    secureuri:false,
                    fileElementId:'facilityUploadImage' + self.idSuffix,
                    dataType: 'json',
                    success: function (data, status)
                    {
                        if(typeof(data.error) != 'undefined')
                        {
                            if(data.error != '')
                            {
                                jAlert(data.error, "Error");
                            }
                            else
                            {                               
                                $(self.popupSelector + " img[id=image]").attr("src", "/facilityLogo/thumbs/" + data.msg);
                            }
                        }
                    },
                    error: function (data, status, e)
                    {
                        jAlert(e, "Error", "Error");
                    }
                }
            )
        }
        else
        {
            jAlert("Save facility first");
        }

        return false;
    }

    self.checkEnteredValue = function()
    {
        self.closeBlurTimeout();
        var obj = $(self.profileSelector + " input#facilityAutocomplete");
        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=facility",
                type: "get",
                dataType: 'json',
                data: {"term":  $(self.profileSelector + " input#facilityAutocomplete").val()},
                success: function(data){
                    data = data.result;
                    if(data.length == 0)
                    {
                        self.createNewFacility( $(self.profileSelector + " input#facilityAutocomplete").val())
                    }
                    else
                    {
                        if(data.length == 0)
                        {
                            self.setFacilityIdFormAutosuggest(null, {item: data[0]});
                        }
                        else
                        {
                            var duplicateStr = "There are several facilityes 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='fp" + self.idSuffix + ".setFacilityIdFormAutosuggest(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.createNewFacility( $(self.profileSelector + " input#facilityAutocomplete").val())
                                }
                            });
                            $.alerts.okButton = backup;
                        }
                    }
                }
            });
        }
    }

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

    self.init();
}
