if(!window.ndra) ndra = {};
ndra.bg = {

    sources:[],

    // Добавляет к элементу фон
    add:function(sel,pos,img,hover) {

        // Создаем глобальный контэйнер
        if(!ndra.bg.container) ndra.bg.container = $("<div>").prependTo("body");

        $(sel).each(function() {

            var src = $(this);

            // Отключаем фон у родительского элемента
            if(!src.data("incuzd")) {
                if(!hover) src.css({background:"none"});
                src.data("incuzd",true);
                ndra.bg.sources.push(src);
                src.data("omebj",[]);
            }

            var f = function() {

                c = $("<div>").appendTo(ndra.bg.container).css({
                    position:"absolute",
                    overflow:"hidden",
                    background:img
                });
                c.data("pos",pos).data("hover",hover);
                src.data("omebj").push(c);

                ndra.bg.realSync(src);
            }

            var f2 = function() {
                var c = [];
                $(src.data("omebj")).each(function() {
                    var e = $(this);
                    if(e.data("hover")) $(this).remove();
                    else c.push(e);
                })
                src.data("omebj",c)
            }

            if(hover) {
                src.mouseenter(f);
                src.mouseleave(f2);
            } else {
                f();
            }

        });
    },

    init:function() {
        $(window).resize(ndra.bg.sync);
        ndra.bg.sync();
        $("img").load(ndra.bg.sync);
        setInterval(ndra.bg.monitor,100);
    },

    monitor:function() {
        var items = [$("body")];
        $(items).each(function() {
            var e = $(this);
            var o = e.offset();
            var hash = e.outerWidth()+":"+e.outerHeight()+":"+o.left+":"+o.top;
            if(hash!=e.data("fl2tp1h7")) {
                ndra.bg.sync();
                e.data("fl2tp1h7",hash)
            }
        });
    },

    sync:function() {
        if(!ndra.bg.syncQueued) {
            setTimeout(function() {ndra.bg.realSync()},100);
            ndra.bg.syncQueued = true;
        }
    },

    realSync:function(el) {

        var items = el || $(ndra.bg.sources);

        items.each(function() {
            var source = $(this);
            var o = source.offset();
            var d = {
                w:source.outerWidth(),
                h:source.outerHeight(),
                x:o.left,
                y:o.top
            };
            $(source.data("omebj")).each(function(){
                ndra.bg.updatePosition(this,d);
            });
        });

        ndra.bg.syncQueued = false;
    },

    updatePosition:function(el,d) {

        if(d.w==0)
            el.css("display","none");
        else
            el.css("display","block");

        var pos = (el.data("pos")+"").split(",");
        var top=0,right=0,bottom=0,left=0;
        for(var i in pos) {

           switch(i*1) {
                default: var src = 0; break;
                case 0: var src = d.h; break;
                case 1: var src = d.w; break;
                case 2: var src = d.h; break;
                case 3: var src = d.w; break;
            }
            var dest = 0;

            var expr = pos[i];
            var m = expr.match(/([+-]?\d+\%?)/g);
            for(var j=0;j<m.length;j++) {
                operation = m[j]+"";
                if(operation.match("%"))
                    dest+=src*parseInt(operation)/100;
                else
                    dest+=parseInt(operation);
            }

            switch(i*1) {
                case 0: top = d.y+dest; break;
                case 1: right = d.x+dest; break;
                case 2: bottom = d.y+dest; break;
                case 3: left = d.x+dest; break;
            }

        }

        el.css({
            top:top,
            left:left,
            width:right-left,
            height:bottom-top
        });

    }
}
$(ndra.bg.init)

