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")) {
				src.css({background:"none"}).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)

