{
	"translatorID": "73be930f-5773-41b2-a7a1-37c0eeade92f",
	"label": "OZON.ru",
	"creator": "Mikhail Akimov",
	"target": "^https?://www\\.ozon\\.ru/(context/detail/id/|\\?context=search)",
	"minVersion": "3.0",
	"maxVersion": "",
	"priority": 100,
	"inRepository": true,
	"translatorType": 4,
	"browserSupport": "gcsibv",
	"lastUpdated": "2017-01-04 20:51:33"
}

/*
	OZON.ru Translator
	Copyright (C) 2015 Mikhail Akimov
	Copyright (C) 2017 Philipp Zumstein

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU Affero General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU Affero General Public License for more details.

	You should have received a copy of the GNU Affero General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


function detectWeb(doc, url) {
	if (ZU.xpathText(doc, '//div[contains(@class, "bContentColumn")]/script[contains(., "Core.Namespace.exp")]')) {
		return "book";
	} else if (getSearchResults(doc, true)) {
		return "multiple";
	}
}


function getSearchResults(doc, checkOnly) {
	var items = {};
	var found = false;
	var rows = ZU.xpath(doc, '//a[@itemprop="url" and contains(@href, "/context/detail/id/")]');
	for (var i=0; i<rows.length; i++) {
		var href = rows[i].href;
		var title = ZU.trimInternal(rows[i].textContent);
		if (!href || !title) continue;
		if (checkOnly) return true;
		found = true;
		items[href] = title;
	}
	return found ? items : false;
}


function doWeb(doc, url) {
	if (detectWeb(doc, url) == "multiple") {
		Zotero.selectItems(getSearchResults(doc, false), function (items) {
			if (!items) {
				return true;
			}
			var articles = [];
			for (var i in items) {
				articles.push(i);
			}
			ZU.processDocuments(articles, scrape);
		});
	} else {
		scrape(doc, url);
	}
}


function scrape(doc, url) {
	var script = ZU.xpathText(doc, '//div[contains(@class, "bContentColumn")]/script[contains(., "Core.Namespace.exp")]');
	var start = script.indexOf('{');
	var end = script.lastIndexOf('}');
	var data = script.substring(start, end+1);
	var json = JSON.parse(data);
	//Z.debug(json.Capabilities.Capabilities);
	
	var item = new Zotero.Item('book');
	item.title = json.NameVm.Name;
	
	for (var property in json.Capabilities.Capabilities) {
		var name = json.Capabilities.Capabilities[property].Name;
		var value = json.Capabilities.Capabilities[property].Value;//this can be either a text string or an array of values (e.g. publisher, authors)
		var role = null;
		
		switch (name) {
			//All creatorss are handled the same except that the role
			//depends on the label and therefore depending on the
			//entrypoint of these cases:
			case "Редактор":
			case "Редакторы":
				if (!role) role = "editor";
			case "Переводчик":
			case "Переводчики":
				if (!role) role = "translator";
			case "Автор":
			case "Авторы":
				if (!role) role = "author";
				for (var i=0; i<value.length; i++) {
					item.creators.push(ZU.cleanAuthor(value[i].Text, role));
				}
				break;
			case "Год выпуска":
				item.date = getValue(value);
				break;
			case "Издательства":
			case "Издательство":
				item.publisher = getValue(value);
				break;
			case "ISBN":
				item.ISBN = getValue(value);
				break;
			case "Язык издания":
				item.language = getValue(value, true);
				break;
			case "Количество страниц":
				item.numPages = getValue(value);
				break;
			case "Серия":
				item.series = getValue(value);
		}
	}
	
	if (json.Description && json.Description.FirstBlock) {
		item.abstractNote = ZU.cleanTags(json.Description.FirstBlock.Text);
	}
	
	item.complete();
}


function getValue(jsonSnippet, normalize) {
	var codes = {
		'русский': 'ru',
		'английский': 'en',
		'французский': 'fr',
		'немецкий': 'de',
		'итальянский': 'it',
		'испанский': 'es'
	};

	if (Array.isArray(jsonSnippet)) {
		return jsonSnippet.map(function(obj) { return obj.Text; }).join(", ");
	}
	
	if (normalize) {
		var t = jsonSnippet = jsonSnippet.trim().toLowerCase();Z.debug(t);
		if (codes[t]) {
			return codes[t];
		}
	}
	return jsonSnippet
	
}


/** BEGIN TEST CASES **/
var testCases = [
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/87889/",
		"items": [
			{
				"itemType": "book",
				"title": "Язык программирования C++",
				"creators": [
					{
						"firstName": "Бьерн",
						"lastName": "Страуструп",
						"creatorType": "author"
					}
				],
				"date": "1999",
				"ISBN": "9785794000313 9785798901272 9780201889543",
				"abstractNote": "Книга Бьерна Страуструпа является каноническим изложением возможностей С++, написанным автором этого популярнейшего языка программирования. Помимо подробного описания самого языка, на страницах книги вы найдете множество доказавших свою эффективность подходов к решению разнообразных задач программирования и проектирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С - совместимом ядре С++, так и современный объектно - ориентированный подход к созданию программных продуктов. Данное третье издание бестселлера было существенно переработано автором. С одной стороны, результатом этой переработки стала большая доступность книги для новичков. С другой стороны, текст обогатился сведениями и техниками программирования, которые могут оказаться полезными даже для многоопытных специалистов по С++. Разумеется, не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явныеприведения типов (cast - операторы) и другие. Книга адресована программистам, использующим в своей повседневной работе С++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка `из первых рук`.",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "991",
				"publisher": "Невский Диалект, Бином",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/87972/",
		"items": [
			{
				"itemType": "book",
				"title": "Объектно - ориентированный анализ и проектирование с примерами приложений на С++",
				"creators": [
					{
						"firstName": "Автор не",
						"lastName": "указан",
						"creatorType": "author"
					},
					{
						"firstName": "Грэди",
						"lastName": "Буч",
						"creatorType": "author"
					}
				],
				"date": "1998",
				"ISBN": "9780805353402 9785798900671 9785794000177",
				"abstractNote": "Книга Гради Буча, признанного эксперта в области объекто - ориентированной методологии разработки программного обеспечения, содержит классическое изложение вопросов анализа и проектирования сложных систем. В первой части книги автор исследует суть фундаментальных понятий ООП (таких как `класс`, `объект`, `наследование`), анализирует концепции, лежащие в основе объектно - ориентированных языков и методик разработки. Вторая часть содержит подробное описание обозначений (известных как `нотация Буча`), давноуже ставших родными для тысяч разработчиков во всем мире. Здесь же автор делится своим богатым опытом организации процесса разработки программ, дает рекомендации по подбору команды и планированию промежуточных релизов. В третьей части изложенные ранее методы применяются для анализа и проектирования нескольких приложений. На глазах у читателя создается каркас соответствующих систем, принимаются принципиальные проектные решения. Книга будет полезна аналитикам и разработчикам программного обеспечения, преподавателям и студентам высших учебных заведений. По сравнению с первым изданием книга несколько дополнена (что отразилось и в названии), все примеры приведены на языке С++.",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "560",
				"publisher": "Невский Диалект, Бином",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/117417/",
		"items": [
			{
				"itemType": "book",
				"title": "Применение UML и шаблонов проектирования. Введение в объектно-ориентированный анализ и проектирование",
				"creators": [
					{
						"firstName": "Крэг",
						"lastName": "Ларман",
						"creatorType": "author"
					}
				],
				"date": "2001",
				"ISBN": "9785845901255 9780137488803",
				"abstractNote": "Те, кто еще не знакомы с вопросами объектно-ориентированного анализа и проектирования, наверняка планируют освоить эту область знаний. Данная книга станет хорошим путеводителем и позволит шаг за шагом пройти путь от определения требований к системе до создания кода. В книге рассматривается унифицированный язык моделирования UML, который является признанным стандартом для описания моделей и обеспечивает возможность общения между разработчиками. Для иллюстрации всего процесса объектно-ориентированного анализа и проектирования в книге приводится исчерпывающее описание реального примера. В нем показано, как перейти от этапа объектно-ориентированного проектирования к созданию кода на языке Java. Книга рассчитана на читателей с различным уровнем подготовки, интересующихся вопросами объектно-ориентированного анализа и проектирования.",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "496",
				"publisher": "Вильямс",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/1335648/",
		"items": [
			{
				"itemType": "book",
				"title": "Искусство программирования. Том 1. Основные алгоритмы",
				"creators": [
					{
						"firstName": "Дональд Эрвин",
						"lastName": "Кнут",
						"creatorType": "author"
					},
					{
						"firstName": "Ю.",
						"lastName": "Козаченко",
						"creatorType": "editor"
					},
					{
						"firstName": "С.",
						"lastName": "Тригуб",
						"creatorType": "translator"
					},
					{
						"firstName": "Ю.",
						"lastName": "Гордиенко",
						"creatorType": "translator"
					},
					{
						"firstName": "И.",
						"lastName": "Красикова",
						"creatorType": "translator"
					}
				],
				"date": "2015",
				"ISBN": "9785845919847 9785845900807 9780201896831",
				"abstractNote": "Первый том серии книг \"Искусство программирования\" начинается с описания основных понятий и методов программирования. Затем автор сосредоточивается на рассмотрении информационных структур - представлении информации внутри компьютера, структурных связях между элементами данных и способах эффективной работы с ними. Для методов имитации, символьных вычислений, числовых методов и методов разработки программного обеспечения даны примеры элементарных приложений. По сравнению с предыдущим изданием добавлены десятки простых, но в то же время очень важных алгоритмов. В соответствии с современными направлениями исследований был существенно переработан также раздел математического введения.",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "720",
				"publisher": "Вильямс",
				"series": "Искусство программирования",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/5531965/",
		"items": [
			{
				"itemType": "book",
				"title": "Алгоритмы на C++",
				"creators": [
					{
						"firstName": "Роберт",
						"lastName": "Седжвик",
						"creatorType": "author"
					},
					{
						"firstName": "А.",
						"lastName": "Моргунов",
						"creatorType": "translator"
					}
				],
				"date": "2011",
				"ISBN": "9785845916501 9780321606334",
				"abstractNote": "Роберт Седжвик тщательно переписал, существенно расширил и обновил свою популярную книгу, чтобы получилось современное и исчерпывающее описание важных алгоритмов и структур данных. Вместе с Кристофером Ван Виком он разработал новые реализации на C++, которые выражают эти методы в сжатом, но наглядном виде, а также предоставляют программистам практические средства для их проверки в реальных приложениях. \n \nВ книге представлено много новых алгоритмов, а их объяснения гораздо более подробны, чем в предыдущем издании. Новая структура текста и подробные иллюстрации к нему вместе с сопутствующими комментариями значительно улучшают представление материала. Третье издание также содержит удачное сочетание теории и практики, которые делают работу Седжвика бесценным источником сведений для более чем 250 000 программистов! \n \nВ частях 1–4 книги рассматриваются фундаментальные алгоритмы, структуры данных, сортировка и поиск. В ней приведено подробное описание фундаментальных структур данных и алгоритмов для сортировки, поиска и сопутствующих приложений. Хотя, по сути, материал книги применим к программированию на любом языке, реализации Ван Вика и Седжвика используют естественную связь между классами C++ и реализациями абстрактных типов данных (АТД). В части 5 книги рассматриваются алгоритмы на графах, которые играют все более важную роль во множестве приложений, таких как сетевая связность, конструирование электронных схем, составление графиков, обработка транзакций и выделение ресурсов. Каждая часть содержит новые алгоритмы и реализации, усовершенствованные описания и диаграммы, а также множество новых упражнений для лучшего усвоения материала. Акцент на АТД расширяет диапазон применения программ и лучше соотносится с современными средами объектно-ориентированного программирования. \n \nВ этой книге описаны следующие темы \n  Подробное описание массивов, связных списков, строк, деревьев и других базовых структур данных Акцентирование внимание на абстрактных типах данных (АТД), модульном программировании, объектно-ориентированном программировании и классах C++ Более 100 алгоритмов сортировки, выбора, реализаций АТД очереди с приоритетами и реализаций АТД таблицы символов (для поиска) Новые реализации биномиальных очередей, многопутевой поразрядной сортировки, рандомизированных BST-деревьев, скошенных деревьев, слоеных списков, многопутевых trie-деревьев, B-деревьев, расширяемого хеширования и многих других методов Больший объем численных характеристик алгоритмов, позволяющих сравнивать их Более 1000 новых упражнений, которые помогают разобраться в свойствах алгоритмов Полный обзор свойств и типов графов Орграфы и DAG-графы Минимальные остовные деревья Кратчайшие пути Сетевые потоки Диаграммы, примеры кода на C++ и подробные описания алгоритмов  Настоящее издание предоставляет программистам полный инструментальный набор для реализации, отладки и использования алгоритмов в широком диапазоне компьютерных приложений.",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "1056",
				"publisher": "Вильямс",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/2527036/",
		"items": [
			{
				"itemType": "book",
				"title": "Искусство программирования. Том 3. Сортировка и поиск",
				"creators": [
					{
						"firstName": "Дональд Эрвин",
						"lastName": "Кнут",
						"creatorType": "author"
					},
					{
						"firstName": "В.",
						"lastName": "Тертышный",
						"creatorType": "translator"
					},
					{
						"firstName": "Игорь",
						"lastName": "Красиков",
						"creatorType": "translator"
					}
				],
				"date": "2014",
				"ISBN": "9785845900821 9780201896855",
				"abstractNote": "Во втором издании третьего тома содержится полный обзор классических алгоритмов сортировки и поиска. Представленная в нем информация дополняет приведенное в первом томе обсуждение структур данных. Автор рассматривает принципы построения больших и малых баз данных, а также внутренней и внешней памяти. В книге приведена подборка тщательно проверенных компьютерных алгоритмов и представлен анализ их эффективности. Кроме того, специальный раздел посвящен методам оптимальной сортировки и описанию новой теории перестановки и универсального хеширования.",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "824",
				"publisher": "Вильямс",
				"series": "Искусство программирования",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/23968713/",
		"items": [
			{
				"itemType": "book",
				"title": "Алгоритмические трюки для программистов",
				"creators": [
					{
						"firstName": "Генри С. Уоррен",
						"lastName": "мл",
						"creatorType": "author"
					},
					{
						"firstName": "Игорь",
						"lastName": "Красиков",
						"creatorType": "translator"
					}
				],
				"date": "2014",
				"ISBN": "9785845918383",
				"abstractNote": "Книга \"Алгоритмические трюки для программистов\" позволит повысить квалификацию профессиональному программисту, но при этом книга будет понятна и чрезвычайно полезна даже начинающему и даже студенту, тем более что в новом издании появилась масса упражнений, интересных как с теоретической, так и с практической точки зрений. Работа программиста всегда немного хакерство, а также смесь арифметики и логики, особенно это касается программиста, который создает элегантный и эффективно работающий код. В этой книге программист-ветеран IBM Генри Уоррен делится с читателями разнообразными приемами из своей коллекции, пополняемой в течение многих десятилетий работы в области разработки компиляторов и архитектуры компьютеров, прикладного и системного программирования. Большинство из них носят практический характер, хотя некоторые представляют в первую очередь теоретический интерес. \n Автор книги много лет систематически собирал программные перлы, а затем свел их воедино, организовал и снабдил четким описанием. В этой книге слову \"хакер\" возвращено его первозданное значение - человека увлеченного, талантливого программиста, способного к созданию чрезвычайно эффективного и элегантного кода. В книге воплощен пятидесятилетний стаж ее автора в области разработки компиляторов и архитектуры компьютеров. Здесь вы найдете множество приемов для работы с отдельными битами, байтами, вычисления различных целочисленных функций; большей части материала сопутствует строгое математическое обоснование. Каким бы ни был ваш профессионализм - вы обязательно найдете в этой книге новое для себя; кроме того, книга заставит вас посмотреть на уже знакомые вещи с новой стороны. \n В новом издании своей книги автор вновь сумел собрать неотразимую коллекцию программистских трюков, позволяющих программисту писать элегантные и эффективные программы, быстро создавать эффективно работающий код, становясь при этом настоящим, глубоко знающим свое дело профессионалом. Трюки автора в высшей степени практичны, но при этом чрезвычайно интересны, а иногда и просто неожиданны - как решение большой головоломки. Изложенный материал позволит повысить квалификацию даже бывалому программисту, но при этом книга будет понятна и полезна даже начинающему. \n\n Добавления во второе издание включают: \n  Новую главу, посвященную циклическому избыточному коду (CRC), включая широко используемый код CRC-32.  Новую главу о кодах с коррекцией ошибок (ECC), включая подпрограммы для работы с кодом Хэмминга.   Большее количество материала, посвященного делению на константы, включая методы, использующие только сдвиги и сложения.   Вычисление остатков от деления без вычисления частного.   Более подробное изложение методов подсчета количества единичных битов и ведущих нулевых битов.   Подсчет единичных битов в массивах.   Новые алгоритмы сжатия и расширения.   Алгоритм LRU.   Преобразования между числами с плавающей точкой и целыми числами.   Программу приближенного вычисления обратного к квадратному корню.   Галерею графиков дискретных функций.   Появившиеся во втором издании упражнения и ответы к ним.  \n\n Об авторе\n Генри Уоррен, мл. имеет пятидесятилетний стаж работы в IBM, его деятельность простирается от IBM 704 до PowerPC и далее. Он работал над рядом военных командно-управляющих систем и над проектом SETL под руководством Джека Шварца (Jack Schwartz) из университета Нью-Йорка. С 1973 года Уоррен занимается компиляторами и архитектурой компьютеров в исследовательском подразделении IBM. В настоящее время он работает над проектами суперкомпьютеров, которые должны достичь быстродействия, измеряемого эксафлопсами (EFLOPS). Генри Уоррен получил докторскую степень в области информационных технологий в университете Нью-Йорка. \n \"Это первая книга, в которой так глубоко раскрыты секреты компьютерной арифметики. В ней есть все известные мне трюки и множество ранее не известных. Эта книга - настоящая находка для разработчиков библиотек и компиляторов, для всех, кто обожает элегантность в программировании. Место этой книги на полке - рядом с книгами Кнута. Все десять лет, прошедших с выхода первого издания, книга была неоценимым помощником в моей работе в Sun и Google. Я просто дрожу от нетерпения познакомиться с новым материалом во втором издании\".  Джошуа Блох (Joshua Bloch)  \n \"Впервые увидев эту книгу, я решил, что это не то советы по взлому компьютеров, не то набор мелких программистских трюков. И только познакомившись с ней поближе, я понял, что под ее обложкой скрыта целая компьютерная энциклопедия. Второе издание охватывает две большие новые темы, и расширяет коллекцию десятками новых небольших трюков, включая те, которые я тут же применил на практике - например, вычисление среднего двух целых чисел без риска переполнения. Этот хакер действительно умеет принести удовольствие читателю!\"  Гай Стил (Guy Steele)",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "512",
				"publisher": "Вильямс",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "http://www.ozon.ru/context/detail/id/6037655/",
		"items": [
			{
				"itemType": "book",
				"title": "Клетки",
				"creators": [
					{
						"firstName": "Бенджамин",
						"lastName": "Льюин",
						"creatorType": "editor"
					},
					{
						"firstName": "Линн",
						"lastName": "Кассимерис",
						"creatorType": "editor"
					},
					{
						"firstName": "Вишванат Р.",
						"lastName": "Лингаппа",
						"creatorType": "editor"
					},
					{
						"firstName": "Джордж",
						"lastName": "Плоппер",
						"creatorType": "editor"
					},
					{
						"firstName": "И.",
						"lastName": "Филиппович",
						"creatorType": "translator"
					},
					{
						"firstName": "Юрий",
						"lastName": "Ченцов",
						"creatorType": "translator"
					}
				],
				"date": "2011",
				"ISBN": "9785947747942",
				"abstractNote": "В книге описаны последние достижения в области клеточной биологии. Ее особенностями можно смело назвать наличие многочисленных богатых иллюстраций и хорошо выверенной современной терминологии, четкую структуру и удобное расположение материала. \n Важное значение в книге придается обсуждению молекулярных основ заболеваний человека и перспективных направлений исследований в этой области науки. \n\n Для студентов и аспирантов медико-биологических специальностей, начинающих и продолжающих изучение клеточной биологии, а также для исследователей, нуждающихся в современной информации по цитологии, и преподавателей.",
				"language": "ru",
				"libraryCatalog": "OZON.ru",
				"numPages": "952",
				"publisher": "Бином. Лаборатория знаний",
				"series": "Лучший зарубежный учебник",
				"attachments": [],
				"tags": [],
				"notes": [],
				"seeAlso": []
			}
		]
	}
]
/** END TEST CASES **/