;(function(){

var myName = 'AllBarmensPage'
var Me = self[myName] = MVC.create(myName)

var myProto =
{
	initialize: function ()
	{
		this.model.initialize()
		this.view.initialize()
		this.controller.initialize()
	},
	
	bind: function (nodes, sources, state)
	{
		this.model.bind(sources)
		this.view.bind(nodes)
		this.controller.bind(state)
		
		this.controller.loadBarmen()
		return this
	}
}

Object.extend(Me.prototype, myProto)

})();

$.onready(function ()
{
	document.documentElement.removeClassName('loading')
	
	var nodes =
	{
		barmensList: $$('.barmen-list')[0]
	}
	
	var sources =
	{
		barman: Barman
	}
	
	var page = new AllBarmensPage()
	
	page.bind(nodes, sources)
})

;(function(){

var Papa = AllBarmensPage
var Me = Papa.Model

var myProto =
{
	initialize: function ()
	{
		this.sources = {}
		this.state = {}
	},
	
	bind: function (sources)
	{
		this.sources = sources
	},
	
	loadBarmen: function ()
	{
		var barmen = this.sources.barman.getAll()
		this.barmen = barmen
		this.view.modelChanged(barmen)
	}
}

Object.extend(Me.prototype, myProto)

})();
;(function(){

var Papa = AllBarmensPage
var Me = Papa.View

eval(NodesShortcut.include())

var myProto =
{
	initialize: function ()
	{
		this.nodes = {}
	},
	
	bind: function (nodes)
	{
		this.nodes = nodes
	},
	
	modelChanged: function (barmen)
	{
		this.renderBarmen(barmen)
	},
	
	renderBarmen: function (barmen)
	{
		var tmp = document.createDocumentFragment()
		
		var previews = []
		for (var i = 0, il = barmen.length; i < il; i++)
		{
			var barman = barmen[i]
			
			var item = Nc('li', 'item')
			tmp.appendChild(item)
			
			var preview = previews[i] = Nc('a', 'barman-preview lazy')
			preview.barmanImageSrc = 'url(' + barman.getPhoto() + ')'
			preview.href = barman.pageHref()
			item.appendChild(preview)
			
			preview.appendChild(Nc('span', 'mask'))
			
			preview.appendChild(Nct('span', 'name', barman.name))
		}
		
		var list = this.nodes.barmensList
		list.empty()
		list.appendChild(tmp)
		
		this.setupVisibilityFrame(previews)
	},
	
	setupVisibilityFrame: function (nodes)
	{
		var boxes = Boxer.sameNodesToBoxes(nodes)
		var frame = new VisibilityFrame()
		frame.setFrame(4000, 1500)
		frame.setStep(500, 500)
		
		frame.onmove = function (show, hide)
		{
			for (var i = 0; i < show.length; i++)
			{
				var box = show[i]
				if (!box.loaded)
				{
					var node = box.node,
						image = node.barmanImageSrc
					
					node.style.backgroundImage = image
					node.removeClassName('lazy')
					
					box.loaded = true
				}
			}
		}
		
		frame.setBoxes(boxes)
		
		function onscroll ()
		{
			frame.moveTo(window.pageXOffset, window.pageYOffset)
		}
		var timer
		window.addEventListener('scroll', function () { clearTimeout(timer); timer = setTimeout(onscroll, 100) }, false)
		onscroll()
	}
}

Object.extend(Me.prototype, myProto)

})();

;(function(){

var Papa = AllBarmensPage
var Me = Papa.Controller

var myProto =
{
	initialize: function ()
	{
		this.state = {}
	},
	
	bind: function (state) {},
	
	loadBarmen: function ()
	{
		this.model.loadBarmen()
	}
}

Object.extend(Me.prototype, myProto)

})();

