﻿/// <reference path="spider.js" />
/// <reference path="spider.ui.js" />

spider.ui.note = function (container, id, context, settings) {
    var _returnObject;

    var _settings = {
        $container: $(container),
        noteClass: 'spider-ui-note-content',
        triggerClass: 'spider-ui-note-trigger',
        triggerOn: '/Content/images/icons/small/on/note.png',
        triggerOff: '/Content/images/icons/small/off/note.png',

        showEffect: 'blind',
        showEffectOptions: {},
        showEffectSpeed: 'fast',
        showEffectCallback: function () { },
        hideEffect: 'blind',
        hideEffectOptions: {},
        hideEffectSpeed: 'fast',
        hideEffectCallback: function () { },

        parentId: id,
        $context: spider.utility.make_jquery(context),

        isVisible: false
    };

    $.extend(_settings, settings);

    _returnObject = {
        showNote: function (e) {
            if (_settings.isVisible === true) { return _returnObject; }

            _settings.$container
                .find('.' + _settings.triggerClass)
                .attr('src', _settings.triggerOn);

            _settings.$container
                .find('.' + _settings.noteClass)
                .show(_settings.showEffect, _settings.showEffectOptions, _settings.showEffectSpeed, _settings.showEffectCallback);

            _settings.isVisible = true;
            return _returnObject;
        },

        hideNote: function (e) {

            if (e.type === "mouseleave" && _settings.$container.data('persist') === true) { return _returnObject; }

            _settings.$container.data('persist', false);
            _settings.$container
                .find('.' + _settings.triggerClass)
                .attr('src', _settings.triggerOff);

            _settings.$container
                .find('.' + _settings.noteClass)
                .hide(_settings.hideEffect, _settings.hideEffectOptions, _settings.hideEffectSpeed, _settings.hideEffectCallback);

            _settings.isVisible = false;
            return _returnObject;
        },

        toggleNote: function (e) {
            if (_settings.isVisible) {
                if (_settings.$container.data('persist')) {
                    _settings.$container.data('persist', false);

                    return _returnObject.hideNote(e);
                } else {
                    _settings.$container.data('persist', true);
                    _settings.$container.trigger('spider-ui-note-open', [_settings.$container.attr('group'), _settings.parentId]);

                    return _returnObject;
                }
            } else {
                _settings.$container.data('persist', true);
                _settings.$container.trigger('spider-ui-note-open', [_settings.$container.attr('group'), _settings.parentId]);
                return _returnObject.showNote(e);
            }
        },

        destroy: function () {
            _settings.$container.find('.' + _settings.triggerClass).unbind();
            _settings = null;
        }
    };

    _settings.$container
        .find('.' + _settings.triggerClass)
        .bind('click', null, _returnObject.toggleNote)
        .bind('mouseenter', _returnObject.showNote)
        .bind('mouseleave', _returnObject.hideNote)
        .data('persist', false);
        
    _settings.$context.bind('spider-ui-note-open', null, function (e, group, i) {
        if (_settings.parentId === i) { return; }

        if (_settings.$container.attr('group') === group) {
            if (_settings.isVisible) {
                _returnObject.hideNote(e);
            }
        }
    });

    return _returnObject;
};
