'use strict';

var oldItemViewRender = Marionette.ItemView.prototype.render;
var oldItemCollectionViewRender = Marionette.CollectionView.prototype.render;


Marionette.View.prototype.viewName = function () {
    if (this.template) {
        var regex = new RegExp('\/', 'g');

        return this.template
            .toLocaleLowerCase()
            .replace('template', '')
            .replace(regex, '-');
    }

    return undefined;
};

Marionette.ItemView.prototype.self$ = function (selector) {
    return  this.$(selector).not("[class*='iv-'] " + selector);
};

Marionette.ItemView.prototype.render = function () {

    var result = oldItemViewRender.apply(this, arguments);


    //check to see if el has bindings (name attribute)
    // any element that has a name attribute and isn't child of another view.
    if (this.self$('[name]').length > 0) {
        if (!this.model) {
            throw 'view ' + this.viewName() + ' has binding attributes but model is not defined';
        }

        if (!this._modelBinder) {
            this._modelBinder = new Backbone.ModelBinder();
        }

        window.console.log('binding ' + this.viewName());

        this._modelBinder.bind(this.model, this.el);
    }

    this.$el.addClass('iv-' + this.viewName());


    return result;
};

Marionette.CollectionView.prototype.render = function () {

    if (this.model) {
        NzbDrone.ModelBinder.bind(this.model, this.el);
    }

    return oldItemCollectionViewRender.apply(this, arguments);
};