Travian Bot JScript (TBJS) by Virtuos ver.0.5.4

By Virtuos Last update Oct 8, 2008 — Installed 15,184 times. Daily Installs: 9, 9, 12, 25, 13, 16, 16, 13, 11, 14, 16, 14, 22, 3, 9, 23, 11, 11, 8, 9, 3, 11, 12, 12, 10, 7, 18, 19, 12, 8, 9, 12

There are 11 previous versions of this script.

the source is over 100KB, syntax highlighting in the browser is too slow

// ==UserScript==
// @name Travian Bot JScript (TBJS) by Virtuos  ver.0.5.3
// @author Evgeny Ukhanov
// @author Virtuos
// @include http://*.travian*.*/*.php*
// @exclude http://*.travian*.*/hilfe.php*
// @exclude http://*.travian*.*/log*.php*
// @exclude http://*.travian*.*/index.php*
// @exclude http://*.travian*.*/anleitung.php*
// @exclude http://*.travian*.*/impressum.php*
// @exclude http://*.travian*.*/anmelden.php*
// @exclude http://*.travian*.*/gutscheine.php*
// @exclude http://*.travian*.*/spielregeln.php*
// @exclude http://*.travian*.*/links.php*
// @exclude http://*.travian*.*/geschichte.php*
// @exclude http://*.travian*.*/tutorial.php*
// @exclude http://*.travian*.*/manual.php*
// @exclude http://*.travian*.*/ajax.php*
// @exclude http://*.travian*.*/ad/*
// @exclude http://*.travian*.*/chat/*
// @exclude http://forum.travian*.*
// @exclude http://board.travian*.*
// @exclude http://shop.travian*.*
// @version 0.5.4
// @description  Enables Bot for Travian v3
// ==/UserScript==

//================================================================
// Web site: http://tbjs.narod.ru
// Автор/Author: Evgeny Ukhanov (Virtuos)
//---------------------------------------------------------------
// НАЗНАЧЕНИ (PURPOSE):
// - выполнение задач определенных пользователем, таких как:
// 	- постройка шахт.
// 	- постройка зданий.
/*---------------------------------------------------------------
 ВОЗМОЖНОСТИ (ABILITY):
 - отображение уровня  заполнения склада/амбара для текущей деревни.
 - отображение количества необходимых ресурсов для построения зданий в "списке задач".
 - при выборе постройки отображается уровень наличия ресурсов для построения слудеющего уровня здания.
 - возможность оперативно отключить выполнение скрипта (списка задач).
 - возможность учета рассы - для Римлян учтено две постройки одновременно.
 - возможность вручную вводить необходимое постройку и ее уровень - это обеспечит
		построение здание до любого уровня.
 - возможность удаления задачи из "списка задач".
---------------------------------------------------------------
 ИЗВЕСТНЫЕ НЕДОСТАТКИ И БАГИ (KNOWING WARNING and BUGS):
 - скрипт реализован только для одной деревни.
 - нельзя осуществить список задач для разных деревень.
 - не введена возможность выбора списка обязательной последовательности выполнения
		в "списке задач". На данный момент скрипт выполняет первое доступное здание для
		постройки и не ждет наступления очередности. В будущем возможно это будет
		учтено - работать со строгой последовательностью "списка задач" (т.е. ждать момента)
		пока все условия для построения здания будут выполненны или не ждать).
 - скрипт не кросс-платформенный. Реализован только для Opera.
 - иногда браузер может выдать "ошибка 400". Возможная причина - слишком много задач
 	добавлено в "список задач". Для того, чтобы решить, просто надо перезапустить браузер.
 - иногда браузер может выдать "ошибка 404". Это значит, что вы неправильно сформировали
 	"список задач". К примеру для одного и того же поля (скажем Тайника) вы указали
 	построить Тайник 5-го уровня. В первмом случае скрипт построит Тайник 5-го уровня,
 	для второй идентичной задачи скрипт будет расчитывать количество ресурсов для 5-го
 	уровня, и не для 6-го, и при попытке постройки может оказаться, что ресурсов не
 	хватает, т.к. неправильно был указан будущий уровень задния. Будьте внимательный
 	при формировании "списка задач".
 - выполнение скрипта реализовано только для страницы dorf1.php, реилизован механизм
		автоперехода на эту страницу, в случае если наступило время для выполнения
		одной из текущих задач в "списке задач". Это может быть неудобно для игрового процесса. Но также
		введена возможность отключения выполнения списка задач.
---------------------------------------------------------------
 ТЕСТИРОВАНИЕ (TESTING):
 - скрипт прошел успешное тестирование при следующей системной конфигурации:
		- Opera 		9.25
		- Сборка 		8827
		- Platform 		Win32
		- System 		Windows XP
		- JavaScript	enabled
		- Cookies		enabled
---------------------------------------------------------------
 КАК ИСПОЛЬЗОВАТЬ (HOW TO USE):
 - необходим браузер Opera (для других браузеров работоспособность не гарантируется)
 - установка: скопировать файл скрипта в папку, где находятся
			пользовательски скрипты (UserScripts) Oper-ы, и ВСЕ! :)
 - совместимость с другими скриптами не гарантируется.
 - для добавления постройки в "список задач" необходиом зайти в уже построенную
			шахту/поле, и нажать ссылку "Добавить в очередь задач". Задача появится
			в правой части окна браузера в "Список активных задач".
 - в левой части отображается общий индикатор по каждому ресурсу заполнение хранилища.
 - в списке задач отображается индикация названия задачи, ее порядковый номер,
			возможность удаления задачи, возможность перехода для просмотра какая
			постройка будет производится, индикация прогресса недостающих ресурсов до
			начала постройки, и отсчет времени до начала постройки.
 - для временного перкращения выполнения списка задач необходимо
			отдать галочку "Разрешить выполнение списка задач".
 - при условии нажатой галочки "Разрешить выполнение списка задач" и задачи в списке
			задач, готовй к выполнению будет автоматически сделан переход на страницу dorf1.php
			это может затруднить выполнять другие действия, учтите это.
 - задачи выполняются по мере выполнения всех условий для постройки - наличия
			необходимого количества ресурсов.
 - для Римлян учтен механизм постройки одновременно двух зданий. Его можно включить
			нажав галочку ""
---------------------------------------------------------------*/
// ПРЕДУПРЕЖДЕНИЯ И ЛИЦЕНЗИИ (WARNINGS and LICENSE):
// - TBJS скрипт предоставляется КАК ЕСТЬ (AS IS), вы его используете на СВОЙ СТРАХ
//			И РИСК! Автор скрипта не несет никакой ответственности за порчу имущества,
//			программного обеспечения, финансовых убытков, затрат, маральных потрясений.
//			Используя скрипт вы тем самым соглашаетесь с тем, что автор скрипта не несет
//			никакой ответственности за какиебыто нибыло последствия, которые может
//			принести использование данного скрипта.
// - license: GNU General Public License (GPL) v2
// - MooTools (с) (tm):
//			My Object Oriented Javascript Tools (MooTools).
//			Copyright (c) 2006-2007 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
// - недопускается коммерческое использование скрипта, без соответствующего разрешения
//			авторас крипта.
//---------------------------------------------------------------
/* ВЕРСИИ:
 0.5.2 b
 - исправлена некорректная работа функции переодического выполнения задач. В данной
 	версии не выявлено некорректного выполнениях "списка задач".
 0.5.1 b
 - исправлена ошибка, которая переодически возникала, при автоматическом удалении
 	выполненных задач, когда происходило некорректное смещение "списка задач".
 0.5.0 b
 - исправлено отображение  индикатора ресурсов, в случае если ресурво достаточно для
 	постройки. Ранее индикатор просто переставал показывать данные.
 - введено 15-ти минутное обноыление текущей страницы. 	Сделано это с целью - при
 	слишком длительном ожидании, пока будет нужное количество ресурсов, для построения
 	следующего здания в списке задач, и в случае когда пользователь не проявляет никакой
 	активности на сайте - может произойти "отлогинивание" из сайта. что не позволит
 	выполнить задачи в "спике задач". Т.к. задача в списке задач гарантированно будет
 	выполнена, при сколь угодно длиткльном времени ожидании достаточного количества
 	ресурсов.
 - исправлен синтаксис для БАГ репорт, который при режиме отладки выдавал
 	синтаксические ошибки в JScript-e.	Отныне скрипт выполняется корректно, с точки
 	зрения браузера.
 0.4.9 b
 - исправлена ошибка с добавлением заданий для зданий: рынок, академия и др.
 - исправлена ошибка с выполнением списка задач для зданий: рынок, академия и др.
 - для поля построения/улучшения зданий введена новая возможность: можно указать
		вручную - какой уровень здания будет строиться. Это делается для того, чтобы
		построить здание/улучшить более высокого уровня, чтобы скрипт правильно мог
		расчитать необходимое количество ресурсов. Скажем на одном поле вы хотите
		построить сразу ферму с 1-го уровня до 3-его. Для этого надо дважды добавить это
		поле в список задач. Чтобы правильно расчитать потрбность вресурсах для
		последующих построек, отличных от +1 уровень и введена эта возможность. Это
		позволяет снять ограничения на будущие постройки зданий и добавления их в
		список задач, и максимально-возможно повышать уровень здания. Самое главное
		внимательно следить за правильностью и последовательностью добавления зданий
		для текущего поля в список задач на выполнения, тогда скрипт будет корректно
		выполнять задачу. Однако на данный момент не реализована функция
		автоопределения типа здания, поэтому его придется выбирать вручную, однако
		для уже не надо будет вводить номер поля для построения (в случае если
		задача добовляется в самом поле для построения), скрипт сам сможет определить
		для такого варианта в каком поле строить. Будте внимательны при формировании
		списка задач.
 - исправлено неправильно отображение времени для индикатара наличия ресурсов для
		постройки конкретного здания расположеного в поле, котором необхоимо строить.
 - решена ВАЖНАЯ проблема, связанная с построением на пустом участке (поле), когда
		есть возможность выбора здания. Теперь можно запланировать постройку на пустом
		поле.
 0.4.8 b :
 - в списке задач введена возможность добавлять задачу вручную, с выбором
		наименования постройки, уровня здания, и участка построения. Это позволит
		организовать долгосрочное планирование построек зданмй любого уровня и
		сложности. Также это поможет решить следующую проблему: если браузер выдает
		страницу "ошибка 404", это значит, что вы пытались провести постройку
		здания дважды добавив его в список задач. Ошибка возникала из-за того, что
		вы (к примеру) строили здание 5-го уровня, для которого нужно одно количество
		ресурсов. А добавив в список дважды одновременно, вы тем самым указываете для
		списка уровень постройки здания 5-ый, хотя необходимо 6-ой. В списке-же задач
		ресурсы подсчитываются для 5-го уровня, и когда ресурсов будет достаточно,
		будет произведена попытка постройки, однако на самом деле уже ресурсов нужно
		больше, т.к. уровень здания другой, поэтому выдавалась "ошибка 404". Теперь
		эта проблема решаема через ручной ввод данных. Т.к. вполне естественно, что
		скрипт не предсказатель, и не может знать заранее какие следующие уровни зданий
		для данного поля вы введете. Теперь достаточно выбрать тип здания, указать его
		будущий уровень, указать номер поля, и нажать "добавить в список", и все. Для
		того чтобы узнать номер поля, подведите курсор к тому зданию которое вы хотите
		построить, и посмотрите ссылку на него, там где написано id=XXX в конце, это и
		есть номер поля - XXX.
 0.4.7 b :
 - добавлена внизу страницы ссылка на сайт TBJS
---------------------------------------------------------------*/
// Идентивифицируем браузер
var eventSource = (navigator.appName.indexOf== 'Opera') ? document : window;

// Создаем событие - загрузка страницы
eventSource.addEventListener( 'load', function(  ) {  onLoad();  } ,false);

//================================================================
// Переменные
//================================================================

// Текущий адрес страницы
var loc 		= window.location.href;
// Тип отчета
var order		= 0;
// Переменная контролирующая какие постройки выполняются в данный момент
var bld = new Array();
// Название ресурсов
var fields		= [];
// Языковая поддержка
var langfile	= [];
// Количество ресурсов
var resource;
// Данные о заполнении ресурсов
var overflow;
// Переодическое обновление страницы
var autotime;
// Текущее время на странице
var pagetime;

var web		= 'http://tbjs.narod.ru';

// Осуществлять две постройки одновременно - только для Римлян
var roman 	= false;

// Переменная текущего времени на сервере
var tm_1;

//================================================================
// Список задач
//================================================================
var ToDoList = new TToDoLis;
var to_do = 0;			// Какой элемент удалять из списка, когда задача уже выполнена
var to_do_run =false; 	// Признак того, что ToDoList надо исполнить
						// с элементом для исполнения to_do
var doit = true;		// Выполнять задания в списке или нет

//================================================================
// Языковые установки (LANGUAGES)
//================================================================
var langfileCOM 	= new Array('Resources','Task list', 'Enable task list','Need resources for building','Run two tasks (for Romans)','Add task','level of building','where build','Build','levl');
var langfileRU 		= new Array('&#1057;&#1086;&#1089;&#1090;&#1086;&#1103;&#1085;&#1080;&#1077; &#1088;&#1077;&#1089;&#1091;&#1088;&#1089;&#1086;&#1074;',
				'&#1057;&#1087;&#1080;&#1089;&#1086;&#1082; &#1072;&#1082;&#1090;&#1080;&#1074;&#1085;&#1099;&#1093; &#1079;&#1072;&#1076;&#1072;&#1095;',
				'&#1056;&#1072;&#1079;&#1088;&#1077;&#1096;&#1080;&#1090;&#1100; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1077; &#1089;&#1087;&#1080;&#1089;&#1082;&#1072; &#1079;&#1072;&#1076;&#1072;&#1095;',
				'&#1053;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1088;&#1077;&#1089;&#1091;&#1088;&#1089;&#1086;&#1074; &#1076;&#1083;&#1103; &#1087;&#1086;&#1089;&#1090;&#1088;&#1086;&#1077;&#1085;&#1080;&#1103;',
				'&#1044;&#1074;&#1077; &#1087;&#1086;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1086;&#1076;&#1085;&#1086;&#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086; (&#1076;&#1083;&#1103; &#1056;&#1080;&#1084;&#1083;&#1103;&#1085;)',
				'&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1079;&#1072;&#1076;&#1072;&#1095;&#1091; &#1074;&#1088;&#1091;&#1095;&#1085;&#1091;&#1102; >>',
				'&#1059;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100; &#1079;&#1076;&#1072;&#1085;&#1080;&#1103;',
				'&#1053;&#1086;&#1084;&#1077;&#1088; &#1091;&#1095;&#1072;&#1089;&#1090;&#1082;&#1072; &#1076;&#1083;&#1103; &#1087;&#1086;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;',
				'&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1074; &#1086;&#1095;&#1077;&#1088;&#1077;&#1076;&#1100; &#1079;&#1072;&#1076;&#1072;&#1095;',
				'&#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;');

//================================================================
// Описываем типа данных для Списка задач
//================================================================
function TToDoLis()
{
		this.Ac	 = new Array();	// Массив порядковых номеров
		this.Al  = new Array(); // Массив ссылок для активации постройки -
								// для того, чтобы началась постройка
		this.As  = new Array(); // Массив ссылок где поставлено в очерель
		this.Ar  = new Array(); // Массив ресурсов
		this.An  = new Array(); // Массив названий постройки
		this.Ap  = new Array(); // Массив потоков (к какому потоку относится)
		this.potok = true;		// Указываем, какой поток исполнения активен
								// если true = фермы
								// иначе здания
		this.At  = new Array();	// Признак того, что пора выполнить задание
}

//========================================================================
// Функция выполняемая при событии загрузки страницы
//========================================================================
function onLoad()
{
	var div1 = document.createElement('div');
	div1.id = 'idd';
//	$(document.body).appentChild(div1);
	// Определяем язык =====================================
	lang	= loc.match(/travian(\.[a-zA-Z]{2,3})+/ );
	if(!lang)
	{
		lang = loc.match(/travian3(\.[a-zA-Z]{2,3})+/ ).pop();
	} else
	{
		lang = loc.match(/travian(\.[a-zA-Z]{2,3})+/ ).pop();
	}

	fields[lang]	= gatherFields();
	// Устанавливаем переменные языка ======================
	switch(lang)
    {
		case '.com':
			langfile[lang] = langfileCOM;
			break;
		case '.ru':
			langfile[lang] = langfileRU;
			break;
		default:
			langfile[lang] = langfileCOM;
			break;
	}
	resource = getResourceInfo();
	overflow = calOverflow();
	loadCookieToDoList();
	addElement();
}

//================================================================
// Загружаем сохраненные куки
//================================================================
function loadCookieToDoList()
{
	with(ToDoList)
	{
		var cn = GetCookie('count');
		var td = GetCookie('todo');
		var _d = GetCookie('DoIt');
		var _r = GetCookie('roman');

		if (cn > 0){
    		for(var i=0;i<cn;i++)
			{
				var Ac_ = GetCookie('Ac['+i+']');
				var aAc = Ac_.split("@");
		 		Ac[i] = aAc[0];
		 		Ar[i] = aAc[1];
		 		Ap[i] = aAc[2];
		 		As[i] = aAc[3];
		 		Al[i] = aAc[4];
		 		An[i] = aAc[5];
			}
		}

		if(_d != null)
			doit = (_d == 1)? true:false;
		if(_r != null)
			roman = (_r == 1)? true:false;
		if(td!=null)
		{
			to_do = td;
			to_do_run = true;
		}
 	}
}

//================================================================
// Выполняем задание, для которого уже подошла очередь
//================================================================
function RunTask(td)
{
	var link_R = XPathSearchHREF('a','&c=');
	if(link_R != false)
	{
		var link_R1 = link_R.split('&');
	} else
	{
		DeleteCookie('todo');
		exit();
	}
	var link_R_ = '';
	if (link_R1.length > 1)
	{
		if(link_R1[link_R1.length-1].indexOf("c=") != -1)
		{
			link_R_ = link_R1[link_R1.length-1].split('=');
			link_R_ = ToDoList.Al[td-1] + link_R_[1];
		}
	}
//--
	if(link_R != false)
	{//qwe
		onDel(td, false);
		DeleteCookie('todo');
		location.href = link_R_;
	}
}

//================================================================
// Функция помещает в поток выполнений выбранное здание
//================================================================
function addBld(res1,res2,res3,res4,timeBld)
{
	with(ToDoList)
	{
		var cn = (Ac.length == 0)? 0 : Ac.length;
		var _l 	= loc.split("=");
		var _l1 = loc.split("/");
		var l2 	= (parseInt(_l[1]) < 19 ) ? 0 : 1;
		var link_R = loc;
		var q 	= $('lmid2').getChildren();
		//var q1  = q[4].getChildren();
		//var q2  = q1[2].getProperty('href');

		Ac[cn] = Ac.length+1;
		Ar[cn] = res1+','+res2+','+res3+','+res4+','+timeBld;
		Ap[cn] = l2;
		As[cn] = loc;
		// Вычисляем будущую ссылку для авто-построения
		link_R = link_R.split('=');
		var id_1 = parseInt(link_R[1]);
		var link_R_ = '';
		if (id_1 <19)
			link_R_ = 'dorf1.php?a='+id_1+'&c=';
		else
			link_R_ = 'dorf2.php?a='+id_1+'&c=';
		Al[cn] = link_R_;
		// Вычисляем будущий уровень здания
		var qs = q[0].innerText;
		qs = qs.split(" ");
		var qs2 = q[0].innerText;
		if (qs.length > 1)
		{
			// Получаем последний элемент и увеличиваем на 1
			// тем самым будет показан следующий уровень здания
			var qs1 = parseInt(qs[qs.length-1])+1;
			qs2 = '';
			for(var j=0;j<qs.length-1;j++)
			{
				qs2 = qs2 + qs[j]+' ';
			}
			qs2 = qs2 + qs1; // Название постройки + будущий ее уровень
		}
		An[cn] = qs2;
		SetCookie('count', Ac.length);	// Записываем сколько элементов в массиве
		var strSetC = Ac[cn]+'@'+Ar[cn]+'@'+Ap[cn]+'@'+As[cn]+'@'+Al[cn]+'@'+An[cn];
		SetCookie('Ac['+cn+']',strSetC);
		location.href = 'dorf1.php';
	}
}

//========================================================================
// Удаляем задачу из списка задач
//========================================================================
function onDel(el,go)
{
	loadCookieToDoList();
	with(ToDoList)
	{
		var cn = Ac.length-1;
		if (el-1 < cn)
		for(var i1=el-1;i1<cn;i1++)
		{
		// Перемещаем елементы
		Ac[i1] = Ac[i1+1];
		Ar[i1] = Ar[i1+1];
		Ap[i1] = Ap[i1+1];
		As[i1] = As[i1+1];
		Al[i1] = Al[i1+1];
		An[i1] = An[i1+1];
		}

		// Cookie
		SetCookie('count',cn);	// Записываем сколько элементов в массиве
		DeleteCookie('Ac['+cn+']');
		if (cn > 0){
		for(var i2=0;i2<cn;i2++)
		{
			var strSetC = Ac[i2]+'@'+Ar[i2]+'@'+Ap[i2]+'@'+As[i2]+'@'+Al[i2]+'@'+An[i2];
			SetCookie('Ac['+i2+']',strSetC);
		}
		} // if
	}
	if(go)
		location.href = loc;
}

//========================================================================
// Исполнения события, при условии, что его очередь наступила
//========================================================================
function ONdoList()
{
	var _run = 0;//false
	var runFerm = false;
	var runZd   = false;
	var _ad;
	var __run = false;
	var hr = '';
	with(ToDoList)
	{
		var ToDoList2 = ToDoList;
		if(Ac.length > 0)
		{
			for(var ad=Ac.length-1;ad>-1;ad--)
			{
				if(At[ad])
				{
					if(bld.length>0)
					{//asd
						if(roman)
						{
						for(var j=0;j<bld.length;j++)
						{
							if(bld[j].aid <19)
							{
						 		runFerm = true;
							} else
							{
						 		runZd = true;
							}
						}
						if (Ap[ad] == 0)
						 	_run = !runFerm;
						if (Ap[ad] == 1)
							_run = !runZd;
						}
					}  else
                    {
						_run = 1;
                    }
                    // Если не основная страница, то переходим на нее.
                    // Этот переход сделан специально, т.к. только на ней есть
                    // встроенная переменная bld
             		if(doit)
					{
                    // Если выполнение списка задач разрешено
                    if (loc.indexOf('dorf1') != -1)
					{
						if (_run == 1) // Выполнить задание
						{
							_ad = ad+1;
							__run = true;
							hr = As[ad];
						}
					} else
					{
							hr = 'dorf1.php';
					} // loc

					} // if DoIt
				}
			} // for
		} //if
	} // with
//------------------------------
	if (doit)
	{
          // Если выполнение списка задач разрешено
          if (loc.indexOf('dorf1') != -1)
  	   	  {
	      if (__run) // Выполнить задание
   	      {
		  	SetCookie('todo', _ad);
		  	location.href = hr;
 	      }
	   } else
	   {
  	     location.href = hr;
  	   } // loc
	} // if DoIt
}

//========================================================================
// Поиск определенного Тэга и соответсвующей строки, если содержит HREF
// Применяется XPath
//========================================================================
function XPathSearchHREF(tag, attr)
{
	var link1 = document.evaluate('//'+tag,document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
	var link1_LNGTH = link1.snapshotLength;
	var link_R = false;
	if(link1_LNGTH > 0)
	{
		for(var i=0; i<link1_LNGTH; i++)
		{
			linkR = link1.snapshotItem(i);
			if(linkR.href.indexOf(attr) != -1)
				link_R = linkR.href;
		}
	}
	return link_R;
}

//========================================================================
// Задаем значение куку и сохраняем его
//========================================================================
function SetCookie(strName, oValue)
{
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var oDate = false; // аргумент expires

	if((argc > 2) && (argv[2] != null))
	{
		var nStamp = (typeof(argv[2]) != "number") ?
		Date.parse(argv[2].toString()) :
		argv[2];
		if(!isNaN(nStamp))
			oDate = new Date(nStamp);
	}

	document.cookie = strName + "=" + escape(oValue.toString()) +
		(oDate ? "; expires=" + oDate.toGMTString() : "") +
		(((argc > 3) && (argv[3])) ? "; domain=" + argv[3] : "") +
		(((argc > 4) && (argv[4])) ? "; path=" + argv[4] : "") +
		((argc > 5) ? (argv[5] ? "; secure" : "") : "");
}

//========================================================================
// Получаем значение кукиса
//========================================================================
function GetCookie(strName)
{
	if((typeof(strName) == "string") && strName.length)
	{
		var i = 0, j;
		var strFind = strName + "=";
		var strCookie = document.cookie;
		do
		{
			j = i + strFind.length;
			if(strCookie.substring(i, j) == strFind)
			{
			var nEnd = strCookie.indexOf(";", j);
			if(nEnd < 0)
				nEnd = strCookie.length;
			return unescape(strCookie.substring(j, nEnd));
			}
		}
		while(i = strCookie.indexOf(" ", j) + 1);
	}
	return null;
}

//========================================================================
// Удаление кука
//========================================================================
function DeleteCookie(strName)
{
	document.cookie = strName + "=0; expires=" + (new Date(0)).toGMTString();
}

//========================================================================
// Функция разделения строки по заданному условию
// Введена спецаильно, т.к. обнаружена некорректная работа встроенной фунцвии split()
//========================================================================
function Asplit(el,spl)
{
	var el1 = '';
	var el2 = new Array();
	var count = 0;
	for(var qw=0;qw<el.length;qw++)
	{
		if(el[qw]==spl)
		{
			el2[count]=el1;
			el1 = '';
			count++;
		} else
			el1 = el1+el[qw];
	}
	el2[count] = el1;
	return el2;
}

//========================================================================
// Выводи список заданий
//========================================================================
function DrawToDoList()
{
	var htm = '';
	htm = htm+"<table width='250px' backgroundColor='white' cellpadding='1'  cellspacing='0'>";
	if (ToDoList.Ac.length > 0)
	{
	for(var i=0;i<ToDoList.Ac.length;i++)
	{
		with(ToDoList){
		var td_s = '<td style="border-bottom-style: solid; border-bottom-width: 1px">';
		var fire = true; // Признак того, что событие готово произойти
		var width_td_n = '10px';
		htm = htm+'<tr>'+td_s;
		htm = htm+"<a href='#' onclick='onDel("+(i+1)+",true);return false;'><img src='http://speed.travian.ru/img/un/a/del.gif' /></a></td>";
		htm = htm+td_s;
		htm = htm+"<b>"+(i+1)+"</b></td>";
		htm = htm+'<td width="'+width_td_n+'" style="border-bottom-style: solid; border-bottom-width: 1px">';
		htm = htm+"<a href='"+As[i]+"'>"+An[i]+"</a></td>";
//------------------------
		var res = getResourceInfo();
		var Ari = Ar[i];
		Ari = Asplit(Ari,',');
		var cneed_ = Ari;
		var maxtime = 0; 	// Максимальное время для постройки
		var res_need = 0; 	// Ресурс, которого больше всего не хватает
		var res_need_c = 0; // Количество ресурса
		htm =  htm+td_s;
		htm =  htm+'<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="0">';

		for (var j=0; j<4; j++)
		{
			htm =  htm+'<tr><td>';
		// Сколько ресурсов нужно для построения
			var cneed  = cneed_[j];
			// Сколько ресурсов в час добывается
			var cproduction = parseInt( res[j][0] );
			// Сколько в наличии ресурсов
			var cstore 		= parseInt( res[j][1] );
			// Сколько не хватает русурсов
			var cdiff 		= cstore-cneed;
			// Сколько времени ожидать до построения - текстовое значение
			var ctime;
			// Сколько времени ожидать до построения - в секундах
			// может принимать значение full
			var temp = 0;

			// Если добыча ресурсов в минусу (для зерна)
			if (cproduction < 0)
			{
				// Если русорса для построения хватает
				if (cdiff > 0)
				{
					temp	= 'ready';
				} else
				// Если русорса для построения не хватает
				if (cdiff < 0)
				{
					temp = 0;
					fire = false;
				} else
				// Если ресурсов = 0
				{
					temp = 0;
					fire = false;
				}
			} else
			if (cproduction > 0)
			{
				// Если русорса для построения хватает
				if (cdiff > 0)
				{
					temp	= 'ready';
				} else
				// Если русорса для построения не хватает
				if (cdiff < 0)
				{
					temp	= parseInt(-cdiff/cproduction*3600);
					if (temp>maxtime) {
						maxtime	= temp;
						res_need_c = -cdiff;
						res_need = j;
					}
					fire = false;
				} else
				// Если ресурсов = 0
				{
					temp = 0;
					fire = false;
				}
			} else
			// Если ресурсов в час добывается = 0
			{
				if (cdiff > 0)
				{
					temp = 'ready';
				} else
				if (cdiff < 0)
				{
					temp = 0;
					fire = false;
				} else
				// если нет ресурсов - полный вафликс
				{
					temp = 0;
					fire = false;
				}
			}
			At[i] = fire;

			var leftval	= parseInt(100*cstore/cneed);
			var t_s;
			if(temp!='ready')
			{
				t_s = (temp!=0)?formatTimeString(temp) : 'never';
			} else
				t_s = temp;

			if(leftval > 100)
			{
				leftval = 100;
				t_s	= 'ready';
			}
			var tol = (leftval<50) ? 150 : 255;
			var sec =155-leftval;
			var h   = '10px';
			var tbl_w = "90px";// Ширина всей таблицы
			var td1 = leftval;
			var td2 = (100-leftval);
			htm =  htm+"<table width='"+tbl_w+"' backgroundColor='white' cellpadding='0'  cellspacing='1'><tr>";
			htm =  htm+"<td width='"+td1+"%' height='"+h+"' bgColor='"+rgb2HEX(sec, sec, parseInt(tol*(leftval/100)))+"'></td>";
	 		htm =  htm+"<td width='"+td2+"%' height='"+h+"'></td>";
	 		htm =  htm+"</tr></table>";
			htm =  htm+"</td>";
			htm =  htm+"<td><span width='40px'>"+leftval+"%</span></td>";
			htm =  htm+"<td><b> "+t_s+"</b>";
			htm =  htm+"</td></tr>";
		} //for

			if(maxtime>0)
				t_s = formatTimeString(maxtime)
			else
				t_s = 'never';
			var r_ = 0;
			leftval	= 0;
			if (res_need_c!=0){
				r_ = parseInt( res[res_need][0] );
				leftval	= parseInt(100*res[res_need][1]/parseInt( cneed_[res_need] ));
			}
			if(leftval > 100)
            {
				leftval = 100;
                t_s = 'ready';
			}

			// Признак того, что задание может быть выполнено
			var cmpl;
			if(fire)
			{
				// Принудительно указываем, если пора выполнять
				cmpl = 'lime';
				leftval = 100;
				t_s = 'ready';
			} else
			{
				cmpl = 'yellow';
			}

			var tol= (leftval<50) ? 150 : 255;
			var sec=155-leftval;
			var td1 = leftval;
			var td2 = (100-leftval);
			var h = '10px';

			htm =  htm+"<tr><td>";
			htm =  htm+"<table width='"+tbl_w+"' backgroundColor='white' cellpadding='0'  cellspacing='1'>";
			htm =  htm+"<tr>";
			htm =  htm+"<td height='"+h+"' width='"+td1+"%' bgColor='"+rgb2HEX(sec, sec, parseInt(tol*(leftval/100)))+"'></td>";
	 		htm =  htm+"<td height='"+h+"' width='"+td2+"%'></td>";
	 		htm =  htm+"</tr></table>";
	 		htm =  htm+"</td><td bgcolor="+cmpl+">";
			htm =  htm+"<span width='40px'>"+leftval+"%</span></td>";
			htm =  htm+"<td  bgcolor="+cmpl+"><b><span id=_'+i+'> "+t_s+"</span></b>";
			htm =  htm+"</td></tr>";
			htm =  htm+"</table>";
			htm =  htm+"</td></tr>";
		} //with
//--------------------------------------------
	} //for
	} //if
	//resource
	htm	= htm+"</table>";
	htm	= htm+"<br />Web site TBJS: <a href='"+web+"'>Click here</a>";
	$('id4').setHTML(htm);
	$('id4_').setHTML(ToDoList.Ac.length);
}

//========================================================================
// Добавляем в левую часть информационные блоки - ресурсов и списка задач
//========================================================================
function addElement()
{
	//============================================================================
	var width_ = 250;
	var text_  = '<b>'+langfile[lang][0]+':</b><div id="id2">';
	var text_  = text_+'<span id="_r0"></span><span id="_r1"></span><span id="_r2"></span><span id="_r3"></span><span id="_r4"></span></div>';
	var text_  = text_+'<div id="id3"></div>';
	var bgColor_ = '#F5F5F5';
	var textColor_ = '0';

	var d1 = new Element('div',
	{'id'	  : 'inf_panel',
	 'position': 'absolute',
	 'z-index' : '100'});
	$(document.body).appendChild(d1);

	var t = '<table border=0 cellspacing=0 cellpadding=0 width=' +
			width_ + ' bgcolor=' + bgColor_ + '><tr>' +
			'<td><font color=' + textColor_ + '>' +
			 text_ + '</font></td></tr></table>';
	d1.setHTML(t);

	var htm = "<b>"+langfile[lang][1];
	htm = htm+":&nbsp;(<span id='id4_'></span>)<br />";
	htm = htm+"<input type=checkbox checked id='chk1' onchange='onDoIt();return false;' /> "+langfile[lang][2];
	htm = htm+"<br /><input type=checkbox checked id='chk2' onchange='onRoman();return false;' /> "+langfile[lang][4];
	//-- buildingCost
	var bld__ = 'add_bld';
	htm = htm+"<br /><a href='#' onclick='onDiv_add_bld("+bld__+");return false;'>"+langfile[lang][5]+"</a>";
	htm = htm+"<div id='add_bld'>";
	htm = htm+"<table border=1 width=100%><tr><td><table border=0><tr></td><select id='sel1' size=1>";
	for (var as=0;as<41;as++)
	{
		if(((as < 4) || (as > 4)) &  ((as < 7)|| (as > 7)) & ((as < 39) || (as > 39)) & ((as < 38) || (as > 38)) & ((as < 36) || (as > 36)) & ((as < 35) || (as > 35)) & ((as < 27) || (as > 27)))
		htm = htm+"<option value='"+as+"' />"+buildingCost[as][0];
	}
	htm = htm+"</select>";
	htm = htm+"</td></tr><tr><td>"+langfile[lang][6]+":";
	htm = htm+"<input id='sel2' type=text /></td></tr><tr><td>"+langfile[lang][7];
	htm = htm+"<input id='sel3' type=text /></td></tr><tr><td><a href='#' onclick='onAddNewBld();return false;'>"+langfile[lang][8]
	htm = htm+"</a></td></tr></table></td></td></table>";
	htm = htm+"</div>";
	//--  buildingCost
	htm = htm+"<div id='id4'></div>";
	$('id3').setHTML(htm);
	$('add_bld').setStyle('display', 'none');

	//============================================================================
	// Если страница построения зданий
	if (loc.indexOf('build') != -1)
	{
		analisBld();
	}
	$('chk1').checked = doit;
	$('chk2').checked = roman;
	autotime = window.setTimeout(TimeOutRun, 1000);
}

//========================================================================
// Добавление в список задач, для случая повыщения на 1-н уровень.
//========================================================================
function onAddNewBld()
{
	with(ToDoList)
	{
	var num1 = $('sel1').value;
	var num2 = $('sel2').value;
	var num3 = $('sel3').value;
	var l2 	= (num3 < 19 ) ? 0 : 1;
	var res1 = buildingCost[num1][num2][0];
	var res2 = buildingCost[num1][num2][1];
	var res3 = buildingCost[num1][num2][2];
	var res4 = buildingCost[num1][num2][3];
	var cn	 = Ac.length;

	var link_R_ = '';
	if (num3 <19)
		link_R_ = 'dorf1.php?a='+num3+'&c=';
	else
		link_R_ = 'dorf2.php?a='+num3+'&c=';

	Ac[cn] = Ac.length+1;
	Ar[cn] = res1+','+res2+','+res3+','+res4+',0';
	Ap[cn] = l2;
	As[cn] = 'build.php?id='+num3;
	// ПРОВЕРИТЬ!
	Al[cn] = link_R_;
	An[cn] = buildingCost[num1][0]+' '+langfile[lang][9]+' '+num2;

	SetCookie('count', Ac.length);	// Записываем сколько элементов в массиве
	var strSetC = Ac[cn]+'@'+Ar[cn]+'@'+Ap[cn]+'@'+As[cn]+'@'+Al[cn]+'@'+An[cn];
	SetCookie('Ac['+cn+']',strSetC);
	location.href = 'dorf1.php';
	}
}

//========================================================================
// Функция добовляющия в список задач текущее поле для варианта, если
// задача добовляется непостредственно из поля постройки
// Необходимо решить проблему с постройкой на чистом поле.
//========================================================================
function onAddNewBld2(el,s1)
{
	with(ToDoList)
	{
	//--
		var link_R = loc;
		link_R = link_R.split('=');
		var link_R_ = '';
		var id_1 = link_R[1]; // id в URL
		/*if (link_R.length > 1)
		{
			// Проверяем нужную подстроку в ссылке
			// "с=" должно находиться в конце массива
			for(var a=0;a<link_R.length;a++)
			{
			//--
			if(link_R[a].indexOf("c=") != -1)
			{
				// Формируем будущую ссылку
				for(var j=0;j<a;j++)
				{
					 link_R_ =  link_R_ + link_R[j] + '&';
				}
				link_R_ =  link_R_ + 'c=';
			}
			// Получаем id
			if(link_R[a].indexOf("id=") != -1)
			{
				id_1 = link_R[a].split("=");
				id_1 = parseInt(id_1[1]);
			}
			//--
			}
		}
	//--
	*/
	var num1;
	/*if(id_1 > 18)
		num1 = $('sel1_').value;
	else
	{
	        // Автоопределение текущего поля
	        // ИМЕЕТ смысл только для 6-ки
		// Дерево
		if((id_1 == 1) || (id_1 == 3) || (id_1 == 14) || (id_1 == 17))
			num1 = 0;
		// Глина
		if((id_1 == 5) || (id_1 == 6) || (id_1 == 16) || (id_1 == 18))
			num1 = 1;
		// Железо
		if((id_1 == 4) || (id_1 == 7) || (id_1 == 10) || (id_1 == 11))
			num1 = 2;
		// Фермы
		if((id_1 == 2) || (id_1 == 8) || (id_1 == 9) || (id_1 == 12) || (id_1 == 13)  || (id_1 == 15))
			num1 = 3;
	}
	*/
	num1 = $('sel1_'+s1).value;
	var num2 = $('sel2_'+s1).value;
	var num3 = id_1;
	var l2 	= (num3 < 19 ) ? 0 : 1;
	var res1 = buildingCost[num1][num2][0];
	var res2 = buildingCost[num1][num2][1];
	var res3 = buildingCost[num1][num2][2];
	var res4 = buildingCost[num1][num2][3];

	var link_R_ = '';
	if (num3 < 19)
		link_R_ = 'dorf1.php?a='+num3+'&c=';
	else
		link_R_ = 'dorf2.php?a='+num3+'&c=';
	if(el>1)
		link_R_ = 'dorf2.php?a='+num1+'&id='+num3+'&c=';
	var cn	 = Ac.length;
	Ac[cn] = Ac.length+1;
	Ap[cn] = l2;
	Ar[cn] = res1+','+res2+','+res3+','+res4+',0';
	As[cn] = 'build.php?id='+num3;
	An[cn] = buildingCost[num1][0]+' '+langfile[lang][9]+' '+num2;
	//alert('onAddNewBld2 '+Ar[cn]);
	Al[cn] = link_R_;

	SetCookie('count', Ac.length);	// Записываем сколько элементов в массиве
	var strSetC = Ac[cn]+'@'+Ar[cn]+'@'+Ap[cn]+'@'+As[cn]+'@'+Al[cn]+'@'+An[cn];
	SetCookie('Ac['+cn+']',strSetC);
	location.href = 'dorf1.php';
	}
}

//========================================================================
// Меняем и записываем значение переменной, которая блокирует выполнение
// списка задач скрипта
//========================================================================
function onDoIt()
{
	if($('chk1').checked)
	{
		SetCookie('DoIt', 1);
		doit = true;
	}
	else
	{
		SetCookie('DoIt', 0);
		doit = false;
	}
}

//========================================================================
// Показывает или скрывает элемент, позволяющий вручную добавлять задания
//========================================================================
function onDiv_add_bld(add_bld)
{
	if ($(add_bld).getStyle('display') == 'none')
		$(add_bld).setStyle('display', 'block');
	else
		$(add_bld).setStyle('display', 'none');

}

//========================================================================
// Записывает в куку значения переменной для двух построек сразу
// также меняем значение переменной
//========================================================================
function onRoman()
{
	if($('chk2').checked)
	{
		SetCookie('roman', 1);
		roman = true;
	}
	else
	{
		SetCookie('roman', 0);
		roman = false;
	}
}

//========================================================================
// Получаем массив названий ресурсов
//========================================================================
function gatherFields()
{
	var orgbar	= $('lres0');
	var resbar = orgbar.getElementsByTagName('img');
	var ret = fields[lang] = [resbar[0].title,resbar[1].title,
		   					  resbar[2].title,resbar[3].title];
	var idbar = orgbar.getElementsByTagName('td');
	if(idbar[1].id.indexOf('1')==-1) order=1;
	return ret;
}


//========================================================================
// Получаем массив количества ресурсов
//========================================================================
function getResourceInfo()
{
	var resource = new Array();
	for(var i=1;i<=4;i++)
	{
		var rtd  = $("l"+i);
		if (!rtd) return;
		resource.push( [parseInt(rtd.title),
						parseInt(rtd.textContent.match(/\-?(\d+)\//)),
						parseInt(rtd.textContent.replace(/(\d+)\//,""))] );
	}

	if (!order)
	{
		return resource;
	} else {
		return resource.reverse();
	}
}

//========================================================================
// Вычисляем урочень заполнения хранилищь для кажлого ресурса
//========================================================================
function calOverflow()
{
	var sec	= [];

	for (var i=0;i<4;i++)
	{
		if (resource[i][0] > 0)
		{
			sec[i] = [ Math.ceil(3600*(resource[i][2]-resource[i][1])/resource[i][0])];
		} else
			if (resource[i][0]<0)
			{
				sec[i] = [ Math.ceil(3600*(-resource[i][1])/resource[i][0])];
			} else
			{
				sec[i]=[ 0 ];
			}
	}
	return sec;
}

//========================================================================
// Расчет данных для пострения зданий
// Выводим данные на страницу
//========================================================================
function analisBld()
{
	var need = document.evaluate('//table[@class="f10"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
	var end = need.snapshotLength;
	if(end==0) return;

	var resourceBlock = new Array();

	for(var i=0; i<end; i++)
	{
		var current = need.snapshotItem(i);
		var tdcells	= current.getElementsByTagName('td');
		var cout=0;

		for (var k=0; k<tdcells.length; k++)
		{
			if (tdcells[k].getAttribute('class')=='s7')
				{
					cout++;
				}
		}

		if (cout == 0)
		{
			var c = current.textContent;
			if (c.indexOf(" | ")!=-1 && c.charAt(0)!="\n" )
			{
			 	resourceBlock.push( current );
			}
		}
	}
	end = resourceBlock.length;
	if (end==0) return;

	for (var i=0; i<end; i++)
	{
		var current_ = resourceBlock[i].textContent.split(".");
		var current = current_[current_.length-1].split("|");
		var currentTimeStr = Asplit(current[5],":");

		// Вычисляем время постройки здания
		var currentTime = 0;
		currentTime += parseInt(currentTimeStr[0])*3600;
		currentTime += parseInt(currentTimeStr[1])*60;
		currentTime += parseInt(currentTimeStr[2]);

		var res = resourceBlock[i];
		var resHTML = res.innerHTML;
		var stuff=[];
		var maxtime=0;
		var a_cneed = new Array();
		htm = '<b>'+langfile[lang][3]+':</b>';
		htm =  htm+"<table backgroundColor='white' cellpadding='0'  cellspacing='1'>";

		for (var j=0; j<4; j++)
		{
			htm =  htm+"<tr><td>";
			// Сколько ресурсов нужно для построения
			var cneed 		= parseInt( current[j] );
			a_cneed[j]		= cneed;
			// Сколько ресурсов в час добывается
			var cproduction = parseInt( resource[j][0] );
			// Сколько в наличии ресурсов
			var cstore 		= parseInt( resource[j][1] );
			// Сколько не хватает русурсов
			var cdiff 		= cstore-cneed;
			// Сколько времени ожидать до построения - текстовое значение
			var ctime;
			// Сколько времени ожидать до построения - в секундах
			// может принимать значение full
			var temp;
			var font="green"

			//$('id3').setHTML(ht);
			// Если добыча ресурсов в минусу (для зерна)
			if (cproduction < 0)
			{
				// Если русорса для построения хватает
				if (cdiff > 0)
				{
					temp	= parseInt(-cdiff/cproduction*3600);
					if (temp>maxtime)
						maxtime	= temp;
					ctime	= formatTimeString(temp);
				} else
				// Если русорса для построения не хватает
				if (cdiff < 0)
				{
					ctime	= fields[lang][i];
					temp = 0;
					font	= "red";
				} else
				// Если ресурсов = 0
				{
					ctime	= fields[lang][i];
					temp = 0;
					font	= "red";
				}
			} else
			if (cproduction > 0)
			{
				// Если русорса для построения хватает
				if (cdiff > 0)
				{
					ctime	= (cdiff/cneed*100).toFixed(2)+"%";
					temp	= 'full';

				} else
				// Если русорса для построения не хватает
				if (cdiff < 0)
				{
					temp	= parseInt(-cdiff/cproduction*3600);
					if (temp > maxtime)
						maxtime=temp;
					ctime	= formatTimeString(temp);
					font	= "red";
				} else
				// Если ресурсов = 0
				{
					temp = 0;
				}
			} else
			// Если ресурсов в час добывается = 0
			{
				if (cdiff > 0)
				{
					temp = 0;
				} else
				if (cdiff < 0)
				{
					ctime	= fields[lang][i];
					font	= "red";
					temp = 0;
				} else
				// если нет ресурсов - полный вафликс
				{
					temp = 0;
				}
			}
			var leftval	= parseInt(100*cstore/cneed);
			var t_s 	= ctime;
			if(leftval > 100)
			{
				leftval = 100;
				t_s		= 'ready';
			}
			var tol= (leftval<50) ? 150 : 255;
			var sec=155-leftval;
			var h = '16px';

		var tbl_w = "150px";// Ширина всей таблицы
		var td_w = "200"; // ширина полсы прогресса
		var td1 = leftval;
		var td2 = (100-leftval);
		var bgColor = '#F5F5F5';
		htm =  htm+"<table width='"+tbl_w+"' height='"+h+"' bgcolor='"+bgColor+"' cellpadding='0'  cellspacing='1'>";
		htm =  htm+"<tr><td><img src='img/un/r/"+(j+1)+".gif' title='"+fields[lang][i]+"' lat='"+fields[lang][i]+"' /></td>";
		htm =  htm+"<td width='"+td1+"%' bgColor='"+rgb2HEX(sec, sec, parseInt(tol*(leftval/100)))+"'></td>";
	 	htm =  htm+"<td width='"+td2+"%'></td><td width='40px'>";
	 	htm =  htm+"</td></tr></table></td><td>";
	 	htm =  htm+"<table width='"+tbl_w+"' height='"+h+"' backgroundColor='white' cellpadding='0'  cellspacing='1'>";
	 	htm =  htm+"<tr><td>";
		htm =  htm+"<span width='40px'>"+leftval+"%</span></td>";
		htm =  htm+"<td><b> "+t_s+"</b></td></td></tr></table></td></tr>";
		}
		var l1 = l2 = '';
		if(end<=1)
			l1 = "<a href='#' id='al1' onclick='addBld("+a_cneed[0]+","+a_cneed[1]+","+a_cneed[2]+","+a_cneed[3]+","+currentTime+");return false;'>"+langfile[lang][8]+"</a>";
		//-- buildingCost
		l2 = '';
		var bld__ = 'add_bld2'+i;
		l2 = l2+"<a href='#' onclick='onDiv_add_bld("+bld__+");return false;'>"+langfile[lang][5]+"</a>";
		l2 = l2+"<div id='add_bld2"+i+"' style='display:none;'>";
		l2 = l2+"<table border=1 width=100%><tr><td><table border=0><tr></td><select id='sel1_"+i+"' size=1>";
		for (var as=0;as<41;as++)
		{
			if(((as < 4) || (as > 4)) &  ((as < 7)|| (as > 7)) & ((as < 39) || (as > 39)) & ((as < 38) || (as > 38)) & ((as < 36) || (as > 36)) & ((as < 35) || (as > 35)) & ((as < 27) || (as > 27)))
			l2 = l2+"<option value='"+as+"' />"+buildingCost[as][0];
		}
		l2 = l2+"</select>";
		l2 = l2+"</td></tr><tr><td>"+langfile[lang][6]+":";
		l2 = l2+"<input id='sel2_"+i+"' type=text /></td></tr>";
		//l2 = l2+"<tr><td>"+langfile[lang][7]+"<input id='sel3_' type='hide' /></td></tr>";
		l2 = l2+"<tr><td><a href='#' onclick='onAddNewBld2("+end+","+i+");return false;'>"+langfile[lang][8]
		l2 = l2+"</a></td></tr></table></td></td></table>";
		l2 = l2+"</div>";
		//--  buildingCost

		htm =  htm+"<tr><td>"+l1+"</td><td>"+l2+"</td></tr>";
		htm =  htm+"</table>";
// Выводим данные о заполненнии склада =================================
//======================================================================
		$(res).setHTML(resHTML+htm);
		//$('add_bld2').setStyle('display', 'none');
//======================================================================
	}
}

//========================================================================
// Функцмя переодического выполнения списка задач
//========================================================================
function TimeOutRun()
{//zxc
	if (to_do_run)
	{
		RunTask(to_do);
		exit();
	}

	var go = true;
	// Получаем информациою о ресурсах ===================================
	resource = getResourceInfo();

	for (var i=0; i<4; i++)
	{
		if (overflow[i][0] > 0)
		{
			overflow[i][0]--;
			var leftval	= parseInt(resource[i][1]/resource[i][2] *100);
			var t_s 	= formatTimeString(overflow[i][0]);
			// Выводим данные о заполненнии склада ==============================
			drawEl(i,'_r', leftval, t_s);
		} else
		{
			// Выводим данные о заполненнии склада ==============================
			// случай полного заполнения
			var t_s 	= formatTimeString(overflow[i][0]);
			drawEl(i,'_r',100, t_s);
		}
	}

	DrawToDoList();

	if (!to_do_run)
		ONdoList();

	// Если выбран центр деревни
	if (loc.indexOf('dorf2') != -1)
	{
	}

	if(go)
	{
		autotime = window.setTimeout(TimeOutRun, 1000);
	}
	else
	{
		// Удаляем функцию таймаута
		//clearTimeout(autotime);
	}

	// Перезагружаем текущую страницу каждые 15 минут, для того, чтобы
	// неотлогиниться от сервера, пока  ожадием выполнения задания
	tm_1 = $('tp1').innerText;
	tm_1 = tm_1.split(':');
	if(((parseInt(tm_1[1]) == 30) || (parseInt(tm_1[1]) == 0) || (parseInt(tm_1[1]) == 15) || (parseInt(tm_1[1]) == 45)) & (parseInt(tm_1[2]) == 0))
		location.reload(true);
}
//========================================================================
// Выводит на страницу индикатор текущего заполнения хранилища
//========================================================================
function drawEl(i, el, leftval,ts)
{
	var tol= (leftval<50) ? 150 : 255;
	var sec=155-leftval;
	var h = '16px';
	var htm = "<table width='250px' height='"+h+"' backgroundColor='white' cellpadding='1'  cellspacing='0'>";
	var htm =  htm+"<tr><td><img src='img/un/r/"+(i+1)+".gif' title='"+fields[lang][i]+"' lat='"+fields[lang][i]+"' /></td><td width='"+leftval+"%' bgColor='"+rgb2HEX(sec, sec, parseInt(tol*(leftval/100)))+"'></td>";
	var htm =  htm+"<td width='"+(100-leftval)+"%'></td><td width='40px'>";
	var htm =  htm+"<span width='40px'>"+leftval+"%</span></td>";
	var htm =  htm+"<td><b> "+ts+"</b></td></td></tr></table>";

	$(el+i).setHTML(htm);
}

//==================================================================================
// Служебные функции
//==================================================================================

//========================================================================
// RGB -> HEX
//========================================================================
function rgb2HEX(red, green, blue)
{
    var decColor = red + (256 * green) + (65536 * blue);//offset each value and create a new int

	decColor=decColor.toString(16);//convert to a base16 string

	while( decColor.length < 6){//append 0 till it is a 6 length string
		decColor="0"+decColor;
	}

    return "#"+decColor;
}

//========================================================================
// Получаем текущее время страницы
//========================================================================
function getTime()
{
	var servertime	= returnObjById("tp1").textContent;

	if (!servertime)
	{
		var Digital	= new Date();
		pagetime	= [Digital.getHours(),Digital.getMinutes(),Digital.getSeconds()];
		return;
	}

	pagetime	= timeField(servertime);
	servertime	= pagetime;

	if (servertime == -1)
	{
		var Digital	= new Date();
		pagetime	= [Digital.getHours(),Digital.getMinutes(),Digital.getSeconds()];
	}
}

//========================================================================
// Конвертация в секунды
//========================================================================
function timeField(time)
{
   var limit = time.split(":");
   return (limit.length == 3) ? ([parseInt(limit[0]) , parseInt(limit[1]) ,
   								parseInt(limit[2])]) : -1;
}

//========================================================================
// Возвращаем время в формате hh:mm:ss, задаваемое в секундах
//========================================================================
function formatTimeString(maxtime)
{
     var helper=formatTime(maxtime, 0, 0, 0, 0);
     if(helper[1] < 10){helper[1] = "0"+helper[1];}
     if(helper[2] < 10){helper[2] = "0"+helper[2];}
     return helper[0]+':'+helper[1]+':'+helper[2];
}

//========================================================================
// Конфертируем время
//========================================================================
function formatTime(maxtime, hours, minutes, seconds, off)
{
     return [Math.floor(maxtime/3600)+hours+off,(Math.floor(maxtime/60)%60)+minutes,(maxtime % 60)+seconds];
}

//================================================================
// Данные для будущих построек зданий
//================================================================
	// Лесопильный завод
	var lenyadorCost = [
		'&#1051;&#1077;&#1089;&#1086;&#1087;&#1080;&#1083;&#1100;&#1085;&#1099;&#1081; &#1079;&#1072;&#1074;&#1086;&#1076;',
		[40, 100, 50, 60],
		[65, 165, 85, 100],
		[110, 280, 140, 165],
		[185, 465, 235, 280],
		[310, 780, 390, 465],
		[520, 1300, 650, 780],
		[870, 2170, 1085, 1300],
		[1450, 3625, 1810, 2175],
		[2420, 6050, 3025, 3630],
		[4040, 10105, 5050, 6060],	// Nivel 10
		[6750, 16870, 8435, 10125],
		[11270, 28175, 14090, 16905],
		[18820, 47055, 23525, 28230],
		[31430, 78580, 39290, 47150],
		[52490, 131230, 65615, 78740], // Nivel 15
		[87660, 219155, 109575, 131490],
		[146395, 365985, 182995, 219590],
		[244480, 611195, 305600, 366715],
		[408280, 1020695, 510350, 612420],
	];

	// Глиняный карьер
	var barroCost = [
		'&#1043;&#1083;&#1080;&#1085;&#1103;&#1085;&#1099;&#1081; &#1082;&#1072;&#1088;&#1100;&#1077;&#1088;',
		[80, 40, 80, 50],
		[135, 65, 135, 85],
		[225, 110, 225, 140],
		[375, 185, 375, 235],
		[620, 310, 620, 390],
		[1040, 520, 1040, 650],
		[1735, 870, 1735, 1085],
		[2900, 1450, 2900, 1810],
		[4840, 2420, 4840, 3025],
		[8080, 4040, 8080, 5050],	// Nivel 10
		[13500, 6750, 13500 ,8435],
		[22540, 11270, 22540, 14090],
		[37645, 18820, 37645, 23525],
		[62865, 31430, 62865, 39290],
		[104985, 52490, 104985, 65615], // Nivel 15
		[175320, 87660, 175320, 109575],
		[292790, 146395, 292790, 182995],
		[488955, 244480, 488955, 305600],
		[846555, 408280, 816555, 510350],
	];

	// Железный рудник
	var hierroCost = [
		'&#1046;&#1077;&#1083;&#1077;&#1079;&#1085;&#1099;&#1081; &#1088;&#1091;&#1076;&#1085;&#1080;&#1082;',
		[100, 80, 30, 60],
		[165, 135, 50, 100],
		[280, 225, 85, 165],
		[465, 375, 140, 280],
		[780, 620, 235, 465],
		[1300, 1040, 390, 780],
		[2170, 1735, 650, 1300],
		[3625, 2900, 1085, 2175],
		[6050, 4840, 1815, 3630],
		[10105, 8080, 3030, 6060],	// Nivel 10
		[16870, 13500, 5060, 10125],
		[28175, 22540, 8455, 16905],
		[47055, 37645, 14115, 28230],
		[78580, 62865, 23575, 47150],
		[131230, 104985, 39370, 78740], // Nivel 15
		[219155, 175320, 65745, 131490],
		[365985, 292790, 109795, 219590],
		[611195, 488955, 183360, 366715],
		[1020695, 846555, 306210, 612420],
	];

	// Фермы
	var cerealCost = [
		'&#1060;&#1077;&#1088;&#1084;&#1072;',
		[70, 90, 70, 20],
		[115, 150, 115, 35],
		[195, 250, 195, 55],
		[325, 420, 325, 95],
		[545, 700, 545, 155],
		[910, 1170, 910, 260],
		[1520, 1950, 1520, 435],
		[2535, 3260, 2535, 725],
		[4235, 5445, 4235, 1210],
		[7070, 9095, 7070, 2020],	// Nivel 10
		[11810, 15185, 11810, 3375],
		[19725, 25360, 19725, 5635],
		[32940, 42350, 32940, 9410],
		[55005, 70720, 55005, 15715],
		[91860, 118105, 91860, 26245],	// Nivel 15
		[153405, 197240, 153405, 43830],
		[256190, 329385, 256190, 73195],
		[427835, 550075, 427835, 122240],
		[714485, 918625, 714485, 204140],
	];

	// Склад
	var warehouseCost = [
		'&#1057;&#1082;&#1083;&#1072;&#1076;&nbsp;&#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;&nbsp;',
		[130,160,90,40],
		[165,205,115,50],
		[215,260,145,65],
		[275,335,190,85],
		[350,430,240,105],
		[445,550,310,135],
		[570,705,395,175],
		[730,900,505,225],
		[935,1115,650,290],
		[1200,1475,830,370],
		[1535,1890,1065,470],
		[1965,2420,1360,605],
		[2515,3095,1740,775],
		[3220,3960,2230,990],
		[4120,5070,2850,1270],
		[5275,6490,3650,1625],
		[6750,8310,4675,2075],
		[8640,10635,5980,2660],
		[11060,13610,7655,3405],
		[14155,17420,9800,4355]
	];

	// Академия
	var academyCost = [
		'&#1040;&#1082;&#1072;&#1076;&#1077;&#1084;&#1080;&#1103; &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;&nbsp;', 			// Level 0
		[220, 160, 90, 40],
		[280, 205, 115, 50],
		[360, 260, 145, 65],
		[460, 335, 190, 85],
		[590, 430, 240, 105], 		// Level 5
		[755, 550, 310, 135],
		[970, 705, 395, 175],
		[1240, 900, 505, 225],
		[1585, 1155, 650, 290],
		[2030, 1475, 830, 370], 	// Level 10
		[2595, 1890, 1065, 470],
		[3325, 2420, 1360, 605],
		[4255, 3095, 1740, 775],
		[5445, 3960, 2230, 990],
		[6970, 5070, 2850, 1270], 	// Level 15
		[8925, 6490, 3650, 1625],
		[11425, 8310, 4275, 2075],
		[14620, 10635, 5980, 2660],
		[18715, 13610, 7655, 3405],
		[23955, 17420, 9800, 4355] 	// Level 20
	];

	//   Мукомольная мельница
	var flourMillCost = [
		'&#1052;&#1091;&#1082;&#1086;&#1084;&#1086;&#1083;&#1100;&#1085;&#1072;&#1103; &#1084;&#1077;&#1083;&#1100;&#1085;&#1080;&#1094;&#1072;', 			// Level 0
		[500, 440, 380, 1240],
		[900, 790, 685, 2230],
		[1620, 1425, 1230, 4020],
		[2915, 2565, 2215, 7230],
		[5250, 4620, 3990, 13015], 	// Level 5
	];

	// Кирпичный завод
	var brickyardCost = [
		'&#1050;&#1080;&#1088;&#1087;&#1080;&#1095;&#1085;&#1099;&#1081; &#1079;&#1072;&#1074;&#1086;&#1076;&nbsp;', 			// Level 0
		[440, 480, 320, 50],
		[790, 865, 575, 90],
		[1425, 1555, 1035, 160],
		[2565, 2800, 1865, 290],
		[4620, 5040, 3360, 525], 	// Level 5
	];

	// Деревообрабатывающий завод
	var sawmillCost = [
		'&#1044;&#1077;&#1088;&#1077;&#1074;&#1086;&#1086;&#1073;&#1088;&#1072;&#1073;&#1072;&#1090;&#1099;&#1074;&#1072;&#1102;&#1097;&#1080;&#1081; &#1079;&#1072;&#1074;&#1086;&#1076;&nbsp;', 			// Level 0
		[520, 380, 290, 90],
		[935, 685, 520, 160],
		[1685, 1230, 940, 290],
		[3035, 2215, 1690, 525],
		[5460, 3990, 3045, 945], 	// Level 5
	];

	// Чугунолитейный завод
	var ironFoundryCost = [
		[0, 0, 0, 0], 			// Level 0
		[200, 450, 510, 120],
		[360, 810, 920, 215],
		[650, 1460, 1650, 390],
		[1165, 2625, 2975, 700],
		[2100, 4725, 5355, 1260], 	// Level 5
	];

	// Пекарня
	var bakeryCost = [
		'&#1055;&#1077;&#1082;&#1072;&#1088;&#1085;&#1103;', 			// Level 0
		[1200, 1480, 870, 1600],
		[2160, 2665, 1565, 2880],
		[3890, 4795, 2820, 5185],
		[7000, 8630, 5075, 9330],
		[12595, 15535, 9135, 16795], 	// Level 5
	];

	// Рынок
	var marketplaceCost = [
		'&#1056;&#1099;&#1085;&#1086;&#1082;', 			// Level 0
		[80, 70, 120, 70],
		[100, 90, 155, 90],
		[130, 115, 195, 115],
		[170, 145, 250, 145],
		[215, 190, 320, 190], 		// Level 5
		[275, 240, 410, 240],
		[350, 310, 530, 310],
		[450, 395, 675, 395],
		[575, 505, 865, 505],
		[740, 645, 1105, 645], 		// Level 10
		[945, 825, 1415, 825],
		[1210, 1060, 1815, 1060],
		[1545, 1355, 2320, 1355],
		[1980, 1735, 2970, 1735],
		[2535, 2220, 3805, 2220], 	// Level 15
		[3245, 2840, 4870, 2840],
		[4155, 3635, 6230, 3635],
		[5315, 4650, 7975, 4650],
		[6805, 5955, 10210, 5955],
		[8710, 7620, 13065, 7620], 	// Level 20
	];

	// Амбар
	var granaryCost = [
		'&#1040;&#1084;&#1073;&#1072;&#1088;',
		[80,100,70,20],
		[100,130,90,25],
		[130,165,115,35],
		[170,210,145,40],
		[215,270,190,55],
		[275,345,240,70],
		[350,440,310,90],
		[450,565,395,115],
		[575,720,505,145],
		[740,920,645,185],
		[945,1180,825,235],
		[1210,1510,1060,300],
		[1545,1935,1355,385],
		[1980,2475,1735,495],
		[2535,3170,2220,635],
		[3245,4055,2840,810],
		[4155,5190,3635,1040],
		[5315,6645,4650,1330],
		[6805,8505,5955,1700],
		[8710,10890,7620,2180]
	];

	// Кузница оружия
	var blacksmithCost = [
		'&#1050;&#1091;&#1079;&#1085;&#1080;&#1094;&#1072; &#1086;&#1088;&#1091;&#1078;&#1080;&#1103;',
		[170,200,380,130],
		[220,225,485,165],
		[280,330,625,215],
		[355,420,795,275],
		[455,535,1020,350],
		[585,685,1305,445],
		[750,880,1670,570],
		[955,1125,2140,730],
		[1225,1440,2740,935],
		[1570,1845,3505,1200],
		[2005,2360,4485,1535],
		[2570,3020,5740,1965],
		[3290,3870,7350,2515],
		[4210,4950,9410,3220],
		[5390,6340,12045,4120],
		[6895,8115,15415,5275],
		[8825,10385,19730,6750],
		[11300,13290,25255,8640],
		[14460,17015,32325,11060],
		[18510,21780,41380,14155]
	];

	// Кузница доспехов
	var armouryCost = [
		'&#1050;&#1091;&#1079;&#1085;&#1080;&#1094;&#1072; &#1076;&#1086;&#1089;&#1087;&#1077;&#1093;&#1086;&#1074;',
		[130,210,410,130],
		[165,270,525,165],
		[215,345,670,215],
		[275,440,860,275],
		[350,565,1100,350],
		[445,720,1410,445],
		[570,925,1805,570],
		[730,1180,2310,730],
		[935,1515,2955,935],
		[1200,1935,3780,1200],
		[1535,2480,4840,1535],
		[1965,3175,6195,1965],
		[2515,4060,7930,2515],
		[3220,5200,10150,3220],
		[4120,6655,12995,4120],
		[5275,8520,16630,5275],
		[6750,10905,21290,6750],
		[8640,13955,27250,8640],
		[11060,17865,34880,11060],
		[14155,22865,44645,14155]
	];

	// Главное здание
	var mainBuildingCost = [
		'&#1043;&#1083;&#1072;&#1074;&#1085;&#1086;&#1077; &#1079;&#1076;&#1072;&#1085;&#1080;&#1077;',
		[70,40,60,20],
		[90,50,75,25],
		[115,65,100,35],
		[145,85,125,40],
		[190,105,160,55],
		[240,135,205,70],
		[310,175,265,90],
		[395,225,340,115],
		[505,290,430,145],
		[645,370,555,185],	// 10
		[825,470,710,235],
		[1060,605,905,300],
		[1355,775,1160,385],
		[1735,990,1485,495],
		[2220,1270,1900,635],  // 15
		[2840,1625,2435,810],
		[3635,2075,3115,1040],
		[4650,2660,3990,1330],
		[5955,3405,5105,1700],
		[7620,4355,6535,2180]
	];

	// Пункт сбора
	var rallyPointCost = [
		'&#1055;&#1091;&#1085;&#1082;&#1090; &#1089;&#1073;&#1086;&#1088;&#1072;',
		[110,60,80,60],
		[140,205,115,90],
		[180,260,145,115],
		[230,355,190,145],
		[295,160,215,160],
		[380,550,310,240],
		[485,705,395,310],
		[620,900,505,395],
		[795,430,575,430],
		[1015,1475,830,645], 	// Nivel 10
		[1300,1890,1065,825],
		[1660,2420,1360,1060],
		[2130,3095,1740,1355],
		[2725,3960,2230,1735],
		[3465,5075,2845,2230],
		[4460,6490,3650,2840],
		[5680,8315,4665,3650],
		[7310,10635,5980,4650],
		[9360,13610,7655,5955],
		[11980,17420,9800,7620]
	];

	// Посольство
	var embassyCost = [
		'&#1055;&#1086;&#1089;&#1086;&#1083;&#1100;&#1089;&#1090;&#1074;&#1086;',
		[180,130,150,80],
		[230,165,190,100],
		[295,215,245,130],
		[375,275,315,170],
		[485,350,405,215],
		[620,445,515,275],
		[790,570,660,350],
		[1015,730,845,450],
		[1295,935,1080,575],
		[1660,1200,1385,740],
		[2125,1535,1770,945],
		[2720,1965,2265,1210],
		[3480,2515,2900,1545],
		[4455,3220,3715,1980],
		[5705,4120,4755,2535],
		[7300,5275,6085,3245],
		[9345,6750,7790,4155],
		[11965,8640,9970,5315],
		[15315,11060,12760,6805],
		[19600,14155,16335,8710]
	];

	// Казарма
	var barracksCost = [
		'&#1050;&#1072;&#1079;&#1072;&#1088;&#1084;&#1072;',
		[210,140,260,120],
		[270,180,335,155],
		[345,230,425,195],
		[440,295,545,250],
		[565,375,700,320],
		[720,480,895,410],
		[925,615,1145,530],
		[1180,790,1465,675],
		[1515,1010,1875,865],
		[1935,1290,2400,1105],
		[2480,1655,3070,1415],
		[3175,2115,3930,1815],
		[4060,2710,5030,2320],
		[5200,3465,6435,2970],
		[6655,4435,8240,3805],
		[8520,5680,10545,4870],
		[10905,7270,13500,6230],
		[13955,9305,17280,7975],
		[17865,11910,22120,10210],
		[22865,15245,28310,13065]
	];

	// Конюшня
	var stableCost = [
		'&#1050;&#1086;&#1085;&#1102;&#1096;&#1085;&#1103;',
		[260,140,220,100],
		[335,180,280,130],
		[425,230,360,165],
		[545,295,460,210],
		[700,375,590,270],
		[895,480,755,345],
		[1145,615,970,440],
		[1465,790,1240,565],
		[1875,1010,1585,720],
		[2400,1290,2030,920],
		[3070,1655,2595,1180],
		[3930,2115,3325,1510],
		[5030,2710,4255,1935],
		[6435,3465,5445,2475],
		[8240,4435,6970,3170],
		[10545,5680,8925,4055],
		[13500,7270,11425,5190],
		[17280,9305,14620,6645],
		[22120,11910,18715,8505],
		[28310,15245,23955,10890]
	];

	// Мастерская
	var workshopCost = [
		'&#1052;&#1072;&#1089;&#1090;&#1077;&#1088;&#1089;&#1082;&#1072;&#1103;',
		[460,510,600,320],
		[590,655,770,410],
		[755,835,985,525],
		[965,1070,1260,670],
		[1235,1370,1610,860],
		[1580,1750,2060,1100],
		[2025,2245,2640,1405],
		[2590,2870,3380,1800],
		[3315,3675,4325,2305],
		[4245,4705,5535,2950],
		[5430,6020,7085,3780],
		[6950,7705,9065,4835],
		[8900,9865,11605,6190],
		[11390,12625,14855,7925],
		[14580,16165,19015,10140],
		[18660,20690,24340,12980],
		[23885,26480,31155,16615],
		[30570,33895,39787,21270],
		[39130,43385,51040,27225],
		[50090,55535,65335,34845]
	];

	// Тайник
	var crannyCost = [
		'&#1058;&#1072;&#1081;&#1085;&#1080;&#1082;',
		[40,50,30,10],
		[50,65,40,15],
		[65,80,50,15],
		[85,105,65,20],
		[135,160,105,55],
		[170,205,135,70],
		[220,265,175,90],
		[280,340,225,115],
		[360,430,290,145],
		[370,460,275,90]
	];

	// Ратуша
	var ayuntamientoCost = [
		'&#1056;&#1072;&#1090;&#1091;&#1096;&#1072;',
		[1250,1110,1260,600],
		[1600,1420,1615,770],
		[2050,1820,2065,985],
		[2620,2330,2640,1260],
		[3355,2980,3380,1610],
		[4295,3815,4330,2060],
		[5500,4880,5540,2640],
		[7035,6250,7095,3380],
		[9005,8000,9080,4325],
		[11530,10240,11620,5535],
		[14755,13105,14875,7085],
		[18890,16775,19040,9065],
		[24180,21470,27370,11605],
		[30950,27480,31195,14885],
		[39615,35175,39930,19015],
		[40705,45025,51110,24340],
		[64905,57635,65425,31155],
		[83075,73770,83740,39875],
		[106340,94430,107190,51040],
		[136115,120870,137200,65335]
	];

	// Резиденция
	var residenceCost = [
		'&#1056;&#1077;&#1079;&#1080;&#1076;&#1077;&#1085;&#1094;&#1080;&#1103;',
		[580,460,350,180],
		[740,590,450,230],
		[950,755,575,295],
		[1215,965,735,375],
		[1555,1235,940,485],
		[1995,1580,1205,620],
		[2550,2025,1540,790],
		[3265,2590,1970,1015],
		[4180,3315,2520,1295],
		[5350,4245,3230,1660],
		[6845,5430,4130,2125],
		[8765,6950,5290,2720],
		[11220,8900,6770,3480],
		[14360,11390,8665,4455],
		[18380,14580,11090,5705],
		[23530,18660,14200,7300],
		[30115,23885,18175,9345],
		[38550,30570,23260,11965],
		[49340,39130,29775,15315],
		[63155,50090,38110,19600]
	];

	// Дворец
	var palaceCost = [
		'&#1044;&#1074;&#1086;&#1088;&#1077;&#1094;',
		[550,800,750,250],
		[705,1025,960,320],
		[900,1310,1230,410],
		[1155,1680,1575,525],
		[1475,2145,2015,670],
		[1890,2750,2575,860],
		[2420,3520,3300,1100],
		[3095,4505,4220,1405],
		[3965,5765,5405,1800],
		[5075,7380,6920,2305],
		[6495,9445,8855,2950],
		[8310,12090,11335,3780],
		[10640,15478,14505,4835],
		[13150,19805,18570,6190],
		[17430,25355,23770,7925],
		[22310,32450,30425,10140],
		[28560,41540,38940,12980],
		[36555,53170,49845,16615],
		[46790,68055,63805,21270],
		[59890,87110,81670,27225]
	];

	// Арена
	var tournamentSquareCost = [
		'&#1040;&#1088;&#1077;&#1085;&#1072;',
		[1750,2250,1530,240],
		[2240,2880,1960,305],
		[2865,3685,2505,395],
		[3670,4720,3210,505],
		[4700,6040,4105,645],
		[6015,7730,5255,825],
		[7695,9895,6730,1055],
		[9850,12665,8615,1350],
		[12610,16215,11025,1730],
		[16140,20755,14110,2215],
		[20660,26565,18065,2835],
		[26445,34000,23120,3625],
		[33850,43520,29595,4640],
		[43330,55705,37880,5940],
		[55460,71305,48490,7605],
		[70990,91270,62065,9735],
		[90865,117000,79440,12460],
		[116000,150000,102000,15950],
		[149000,191000,130000,20415],
		[191000,245000,167000,26135]
	];

	// Tesoro
	var tesoroCost = [
		[0, 0, 0, 0],
		[2890,2740,2580,990],
		[3685,3505,3300,1265],
		[4720,4490,4225,1620],
		[6040,5745,5410,2075],
		[7730,7355,6925,2660],
		[9595,9415,8865,3400],
		[12665,12050,11345,4355],
		[16215,15425,14525,5575],
		[20755,19745,18590,7135],
		[26565,25270,23795,9130]
	];

	// Торговая палата
	var oficinaComercioCost = [
		'&#1058;&#1086;&#1088;&#1075;&#1086;&#1074;&#1072;&#1103; &#1087;&#1072;&#1083;&#1072;&#1090;&#1072;',
		[1400,1330,1200,400],
		[1790,1700,1535,510],
		[2295,2180,1965,655],
		[2935,2790,2515,840],
		[3760,3570,3220,1075],
		[4810,4570,4125,1375],
		[6155,5850,5280,1760],
		[7780,7485,6755,2250],
		[10090,9585,8645,2880],
		[12915,12265,11070,6390],
		[16530,15700,14165,4720],
		[21155,20100,18135,6045],
		[27080,25725,23210,9905],
		[34660,32930,29710,9905],
		[44370,42150,38030,12675],
		[56790,53950,48680,16225],
		[72690,69060,62310,20770],
		[93045,88395,79755,26585],
		[119100,113145,102085,34030],
		[152445,144825,130670,43555]
	];

	// Большая казарм
	var greatBarrackCost = [
		'&#1041;&#1086;&#1083;&#1100;&#1096;&#1072;&#1103; &#1082;&#1072;&#1079;&#1072;&#1088;&#1084;',
		[630,420,780,360],		// Level 1
		[805,540,1000,460],
		[1030,690,1280,590],
		[1320,880,1635,755],
		[1690,1125,2095,965],		// Level 5
		[2165,1445,2680,1235],
		[2770,1845,3430,1585],
		[3545,2365,4390,2025],
		[4540,3025,5620,2595],
		[5810,3875,7195,3320],		// Level 10
		[7440,4960,9210,4250],
		[9520,6345,11785,5440],
        [12185,8125,15085,6965],
		[15600,10400,19310,8915],
		[19965,13310,24270,11410],	// Level 15
        [25555,17035,31640,14605],
		[32710,21810,40500,18690],
		[41870,27915,51840,23925],
		[53595,35730,66355,30625],
		[68600,45735,84935,39200]	// Level 20
	];

	// Большая конюшня
	var greatStableCost = [
		'&#1041;&#1086;&#1083;&#1100;&#1096;&#1072;&#1103; &#1082;&#1086;&#1085;&#1102;&#1096;&#1085;&#1103;',
		[780,420,660,300],
		[1000,540,845,385],
		[1280,690,1080,490],
		[1635,880,1385,630],
		[2095,1125,1770,805],
		[2680,1445,2270,1030],
		[3430,1845,2905,1320],
		[4390,2365,3715,1690],
		[5620,3025,4755,2160],
		[7195,3875,6085,2765],
		[9210,4960,7790,3540],
		[11785,6345,9975,4535],
		[15085,8125,12765,5805],
		[19310,10400,16340,7430],
		[24720,13310,20915,9505],	// Level 15
		[31640,17035,26775,12170],
		[40500,21810,34270,15575],
		[51840,27915,43865,19940],
		[66355,35730,56145,25520],
		[84935,45735,71870,32665]
	];

	// Городская стена
	var wallRomansCost = [
		'&#1043;&#1086;&#1088;&#1086;&#1076;&#1089;&#1082;&#1072;&#1103; &#1089;&#1090;&#1077;&#1085;&#1072;',
		[70, 90, 170, 70],
		[90, 115, 220, 90],
		[115, 145, 280, 115],
		[145, 190, 355, 145],
		[190, 240, 455, 190],
		[240, 310, 585, 240],
		[310, 395, 750, 310],
		[395, 505, 955, 395],
		[505, 650, 1225, 505],
		[645, 830, 1570, 645],
		[825, 1065, 2005, 825],
		[1060, 1360, 2570, 1060],
		[1355, 1740, 3290, 1355],
		[1735, 2230, 4210, 1735],
		[2220, 2850, 5390, 2220],
		[2840, 3650, 6895, 2840],
		[3635, 4675, 8825, 3635],
		[4650, 5980, 11300, 4650],
		[5955, 7655, 14160, 5955],
		[7620, 9800, 18510, 7620]
	];

	// Изгородь
	var wallGaulsCost = [
		'&#1048;&#1079;&#1075;&#1086;&#1088;&#1086;&#1076;&#1100;',
		[160, 100, 80, 60],
		[205, 130, 100, 75],
		[260, 165, 130, 100],
		[335, 210, 170, 125],
		[430, 270, 215, 160],
		[550, 345, 275, 205],
		[705, 440, 350, 265],
		[900, 565, 450, 340],
		[1155, 720, 575, 430],
		[1475, 920, 740, 555],
		[1890, 1180, 945, 710],
		[2420, 1510, 1210, 905],
		[3095, 1935, 1545, 1160],
		[3960, 2475, 1980, 1485],
		[5070, 3170, 2535, 1900],
		[6490, 4055, 3245, 2435],
		[8310, 5190, 4155, 3115],
		[10635, 6645, 5315, 3990],
		[13610, 8505, 6805, 5105],
		[17420, 10890, 8710, 6535]
	];

	// Земляной вал
	var wallTeutonsCost = [
		'&#1047;&#1077;&#1084;&#1083;&#1103;&#1085;&#1086;&#1081; &#1074;&#1072;&#1083;',
		[120, 200, 0, 80],
		[155, 255, 0, 100],
		[195, 330, 0, 130],
		[250, 420, 0, 170],
		[320, 535, 0, 215],
		[410, 685, 0, 275],
		[530, 880, 0, 350],
		[675, 1125, 0, 450],
		[865, 1440, 0, 575],
		[1105, 1845, 0, 740],
		[1415, 2360, 0, 945],
		[1815, 3020, 0, 1210],
		[2320, 3870, 0, 1545],
		[2970, 4950, 0, 1980],
		[3805, 6340, 0, 2535],
		[4870, 8115, 0, 3245],
		[6230, 10385, 0, 4155],
		[7975, 13290, 0, 5315],
		[10210, 17015, 0, 6805],
		[13065, 21780, 0, 8710]
	];

	var cerveceriaCost = [
		[0, 0, 0, 0],
		[1200, 1400, 1050, 2200],
		[1535, 1790, 1345, 2815],
		[1965, 2295, 1720, 3605],
		[2515, 2935, 2200, 4615],
		[3220, 3760, 2820, 5905],
		[4125, 4810, 3610, 7560],
		[5280, 6155, 4620, 9675],
		[6755, 7880, 5910, 12385],
		[8645, 10090, 7565, 15855],
		[11070, 12915, 9685, 20290],
		[14165, 16530, 12395, 25975],
		[18135, 21155, 15865, 33245],
		[23210, 27080, 20310, 42555],
		[29710, 34660, 25995, 54470],
		[38030, 44370, 33275, 69720],
		[48680, 56790, 42595, 89245],
		[62310, 72690, 54520, 114230],
		[79755, 93045, 69785, 146215],
		[102085, 119100, 89325, 187155],
		[130670, 152445, 114335, 239560],
	];

	// Таверна
	var casaHeroeCost = [
		'&#1058;&#1072;&#1074;&#1077;&#1088;&#1085;&#1072;',
		[700, 670, 700, 240],
		[930, 890, 930, 320],
		[1240, 1185, 1240, 425],
		[1645, 1575, 1645, 565],
		[2190, 2095, 2190, 750],
		[2915, 2790, 2915, 1000],
		[3875, 3710, 3875, 1330],
		[5155, 4930, 5155, 1765],
		[6855, 6560, 6855, 2350],
		[9115, 8725, 9115, 3125],	// Nivel 10
		[12125, 11605, 12125, 4155],
		[16125, 15435, 16125, 5530],
		[21445, 20525, 21445, 7350],
		[28520, 27300, 28520, 9780],
		[37935, 36310, 37935, 13005],
		[50450, 48290, 50450, 17300],
		[67100, 64225, 67100, 23005],
		[89245, 85420, 89245, 30600],
		[118695, 113605, 118695, 40695],
		[157865, 151095, 157865, 54125]
	];

	var trampaCost = [
		[0, 0, 0, 0],
		[100, 100, 100, 100],
		[130, 130, 130,	130],
		[165, 165, 165,	165],
		[210, 210, 210, 210],
		[270, 270, 270,	270],
		[345, 345, 345, 345],
		[440, 440, 440,	440],
		[565, 565, 565, 565],
		[720, 720, 720, 720],
		[920, 920, 920, 920],	// Nivel 10
		[1180, 1180, 1180, 1180],
		[1510, 1510, 1510, 1510],
		[1935, 1935, 1935, 1935],
		[2475, 2475, 2475, 2475],
		[3170, 3170, 3170, 3170],
		[4055, 4055, 4055, 4055],
		[5190, 5190, 5190, 5190],
		[6645, 6645, 6645, 6645],
		[8505, 8505, 8505, 8505],
		[10890, 10890, 10890, 10890]
	];

	// Каменотес
	var canteroCost = [
		'&#1050;&#1072;&#1084;&#1077;&#1085;&#1086;&#1090;&#1077;&#1089;',
		[155, 130, 125, 70],
		[200, 165, 160, 90],
		[255, 215, 205, 115],
		[325, 275, 260, 145],
		[415, 350, 335, 190],
		[535, 445, 430, 240],
		[680, 570, 550, 310],
		[875, 730, 705, 395],
		[1115, 935, 900, 505],
		[1430, 1200, 1155, 645],	// Nivel 10
		[1830, 1535, 1475, 825],
		[2340, 1965, 1890, 1060],
		[3000, 2515, 2420, 1355],
		[3840, 3220, 3095, 1735],
		[4910, 4120, 3960, 2220],
		[6290, 5275, 5070, 2840],
		[8050, 6750, 6490, 3635],
		[10300, 8640, 8310, 4650],
		[13185, 11060, 10635, 5955],
		[16880, 14155, 13610, 7620]
	];

	var greatWarehouseCost = [
		[0, 0, 0, 0],
		[650, 800, 450, 200],
		[830, 1025, 575, 255],
		[1065, 1310, 735, 330],
		[1365, 1680, 945, 420],
		[1745, 2145, 1210, 535],
		[2235, 2750, 1545, 685],
		[2860, 3520, 1980, 880],
		[3660, 4505, 2535, 1125],
		[4685, 5765, 3245, 1440],
		[5995, 7380, 4150, 1845],
		[7675, 9445, 5315, 2360],
		[9825, 12090, 6800, 3020],
		[12575, 15475, 8705, 3870],
		[16095, 19805, 11140, 4950],
		[20600, 25355, 14260, 6340],
		[26365, 32450, 18255, 8115],
		[33750, 41540, 23365, 10385],
		[43200, 53170, 29910, 13290],
		[55295, 68055, 38280, 17015],
		[70780, 87110, 49000, 21780]
	];

	var greatGranaryCost = [
		[0, 0, 0, 0],
		[400, 500, 350, 100],
		[510, 640, 450, 130],
		[655, 820, 575, 165],
		[840, 1050, 735, 210],
		[1075, 1340, 940, 270],
		[1375, 1720, 1205, 345],
		[1760, 2200, 1540, 440],
		[2250, 2815, 1970, 565],
		[2880, 3605, 2520, 720],
		[3690, 4610, 3230, 920],
		[4720, 5905, 4130, 1180],
		[6045, 7555, 5290, 1510],
		[7735, 9670, 6770, 1935],
		[9905, 12380, 8665, 2475],
		[12675, 15845, 11090, 3170],
		[16225, 20280, 14200, 4055],
		[20770, 25960, 18175, 5190],
		[26585, 33230, 23260, 6645],
		[34030, 42535, 29775, 8505],
		[43555, 54445, 38110, 10890]
	];

		// Чудо света
        var maravillaCost = [
		'&#1063;&#1091;&#1076;&#1086; &#1089;&#1074;&#1077;&#1090;&#1072;',
		[66700, 69050, 72200, 13200],
		[68535, 70950, 74185, 13565],
		[70420, 72900, 76225, 13935],
		[72355, 74905, 78320, 14320],
		[74345, 76965, 80475, 14715],
		[76390, 79080, 82690, 15120],
		[78490, 81255, 84965, 15535],
		[80650, 83490, 87300, 15960],
		[82865, 85785, 89700, 16400],
		[85145, 88145, 92165, 16850], // Nivel 10
		[87485, 90570, 94700, 17315],
		[89895, 93060, 97305, 17790],
		[92365, 95620, 99980, 18280],
		[94905, 98250, 102730, 18780],
		[97515, 100950, 105555, 19300],
		[100195, 103725, 108460, 19830],
		[102950, 106580, 111440, 20375],
		[105785, 109510, 114505, 20935],
		[108690, 112520, 117655, 21510],
		[111680, 115615, 120890, 22100], // Nivel 20
		[114755, 118795, 124215, 22710],
		[117910, 122060, 127630, 23335],
		[121150, 125420, 131140, 23975],
		[124480, 128870, 134745, 24635],
		[127905, 132410, 138455, 25315],
		[131425, 136055, 142260, 26010],
		[135035, 139795, 146170, 26725],
		[138750, 143640, 150190, 27460],
		[142565, 147590, 154320, 28215],
		[146485, 151650, 158565, 28990], // Nivel 30
		[150515, 155820, 162925, 29785],
		[154655, 160105, 167405, 30605],
		[158910, 164505, 172010, 31450],
		[163275, 169030, 176740, 32315],
		[167770, 173680, 181600, 33200],
		[172380, 178455, 186595, 34115],
		[177120, 183360, 191725, 35055],
		[181995, 188405, 197000, 36015],
		[186995, 193585, 202415, 37005],
		[192140, 198910, 207985, 38025], // Nivel 40
		[197425, 204380, 213705, 39070],
		[202855, 210000, 219580, 40145],
		[208430, 215775, 225620, 41250],
		[214165, 221710, 231825, 42385],
		[220055, 227805, 238200, 43550],
		[226105, 234070, 244750, 44745],
		[232320, 240505, 251480, 45975],
		[238710, 247120, 258395, 47240],
		[245275, 253915, 265500, 48540],
		[252020, 260900, 272800, 49875], // Nivel 50
		[258950, 268075, 280305, 51245],
		[266070, 275445, 288010, 52655],
		[273390, 283020, 295930, 54105],
		[280905, 290805, 304070, 55590],
		[288630, 298800, 312430, 57120],
		[296570, 307020, 321025, 58690],
		[304725, 315460, 329850, 60305],
		[313105, 324135, 338925, 61965],
		[321715, 333050, 348245, 63670],
		[330565, 342210, 357820, 65420], // Nivel 60
		[339655, 351620, 367660, 67220],
		[348995, 361290, 377770, 69065],
		[358590, 371225, 388160, 70965],
		[368450, 381435, 398835, 72915],
		[378585, 391925, 409800, 74920],
		[388995, 402700, 421070, 76985],
		[399695, 413775, 432650, 79100],
		[410685, 425155, 444550, 81275],
		[421980, 436845, 456775, 83510],
		[433585, 448860, 469335, 85805], // Nivel 70
		[445505, 461205, 482240, 88165],
		[457760, 473885, 495505, 90590],
		[470345, 486920, 509130, 93080],
		[483280, 500310, 523130, 95640],
		[496570, 514065, 537520, 98270],
		[510225, 528205, 552300, 100975],
		[524260, 542730, 567490, 103750],
		[538675, 557655, 583095, 106605],
		[553490, 572990, 599130, 109535],
		[568710, 588745, 615605, 112550], // Nivel 80
		[584350, 604935, 632535, 115645],
		[600420, 621575, 649930, 118825],
		[616930, 638665, 667800, 122090],
		[633895, 656230, 686165, 125450],
		[651330, 674275, 705035, 128900],
		[669240, 692820, 724425, 132445],
		[687645, 711870, 744345, 136085],
		[706555, 731445, 764815, 139830],
		[725985, 751560, 785850, 143675],
		[745950, 772230, 807460, 147625], // Nivel 90
		[766460, 793465, 829665, 151685],
		[787540, 815285, 852480, 155855],
		[809195, 837705, 875920, 160140],
		[831450, 860745, 900010, 164545],
		[854315, 884415, 924760, 169070],
		[877810, 908735, 950190, 173720],
		[901950, 933725, 976320, 178495],
		[926750, 959405, 1003170, 183405],
		[952235, 985785, 1030760, 188450],
		[978425, 1012895, 1059105, 193630] // Nivel 100
        ];

	var buildingCost = new Array();
	buildingCost[0] = lenyadorCost;  		// дерево
	buildingCost[1] = barroCost;    		// глина
	buildingCost[2] = hierroCost;   		// железо
	buildingCost[3] = cerealCost; 			// фермы

	buildingCost[5] = sawmillCost;			// Деревообрабатывающий завод
	buildingCost[6] = brickyardCost;		// Кирпичный завод
	buildingCost[7] = ironFoundryCost;		// Чугунолитейный завод
	buildingCost[8] = flourMillCost;		// Мукомольная мельница
	buildingCost[9] = bakeryCost;     		// Пекарня
	buildingCost[10] = warehouseCost; 	 	// Склад
	buildingCost[11] = granaryCost;     	// Амбар
	buildingCost[12] = blacksmithCost;		// Кузница оружия
	buildingCost[13] = armouryCost;			// Кузница доспехов
	buildingCost[14] = tournamentSquareCost;// Арена
	buildingCost[15] = mainBuildingCost;	// Главное здание
	buildingCost[16] = rallyPointCost;		// Пункт сбора
	buildingCost[17] = marketplaceCost;     // Рынок
	buildingCost[18] = embassyCost; 		// Посольство
	buildingCost[19] = barracksCost;		// Казарма
	buildingCost[20] = stableCost;			// Конюшня
	buildingCost[21] = workshopCost;		// Мастерская
	buildingCost[22] = academyCost;         // Академия
	buildingCost[23] = crannyCost; 			// Тайник
	buildingCost[24] = ayuntamientoCost;	// Ратуша
	buildingCost[25] = residenceCost;		// Резиденция
	buildingCost[26] = palaceCost;			// Дворец
	buildingCost[27] = tesoroCost;
	buildingCost[28] = oficinaComercioCost; // Торговая палата
	buildingCost[29] = greatBarrackCost;	// Большая казарм
	buildingCost[30] = greatStableCost;		// Большая конюшня
	buildingCost[31] = wallGaulsCost;		// Изгородь
	buildingCost[32] = wallRomansCost;		// Городская стена
	buildingCost[33] = wallTeutonsCost;		// Земляной вал
	buildingCost[34] = canteroCost;			// Каменотес
	buildingCost[35] = cerveceriaCost;
	buildingCost[36] = trampaCost;
	buildingCost[37] = casaHeroeCost;		// Таверна
	buildingCost[38] = greatWarehouseCost;
	buildingCost[39] = greatGranaryCost;
	buildingCost[40] = maravillaCost;		// Чудо света


//==================================================================================
// MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006-2007 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

var MooTools={version:"1.11"};function $defined(A){return(A!=undefined);}function $type(B){if(!$defined(B)){return false;}if(B.htmlElement){return"element"; }var A=typeof B;if(A=="object"&&B.nodeName){switch(B.nodeType){case 1:return"element";case 3:return(/\S/).test(B.nodeValue)?"textnode":"whitespace";}}if(A=="object"||A=="function"){switch(B.constructor){case Array:return"array";case RegExp:return"regexp";case Class:return"class";}if(typeof B.length=="number"){if(B.item){return"collection";}if(B.callee){return"arguments";}}}return A; }function $merge(){var C={};for(var B=0;B<arguments.length;B++){for(var E in arguments[B]){var A=arguments[B][E];var D=C[E];if(D&&$type(A)=="object"&&$type(D)=="object"){C[E]=$merge(D,A);}else{C[E]=A;}}}return C;}var $extend=function(){var A=arguments;if(!A[1]){A=[this,A[0]];}for(var B in A[1]){A[0][B]=A[1][B];}return A[0];};var $native=function(){for(var B=0,A=arguments.length; B<A;B++){arguments[B].extend=function(C){for(var D in C){if(!this.prototype[D]){this.prototype[D]=C[D];}if(!this[D]){this[D]=$native.generic(D);}}};}};$native.generic=function(A){return function(B){return this.prototype[A].apply(B,Array.prototype.slice.call(arguments,1));};};$native(Function,Array,String,Number); function $chk(A){return !!(A||A===0);}function $pick(B,A){return $defined(B)?B:A;}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B);}function $time(){return new Date().getTime();}function $clear(A){clearTimeout(A);clearInterval(A);return null;}var Abstract=function(A){A=A||{};A.extend=$extend;return A;};var Window=new Abstract(window); var Document=new Abstract(document);document.head=document.getElementsByTagName("head")[0];window.xpath=!!(document.evaluate);if(window.ActiveXObject){window.ie=window[window.XMLHttpRequest?"ie7":"ie6"]=true;}else{if(document.childNodes&&!document.all&&!navigator.taintEnabled){window.webkit=window[window.xpath?"webkit420":"webkit419"]=true;}else{if(document.getBoxObjectFor!=null){window.gecko=true; }}}window.khtml=window.webkit;Object.extend=$extend;if(typeof HTMLElement=="undefined"){var HTMLElement=function(){};if(window.webkit){document.createElement("iframe");}HTMLElement.prototype=(window.webkit)?window["[[DOMElement.prototype]]"]:{};}HTMLElement.prototype.htmlElement=function(){};if(window.ie6){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}var Class=function(B){var A=function(){return(arguments[0]!==null&&this.initialize&&$type(this.initialize)=="function")?this.initialize.apply(this,arguments):this;};$extend(A,this);A.prototype=B;A.constructor=Class;return A;};Class.empty=function(){};Class.prototype={extend:function(B){var C=new this(null);for(var D in B){var A=C[D];C[D]=Class.Merge(A,B[D]);}return new Class(C);},implement:function(){for(var B=0,A=arguments.length;B<A;B++){$extend(this.prototype,arguments[B]);}}};Class.Merge=function(C,D){if(C&&C!=D){var B=$type(D);if(B!=$type(C)){return D;}switch(B){case"function":var A=function(){this.parent=arguments.callee.parent;return D.apply(this,arguments);};A.parent=C;return A;case"object":return $merge(C,D);}}return D;};var Chain=new Class({chain:function(A){this.chains=this.chains||[];this.chains.push(A);return this;},callChain:function(){if(this.chains&&this.chains.length){this.chains.shift().delay(10,this);}},clearChain:function(){this.chains=[];}});var Events=new Class({addEvent:function(B,A){if(A!=Class.empty){this.$events=this.$events||{};this.$events[B]=this.$events[B]||[];this.$events[B].include(A);}return this;},fireEvent:function(C,B,A){if(this.$events&&this.$events[C]){this.$events[C].each(function(D){D.create({bind:this,delay:A,"arguments":B})();},this);}return this;},removeEvent:function(B,A){if(this.$events&&this.$events[B]){this.$events[B].remove(A);}return this;}});var Options=new Class({setOptions:function(){this.options=$merge.apply(null,[this.options].extend(arguments));if(this.addEvent){for(var A in this.options){if($type(this.options[A]=="function")&&(/^on[A-Z]/).test(A)){this.addEvent(A,this.options[A]);}}}return this;}});Array.extend({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this);}},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;},map:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this);}return C;},every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false;}}return true;},some:function(C,D){for(var B=0,A=this.length;B<A;B++){if(C.call(D,this[B],B,this)){return true;}}return false;},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B;}}return -1;},copy:function(D,C){D=D||0;if(D<0){D=this.length+D;}C=C||(this.length-D);var A=[];for(var B=0;B<C;B++){A[B]=this[D++];}return A;},remove:function(C){var B=0;var A=this.length;while(B<A){if(this[B]===C){this.splice(B,1);A--;}else{B++;}}return this;},contains:function(A,B){return this.indexOf(A,B)!=-1;},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A];}return D;},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;},merge:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B]);}return this;},include:function(A){if(!this.contains(A)){this.push(A);}return this;},getRandom:function(){return this[$random(0,this.length-1)]||null;},getLast:function(){return this[this.length-1]||null;}});Array.prototype.each=Array.prototype.forEach;Array.each=Array.forEach;function $A(A){return Array.copy(A);}function $each(C,B,D){if(C&&typeof C.length=="number"&&$type(C)!="object"){Array.forEach(C,B,D);}else{for(var A in C){B.call(D||C,C[A],A);}}}Array.prototype.test=Array.prototype.contains;String.extend({test:function(A,B){return(($type(A)=="string")?new RegExp(A,B):A).test(this);},toInt:function(){return parseInt(this,10);},toFloat:function(){return parseFloat(this);},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/\w[A-Z]/g,function(A){return(A.charAt(0)+"-"+A.charAt(1).toLowerCase());});},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase();});},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s{2,}/g," ").trim();},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):false;},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(A)?A.slice(1).hexToRgb(B):false;},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1;},escapeRegExp:function(){return this.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");}});Array.extend({rgbToHex:function(D){if(this.length<3){return false;}if(this.length==4&&this[3]==0&&!D){return"transparent";}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);B.push((C.length==1)?"0"+C:C);}return D?B:"#"+B.join("");},hexToRgb:function(C){if(this.length!=3){return false;}var A=[];for(var B=0;B<3;B++){A.push(parseInt((this[B].length==1)?this[B]+this[B]:this[B],16));}return C?A:"rgb("+A.join(",")+")";}});Function.extend({create:function(A){var B=this;A=$merge({bind:B,event:false,"arguments":null,delay:false,periodical:false,attempt:false},A);if($chk(A.arguments)&&$type(A.arguments)!="array"){A.arguments=[A.arguments];}return function(E){var C;if(A.event){E=E||window.event;C=[(A.event===true)?E:new A.event(E)];if(A.arguments){C.extend(A.arguments);}}else{C=A.arguments||arguments;}var F=function(){return B.apply($pick(A.bind,B),C);};if(A.delay){return setTimeout(F,A.delay);}if(A.periodical){return setInterval(F,A.periodical);}if(A.attempt){try{return F();}catch(D){return false;}}return F();};},pass:function(A,B){return this.create({"arguments":A,bind:B});},attempt:function(A,B){return this.create({"arguments":A,bind:B,attempt:true})();},bind:function(B,A){return this.create({bind:B,"arguments":A});},bindAsEventListener:function(B,A){return this.create({bind:B,event:true,"arguments":A});},delay:function(B,C,A){return this.create({delay:B,bind:C,"arguments":A})();},periodical:function(A,C,B){return this.create({periodical:A,bind:C,"arguments":B})();}});Number.extend({toInt:function(){return parseInt(this);},toFloat:function(){return parseFloat(this);},limit:function(B,A){return Math.min(A,Math.max(B,this));},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A;},times:function(B){for(var A=0;A<this;A++){B(A);}}});var Element=new Class({initialize:function(D,C){if($type(D)=="string"){if(window.ie&&C&&(C.name||C.type)){var A=(C.name)?' name="'+C.name+'"':"";var B=(C.type)?' type="'+C.type+'"':"";delete C.name;delete C.type;D="<"+D+A+B+">";}D=document.createElement(D);}D=$(D);return(!C||!D)?D:D.set(C);}});var Elements=new Class({initialize:function(A){return(A)?$extend(A,this):this;}});Elements.extend=function(A){for(var B in A){this.prototype[B]=A[B];this[B]=$native.generic(B);}};function $(B){if(!B){return null;}if(B.htmlElement){return Garbage.collect(B);}if([window,document].contains(B)){return B;}var A=$type(B);if(A=="string"){B=document.getElementById(B);A=(B)?"element":false;}if(A!="element"){return null;}if(B.htmlElement){return Garbage.collect(B);}if(["object","embed"].contains(B.tagName.toLowerCase())){return B;}$extend(B,Element.prototype);B.htmlElement=function(){};return Garbage.collect(B);}document.getElementsBySelector=document.getElementsByTagName;function $$(){var D=[];for(var C=0,B=arguments.length;C<B;C++){var A=arguments[C];switch($type(A)){case"element":D.push(A);case"boolean":break;case false:break;case"string":A=document.getElementsBySelector(A,true);default:D.extend(A);}}return $$.unique(D);}$$.unique=function(G){var D=[];for(var C=0,A=G.length;C<A;C++){if(G[C].$included){continue;}var B=$(G[C]);if(B&&!B.$included){B.$included=true;D.push(B);}}for(var F=0,E=D.length;F<E;F++){D[F].$included=null;}return new Elements(D);};Elements.Multi=function(A){return function(){var D=arguments;var B=[];var G=true;for(var E=0,C=this.length,F;E<C;E++){F=this[E][A].apply(this[E],D);if($type(F)!="element"){G=false;}B.push(F);}return(G)?$$.unique(B):B;};};Element.extend=function(A){for(var B in A){HTMLElement.prototype[B]=A[B];Element.prototype[B]=A[B];Element[B]=$native.generic(B);var C=(Array.prototype[B])?B+"Elements":B;Elements.prototype[C]=Elements.Multi(B);}};Element.extend({set:function(A){for(var C in A){var B=A[C];switch(C){case"styles":this.setStyles(B);break;case"events":if(this.addEvents){this.addEvents(B);}break;case"properties":this.setProperties(B);break;default:this.setProperty(C,B);}}return this;},inject:function(C,A){C=$(C);switch(A){case"before":C.parentNode.insertBefore(this,C);break;case"after":var B=C.getNext();if(!B){C.parentNode.appendChild(this);}else{C.parentNode.insertBefore(this,B);}break;case"top":var D=C.firstChild;if(D){C.insertBefore(this,D);break;}default:C.appendChild(this);}return this;},injectBefore:function(A){return this.inject(A,"before");},injectAfter:function(A){return this.inject(A,"after");},injectInside:function(A){return this.inject(A,"bottom");},injectTop:function(A){return this.inject(A,"top");},adopt:function(){var A=[];$each(arguments,function(B){A=A.concat(B);});$$(A).inject(this);return this;},remove:function(){return this.parentNode.removeChild(this);},clone:function(C){var B=$(this.cloneNode(C!==false));if(!B.$events){return B;
}B.$events={};for(var A in this.$events){B.$events[A]={keys:$A(this.$events[A].keys),values:$A(this.$events[A].values)};}return B.removeEvents();},replaceWith:function(A){A=$(A);
this.parentNode.replaceChild(A,this);return A;},appendText:function(A){this.appendChild(document.createTextNode(A));return this;},hasClass:function(A){return this.className.contains(A," ");
},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean();}return this;},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();
return this;},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A);},setStyle:function(B,A){switch(B){case"opacity":return this.setOpacity(parseFloat(A));
case"float":B=(window.ie)?"styleFloat":"cssFloat";}B=B.camelCase();switch($type(A)){case"number":if(!["zIndex","zoom"].contains(B)){A+="px";}break;case"array":A="rgb("+A.join(",")+")";
}this.style[B]=A;return this;},setStyles:function(A){switch($type(A)){case"object":Element.setMany(this,"setStyle",A);break;case"string":this.style.cssText=A;
}return this;},setOpacity:function(A){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden";}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";
}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(window.ie){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")";}this.style.opacity=this.$tmp.opacity=A;
return this;},getStyle:function(C){C=C.camelCase();var A=this.style[C];if(!$chk(A)){if(C=="opacity"){return this.$tmp.opacity;}A=[];for(var B in Element.Styles){if(C==B){Element.Styles[B].each(function(F){var E=this.getStyle(F);
A.push(parseInt(E)?E:"0px");},this);if(C=="border"){var D=A.every(function(E){return(E==A[0]);});return(D)?A[0]:false;}return A.join(" ");}}if(C.contains("border")){if(Element.Styles.border.contains(C)){return["Width","Style","Color"].map(function(E){return this.getStyle(C+E);
},this).join(" ");}else{if(Element.borderShort.contains(C)){return["Top","Right","Bottom","Left"].map(function(E){return this.getStyle("border"+E+C.replace("border",""));
},this).join(" ");}}}if(document.defaultView){A=document.defaultView.getComputedStyle(this,null).getPropertyValue(C.hyphenate());}else{if(this.currentStyle){A=this.currentStyle[C];
}}}if(window.ie){A=Element.fixStyle(C,A,this);}if(A&&C.test(/color/i)&&A.contains("rgb")){return A.split("rgb").splice(1,4).map(function(E){return E.rgbToHex();
}).join(" ");}return A;},getStyles:function(){return Element.getMany(this,"getStyle",arguments);},walk:function(A,C){A+="Sibling";var B=(C)?this[C]:this[A];
while(B&&$type(B)!="element"){B=B[A];}return $(B);},getPrevious:function(){return this.walk("previous");},getNext:function(){return this.walk("next");},getFirst:function(){return this.walk("next","firstChild");
},getLast:function(){return this.walk("previous","lastChild");},getParent:function(){return $(this.parentNode);},getChildren:function(){return $$(this.childNodes);
},hasChild:function(A){return !!$A(this.getElementsByTagName("*")).contains(A);},getProperty:function(D){var B=Element.Properties[D];if(B){return this[B];
}var A=Element.PropertiesIFlag[D]||0;if(!window.ie||A){return this.getAttribute(D,A);}var C=this.attributes[D];return(C)?C.nodeValue:null;},removeProperty:function(B){var A=Element.Properties[B];
if(A){this[A]="";}else{this.removeAttribute(B);}return this;},getProperties:function(){return Element.getMany(this,"getProperty",arguments);},setProperty:function(C,B){var A=Element.Properties[C];
if(A){this[A]=B;}else{this.setAttribute(C,B);}return this;},setProperties:function(A){return Element.setMany(this,"setProperty",A);},setHTML:function(){this.innerHTML=$A(arguments).join("");
return this;},setText:function(B){var A=this.getTag();if(["style","script"].contains(A)){if(window.ie){if(A=="style"){this.styleSheet.cssText=B;}else{if(A=="script"){this.setProperty("text",B);
}}return this;}else{this.removeChild(this.firstChild);return this.appendText(B);}}this[$defined(this.innerText)?"innerText":"textContent"]=B;return this;
},getText:function(){var A=this.getTag();if(["style","script"].contains(A)){if(window.ie){if(A=="style"){return this.styleSheet.cssText;}else{if(A=="script"){return this.getProperty("text");
}}}else{return this.innerHTML;}}return($pick(this.innerText,this.textContent));},getTag:function(){return this.tagName.toLowerCase();},empty:function(){Garbage.trash(this.getElementsByTagName("*"));
return this.setHTML("");}});Element.fixStyle=function(E,A,D){if($chk(parseInt(A))){return A;}if(["height","width"].contains(E)){var B=(E=="width")?["left","right"]:["top","bottom"];
var C=0;B.each(function(F){C+=D.getStyle("border-"+F+"-width").toInt()+D.getStyle("padding-"+F).toInt();});return D["offset"+E.capitalize()]-C+"px";}else{if(E.test(/border(.+)Width|margin|padding/)){return"0px";
}}return A;};Element.Styles={border:[],padding:[],margin:[]};["Top","Right","Bottom","Left"].each(function(B){for(var A in Element.Styles){Element.Styles[A].push(A+B);
}});Element.borderShort=["borderWidth","borderStyle","borderColor"];Element.getMany=function(B,D,C){var A={};$each(C,function(E){A[E]=B[D](E);});return A;
};Element.setMany=function(B,D,C){for(var A in C){B[D](A,C[A]);}return B;};Element.Properties=new Abstract({"class":"className","for":"htmlFor",colspan:"colSpan",rowspan:"rowSpan",accesskey:"accessKey",tabindex:"tabIndex",maxlength:"maxLength",readonly:"readOnly",frameborder:"frameBorder",value:"value",disabled:"disabled",checked:"checked",multiple:"multiple",selected:"selected"});
Element.PropertiesIFlag={href:2,src:2};Element.Methods={Listeners:{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false);
}else{this.attachEvent("on"+B,A);}return this;},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false);}else{this.detachEvent("on"+B,A);
}return this;}}};window.extend(Element.Methods.Listeners);document.extend(Element.Methods.Listeners);Element.extend(Element.Methods.Listeners);var Garbage={elements:[],collect:function(A){if(!A.$tmp){Garbage.elements.push(A);
A.$tmp={opacity:1};}return A;},trash:function(D){for(var B=0,A=D.length,C;B<A;B++){if(!(C=D[B])||!C.$tmp){continue;}if(C.$events){C.fireEvent("trash").removeEvents();
}for(var E in C.$tmp){C.$tmp[E]=null;}for(var F in Element.prototype){C[F]=null;}Garbage.elements[Garbage.elements.indexOf(C)]=null;C.htmlElement=C.$tmp=C=null;
}Garbage.elements.remove(null);},empty:function(){Garbage.collect(window);Garbage.collect(document);Garbage.trash(Garbage.elements);}};window.addListener("beforeunload",function(){window.addListener("unload",Garbage.empty);
if(window.ie){window.addListener("unload",CollectGarbage);}});var Event=new Class({initialize:function(C){if(C&&C.$extended){return C;}this.$extended=true;
C=C||window.event;this.event=C;this.type=C.type;this.target=C.target||C.srcElement;if(this.target.nodeType==3){this.target=this.target.parentNode;}this.shift=C.shiftKey;
this.control=C.ctrlKey;this.alt=C.altKey;this.meta=C.metaKey;if(["DOMMouseScroll","mousewheel"].contains(this.type)){this.wheel=(C.wheelDelta)?C.wheelDelta/120:-(C.detail||0)/3;
}else{if(this.type.contains("key")){this.code=C.which||C.keyCode;for(var B in Event.keys){if(Event.keys[B]==this.code){this.key=B;break;}}if(this.type=="keydown"){var A=this.code-111;
if(A>0&&A<13){this.key="f"+A;}}this.key=this.key||String.fromCharCode(this.code).toLowerCase();}else{if(this.type.test(/(click|mouse|menu)/)){this.page={x:C.pageX||C.clientX+document.documentElement.scrollLeft,y:C.pageY||C.clientY+document.documentElement.scrollTop};
this.client={x:C.pageX?C.pageX-window.pageXOffset:C.clientX,y:C.pageY?C.pageY-window.pageYOffset:C.clientY};this.rightClick=(C.which==3)||(C.button==2);
switch(this.type){case"mouseover":this.relatedTarget=C.relatedTarget||C.fromElement;break;case"mouseout":this.relatedTarget=C.relatedTarget||C.toElement;
}this.fixRelatedTarget();}}}return this;},stop:function(){return this.stopPropagation().preventDefault();},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();
}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();}else{this.event.returnValue=false;
}return this;}});Event.fix={relatedTarget:function(){if(this.relatedTarget&&this.relatedTarget.nodeType==3){this.relatedTarget=this.relatedTarget.parentNode;
}},relatedTargetGecko:function(){try{Event.fix.relatedTarget.call(this);}catch(A){this.relatedTarget=this.target;}}};Event.prototype.fixRelatedTarget=(window.gecko)?Event.fix.relatedTargetGecko:Event.fix.relatedTarget;
Event.keys=new Abstract({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Element.Methods.Events={addEvent:function(C,B){this.$events=this.$events||{};
this.$events[C]=this.$events[C]||{keys:[],values:[]};if(this.$events[C].keys.contains(B)){return this;}this.$events[C].keys.push(B);var A=C;var D=Element.Events[C];
if(D){if(D.add){D.add.call(this,B);}if(D.map){B=D.map;}if(D.type){A=D.type;}}if(!this.addEventListener){B=B.create({bind:this,event:true});}this.$events[C].values.push(B);
return(Element.NativeEvents.contains(A))?this.addListener(A,B):this;},removeEvent:function(C,B){if(!this.$events||!this.$events[C]){return this;}var F=this.$events[C].keys.indexOf(B);
if(F==-1){return this;}var A=this.$events[C].keys.splice(F,1)[0];var E=this.$events[C].values.splice(F,1)[0];var D=Element.Events[C];if(D){if(D.remove){D.remove.call(this,B);
}if(D.type){C=D.type;}}return(Element.NativeEvents.contains(C))?this.removeListener(C,E):this;},addEvents:function(A){return Element.setMany(this,"addEvent",A);
},removeEvents:function(A){if(!this.$events){return this;}if(!A){for(var B in this.$events){this.removeEvents(B);}this.$events=null;}else{if(this.$events[A]){this.$events[A].keys.each(function(C){this.removeEvent(A,C);
},this);this.$events[A]=null;}}return this;},fireEvent:function(C,B,A){if(this.$events&&this.$events[C]){this.$events[C].keys.each(function(D){D.create({bind:this,delay:A,"arguments":B})();
},this);}return this;},cloneEvents:function(C,A){if(!C.$events){return this;}if(!A){for(var B in C.$events){this.cloneEvents(C,B);}}else{if(C.$events[A]){C.$events[A].keys.each(function(D){this.addEvent(A,D);
},this);}}return this;}};window.extend(Element.Methods.Events);document.extend(Element.Methods.Events);Element.extend(Element.Methods.Events);Element.Events=new Abstract({mouseenter:{type:"mouseover",map:function(A){A=new Event(A);
if(A.relatedTarget!=this&&!this.hasChild(A.relatedTarget)){this.fireEvent("mouseenter",A);}}},mouseleave:{type:"mouseout",map:function(A){A=new Event(A);
if(A.relatedTarget!=this&&!this.hasChild(A.relatedTarget)){this.fireEvent("mouseleave",A);}}},mousewheel:{type:(window.gecko)?"DOMMouseScroll":"mousewheel"}});
Element.NativeEvents=["click","dblclick","mouseup","mousedown","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","keydown","keypress","keyup","load","unload","beforeunload","resize","move","focus","blur","change","submit","reset","select","error","abort","contextmenu","scroll"];
Function.extend({bindWithEvent:function(B,A){return this.create({bind:B,"arguments":A,event:Event});}});Elements.extend({filterByTag:function(A){return new Elements(this.filter(function(B){return(Element.getTag(B)==A);
}));},filterByClass:function(A,C){var B=this.filter(function(D){return(D.className&&D.className.contains(A," "));});return(C)?B:new Elements(B);},filterById:function(C,B){var A=this.filter(function(D){return(D.id==C);
});return(B)?A:new Elements(A);},filterByAttribute:function(B,A,D,E){var C=this.filter(function(F){var G=Element.getProperty(F,B);if(!G){return false;}if(!A){return true;
}switch(A){case"=":return(G==D);case"*=":return(G.contains(D));case"^=":return(G.substr(0,D.length)==D);case"$=":return(G.substr(G.length-D.length)==D);
case"!=":return(G!=D);case"~=":return G.contains(D," ");}return false;});return(E)?C:new Elements(C);}});function $E(A,B){return($(B)||document).getElement(A);
}function $ES(A,B){return($(B)||document).getElementsBySelector(A);}$$.shared={regexp:/^(\w*|\*)(?:#([\w-]+)|\.([\w-]+))?(?:\[(\w+)(?:([!*^$]?=)["']?([^"'\]]*)["']?)?])?$/,xpath:{getParam:function(B,D,E,C){var A=[D.namespaceURI?"xhtml:":"",E[1]];
if(E[2]){A.push('[@id="',E[2],'"]');}if(E[3]){A.push('[contains(concat(" ", @class, " "), " ',E[3],' ")]');}if(E[4]){if(E[5]&&E[6]){switch(E[5]){case"*=":A.push("[contains(@",E[4],', "',E[6],'")]');
break;case"^=":A.push("[starts-with(@",E[4],', "',E[6],'")]');break;case"$=":A.push("[substring(@",E[4],", string-length(@",E[4],") - ",E[6].length,' + 1) = "',E[6],'"]');
break;case"=":A.push("[@",E[4],'="',E[6],'"]');break;case"!=":A.push("[@",E[4],'!="',E[6],'"]');}}else{A.push("[@",E[4],"]");}}B.push(A.join(""));return B;
},getItems:function(B,E,G){var F=[];var A=document.evaluate(".//"+B.join("//"),E,$$.shared.resolver,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for(var D=0,C=A.snapshotLength;
D<C;D++){F.push(A.snapshotItem(D));}return(G)?F:new Elements(F.map($));}},normal:{getParam:function(A,C,E,B){if(B==0){if(E[2]){var D=C.getElementById(E[2]);
if(!D||((E[1]!="*")&&(Element.getTag(D)!=E[1]))){return false;}A=[D];}else{A=$A(C.getElementsByTagName(E[1]));}}else{A=$$.shared.getElementsByTagName(A,E[1]);
if(E[2]){A=Elements.filterById(A,E[2],true);}}if(E[3]){A=Elements.filterByClass(A,E[3],true);}if(E[4]){A=Elements.filterByAttribute(A,E[4],E[5],E[6],true);
}return A;},getItems:function(A,B,C){return(C)?A:$$.unique(A);}},resolver:function(A){return(A=="xhtml")?"http://www.w3.org/1999/xhtml":false;},getElementsByTagName:function(D,C){var E=[];
for(var B=0,A=D.length;B<A;B++){E.extend(D[B].getElementsByTagName(C));}return E;}};$$.shared.method=(window.xpath)?"xpath":"normal";Element.Methods.Dom={getElements:function(A,H){var C=[];
A=A.trim().split(" ");for(var E=0,D=A.length;E<D;E++){var F=A[E];var G=F.match($$.shared.regexp);if(!G){break;}G[1]=G[1]||"*";var B=$$.shared[$$.shared.method].getParam(C,this,G,E);
if(!B){break;}C=B;}return $$.shared[$$.shared.method].getItems(C,this,H);},getElement:function(A){return $(this.getElements(A,true)[0]||false);},getElementsBySelector:function(A,E){var D=[];
A=A.split(",");for(var C=0,B=A.length;C<B;C++){D=D.concat(this.getElements(A[C],true));}return(E)?D:$$.unique(D);}};Element.extend({getElementById:function(C){var B=document.getElementById(C);
if(!B){return false;}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return false;}}return B;},getElementsByClassName:function(A){return this.getElements("."+A);
}});document.extend(Element.Methods.Dom);Element.extend(Element.Methods.Dom);Element.extend({getValue:function(){switch(this.getTag()){case"select":var A=[];
$each(this.options,function(B){if(B.selected){A.push($pick(B.value,B.text));}});return(this.multiple)?A:A[0];case"input":if(!(this.checked&&["checkbox","radio"].contains(this.type))&&!["hidden","text","password"].contains(this.type)){break;
}case"textarea":return this.value;}return false;},getFormElements:function(){return $$(this.getElementsByTagName("input"),this.getElementsByTagName("select"),this.getElementsByTagName("textarea"));
},toQueryString:function(){var A=[];this.getFormElements().each(function(D){var C=D.name;var E=D.getValue();if(E===false||!C||D.disabled){return ;}var B=function(F){A.push(C+"="+encodeURIComponent(F));
};if($type(E)=="array"){E.each(B);}else{B(E);}});return A.join("&");}});Element.extend({scrollTo:function(A,B){this.scrollLeft=A;this.scrollTop=B;},getSize:function(){return{scroll:{x:this.scrollLeft,y:this.scrollTop},size:{x:this.offsetWidth,y:this.offsetHeight},scrollSize:{x:this.scrollWidth,y:this.scrollHeight}};
},getPosition:function(A){A=A||[];var B=this,D=0,C=0;do{D+=B.offsetLeft||0;C+=B.offsetTop||0;B=B.offsetParent;}while(B);A.each(function(E){D-=E.scrollLeft||0;
C-=E.scrollTop||0;});return{x:D,y:C};},getTop:function(A){return this.getPosition(A).y;},getLeft:function(A){return this.getPosition(A).x;},getCoordinates:function(B){var A=this.getPosition(B);
var C={width:this.offsetWidth,height:this.offsetHeight,left:A.x,top:A.y};C.right=C.left+C.width;C.bottom=C.top+C.height;return C;}});Element.Events.domready={add:function(B){if(window.loaded){B.call(this);
return ;}var A=function(){if(window.loaded){return ;}window.loaded=true;window.timer=$clear(window.timer);this.fireEvent("domready");}.bind(this);if(document.readyState&&window.webkit){window.timer=function(){if(["loaded","complete"].contains(document.readyState)){A();
}}.periodical(50);}else{if(document.readyState&&window.ie){if(!$("ie_ready")){var C=(window.location.protocol=="https:")?"://0":"javascript:void(0)";document.write('<script id="ie_ready" defer src="'+C+'"><\/script>');
$("ie_ready").onreadystatechange=function(){if(this.readyState=="complete"){A();}};}}else{window.addListener("load",A);document.addListener("DOMContentLoaded",A);
}}}};window.onDomReady=function(A){return this.addEvent("domready",A);};window.extend({getWidth:function(){if(this.webkit419){return this.innerWidth;}if(this.opera){return document.body.clientWidth;
}return document.documentElement.clientWidth;},getHeight:function(){if(this.webkit419){return this.innerHeight;}if(this.opera){return document.body.clientHeight;
}return document.documentElement.clientHeight;},getScrollWidth:function(){if(this.ie){return Math.max(document.documentElement.offsetWidth,document.documentElement.scrollWidth);
}if(this.webkit){return document.body.scrollWidth;}return document.documentElement.scrollWidth;},getScrollHeight:function(){if(this.ie){return Math.max(document.documentElement.offsetHeight,document.documentElement.scrollHeight);
}if(this.webkit){return document.body.scrollHeight;}return document.documentElement.scrollHeight;},getScrollLeft:function(){return this.pageXOffset||document.documentElement.scrollLeft;
},getScrollTop:function(){return this.pageYOffset||document.documentElement.scrollTop;},getSize:function(){return{size:{x:this.getWidth(),y:this.getHeight()},scrollSize:{x:this.getScrollWidth(),y:this.getScrollHeight()},scroll:{x:this.getScrollLeft(),y:this.getScrollTop()}};
},getPosition:function(){return{x:0,y:0};}});var Fx={};Fx.Base=new Class({options:{onStart:Class.empty,onComplete:Class.empty,onCancel:Class.empty,transition:function(A){return -(Math.cos(Math.PI*A)-1)/2;
},duration:500,unit:"px",wait:true,fps:50},initialize:function(A){this.element=this.element||null;this.setOptions(A);if(this.options.initialize){this.options.initialize.call(this);
}},step:function(){var A=$time();if(A<this.time+this.options.duration){this.delta=this.options.transition((A-this.time)/this.options.duration);this.setNow();
this.increase();}else{this.stop(true);this.set(this.to);this.fireEvent("onComplete",this.element,10);this.callChain();}},set:function(A){this.now=A;this.increase();
return this;},setNow:function(){this.now=this.compute(this.from,this.to);},compute:function(B,A){return(A-B)*this.delta+B;},start:function(B,A){if(!this.options.wait){this.stop();
}else{if(this.timer){return this;}}this.from=B;this.to=A;this.change=this.to-this.from;this.time=$time();this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);
this.fireEvent("onStart",this.element);return this;},stop:function(A){if(!this.timer){return this;}this.timer=$clear(this.timer);if(!A){this.fireEvent("onCancel",this.element);
}return this;},custom:function(B,A){return this.start(B,A);},clearTimer:function(A){return this.stop(A);}});Fx.Base.implement(new Chain,new Events,new Options);
Fx.CSS={select:function(B,C){if(B.test(/color/i)){return this.Color;}var A=$type(C);if((A=="array")||(A=="string"&&C.contains(" "))){return this.Multi;
}return this.Single;},parse:function(C,D,A){if(!A.push){A=[A];}var F=A[0],E=A[1];if(!$chk(E)){E=F;F=C.getStyle(D);}var B=this.select(D,E);return{from:B.parse(F),to:B.parse(E),css:B};
}};Fx.CSS.Single={parse:function(A){return parseFloat(A);},getNow:function(C,B,A){return A.compute(C,B);},getValue:function(C,A,B){if(A=="px"&&B!="opacity"){C=Math.round(C);
}return C+A;}};Fx.CSS.Multi={parse:function(A){return A.push?A:A.split(" ").map(function(B){return parseFloat(B);});},getNow:function(E,D,C){var A=[];for(var B=0;
B<E.length;B++){A[B]=C.compute(E[B],D[B]);}return A;},getValue:function(C,A,B){if(A=="px"&&B!="opacity"){C=C.map(Math.round);}return C.join(A+" ")+A;}};
Fx.CSS.Color={parse:function(A){return A.push?A:A.hexToRgb(true);},getNow:function(E,D,C){var A=[];for(var B=0;B<E.length;B++){A[B]=Math.round(C.compute(E[B],D[B]));
}return A;},getValue:function(A){return"rgb("+A.join(",")+")";}};Fx.Style=Fx.Base.extend({initialize:function(B,C,A){this.element=$(B);this.property=C;
this.parent(A);},hide:function(){return this.set(0);},setNow:function(){this.now=this.css.getNow(this.from,this.to,this);},set:function(A){this.css=Fx.CSS.select(this.property,A);
return this.parent(this.css.parse(A));},start:function(C,B){if(this.timer&&this.options.wait){return this;}var A=Fx.CSS.parse(this.element,this.property,[C,B]);
this.css=A.css;return this.parent(A.from,A.to);},increase:function(){this.element.setStyle(this.property,this.css.getValue(this.now,this.options.unit,this.property));
}});Element.extend({effect:function(B,A){return new Fx.Style(this,B,A);}});Fx.Styles=Fx.Base.extend({initialize:function(B,A){this.element=$(B);this.parent(A);
},setNow:function(){for(var A in this.from){this.now[A]=this.css[A].getNow(this.from[A],this.to[A],this);}},set:function(C){var A={};this.css={};for(var B in C){this.css[B]=Fx.CSS.select(B,C[B]);
A[B]=this.css[B].parse(C[B]);}return this.parent(A);},start:function(C){if(this.timer&&this.options.wait){return this;}this.now={};this.css={};var E={},D={};
for(var B in C){var A=Fx.CSS.parse(this.element,B,C[B]);E[B]=A.from;D[B]=A.to;this.css[B]=A.css;}return this.parent(E,D);},increase:function(){for(var A in this.now){this.element.setStyle(A,this.css[A].getValue(this.now[A],this.options.unit,A));
}}});Element.extend({effects:function(A){return new Fx.Styles(this,A);}});Fx.Elements=Fx.Base.extend({initialize:function(B,A){this.elements=$$(B);this.parent(A);
},setNow:function(){for(var C in this.from){var F=this.from[C],E=this.to[C],B=this.css[C],A=this.now[C]={};for(var D in F){A[D]=B[D].getNow(F[D],E[D],this);
}}},set:function(G){var B={};this.css={};for(var D in G){var F=G[D],C=this.css[D]={},A=B[D]={};for(var E in F){C[E]=Fx.CSS.select(E,F[E]);A[E]=C[E].parse(F[E]);
}}return this.parent(B);},start:function(D){if(this.timer&&this.options.wait){return this;}this.now={};this.css={};var I={},J={};for(var E in D){var G=D[E],A=I[E]={},H=J[E]={},C=this.css[E]={};
for(var B in G){var F=Fx.CSS.parse(this.elements[E],B,G[B]);A[B]=F.from;H[B]=F.to;C[B]=F.css;}}return this.parent(I,J);},increase:function(){for(var C in this.now){var A=this.now[C],B=this.css[C];
for(var D in A){this.elements[C].setStyle(D,B[D].getValue(A[D],this.options.unit,D));}}}});Fx.Scroll=Fx.Base.extend({options:{overflown:[],offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.now=[];
this.element=$(B);this.bound={stop:this.stop.bind(this,false)};this.parent(A);if(this.options.wheelStops){this.addEvent("onStart",function(){document.addEvent("mousewheel",this.bound.stop);
}.bind(this));this.addEvent("onComplete",function(){document.removeEvent("mousewheel",this.bound.stop);}.bind(this));}},setNow:function(){for(var A=0;A<2;
A++){this.now[A]=this.compute(this.from[A],this.to[A]);}},scrollTo:function(B,F){if(this.timer&&this.options.wait){return this;}var D=this.element.getSize();
var C={x:B,y:F};for(var E in D.size){var A=D.scrollSize[E]-D.size[E];if($chk(C[E])){C[E]=($type(C[E])=="number")?C[E].limit(0,A):A;}else{C[E]=D.scroll[E];
}C[E]+=this.options.offset[E];}return this.start([D.scroll.x,D.scroll.y],[C.x,C.y]);},toTop:function(){return this.scrollTo(false,0);},toBottom:function(){return this.scrollTo(false,"full");
},toLeft:function(){return this.scrollTo(0,false);},toRight:function(){return this.scrollTo("full",false);},toElement:function(B){var A=this.element.getPosition(this.options.overflown);
var C=$(B).getPosition(this.options.overflown);return this.scrollTo(C.x-A.x,C.y-A.y);},increase:function(){this.element.scrollTo(this.now[0],this.now[1]);
}});Fx.Slide=Fx.Base.extend({options:{mode:"vertical"},initialize:function(B,A){this.element=$(B);this.wrapper=new Element("div",{styles:$extend(this.element.getStyles("margin"),{overflow:"hidden"})}).injectAfter(this.element).adopt(this.element);
this.element.setStyle("margin",0);this.setOptions(A);this.now=[];this.parent(this.options);this.open=true;this.addEvent("onComplete",function(){this.open=(this.now[0]===0);
});if(window.webkit419){this.addEvent("onComplete",function(){if(this.open){this.element.remove().inject(this.wrapper);}});}},setNow:function(){for(var A=0;
A<2;A++){this.now[A]=this.compute(this.from[A],this.to[A]);}},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight;
},horizontal:function(){this.margin="margin-left";this.layout="width";this.offset=this.element.offsetWidth;},slideIn:function(A){this[A||this.options.mode]();
return this.start([this.element.getStyle(this.margin).toInt(),this.wrapper.getStyle(this.layout).toInt()],[0,this.offset]);},slideOut:function(A){this[A||this.options.mode]();
return this.start([this.element.getStyle(this.margin).toInt(),this.wrapper.getStyle(this.layout).toInt()],[-this.offset,0]);},hide:function(A){this[A||this.options.mode]();
this.open=false;return this.set([-this.offset,0]);},show:function(A){this[A||this.options.mode]();this.open=true;return this.set([0,this.offset]);},toggle:function(A){if(this.wrapper.offsetHeight==0||this.wrapper.offsetWidth==0){return this.slideIn(A);
}return this.slideOut(A);},increase:function(){this.element.setStyle(this.margin,this.now[0]+this.options.unit);this.wrapper.setStyle(this.layout,this.now[1]+this.options.unit);
}});Fx.Transition=function(B,A){A=A||[];if($type(A)!="array"){A=[A];}return $extend(B,{easeIn:function(C){return B(C,A);},easeOut:function(C){return 1-B(1-C,A);
},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2;}});};Fx.Transitions=new Abstract({linear:function(A){return A;}});Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B]);
Fx.Transitions.compat(B);}};Fx.Transitions.compat=function(A){["In","Out","InOut"].each(function(B){Fx.Transitions[A.toLowerCase()+B]=Fx.Transitions[A]["ease"+B];
});};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6);},Expo:function(A){return Math.pow(2,8*(A-1));},Circ:function(A){return 1-Math.sin(Math.acos(A));
},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2);},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A);},Bounce:function(D){var C;for(var B=0,A=1;
1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;break;}}return C;},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);
}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2]);});Fx.Transitions.compat(B);
});var Drag={};Drag.Base=new Class({options:{handle:false,unit:"px",onStart:Class.empty,onBeforeStart:Class.empty,onComplete:Class.empty,onSnap:Class.empty,onDrag:Class.empty,limit:false,modifiers:{x:"left",y:"top"},grid:false,snap:6},initialize:function(B,A){this.setOptions(A);
this.element=$(B);this.handle=$(this.options.handle)||this.element;this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.bound={start:this.start.bindWithEvent(this),check:this.check.bindWithEvent(this),drag:this.drag.bindWithEvent(this),stop:this.stop.bind(this)};
this.attach();if(this.options.initialize){this.options.initialize.call(this);}},attach:function(){this.handle.addEvent("mousedown",this.bound.start);return this;
},detach:function(){this.handle.removeEvent("mousedown",this.bound.start);return this;},start:function(C){this.fireEvent("onBeforeStart",this.element);
this.mouse.start=C.page;var A=this.options.limit;this.limit={x:[],y:[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue;}this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt();
this.mouse.pos[D]=C.page[D]-this.value.now[D];if(A&&A[D]){for(var B=0;B<2;B++){if($chk(A[D][B])){this.limit[D][B]=($type(A[D][B])=="function")?A[D][B]():A[D][B];
}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid};}document.addListener("mousemove",this.bound.check);
document.addListener("mouseup",this.bound.stop);this.fireEvent("onStart",this.element);C.stop();},check:function(A){var B=Math.round(Math.sqrt(Math.pow(A.page.x-this.mouse.start.x,2)+Math.pow(A.page.y-this.mouse.start.y,2)));
if(B>this.options.snap){document.removeListener("mousemove",this.bound.check);document.addListener("mousemove",this.bound.drag);this.drag(A);this.fireEvent("onSnap",this.element);
}A.stop();},drag:function(A){this.out=false;this.mouse.now=A.page;for(var B in this.options.modifiers){if(!this.options.modifiers[B]){continue;}this.value.now[B]=this.mouse.now[B]-this.mouse.pos[B];
if(this.limit[B]){if($chk(this.limit[B][1])&&(this.value.now[B]>this.limit[B][1])){this.value.now[B]=this.limit[B][1];this.out=true;}else{if($chk(this.limit[B][0])&&(this.value.now[B]<this.limit[B][0])){this.value.now[B]=this.limit[B][0];
this.out=true;}}}if(this.options.grid[B]){this.value.now[B]-=(this.value.now[B]%this.options.grid[B]);}this.element.setStyle(this.options.modifiers[B],this.value.now[B]+this.options.unit);
}this.fireEvent("onDrag",this.element);A.stop();},stop:function(){document.removeListener("mousemove",this.bound.check);document.removeListener("mousemove",this.bound.drag);
document.removeListener("mouseup",this.bound.stop);this.fireEvent("onComplete",this.element);}});Drag.Base.implement(new Events,new Options);Element.extend({makeResizable:function(A){return new Drag.Base(this,$merge({modifiers:{x:"width",y:"height"}},A));
}});Drag.Move=Drag.Base.extend({options:{droppables:[],container:false,overflown:[]},initialize:function(B,A){this.setOptions(A);this.element=$(B);this.droppables=$$(this.options.droppables);
this.container=$(this.options.container);this.position={element:this.element.getStyle("position"),container:false};if(this.container){this.position.container=this.container.getStyle("position");
}if(!["relative","absolute","fixed"].contains(this.position.element)){this.position.element="absolute";}var D=this.element.getStyle("top").toInt();var C=this.element.getStyle("left").toInt();
if(this.position.element=="absolute"&&!["relative","absolute","fixed"].contains(this.position.container)){D=$chk(D)?D:this.element.getTop(this.options.overflown);
C=$chk(C)?C:this.element.getLeft(this.options.overflown);}else{D=$chk(D)?D:0;C=$chk(C)?C:0;}this.element.setStyles({top:D,left:C,position:this.position.element});
this.parent(this.element);},start:function(C){this.overed=null;if(this.container){var A=this.container.getCoordinates();var B=this.element.getCoordinates();
if(this.position.element=="absolute"&&!["relative","absolute","fixed"].contains(this.position.container)){this.options.limit={x:[A.left,A.right-B.width],y:[A.top,A.bottom-B.height]};
}else{this.options.limit={y:[0,A.height-B.height],x:[0,A.width-B.width]};}}this.parent(C);},drag:function(A){this.parent(A);var B=this.out?false:this.droppables.filter(this.checkAgainst,this).getLast();
if(this.overed!=B){if(this.overed){this.overed.fireEvent("leave",[this.element,this]);}this.overed=B?B.fireEvent("over",[this.element,this]):null;}return this;
},checkAgainst:function(B){B=B.getCoordinates(this.options.overflown);var A=this.mouse.now;return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.top);},stop:function(){if(this.overed&&!this.out){this.overed.fireEvent("drop",[this.element,this]);
}else{this.element.fireEvent("emptydrop",this);}this.parent();return this;}});Element.extend({makeDraggable:function(A){return new Drag.Move(this,A);}});
var XHR=new Class({options:{method:"post",async:true,onRequest:Class.empty,onSuccess:Class.empty,onFailure:Class.empty,urlEncoded:true,encoding:"utf-8",autoCancel:false,headers:{}},setTransport:function(){this.transport=(window.XMLHttpRequest)?new XMLHttpRequest():(window.ie?new ActiveXObject("Microsoft.XMLHTTP"):false);
return this;},initialize:function(A){this.setTransport().setOptions(A);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers={};if(this.options.urlEncoded&&this.options.method=="post"){var B=(this.options.encoding)?"; charset="+this.options.encoding:"";
this.setHeader("Content-type","application/x-www-form-urlencoded"+B);}if(this.options.initialize){this.options.initialize.call(this);}},onStateChange:function(){if(this.transport.readyState!=4||!this.running){return ;
}this.running=false;var A=0;try{A=this.transport.status;}catch(B){}if(this.options.isSuccess.call(this,A)){this.onSuccess();}else{this.onFailure();}this.transport.onreadystatechange=Class.empty;
},isSuccess:function(A){return((A>=200)&&(A<300));},onSuccess:function(){this.response={text:this.transport.responseText,xml:this.transport.responseXML};
this.fireEvent("onSuccess",[this.response.text,this.response.xml]);this.callChain();},onFailure:function(){this.fireEvent("onFailure",this.transport);},setHeader:function(A,B){this.headers[A]=B;
return this;},send:function(A,C){if(this.options.autoCancel){this.cancel();}else{if(this.running){return this;}}this.running=true;if(C&&this.options.method=="get"){A=A+(A.contains("?")?"&":"?")+C;
C=null;}this.transport.open(this.options.method.toUpperCase(),A,this.options.async);this.transport.onreadystatechange=this.onStateChange.bind(this);if((this.options.method=="post")&&this.transport.overrideMimeType){this.setHeader("Connection","close");
}$extend(this.headers,this.options.headers);for(var B in this.headers){try{this.transport.setRequestHeader(B,this.headers[B]);}catch(D){}}this.fireEvent("onRequest");
this.transport.send($pick(C,null));return this;},cancel:function(){if(!this.running){return this;}this.running=false;this.transport.abort();this.transport.onreadystatechange=Class.empty;
this.setTransport();this.fireEvent("onCancel");return this;}});XHR.implement(new Chain,new Events,new Options);var Ajax=XHR.extend({options:{data:null,update:null,onComplete:Class.empty,evalScripts:false,evalResponse:false},initialize:function(B,A){this.addEvent("onSuccess",this.onComplete);
this.setOptions(A);this.options.data=this.options.data||this.options.postBody;if(!["post","get"].contains(this.options.method)){this._method="_method="+this.options.method;
this.options.method="post";}this.parent();this.setHeader("X-Requested-With","XMLHttpRequest");this.setHeader("Accept","text/javascript, text/html, application/xml, text/xml, */*");
this.url=B;},onComplete:function(){if(this.options.update){$(this.options.update).empty().setHTML(this.response.text);}if(this.options.evalScripts||this.options.evalResponse){this.evalScripts();
}this.fireEvent("onComplete",[this.response.text,this.response.xml],20);},request:function(A){A=A||this.options.data;switch($type(A)){case"element":A=$(A).toQueryString();
break;case"object":A=Object.toQueryString(A);}if(this._method){A=(A)?[this._method,A].join("&"):this._method;}return this.send(this.url,A);},evalScripts:function(){var B,A;
if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){A=this.response.text;}else{A=[];var C=/<script[^>]*>([\s\S]*?)<\/script>/gi;
while((B=C.exec(this.response.text))){A.push(B[1]);}A=A.join("\n");}if(A){(window.execScript)?window.execScript(A):window.setTimeout(A,0);}},getHeader:function(A){try{return this.transport.getResponseHeader(A);
}catch(B){}return null;}});Object.toQueryString=function(B){var C=[];for(var A in B){C.push(encodeURIComponent(A)+"="+encodeURIComponent(B[A]));}return C.join("&");
};Element.extend({send:function(A){return new Ajax(this.getProperty("action"),$merge({data:this.toQueryString()},A,{method:"post"})).request();}});var Cookie=new Abstract({options:{domain:false,path:false,duration:false,secure:false},set:function(C,D,B){B=$merge(this.options,B);
D=encodeURIComponent(D);if(B.domain){D+="; domain="+B.domain;}if(B.path){D+="; path="+B.path;}if(B.duration){var A=new Date();A.setTime(A.getTime()+B.duration*24*60*60*1000);
D+="; expires="+A.toGMTString();}if(B.secure){D+="; secure";}document.cookie=C+"="+D;return $extend(B,{key:C,value:D});},get:function(A){var B=document.cookie.match("(?:^|;)\\s*"+A.escapeRegExp()+"=([^;]*)");
return B?decodeURIComponent(B[1]):false;},remove:function(B,A){if($type(B)=="object"){this.set(B.key,"",$merge(B,{duration:-1}));}else{this.set(B,"",$merge(A,{duration:-1}));
}}});var Json={toString:function(C){switch($type(C)){case"string":return'"'+C.replace(/(["\\])/g,"\\$1")+'"';case"array":return"["+C.map(Json.toString).join(",")+"]";
case"object":var A=[];for(var B in C){A.push(Json.toString(B)+":"+Json.toString(C[B]));}return"{"+A.join(",")+"}";case"number":if(isFinite(C)){break;}case false:return"null";
}return String(C);},evaluate:function(str,secure){return(($type(str)!="string")||(secure&&!str.test(/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/)))?null:eval("("+str+")");
}};Json.Remote=XHR.extend({initialize:function(B,A){this.url=B;this.addEvent("onSuccess",this.onComplete);this.parent(A);this.setHeader("X-Request","JSON");
},send:function(A){return this.parent(this.url,"json="+Json.toString(A));},onComplete:function(){this.fireEvent("onComplete",[Json.evaluate(this.response.text,this.options.secure)]);
}});var Asset=new Abstract({javascript:function(C,B){B=$merge({onload:Class.empty},B);var A=new Element("script",{src:C}).addEvents({load:B.onload,readystatechange:function(){if(this.readyState=="complete"){this.fireEvent("load");
}}});delete B.onload;return A.setProperties(B).inject(document.head);},css:function(B,A){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:B},A)).inject(document.head);
},image:function(C,B){B=$merge({onload:Class.empty,onabort:Class.empty,onerror:Class.empty},B);var D=new Image();D.src=C;var A=new Element("img",{src:C});
["load","abort","error"].each(function(E){var F=B["on"+E];delete B["on"+E];A.addEvent(E,function(){this.removeEvent(E,arguments.callee);F.call(this);});
});if(D.width&&D.height){A.fireEvent("load",A,1);}return A.setProperties(B);},images:function(D,C){C=$merge({onComplete:Class.empty,onProgress:Class.empty},C);
if(!D.push){D=[D];}var A=[];var B=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,B);B++;if(B==D.length){C.onComplete();
}}});A.push(E);});return new Elements(A);}});var Hash=new Class({length:0,initialize:function(A){this.obj=A||{};this.setLength();},get:function(A){return(this.hasKey(A))?this.obj[A]:null;
},hasKey:function(A){return(A in this.obj);},set:function(A,B){if(!this.hasKey(A)){this.length++;}this.obj[A]=B;return this;},setLength:function(){this.length=0;
for(var A in this.obj){this.length++;}return this;},remove:function(A){if(this.hasKey(A)){delete this.obj[A];this.length--;}return this;},each:function(A,B){$each(this.obj,A,B);
},extend:function(A){$extend(this.obj,A);return this.setLength();},merge:function(){this.obj=$merge.apply(null,[this.obj].extend(arguments));return this.setLength();
},empty:function(){this.obj={};this.length=0;return this;},keys:function(){var A=[];for(var B in this.obj){A.push(B);}return A;},values:function(){var A=[];
for(var B in this.obj){A.push(this.obj[B]);}return A;}});function $H(A){return new Hash(A);}Hash.Cookie=Hash.extend({initialize:function(B,A){this.name=B;
this.options=$extend({autoSave:true},A||{});this.load();},save:function(){if(this.length==0){Cookie.remove(this.name,this.options);return true;}var A=Json.toString(this.obj);
if(A.length>4096){return false;}Cookie.set(this.name,A,this.options);return true;},load:function(){this.obj=Json.evaluate(Cookie.get(this.name),true)||{};
this.setLength();}});Hash.Cookie.Methods={};["extend","set","merge","empty","remove"].each(function(A){Hash.Cookie.Methods[A]=function(){Hash.prototype[A].apply(this,arguments);
if(this.options.autoSave){this.save();}return this;};});Hash.Cookie.implement(Hash.Cookie.Methods);var Color=new Class({initialize:function(B,D){D=D||(B.push?"rgb":"hex");
var C,A;switch(D){case"rgb":C=B;A=C.rgbToHsb();break;case"hsb":C=B.hsbToRgb();A=B;break;default:C=B.hexToRgb(true);A=C.rgbToHsb();}C.hsb=A;C.hex=C.rgbToHex();
return $extend(C,Color.prototype);},mix:function(){var A=$A(arguments);var C=($type(A[A.length-1])=="number")?A.pop():50;var B=this.copy();A.each(function(D){D=new Color(D);
for(var E=0;E<3;E++){B[E]=Math.round((B[E]/100*(100-C))+(D[E]/100*C));}});return new Color(B,"rgb");},invert:function(){return new Color(this.map(function(A){return 255-A;
}));},setHue:function(A){return new Color([A,this.hsb[1],this.hsb[2]],"hsb");},setSaturation:function(A){return new Color([this.hsb[0],A,this.hsb[2]],"hsb");
},setBrightness:function(A){return new Color([this.hsb[0],this.hsb[1],A],"hsb");}});function $RGB(C,B,A){return new Color([C,B,A],"rgb");}function $HSB(C,B,A){return new Color([C,B,A],"hsb");
}Array.extend({rgbToHsb:function(){var B=this[0],C=this[1],J=this[2];var G,F,H;var I=Math.max(B,C,J),E=Math.min(B,C,J);var K=I-E;H=I/255;F=(I!=0)?K/I:0;
if(F==0){G=0;}else{var D=(I-B)/K;var A=(I-C)/K;var L=(I-J)/K;if(B==I){G=L-A;}else{if(C==I){G=2+D-L;}else{G=4+A-D;}}G/=6;if(G<0){G++;}}return[Math.round(G*360),Math.round(F*100),Math.round(H*100)];
},hsbToRgb:function(){var C=Math.round(this[2]/100*255);if(this[1]==0){return[C,C,C];}else{var A=this[0]%360;var E=A%60;var F=Math.round((this[2]*(100-this[1]))/10000*255);
var D=Math.round((this[2]*(6000-this[1]*E))/600000*255);var B=Math.round((this[2]*(6000-this[1]*(60-E)))/600000*255);switch(Math.floor(A/60)){case 0:return[C,B,F];
case 1:return[D,C,F];case 2:return[F,C,B];case 3:return[F,D,C];case 4:return[B,F,C];case 5:return[C,F,D];}}return false;}});var Scroller=new Class({options:{area:20,velocity:1,onChange:function(A,B){this.element.scrollTo(A,B);
}},initialize:function(B,A){this.setOptions(A);this.element=$(B);this.mousemover=([window,document].contains(B))?$(document.body):this.element;},start:function(){this.coord=this.getCoords.bindWithEvent(this);
this.mousemover.addListener("mousemove",this.coord);},stop:function(){this.mousemover.removeListener("mousemove",this.coord);this.timer=$clear(this.timer);
},getCoords:function(A){this.page=(this.element==window)?A.client:A.page;if(!this.timer){this.timer=this.scroll.periodical(50,this);}},scroll:function(){var A=this.element.getSize();
var D=this.element.getPosition();var C={x:0,y:0};for(var B in this.page){if(this.page[B]<(this.options.area+D[B])&&A.scroll[B]!=0){C[B]=(this.page[B]-this.options.area-D[B])*this.options.velocity;
}else{if(this.page[B]+this.options.area>(A.size[B]+D[B])&&A.scroll[B]+A.size[B]!=A.scrollSize[B]){C[B]=(this.page[B]-A.size[B]+this.options.area-D[B])*this.options.velocity;
}}}if(C.y||C.x){this.fireEvent("onChange",[A.scroll.x+C.x,A.scroll.y+C.y]);}}});Scroller.implement(new Events,new Options);var Slider=new Class({options:{onChange:Class.empty,onComplete:Class.empty,onTick:function(A){this.knob.setStyle(this.p,A);
},mode:"horizontal",steps:100,offset:0},initialize:function(D,A,B){this.element=$(D);this.knob=$(A);this.setOptions(B);this.previousChange=-1;this.previousEnd=-1;
this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bindWithEvent(this));var C,F;switch(this.options.mode){case"horizontal":this.z="x";this.p="left";
C={x:"left",y:false};F="offsetWidth";break;case"vertical":this.z="y";this.p="top";C={x:false,y:"top"};F="offsetHeight";}this.max=this.element[F]-this.knob[F]+(this.options.offset*2);
this.half=this.knob[F]/2;this.getPos=this.element["get"+this.p.capitalize()].bind(this.element);this.knob.setStyle("position","relative").setStyle(this.p,-this.options.offset);
var E={};E[this.z]=[-this.options.offset,this.max-this.options.offset];this.drag=new Drag.Base(this.knob,{limit:E,modifiers:C,snap:0,onStart:function(){this.draggedKnob();
}.bind(this),onDrag:function(){this.draggedKnob();}.bind(this),onComplete:function(){this.draggedKnob();this.end();}.bind(this)});if(this.options.initialize){this.options.initialize.call(this);
}},set:function(A){this.step=A.limit(0,this.options.steps);this.checkStep();this.end();this.fireEvent("onTick",this.toPosition(this.step));return this;
},clickedElement:function(B){var A=B.page[this.z]-this.getPos()-this.half;A=A.limit(-this.options.offset,this.max-this.options.offset);this.step=this.toStep(A);
this.checkStep();this.end();this.fireEvent("onTick",A);},draggedKnob:function(){this.step=this.toStep(this.drag.value.now[this.z]);this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
this.fireEvent("onChange",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("onComplete",this.step+"");
}},toStep:function(A){return Math.round((A+this.options.offset)/this.max*this.options.steps);},toPosition:function(A){return this.max*A/this.options.steps;
}});Slider.implement(new Events);Slider.implement(new Options);var SmoothScroll=Fx.Scroll.extend({initialize:function(B){this.parent(window,B);this.links=(this.options.links)?$$(this.options.links):$$(document.links);
var A=window.location.href.match(/^[^#]*/)[0]+"#";this.links.each(function(D){if(D.href.indexOf(A)!=0){return ;}var C=D.href.substr(A.length);if(C&&$(C)){this.useLink(D,C);
}},this);if(!window.webkit419){this.addEvent("onComplete",function(){window.location.hash=this.anchor;});}},useLink:function(B,A){B.addEvent("click",function(C){this.anchor=A;this.toElement(A);C.stop();}.bindWithEvent(this));}});var Sortables=new Class({options:{handles:false,onStart:Class.empty,onComplete:Class.empty,ghost:true,snap:3,onDragStart:function(A,B){B.setStyle("opacity",0.7);A.setStyle("opacity",0.7);},onDragComplete:function(A,B){A.setStyle("opacity",1);B.remove();this.trash.remove();}},initialize:function(D,B){this.setOptions(B);this.list=$(D);this.elements=this.list.getChildren();this.handles=(this.options.handles)?$$(this.options.handles):this.elements;this.bound={start:[],moveGhost:this.moveGhost.bindWithEvent(this)};for(var C=0,A=this.handles.length;C<A;C++){this.bound.start[C]=this.start.bindWithEvent(this,this.elements[C]);}this.attach();if(this.options.initialize){this.options.initialize.call(this);}this.bound.move=this.move.bindWithEvent(this);this.bound.end=this.end.bind(this);},attach:function(){this.handles.each(function(B,A){B.addEvent("mousedown",this.bound.start[A]);},this);},detach:function(){this.handles.each(function(B,A){B.removeEvent("mousedown",this.bound.start[A]);},this);},start:function(C,B){this.active=B;this.coordinates=this.list.getCoordinates();if(this.options.ghost){var A=B.getPosition();this.offset=C.page.y-A.y;this.trash=new Element("div").inject(document.body);this.ghost=B.clone().inject(this.trash).setStyles({position:"absolute",left:A.x,top:C.page.y-this.offset});document.addListener("mousemove",this.bound.moveGhost);this.fireEvent("onDragStart",[B,this.ghost]);}document.addListener("mousemove",this.bound.move);document.addListener("mouseup",this.bound.end);this.fireEvent("onStart",B);C.stop();},moveGhost:function(A){var B=A.page.y-this.offset;B=B.limit(this.coordinates.top,this.coordinates.bottom-this.ghost.offsetHeight);this.ghost.setStyle("top",B);A.stop();},move:function(E){var B=E.page.y;this.previous=this.previous||B;var A=((this.previous-B)>0);var D=this.active.getPrevious();var C=this.active.getNext();if(D&&A&&B<D.getCoordinates().bottom){this.active.injectBefore(D);}if(C&&!A&&B>C.getCoordinates().top){this.active.injectAfter(C);}this.previous=B;},serialize:function(A){return this.list.getChildren().map(A||function(B){return this.elements.indexOf(B);},this);},end:function(){this.previous=null;document.removeListener("mousemove",this.bound.move);document.removeListener("mouseup",this.bound.end);if(this.options.ghost){document.removeListener("mousemove",this.bound.moveGhost);this.fireEvent("onDragComplete",[this.active,this.ghost]);}this.fireEvent("onComplete",this.active);}});Sortables.implement(new Events,new Options);var Tips=new Class({options:{onShow:function(A){A.setStyle("visibility","visible");},onHide:function(A){A.setStyle("visibility","hidden");},maxTitleChars:30,showDelay:100,hideDelay:100,className:"tool",offsets:{x:16,y:16},fixed:false},initialize:function(B,A){this.setOptions(A);this.toolTip=new Element("div",{"class":this.options.className+"-tip",styles:{position:"absolute",top:"0",left:"0",visibility:"hidden"}}).inject(document.body);this.wrapper=new Element("div").inject(this.toolTip);$$(B).each(this.build,this);if(this.options.initialize){this.options.initialize.call(this);}},build:function(B){B.$tmp.myTitle=(B.href&&B.getTag()=="a")?B.href.replace("http://",""):(B.rel||false);if(B.title){var C=B.title.split("::");if(C.length>1){B.$tmp.myTitle=C[0].trim();B.$tmp.myText=C[1].trim();}else{B.$tmp.myText=B.title;}B.removeAttribute("title");}else{B.$tmp.myText=false;}if(B.$tmp.myTitle&&B.$tmp.myTitle.length>this.options.maxTitleChars){B.$tmp.myTitle=B.$tmp.myTitle.substr(0,this.options.maxTitleChars-1)+"&hellip;";}B.addEvent("mouseenter",function(D){this.start(B);if(!this.options.fixed){this.locate(D);}else{this.position(B);}}.bind(this));if(!this.options.fixed){B.addEvent("mousemove",this.locate.bindWithEvent(this));}var A=this.end.bind(this);B.addEvent("mouseleave",A);B.addEvent("trash",A);},start:function(A){this.wrapper.empty();if(A.$tmp.myTitle){this.title=new Element("span").inject(new Element("div",{"class":this.options.className+"-title"}).inject(this.wrapper)).setHTML(A.$tmp.myTitle);}if(A.$tmp.myText){this.text=new Element("span").inject(new Element("div",{"class":this.options.className+"-text"}).inject(this.wrapper)).setHTML(A.$tmp.myText);}$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);},end:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);},position:function(A){var B=A.getPosition();this.toolTip.setStyles({left:B.x+this.options.offsets.x,top:B.y+this.options.offsets.y});},locate:function(B){var D={x:window.getWidth(),y:window.getHeight()};var A={x:window.getScrollLeft(),y:window.getScrollTop()};var C={x:this.toolTip.offsetWidth,y:this.toolTip.offsetHeight};var G={x:"left",y:"top"};for(var E in G){var F=B.page[E]+this.options.offsets[E];if((F+C[E]-A[E])>D[E]){F=B.page[E]-this.options.offsets[E]-C[E];}this.toolTip.setStyle(G[E],F);}},show:function(){if(this.options.timeout){this.timer=this.hide.delay(this.options.timeout,this);}this.fireEvent("onShow",[this.toolTip]);},hide:function(){this.fireEvent("onHide",[this.toolTip]);}});Tips.implement(new Events,new Options);var Group=new Class({initialize:function(){this.instances=$A(arguments);this.events={};this.checker={};},addEvent:function(B,A){this.checker[B]=this.checker[B]||{};this.events[B]=this.events[B]||[];if(this.events[B].contains(A)){return false;}else{this.events[B].push(A);}this.instances.each(function(C,D){C.addEvent(B,this.check.bind(this,[B,C,D]));},this);return this;},check:function(C,A,B){this.checker[C][B]=true;var D=this.instances.every(function(F,E){return this.checker[C][E]||false;},this);if(!D){return ;}this.checker[C]={};this.events[C].each(function(E){E.call(this,this.instances,A);},this);}});var Accordion=Fx.Elements.extend({options:{onActive:Class.empty,onBackground:Class.empty,display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var C,E,F,B;$each(arguments,function(I,H){switch($type(I)){case"object":C=I;break;case"element":B=$(I);break;default:var G=$$(I);if(!E){E=G;}else{F=G;}}});this.togglers=E||[];this.elements=F||[];this.container=$(B);this.setOptions(C);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true;}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}if(this.options.start){this.options.display=false;this.options.show=false;}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity";}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth";}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight";}for(var D=0,A=this.togglers.length;D<A;D++){this.addSection(this.togglers[D],this.elements[D]);}this.elements.each(function(H,G){if(this.options.show===G){this.fireEvent("onActive",[this.togglers[G],H]);}else{for(var I in this.effects){H.setStyle(I,0);}}},this);this.parent(this.elements);if($chk(this.options.display)){this.display(this.options.display);}},addSection:function(E,C,G){E=$(E);C=$(C);var F=this.togglers.contains(E);var B=this.togglers.length;this.togglers.include(E);this.elements.include(C);if(B&&(!F||G)){G=$pick(G,B-1);E.injectBefore(this.togglers[G]);C.injectAfter(E);}else{if(this.container&&!F){E.inject(this.container);C.inject(this.container);}}var A=this.togglers.indexOf(E);E.addEvent("click",this.display.bind(this,A));if(this.options.height){C.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){C.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});}C.fullOpacity=1;if(this.options.fixedWidth){C.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){C.fullHeight=this.options.fixedHeight;}C.setStyle("overflow","hidden");if(!F){for(var D in this.effects){C.setStyle(D,0);}}return this;},display:function(A){A=($type(A)=="element")?this.elements.indexOf(A):A;if((this.timer&&this.options.wait)||(A===this.previous&&!this.options.alwaysHide)){return this;}this.previous=A;var B={};this.elements.each(function(E,D){B[D]={};var C=(D!=A)||(this.options.alwaysHide&&(E.offsetHeight>0));this.fireEvent(C?"onBackground":"onActive",[this.togglers[D],E]);for(var F in this.effects){B[D][F]=C?0:E[this.effects[F]];}},this);return this.start(B);},showThisHideOpen:function(A){return this.display(A);}});Fx.Accordion=Accordion;