;(function(){

var myName = 'Good'

eval(NodesShortcut.include())

function Me (data)
{
	for (var k in data)
		this[k] = data[k]
	this.constructor = Me
}

function lazyLoadPreview ()
{
	var url = this.lazyBackgroundImage
	if (url)
	{
		this.lazyBackgroundImage = null
		this.style.backgroundImage = url
		this.removeClassName('lazy')
	}
}

function lazyLoadPromo ()
{
	var url = this.lazySrc
	if (url)
	{
		this.lazySrc = null
		this.src = url
		this.removeClassName('lazy')
	}
}

Me.prototype =
{
	getHref: function ()
	{
		return '/good/' + this.path + '/'
	},
	
	getPreviewNode: function (lazy)
	{
		var link = Nct('a', lazy ? 'good-preview lazy' : 'good-preview', this.name)
		link.href = this.getHref()
		var backgroundImage = 'url(/good/' + this.path + '/mini.png)'
		if (lazy)
			link.lazyBackgroundImage = backgroundImage
		else
			link.style.backgroundImage = backgroundImage
		
		link.lazyLoad = lazyLoadPreview
		
		return link
	},
	
	getPromoNode: function (num, lazy)
	{
		var image = Nc('img', lazy ? 'good-promo lazy' : 'good-promo')
		
		image[lazy ? 'lazySrc' : 'src'] = '/good/' + this.path + '/promo-' + (num + 1) + '.jpg'
		
		image.lazyLoad = lazyLoadPromo
		
		return image
	}
}

var staticMethods =
{
	initialize: function (db)
	{
		for (var i = 0, il = db.length; i < il; i++)
			db[i] = new Me(db[i])
		
		this.db = db
	},
	
	bySellIndex: null,
	getBySellName: function (name)
	{
		var index = this.bySellIndex
		if (!index)
		{
			index = this.bySellIndex = {}
			
			var db = this.db
			
			for (var i = 0, il = db.length; i < il; i++)
			{
				var item = db[i],
					sell = item.sell
				
				if (!sell)
					continue
				
				for (var j = 0, jl = sell.length; j < jl; j++)
				{
					var v = sell[j]
					
					var arr = index[v]
					if (arr)
						arr.push(item)
					else
						index[v] = [item]
				}
			}
		}
		
		return index[name] || []
	},
	
	byNameIndex: null,
	getByName: function (name)
	{
		var index = this.byNameIndex
		if (!index)
		{
			index = this.byNameIndex = {}
			
			var db = this.db
			for (var i = 0, il = db.length; i < il; i++)
			{
				var item = db[i]
				index[item.name] = item
			}
		}
		
		return index[name]
	},
	
	getAll: function ()
	{
		// save the db from corruption with copying
		return this.db.slice()
	}
}

Object.extend(Me, staticMethods)

Me.className = myName
self[myName] = Me

Me.initialize([
{"name":"Шейкер","name_eng":"Shaker","path":"shaker","promos":4},
{"name":"Бостонский шейкер","name_eng":"Boston Shaker","path":"boston-shaker","promos":3,"sell":["Шейкер"]},
{"name":"Сиропы","name_eng":"Syrups","path":"syrups","promos":2,"sell":["Арбузный сироп","Банановый сироп","Ванильный сироп","Гренадин","Грушевый сироп","Ежевичный сироп","Жасминовый сироп","Имбирный сироп","Ирисковый сироп","Карамельный сироп","Кленовый сироп","Клубничный сироп","Клюквенный сироп","Кокосовый сироп","Лаймовый сироп","Малиновый сироп","Мандариновый сироп","Медовый сироп","Миндальный сироп","Ореховый сироп","Персиковый сироп","Пряный сироп","Сахарный сироп","Сахарный сироп","Сироп блю курасао","Сироп бузины","Сироп киви","Сироп кислая вишня","Сироп корицы","Сироп лаванды","Сироп лимонника","Сироп личи","Сироп малиновый чай","Сироп манго","Сироп маракуйя","Сироп розы","Сироп тархун","Фиалковый сироп","Черносмородиновый сироп","Шоколадный сироп","Экстракт лаванды","Яблочный сироп"]},
{"name":"Ликеры","name_eng":"Liqueurs","path":"liqueurs","promos":1,"sell":["Абрикосовый ликер","Амаретто ликер","Апельсиновый ликер","Банановый ликер желтый","Банановый ликер зеленый","Блю Курасао ликер","Вишневый ликер","Дынный ликер","Ежевичный ликер","Клубничный ликер","Кокосовый ликер","Кофейный ликер","Ликер голубики","Ликер какао коричневый","Ликер какао светлый","Ликер кислая вишня","Ликер красный грейпфрут","Ликер личи","Ликер маракуйя","Малиновый ликер","Мятный ликер зеленый","Мятный ликер светлый","Персиковый ликер","Черносмородиновый ликер","Яблочный ликер","Яичный ликер"]},
{"name":"Ангостура биттер","name_eng":"Angostura bitter","path":"angostura-bitter","promos":1,"sell":["Ангостура биттер"]},
{"name":"Самбука","name_eng":"Sambuca","path":"sambuca","promos":3,"sell":["Самбука апельсин-манго","Самбука банановая","Самбука светлая","Самбука ванильная","Самбука вишневая","Самбука черная","Самбука малиновая","Самбука яблочная"]}
])

})();