﻿(

function($) {
    $.fn.UserNotes = function(options) {

        var main_opts = $.extend({}, $.fn.UserNotes.defaults, options)

        return this.each(function() {
            $this = $(this);
            var opts = $.meta ? $.extend({}, main_opts, $this.data()) : main_opts;


            new $.UserNote(this, opts);

        });

    }
    $.fn.UserNotes.defaults = {
        popuponload: false
    };

    $.UserNote = function(element, opts) {

        var UserNotePanel = $(element),
        HiddenInputs = UserNotePanel.find('input[type=hidden]'),
        UserAccountId = HiddenInputs.get(0).value,
        PropertyId = parseInt(HiddenInputs.get(1).value),
        InitialNoteTextField = $(HiddenInputs.get(2)),
        CharCounterField = $('#charactersLeftText span:eq(0)'),
        DeleteButton = UserNotePanel.find('.delete:eq(0)'),
        SaveButton = $('#Save'),
        CancelButton = $('.cancel', UserNotePanel),
        AddNoteLink = UserNotePanel.find('a:eq(0)'),
        AnonymousUserMessage = UserNotePanel.find(".userNotes_AnonyMsg:eq(0)"),
        Note = UserNotePanel.find('div:eq(0)'),
        NoteEditor = UserNotePanel.find('textarea:eq(0)'),
        NoteEditorView = UserNotePanel.find('.userNotes_noteField:eq(0)'),
        HourGlass = UserNotePanel.find('span.hourGlass:eq(0)');

        if (opts.popuponload) {
            if (UserAccountId == 0) {
                ShowAnonymousUserMessage();
            }
            else {
                UpdateCounter();
                Add();
            }
        }

        // Reset usernote button
        ResetUserNoteButton();

        DeleteButton.click(function() {
            Delete();
            return false;
        });

        SaveButton.click(function() {
            Save();
            return false;
        });

        AddNoteLink.click(function() {

            if (UserAccountId == 0) {
                ShowAnonymousUserMessage();
            }
            else {
                UpdateCounter();
                Add();
            }
            return false;
        });


        CancelButton.each(function() {
            $(this).click(function() {
                Cancel();
                return false;
            })
        });

        NoteEditor.keyup(function() {
            LimitNumberOfChars();
            UpdateCounter();
            return false;
        });

        NoteEditor.click(function() {
            UpdateCounter();
            return false;
        });


        function UpdateCounter() {
            if (NoteEditor.val().length == 500) {
                CharCounterField.html('0');
            } else {
                CharCounterField.html(500 - NoteEditor.val().length);
            }

            if (NoteEditor.val().length > 500) {
                SaveButton.hide();
                CharCounterField.addClass("error");

            } else {
                CharCounterField.removeClass("error");
                SaveButton.show();

            }
            CharCounterField.parent().addClass("counterVisible");
        }

        function LimitNumberOfChars() {
            var limit = 500;
            var text = NoteEditor.val();
            var chars = text.length;
            if (chars > limit) { var new_text = text.substr(0, limit); NoteEditor.val(new_text); ScrollDown(1000); }
        }

        function ScrollDown(speed) {
            NoteEditor.animate({ scrollTop: 5000 }, speed);
        }

        function Cancel() {

            Note.hide();
            AddNoteLink.css("visibility", "visible");
            NoteEditor.val(InitialNoteTextField.val());

        }

        function Add() {
            if (AddNoteLink.hasClass("userNotes_EditNoteLink")) { SaveButton.html("Update").attr("title", "Update note"); } else { SaveButton.html('Save Note').attr("title", "Save note and update myFindaProperty"); }

            ToggleHourGlass(true);
            Note.show();

            AddNoteLink.css("visibility", "hidden");
            InitialNoteTextField.val(NoteEditor.val());
            NoteEditor.focus();
        }

        function ShowAnonymousUserMessage() {
            ToggleHourGlass(true);
            Note.show();
            AnonymousUserMessage.show();
            AddNoteLink.css("visibility", "hidden");
        }

        function ToggleHourGlass(hide) {

            if (hide == null) hide = false;

            if (hide) {
                NoteEditor.css("visibility", "visible");
                HourGlass.hide();
            }
            else {
                NoteEditor.css("visibility", "hidden");
                HourGlass.show();
            }

        }

        function Delete() {
            ToggleHourGlass();

            $.ajax({
                type: "POST",
                url: "svc/UserNotesService.asmx/DeleteUserNote",
                data: "{'userAccountId': '" + UserAccountId + "', 'propertyId': " + PropertyId + "}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(deleted) {
                    if (deleted) {

                        SetAsAddNote();

                    }
                }
            });
        }

        function SetAsAddNote() {
            DeleteButton.hide();
            SaveButton.show();
            AddNoteLink.attr("title", "Add a note to this property")
                    .empty()
                    .removeClass("userNotes_EditNoteLink")
                    .css("visibility", "visible");

            ToggleHourGlass(true);
            Note.hide();
            NoteEditor.val("");
            InitialNoteTextField.val("");
        }

        function Save() {

            ToggleHourGlass();
            var NewValue = NoteEditor.val();

            if (NewValue != "") {
                NewValue = NoteEditor.val().replace(/^\s+|\s+$/g, '');
                if (NewValue.length > 0) {
                    //clean up text - remove html
                    NewValue = NewValue.replace(/<[^>]*>/g, "")
                    $.ajax({
                        type: "POST",
                        url: "svc/UserNotesService.asmx/SaveUserNote",
                        data: "{'userAccountId': '" + UserAccountId + "', 'propertyId': " + PropertyId + ", 'note': '" + NewValue.replace(/'/g, "&apos;").replace(/"/g, "").replace(/\\/g, "\\\\") + "'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(saved) {
                            if (saved) {
                                updateShortlist(PropertyId, '#SavedPropertyContainer', '', '#SavedPropertyText');
                                DeleteButton.show();
                                SaveButton.show();

                                NoteEditor.val(NewValue);
                                InitialNoteTextField.val(NewValue);

                                if (NewValue.length > 34) {
                                    AddNoteLink.html("<span>" + NewValue.substring(0, 30) + " ...</span>");
                                } else {
                                    AddNoteLink.html("<span>" + NewValue + "</span>");
                                }

                                AddNoteLink.addClass("userNotes_EditNoteLink")
                                .attr("title", "Edit your note on this property")
                                .css("visibility", "visible");

                                Note.hide();
                                ToggleHourGlass(true);
                            }
                        }
                    });
                } else {
                    if (InitialNoteTextField.val().length > 0 && NewValue.length == 0) {
                        Delete();
                    }
                    else {
                        SetAsAddNote();
                    }
                }
            }
            else {
                if (InitialNoteTextField.val().length > 0 && NewValue.length == 0) {
                    Delete();
                }
                else {
                    SetAsAddNote();
                }
            }

        }

        function ResetUserNoteButton() {

            $.ajax({
                type: "POST",
                url: "/svc/UserNotesService.asmx/LoadUserNote",
                data: "{'userAccountId': '" + UserAccountId + "', 'propertyId': " + PropertyId + "}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(userNote) {
                    if (userNote != null) {
                        if (userNote.Note.length > 0) {

                            DeleteButton.show();
                            SaveButton.show();
                            NoteEditor.val(userNote.Note);
                            InitialNoteTextField.val(userNote.Note);
                            AddNoteLink.addClass("userNotes_EditNoteLink")
                                .attr("title", "Edit your note on this property")
                                .css("visibility", "visible");

                            if (userNote.Note.length > 34) {
                                AddNoteLink.html("<span>" + userNote.Note.substring(0, 30) + " ...</span>");
                            } else {
                                AddNoteLink.html("<span>" + userNote.Note + "</span>");
                            }
                        }
                    }
                }
            });

        }

    }


}
)(jQuery);

