function Interface() {

	// массив выделенных элементов среди жанров, стран
	this.arSelectEl = new Array();

	// массив id всех окон-шагов в интерфейсе
	this.aPanels = new Array();
	this.aPanels[0] = 'LookupPanel';
	this.aPanels[1] = 'InfoPanel';
	this.aPanels[2] = 'ConfirmPanel';

	// массив id всех возможных интерфейсных окон
	this.arInterfaces = new Array();
	this.arInterfaces[this.arInterfaces.length] = 'person2film';
	this.arInterfaces[this.arInterfaces.length] = 'text2film';
	this.arInterfaces[this.arInterfaces.length] = 'year2film';
	this.arInterfaces[this.arInterfaces.length] = 'genre2film';
	this.arInterfaces[this.arInterfaces.length] = 'country2film';
	this.arInterfaces[this.arInterfaces.length] = 'long2film';
	this.arInterfaces[this.arInterfaces.length] = 'language2film';
	this.arInterfaces[this.arInterfaces.length] = 'filmtype2film';
	this.arInterfaces[this.arInterfaces.length] = 'filmstatus2film';
	this.arInterfaces[this.arInterfaces.length] = 'filmformat2film';
	this.arInterfaces[this.arInterfaces.length] = 'colour2film';
	this.arInterfaces[this.arInterfaces.length] = 'sound2film';
	this.arInterfaces[this.arInterfaces.length] = 'budget2film';
	this.arInterfaces[this.arInterfaces.length] = 'takings_full2film';
	this.arInterfaces[this.arInterfaces.length] = 'takings_russian2film';
	this.arInterfaces[this.arInterfaces.length] = 'premiere2film';
	this.arInterfaces[this.arInterfaces.length] = 'company2film';
	this.arInterfaces[this.arInterfaces.length] = 'link2film';
	this.arInterfaces[this.arInterfaces.length] = 'text2person';
	this.arInterfaces[this.arInterfaces.length] = 'film2person';


	this.Reset =  function() {

		this.xml = false;
		this.elRes = false;
		this.elConfirmRes = false;
		this.elFoundTotal = false;
		this.elNext = false;
		this.resultLength = 0;
		this.resultItem = -1;
		this.resultOldItem = false;
		this.resultReqStr = false;
		this.ampluaId = false;
		this.addObjectType = false;
		this.linkObj = false;	// ссылка, открывающая интерфейс

		// контейнер, к которым относятся действия интерфейсов
		this.containerData = false;

		// id документа, к которым относятся действия интерфейсов
		this.documentId = false;

		if(!this.elRes)
			this.elRes = document.getElementById('elResults');

		if(!this.elConfirmRes)
			this.elConfirmRes = document.getElementById('elConfirmResults');

		if(!this.elFoundTotal)
			this.elFoundTotal = document.getElementById('elFoundTotal');

		if(!this.elNext)
			this.elNext = document.getElementById('elNext');

		if(this.elRes) {
			this.elRes.style.display = 'none';
			this.elRes.style.visibility = 'hidden';
			this.elRes.innerHTML = '';
		}

		if(this.elNext)
			this.elNext.style.display = 'none';

		if(document.forms.addForm)
			document.forms.addForm.submit.disabled = false;

		if(document.forms.confirmForm)
			document.forms.confirmForm.submit.disabled = false;

	}


	this.CloseAll = function() {

		for(var i=0; i < this.arInterfaces.length; ++i) {
			el = document.getElementById(this.arInterfaces[i]);
			if(el)
				el.style.display = 'none';
		}
	}

	// назначаем все основные св-ва нужными значениями
	this.AttachObject = function() {

		this.obj = document.getElementById(this.addObjectType);

		if (this.obj) {

			if(this.addObjectType == 'person2film' || this.addObjectType == 'film2person' || this.addObjectType == 'film2review') {

				if(this.elRes) {
					this.elRes.onclick = this.OnClickResults;
					this.elRes.onkeydown = this.Navigate;
				}

				if(this.elConfirmRes) {
					this.elConfirmRes.onclick = this.OnClickConfirmResults;
					this.elConfirmRes.onkeydown = this.Navigate;
				}

				if(document.forms.lookupForm) {
					el = document.forms.lookupForm.q;
					if (el) {
						el.onkeyup = this.Lookup;
						el.onkeydown = this.Navigate;
					}
				}

			}

			// находим ключевую форму
			var co = this.obj.getElementsByTagName('form');
			this.form = co[0];
			this.ShowMessage('error', '');

		}
	}

	this.Open = function(linkObj, interfaceId, containerId, param) {

		if(interfaceId == 'authInterfaceRight') {
			interfaceId = 'authInterface';
			param = {direction: 'right'};
		}

		return oInterface.OpenAdd(linkObj, interfaceId, containerId, param);
	}


	this.OpenOld = function(linkObj, interfaceId, containerId, param) {

		that = this;

		this.Reset();
		this.CloseAll();

		direction = '';

		// поправки на правый интерфейс авторизации
		if(interfaceId == 'authInterfaceRight') {
			interfaceId = 'authInterface';
			direction = 'right';
		}

		this.linkObj = linkObj;
		this.addObjectType = interfaceId;
		container = document.getElementById(containerId);
		if(container)
			this.containerData = container;

		this.AttachObject();

		// Позиционирование
		if(this.linkObj) {
			var x = FindPosX(this.linkObj) - 10;
			var y = FindPosY(this.linkObj) - 5;
			this.obj.style.left = x + 'px';
			this.obj.style.top = y + 'px';
		}

		// для интерфейса авторизации (учитываем правостороннесть и меняем текст внутри интерфейса)
		if(this.addObjectType == 'authInterface') {

			containerText = document.getElementById('authInterfaceText');
			if(containerText) {
				if(param == 'add_review')
					containerText.innerHTML = '<P>Для того, чтобы написать отзыв к фильму, вам нужно <A href=\"http://ilovecinema.ru/registration/\">зарегистрироваться</A>.&nbsp;Если вы уже зарегистрированы, пожалуйста, введите ваш логин и пароль.</P>';
				else if(param == 'add_message')
					containerText.innerHTML = '<P>Для того, чтобы написать сообщение в блог, вам нужно <A href=\"http://ilovecinema.ru/registration/\">зарегистрироваться</A>.&nbsp;Если вы уже зарегистрированы, пожалуйста, введите ваш логин и пароль.</P>';
				else if(param == 'add_object_info')
					containerText.innerHTML = '<P>Для того, чтобы добавить на сайт новую информацию, вам нужно <A href=\"http://ilovecinema.ru/registration/\">зарегистрироваться</A>.&nbsp;Если вы уже зарегистрированы, пожалуйста, введите ваш логин и пароль.</P>';
				else if(param == 'add_comment')
					containerText.innerHTML = '<P>Для того, чтобы написать коментарий, вам нужно <A href=\"http://ilovecinema.ru/registration/\">зарегистрироваться</A>.&nbsp;Если вы уже зарегистрированы, пожалуйста, введите ваш логин и пароль.</P>';
				else if(param == 'change_attitude')
					containerText.innerHTML = '<P>Для того, чтобы выразить свое отношение, вам нужно <A href=\"http://ilovecinema.ru/registration/\">зарегистрироваться</A>. Если вы уже зарегистрированы, пожалуйста, введите ваш логин и пароль.</P>';
				else
					containerText.innerHTML = '<P>Если вы уже зарегистрированы, пожалуйста, введите ваш логин и пароль. Если нет — <A href=\"/registration/\">зарегистрируйтесь</A>.</P>';
			}

			if(direction == 'right') {
				// щелкнули на IMG
				if(this.linkObj.width)
					this.obj.style.left = x - (332 - this.linkObj.width) + 'px';
				else
					this.obj.style.left = x - 290 + 'px';
			}

		} else {
			// выводим алерт для пользователей с пониженным статусом
			if(userStatus == 'user') {
				alert('У вас нет прав добавлять фильмы/персон на сайт. Причины данного решения вы можете узнать у редакции по адресу ilovecinema@expert.ru');
				return false;
			}
		}

		this.obj.style.display = 'block';

		// обнуляем массив выделенных элементов жанров, стран и снимаем подсветку
		if(this.addObjectType == 'genre2film' || this.addObjectType == 'country2film') {

			this.arSelectEl = new Array();

			var co = this.obj.getElementsByTagName('li');
//			alert(co.length);
			for(var i=0; i<co.length; ++i)
				co[i].className = '';

		} else if(this.addObjectType == 'person2film' || this.addObjectType == 'film2person') {

			param = param + '';

			if(param.match(/^edit/)) {
				var oXML = document.getElementById('xml' + param.replace(/^edit/, ''));
				this.openPanel('InfoPanel');
				this.ResetInfoPanel();
				if(this.addObjectType == 'person2film')
					this.FillPersonInfoFields(oXML);
				else
					this.FillFilmInfoFields(oXML);
			} else {
				this.ampluaId = param;
				this.openPanel('LookupPanel');

				document.forms.lookupForm.q.value = '';
				document.forms.lookupForm.q.focus();
			}

		} else {

			// находим инпут и ставим фокус
			if(this.form) {
				cInput = this.form.getElementsByTagName('input');
				cTextarea = this.form.getElementsByTagName('textarea');
				if(cTextarea.length) {
					cTextarea[0].focus();
				} else if(cInput.length) {
					for(var i=0; i<cInput.length; ++i) {
						if(cInput[i].getAttribute('type') == 'text') {
							cInput[i].focus();
							break;
						}
					}
				}
			}

		}

		// не для поиска фильмов в отзыве
		if(this.addObjectType != 'film2review') {

			// добавляем обработчик кликов
			if(document.addEventListener)
				document.addEventListener('click', this.OnClickOuter, false);
			else if (document.attachEvent)
				document.attachEvent('onclick', this.OnClickOuter);

			this.ToggleBanner('hide');
		}

		return false;
	}

	// обработчик клика, когда интерфейс открыт
	this.OnClickOuter = function(e) {

		var el = e.target ? e.target : event.srcElement;

		// кликнули внутри интерфейса или на ссылку открывающую его?
		while(el) {
			// кликнули внутри интерфейса? возвращаем true, чтобы в IE элемент в интерфейсе сработал
			if(el == that.obj)
				return true;
			// кликнули внутри на ссылку открывающую его? возвращаем false, чтобы в IE href на сработал
			if(el == that.linkObj)
				return false;
			el = el.parentNode;
		}

		that.Hide(that.obj);

		return false;

	}


	this.Hide = function(obj) {

		if(this.obj)
			this.obj.style.display = 'none';

		// специально для тагконтроля
		if(obj)
			obj.style.display = 'none';

		// убираем обработчик кликов
		if(document.removeEventListener)
			document.removeEventListener('click', this.OnClickOuter, false);
		else if (document.detachEvent)
			document.detachEvent('onclick', this.OnClickOuter);

		this.ToggleBanner('show');

		return false;

	}


	// скрываем или показываем баннер
	this.ToggleBanner = function(action) {

		if(this.addObjectType == 'person2film' || this.addObjectType == 'authInterface') {

			var ad = document.getElementById('ad2');
			if(ad) ad.style.visibility = action == 'hide' ? 'hidden' : 'visible';

		}
	}


	// проверяем текст о фильме и отправляем его
	this.CheckFilmInfo = function() {

		if(!this.obj) {
			alert('Не задан this.obj!');
			return false;
		}

		if(!this.form) {
			alert('Не задан this.form!');
			return false;
		}

		// проверки для числовых значений
		var el = this.form.budget;
//		if(el) {
//		} else if(el = this.form.takings_russian) {
//		} else if(el = this.form.takings_full) {
//		} else if(el = this.form.long) {
//		}

		if(el) {
			// допустимые символы вырезаем и проверяем на остальные
			el.value = el.value.replace(/(\.|,| )/, '');
			if(el.value.match(/[^0-9]/)) {
				this.ShowMessage('error', 'Вы должны указать число');
				return false;
			}
		}

		// проверки для жанра, страны
		el = this.form.genre;
		if(el && el.value.length == 0) {
			this.ShowMessage('error', 'Вы должны выбрать хотя бы один жанр');
			return false;
		}
		el = this.form.country;
		if(el && el.value.length == 0) {
			this.ShowMessage('error', 'Вы должны выбрать хотя бы одну страну');
			return false;
		}

		// проверки для текста
		el = this.form.text;
		if(el && el.value) {
			if(el.value.replace(/\s*/, '').length == 0) {
				this.ShowMessage('error', 'Вы должны написать текст');
				return false;
			}

			if(el.value.replace(/\s*/, '').length > 400) {
				this.ShowMessage('error', 'В тексте допустимо не больше 400 символов');
				return false;
			}
		}

		aReq = new AJAX_Request();

		if(!this.documentId)
			this.documentId = this.form._id.value;

		this.form.submit.disabled = true;
 		aReq.SendForm(this.form, this.UpdateFilmInfo);

		return false;

	}

	// показываем ошибку
	this.ShowMessage = function(divClass, message) {

		if(!this.form) {
			alert('Не задан this.form!');
			return false;
		}

		co = this.form.getElementsByTagName('div');
		for(var i=0; i<co.length; ++i) {
			if(co[i].className == divClass)
				co[i].innerHTML = message;
		}

	}


	this.UpdateFilmInfo = function(req, status, verbal) {

//		if(interfaceObj.addObjectType == 'text2person')
//			alert(req.responseText);

	 	if(error = GetNode(req.responseXML.documentElement, 'error')) {
	 		interfaceObj.ShowMessage('error', error);
	 		return false;
		}
		interfaceObj.ViewChanges();

		return false;

	}


	this.ViewChanges = function() {

		if(this.containerData) {

			req = new AJAX_Request();

			var object = this.containerData.id.replace(/^(film|person)(info|persons|films)(.*)$/i, '$1').toLowerCase();
			var type = this.containerData.id.replace(/^(film|person)(info|persons|films)(.*)$/i, '$2').toLowerCase();
			var queryString = this.containerData.id.replace(/^(film|person)(info|persons|films)(.*)$/i, '$3').toLowerCase();

			if(type == 'info')
				url = '/inc/' + object + 's_' + type + '/' + this.documentId + '.shtml?' + queryString;
			else
				url = '/php/' + object + '_' + type + '.phtml?_id=' + this.documentId + '&type=' + queryString;

			req.Send(url, 'get', false);
			this.containerData.innerHTML = req.responseText;

//			alert(url);


			if(queryString == 'col1' || queryString == 'col3') {

				req = new AJAX_Request();

				req.Send('/inc/films_' + type + '/' + this.documentId + '.shtml?short', 'get', false);
				el = document.getElementById('filmInfoSubtitle');
//				alert(el);
				if(el)
					el.innerHTML = req.responseText;

			}

			this.Hide();

		} else {

			alert('Успешно!');
			document.location.href = document.location.href;

		}

		return false;

	}


	this.selectElInfo = function(el, inputName) {

//		alert(el.id);

		el.className = el.className == 'select' ? '' : 'select';

		var ar = new Array();

		if(!this.arSelectEl[inputName])
			this.arSelectEl[inputName] = new Array();

		var arSelectEl = this.arSelectEl[inputName];

		for(var i=0; i < arSelectEl.length; ++i) {
			if(arSelectEl[i] != el.id) {
				ar.push(arSelectEl[i]);
			}
		}

		if(ar.length == arSelectEl.length)
			ar.push(el.id);

		this.arSelectEl[inputName] = ar;

		str = ar.join(',');

		co = document.getElementsByName(inputName);
		co[0].value = str;

//		alert(str);

	}


	this.Lookup = function(e) {

		el = document.forms.lookupForm.q;

		if(el.value == el.getAttribute('oldvalue'))
			return;

		el.setAttribute('oldvalue', el.value);

		if(el.value.length < 2) {
			if(interfaceObj.elNext)
				interfaceObj.elNext.style.display = 'none';
			interfaceObj.elRes.style.display = 'none';
			return;
		}

		interfaceObj.resultReqStr = el.value;

		req = new AJAX_Request();
		req.Set('q', interfaceObj.resultReqStr.toLowerCase());

		if(interfaceObj.addObjectType == 'person2film') {

			req.Set('_action', 'find_person');
			req.Send('/php/lookup_person.phtml', 'get', interfaceObj.ShowResults);

		} else if(interfaceObj.addObjectType.match(/^film/)) {

			req.Set('_action', 'find_film');
			req.Send('/php/lookup_film.phtml', 'get', interfaceObj.ShowResults);

		}

		// включаем думалку
		el.className = el.className.replace(/pass/g,'') + ' wait';

	}


	this.openPanel = function(panelId) {

		for(var i=0; i<this.aPanels.length; i++) {
			var elPanel = document.getElementById(this.aPanels[i]);
			if(elPanel)
				elPanel.style.display = this.aPanels[i] == panelId ? 'block' : 'none';
		}

		return true;
	}

	this.openFormInfo = function() {

		this.openPanel('InfoPanel');

		this.ResetInfoPanel();

		if(document.forms.lookupForm.q.value.length >= 2) {
			var xmlEl = this.GetSelectedItem();

			if(this.addObjectType == 'person2film')
				this.FillPersonInfoFields(xmlEl);
			else if(this.addObjectType == 'film2person')
				this.FillFilmInfoFields(xmlEl);

		}

		return false;
	}

	this.ResetInfoPanel = function() {

		if(this.addObjectType == 'person2film') {

			el = document.getElementById('person_id');
			if(el) el.value = '';

			el = document.getElementById('elInfoTitle');
			if(el) el.innerHTML = 'Новая персона:';

			el = document.getElementById('birth_year');
			if(el) el.innerHTML = '<select name="birth_year" class="text"><option value="-">Неизвестно</option><option value="2008">2008</option><option value="2007">2007</option><option value="2006">2006</option><option value="2005">2005</option><option value="2004">2004</option><option value="2003">2003</option><option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option><option value="1929">1929</option><option value="1928">1928</option><option value="1927">1927</option><option value="1926">1926</option><option value="1925">1925</option><option value="1924">1924</option><option value="1923">1923</option><option value="1922">1922</option><option value="1921">1921</option><option value="1920">1920</option><option value="1919">1919</option><option value="1918">1918</option><option value="1917">1917</option><option value="1916">1916</option><option value="1915">1915</option><option value="1914">1914</option><option value="1913">1913</option><option value="1912">1912</option><option value="1911">1911</option><option value="1910">1910</option><option value="1909">1909</option><option value="1908">1908</option><option value="1907">1907</option><option value="1906">1906</option><option value="1905">1905</option><option value="1904">1904</option><option value="1903">1903</option><option value="1902">1902</option><option value="1901">1901</option><option value="1900">1900</option><option value="1899">1899</option><option value="1898">1898</option><option value="1897">1897</option><option value="1896">1896</option><option value="1895">1895</option><option value="1894">1894</option><option value="1893">1893</option><option value="1892">1892</option><option value="1891">1891</option><option value="1890">1890</option><option value="1889">1889</option><option value="1888">1888</option><option value="1887">1887</option><option value="1886">1886</option><option value="1885">1885</option><option value="1884">1884</option><option value="1883">1883</option><option value="1882">1882</option><option value="1881">1881</option><option value="1880">1880</option><option value="1879">1879</option><option value="1878">1878</option><option value="1877">1877</option><option value="1876">1876</option><option value="1875">1875</option><option value="1874">1874</option><option value="1873">1873</option><option value="1872">1872</option><option value="1871">1871</option><option value="1870">1870</option><option value="1869">1869</option><option value="1868">1868</option><option value="1867">1867</option><option value="1866">1866</option><option value="1865">1865</option><option value="1864">1864</option><option value="1863">1863</option><option value="1862">1862</option><option value="1861">1861</option><option value="1860">1860</option><option value="1859">1859</option><option value="1858">1858</option><option value="1857">1857</option><option value="1856">1856</option><option value="1855">1855</option><option value="1854">1854</option><option value="1853">1853</option><option value="1852">1852</option><option value="1851">1851</option><option value="1850">1850</option><option value="1849">1849</option><option value="1848">1848</option><option value="1847">1847</option></select>';

			var arFields = new Array(5);
			arFields[0] = 'rus_name';
			arFields[1] = 'rus_lastname';
			arFields[2] = 'eng_name';
			arFields[3] = 'eng_lastname';
			arFields[4] = 'role';

		} else if(this.addObjectType == 'film2person') {

			el = document.getElementById('film_id');
			if(el) el.value = '';

			el = document.getElementById('elInfoTitle');
			if(el) el.innerHTML = 'Новый фильм:';

			el = document.getElementById('year');
			if(el) el.innerHTML = '<select name="year" class="text"><option value="">Укажите</option><option value="2015">2015</option><option value="2014">2014</option><option value="2013">2013</option><option value="2012">2012</option><option value="2011">2011</option><option value="2010">2010</option><option value="2009">2009</option><option value="2008">2008</option><option value="2007">2007</option><option value="2006">2006</option><option value="2005">2005</option><option value="2004">2004</option><option value="2003">2003</option><option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option><option value="1929">1929</option><option value="1928">1928</option><option value="1927">1927</option><option value="1926">1926</option><option value="1925">1925</option><option value="1924">1924</option><option value="1923">1923</option><option value="1922">1922</option><option value="1921">1921</option><option value="1920">1920</option><option value="1919">1919</option><option value="1918">1918</option><option value="1917">1917</option><option value="1916">1916</option><option value="1915">1915</option><option value="1914">1914</option><option value="1913">1913</option><option value="1912">1912</option><option value="1911">1911</option><option value="1910">1910</option><option value="1909">1909</option><option value="1908">1908</option><option value="1907">1907</option><option value="1906">1906</option><option value="1905">1905</option><option value="1904">1904</option><option value="1903">1903</option><option value="1902">1902</option><option value="1901">1901</option><option value="1900">1900</option><option value="1899">1899</option><option value="1898">1898</option><option value="1897">1897</option><option value="1896">1896</option><option value="1895">1895</option><option value="1894">1894</option><option value="1893">1893</option><option value="1892">1892</option><option value="1891">1891</option><option value="1890">1890</option><option value="1889">1889</option><option value="1888">1888</option><option value="1887">1887</option><option value="1886">1886</option><option value="1885">1885</option><option value="1884">1884</option><option value="1883">1883</option><option value="1882">1882</option><option value="1881">1881</option><option value="1880">1880</option><option value="1879">1879</option><option value="1878">1878</option><option value="1877">1877</option><option value="1876">1876</option><option value="1875">1875</option><option value="1874">1874</option><option value="1873">1873</option><option value="1872">1872</option><option value="1871">1871</option><option value="1870">1870</option><option value="1869">1869</option><option value="1868">1868</option><option value="1867">1867</option><option value="1866">1866</option><option value="1865">1865</option><option value="1864">1864</option><option value="1863">1863</option><option value="1862">1862</option><option value="1861">1861</option><option value="1860">1860</option><option value="1859">1859</option><option value="1858">1858</option><option value="1857">1857</option><option value="1856">1856</option><option value="1855">1855</option><option value="1854">1854</option><option value="1853">1853</option><option value="1852">1852</option><option value="1851">1851</option><option value="1850">1850</option><option value="1849">1849</option><option value="1848">1848</option><option value="1847">1847</option></select>';

			var arFields = new Array(3);
			arFields[0] = 'rus_name';
			arFields[1] = 'eng_name';
			arFields[2] = 'role';

		}

		for(i=0; i<arFields.length; i++) {
			el = document.getElementById(arFields[i]);
			if(el) {
				el.innerHTML = '<input type="text" name="' + arFields[i] + '">';
				el.value = '';
			}
		}

		el = document.getElementById('amplua');
		if(el) el.innerHTML = '<select name="amplua" id="inputAmplua" class="text" onchange="interfaceObj.OnChangeAmplua();"><option value="0">нет</option><option value="63">Актер/Актриса</option><option value="7844">Аниматор</option><option value="280">Гример</option><option value="117">Звукорежиссер</option><option value="279">Каскадер</option><option value="35278">Кастинг</option><option value="229">Композитор</option><option value="63697">Консультант</option><option value="40535">Музыка в фильме</option><option value="226">Оператор</option><option value="54856">Переводчик</option><option value="34468">Писатель</option><option value="227">Продюсер</option><option value="282">Редактор</option><option value="64">Режиссер</option><option value="231">Режиссер монтажа</option><option value="228">Сценарист</option><option value="281">Художник по костюмам</option><option value="230">Художник-постановщик</option></select>';

		el = document.getElementById('inputAmplua');
		if (el)	el.value = this.ampluaId ? this.ampluaId : '';

		this.OnChangeAmplua();

	}

	this.OnChangeAmplua = function() {

		var el = document.getElementById('inputAmplua');
		var divRole = document.getElementById('line_role');

		if(el && divRole)
			divRole.style.display = el.value == 63 ? '' : 'none';
	}

	this.GetSelectedItem = function() {

		if(!xml)
			return false;

		var cn = xml.getElementsByTagName(this.GetXmlItemName());

		if(cn.length && this.resultItem >= 0)
			return cn[this.resultItem];
		else
			return false;

	}


	this.FillPersonInfoFields = function(xmlEl) {

		if(xmlEl) {

	 		var arFields = new Array(5);
	 		arFields[0] = 'rus_name';
	 		arFields[1] = 'rus_lastname';
	 		arFields[2] = 'eng_name';
	 		arFields[3] = 'eng_lastname';
	 		arFields[4] = 'birth_year';

	 		for(i=0; i<arFields.length; i++) {

				cn = xmlEl.getElementsByTagName(arFields[i]);
				el = document.getElementById(arFields[i]);

				if(cn.length >= 1 && cn[0].childNodes.length && el) {
	//					alert(cn[0].childNodes.length);
					el.innerHTML = cn[0].childNodes[0].nodeValue;
				}

			}

			var cn = xmlEl.getElementsByTagName('_id');
			if(cn.length == 0)
				cn = xmlEl.getElementsByTagName('id');
			el = document.getElementById('person_id');
			if(el)
				el.value = cn[0].childNodes[0].nodeValue;

			el = document.getElementById('elInfoTitle');
			if(el)
				el.innerHTML = 'Персона на сайте:';

			// если в xmlEl задано amplua
	 		var arFields = new Array(2);
	 		arFields[0] = 'amplua';
	 		arFields[1] = 'role';

	 		for(i=0; i<arFields.length; i++) {

				cn = xmlEl.getElementsByTagName(arFields[i]);
				el = document.getElementById(arFields[i]);

				if(cn.length >= 1 && cn[0].childNodes.length && el) {
//					alert(cn[0].childNodes.length);
					el.childNodes[0].value = cn[0].childNodes[0].nodeValue;
				}
			}
			this.OnChangeAmplua();


		} else {

			var name = '';
			var lastname = '';
			var prefix = '';

			el = document.forms.lookupForm.q;
			if (el) {
				el.value = el.value.replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s+/, ' ');
				if(el.value.match(/\s/)) {
					name = el.value.replace(/^([^ ]+)\s+(.+)$/, '$1');
					lastname = el.value.replace(/^([^ ]+)\s+(.+)$/, '$2');
				} else {
					name = el.value;
					lastname = '';
				}

//				alert(name);
//				alert(lastname);

				if(el.value.match(/[a-z]/i))
					prefix = 'eng';
				else
					prefix = 'rus';
			}

			el = document.forms.addForm[prefix + '_name'];
			if(el) el.value = name;

			el = document.forms.addForm[prefix + '_lastname'];
			if(el) el.value = lastname;

		}

		return;
	}


	this.FillFilmInfoFields = function(xmlEl) {

		if(xmlEl) {

	 		arFields = new Array(3);
	 		arFields[0] = 'rus_name';
	 		arFields[1] = 'eng_name';
	 		arFields[2] = 'year';

	 		for(i=0; i<arFields.length; i++) {

				cn = xmlEl.getElementsByTagName(arFields[i]);
				el = document.getElementById(arFields[i]);

				if(cn[0].childNodes.length && el) {
//					alert(cn[0].childNodes.length);
					el.innerHTML = cn[0].childNodes[0].nodeValue;
				}

			}

			var cn = xmlEl.getElementsByTagName('_id');
			if(cn.length == 0)
				cn = xmlEl.getElementsByTagName('id');
			var el = document.getElementById('film_id');
			if(el)
				el.value = cn[0].childNodes[0].nodeValue;

			el = document.getElementById('elInfoTitle');
			if(el)
				el.innerHTML = 'Фильм на сайте:';

		} else {

			var name = '';
			var prefix = '';

			el = document.forms.lookupForm.q;
			if (el) {
				el.value = el.value.replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s+/, ' ');

				name = el.value;

				if(el.value.match(/[a-z]/i))
					prefix = 'eng';
				else
					prefix = 'rus';
			}

			el = document.forms.addForm[prefix + '_name'];
			if(el)
				el.value = name;

		}

		return;
	}


	this.CheckPerson = function() {

		form = document.forms.addForm;


		if(!form.person_id.value) {

			rusname = '';
			engname = '';
			errorFields = '';
			if(form.rus_name.value.length) {
				rusname = form.rus_name.value;
			} else {
				el = document.getElementById('line_rus_name');
				if(el) {
					td = el.getElementsByTagName('td');
					errorFields += "'" + td[0].innerHTML + "'\n";
				}
			}

			if(form.rus_lastname.value) {
	  			rusname += ' ' + form.rus_lastname.value;
			} else {
				el = document.getElementById('line_rus_lastname');
				if(el) {
					td = el.getElementsByTagName('td');
					errorFields += "'" + td[0].innerHTML + "'";
				}
			}

			if(!form.birth_year.value) {
				el = document.getElementById('line_birth_year');
				if(el) {
					td = el.getElementsByTagName('td');
					errorFields += "'" + td[0].innerHTML + "'";
				}
			}

			if(errorFields) {
				alert("Вы не заполнили поля:\n" + errorFields);
				return false;
			}

			if(form.eng_name)
				engname = form.eng_name.value;
			if(form.eng_lastname)
				engname += ' ' + form.eng_lastname.value;

	//			alert(rusname);
	//			alert(engname);

			req = new AJAX_Request();
			req.Set('_action', 'find_person');
			req.Set('q', rusname.toLowerCase());
			req.Set('w', engname.toLowerCase());
			req.Send('/php/lookup_person.phtml', 'get', this.ShowConfirmResults);


		} else {
			this.Send();
		}

		return false;

	}


	this.CheckFilm = function() {

		form = document.forms.addForm;


		if(!form.film_id.value) {

			rusname = '';
			engname = '';
			errorFields = '';
			if(form.rus_name.value.length) {
				rusname = form.rus_name.value;
			} else {
				el = document.getElementById('line_rus_name');
				if(el) {
					td = el.getElementsByTagName('td');
					errorFields += "'" + td[0].innerHTML + "'\n";
				}
			}

			if(!form.year.value) {
				el = document.getElementById('line_year');
				if(el) {
					td = el.getElementsByTagName('td');
					errorFields += "'" + td[0].innerHTML + "'";
				}
			}

			if(errorFields) {
				alert("Вы не заполнили поля:\n" + errorFields);
				return false;
			}

			if(form.eng_name)
				engname = form.eng_name.value;

	//		alert(rusname);
	//		alert(engname);

			req = new AJAX_Request();
			req.Set('_action', 'find_film');
			req.Set('q', rusname.toLowerCase());
			req.Set('w', engname.toLowerCase());
			req.Send('/php/lookup_film.phtml', 'get', this.ShowConfirmResults);


		} else {
		 	return this.Send();
		}

		return false;

	}


	this.Send = function() {

		aReq = new AJAX_Request();

		this.documentId = document.forms.addForm['_id'].value;

		document.forms.addForm.submit.disabled = true;
		document.forms.confirmForm.submit.disabled = true;
	 	aReq.SendForm(document.forms.addForm, this.AddFormSubmitted);

		return false;
	}

	this.ShowConfirmResults = function(req, status, verbal) {

//		alert(req.responseText);

		xml = req.responseXML.documentElement;

		if(!xml) {
			alert('xml то пустой!' + req.responseText);
			return;
		}

		if(!status) {
			alert('Статус плохой!');
			return;
		}

		cn = xml.getElementsByTagName(interfaceObj.GetXmlItemName());
		l = cn.length;

		el = document.getElementById('elConfirmResults');
		if(el) {
			if(l > 0) {
				interfaceObj.openPanel('ConfirmPanel');
				el.innerHTML = interfaceObj.GetStrResults(xml);
			} else {
				return interfaceObj.Send();
			}
		}

		return false;

	}

	this.AddFormSubmitted = function(req, status, verbal) {

//		alert(req.responseText);

		xml = req.responseXML.documentElement;
	 	if(error = GetNode(xml, 'error')) {
			alert(error);
			interfaceObj.openPanel('InfoPanel');
			document.forms.addForm.submit.disabled = false;
			document.forms.confirmForm.submit.disabled = false;
			return;
		}

	 	if(success = GetNode(xml, 'success')) {
//	 		alert("Создана связь - " + success);
//			document.location.href = document.location.href;
			interfaceObj.ViewChanges();
			return;
		}

		return false;

	}


	this.ShowResults = function(req, status, verbal) {

		// убираем думалку
		el = document.forms.lookupForm.q;
		if(el)
			el.className = el.className.replace(/wait/g,'') + ' pass';

//		alert(req.responseText);
		this.xml = req.responseXML.documentElement;

		if(!xml) {
			alert('xml то пустой!' + req.responseText);
			return;
		}

		if(!status) {
			alert('Статус плохой!');
			return;
		}

		cn = xml.getElementsByTagName(interfaceObj.GetXmlItemName());

		l = cn.length;

		if(interfaceObj.elFoundTotal)
			interfaceObj.elFoundTotal.innerHTML = l;

		if(l == 0) {
			if(interfaceObj.elNext)
	   			interfaceObj.elNext.style.display = document.forms.lookupForm.q.value.length < 2 ? 'none' : 'block';
	    	interfaceObj.elRes.innerHTML = '';
			interfaceObj.elRes.style.display = 'none';
			return;
		} else {
			if(interfaceObj.elNext)
				interfaceObj.elNext.style.display = 'block';
			interfaceObj.elRes.style.display = 'block';
			interfaceObj.elRes.style.visibility = 'visible';
		}

//	   	alert(interfaceObj.elNext.style.display);
//	   	alert(interfaceObj.elRes.style.display);

		if(l == 1)
			items = interfaceObj.elRes.getElementsByTagName('P');

		interfaceObj.elRes.innerHTML = interfaceObj.GetStrResults(xml);

	}

	// возвращаем имя тага-итема в xml-ответе
	this.GetXmlItemName = function(xml) {

		if(this.addObjectType.match(/^person/))
			return 'person';

		else if(this.addObjectType.match(/^film/))
			return 'film';

		else
			return 'item';

	}

	// преобразуем полученный xml в строчку
	this.GetStrResults = function(xml) {

		cn = xml.getElementsByTagName(this.GetXmlItemName());

		l = cn.length;

		this.resultLength = l;
		this.resultItem = -1;
		this.resultOldItem = false;

		var str = '';
		for (i=0; i<l; ++i) {

			elId = GetNode(cn[i], '_id');

			var rus = '';
			var eng = '';
			var year = '';

			if(this.addObjectType.match(/^person/)) {

				rusname = GetNode(cn[i], 'rus_name');
				ruslastname = GetNode(cn[i], 'rus_lastname');
				if(rusname != '')
					rus = rusname;
				if(ruslastname != '')
					rus += ' ' + ruslastname;

				engname = GetNode(cn[i], 'eng_name');
				englastname = GetNode(cn[i], 'eng_lastname');
				if(engname != '')
					eng = engname;
				if(englastname != '')
					eng += ' ' + englastname;


					itemTag = '<p id="item' + elId + '">';


				year = GetNode(cn[i], 'birth_year');
				if(year != '')
					year = ' (' + year + ')';

			} else if(this.addObjectType.match(/^film/)) {

				rusname = GetNode(cn[i], 'rus_name');
				if(rusname != '')
					rus = rusname;

				engname = GetNode(cn[i], 'eng_name');
				if(engname != '')
					eng = engname;



				itemTag = '<p id="item' + elId + '">';

				year = GetNode(cn[i], 'year');
				if(year != '')
					year = ' (' + year + ')';

			}

			str += itemTag + rus + ' - ' + eng + year + '</p>';

		}

		return str;

	}


	this.SelectItem = function(it) {

		if (this.resultOldItem) {
			this.resultOldItem.className = '';
		}

		this.resultOldItem = it;
		this.resultOldItem.className = 'active';
		if (this.resultOldItem.offsetTop > 75) {
			this.elRes.scrollTop = this.resultOldItem.offsetTop - 75;
		} else {
			this.elRes.scrollTop = 0;
		}
	}

	this.OnClickResults = function(e) {

		//e = e ? e : event;

		srcEl = e ? e.target : event.srcElement;

		while(srcEl && !srcEl.id.match(/item[0-9]+/)) {
			srcEl = srcEl.parentNode;
		}

		if (srcEl) {
			interfaceObj.SelectItem(srcEl);

			items = interfaceObj.elRes.getElementsByTagName('P');
			for(i=0; i < items.length; ++i) {
				if(srcEl.id == items[i].id) {
					interfaceObj.resultItem = i;

					if(interfaceObj.addObjectType == 'person2film' || interfaceObj.addObjectType == 'film2person') {

						interfaceObj.openFormInfo();

					} else if(interfaceObj.addObjectType == 'film2review') {

						xmlEl = interfaceObj.GetSelectedItem();
						oItemsReview.ReviewSelectFilm(xmlEl);

					}

					break;
				}
			}
		}

	}

	this.OnClickConfirmResults = function(e) {

		//e = e ? e : event;

		srcEl = e ? e.target : event.srcElement;

		while (srcEl && !srcEl.id.match(/item[0-9]+/)) {
			srcEl = srcEl.parentNode;
		}

		if (srcEl) {
			interfaceObj.SelectItem(srcEl);

			items = interfaceObj.elConfirmRes.getElementsByTagName('P');
			for (i=0; i < items.length; ++i) {
				if (items[i].id == srcEl.id) {
					interfaceObj.resultItem = i;
					interfaceObj.openFormInfo();
					break;
				}
			}
		}
	}

	this.Navigate = function(e) {

		e = e ? e : event;

		var keyCode = e.keyCode;

		// Вверх
		if (keyCode == 38) {

			if (interfaceObj.resultItem < 1)
				return false;
			--interfaceObj.resultItem;

		// Вниз
		} else if (keyCode == 40) {

			if (interfaceObj.resultItem >= (interfaceObj.resultLength-1))
				return false;
			++interfaceObj.resultItem;

		// enter
		} else if (keyCode == 13) {

			if(interfaceObj.addObjectType == 'film2review') {
				xmlEl = interfaceObj.GetSelectedItem();
				oItemsReview.ReviewSelectFilm(xmlEl);
				return false;
			} else if(interfaceObj.addObjectType == 'film2person' || interfaceObj.addObjectType == 'person2film') {
				return false;
//				interfaceObj.openFormInfo();
			}

		} else {
			return;
		}

		items = interfaceObj.elRes.getElementsByTagName('P');
		if (items) {
			if (interfaceObj.resultItem < items.length) {
				interfaceObj.SelectItem(items[interfaceObj.resultItem]);
			}
		}

		return false;
	}

	this.Auth = function() {

		aReq = new AJAX_Request();

		this.form.method = 'get';
		this.form.action = '/php/auth.phtml';

		aReq.SendForm(this.form, false);

//		alert(aReq.responseText);
//		return false;

		var xml = aReq.responseXML.documentElement;

		if(xml) {

			// ошибки есть?
			if(error = GetNode(xml, 'error')) {
				ShowMessage('auth_submit', 'notice', error);
			// ошибок нет?
			} else if(GetNode(xml,'success')) {
				location.href = location.href.replace(/#.*$/, '');
			}
		}

		return false;
	}
}

Interface.prototype.ShowEditRoleIco = function(oTd) {
	return this.ToggleEditRoleIco(oTd, 'show');
}

Interface.prototype.HideEditRoleIco = function(oTd) {
	return this.ToggleEditRoleIco(oTd, 'hide');
}

Interface.prototype.ToggleEditRoleIco = function(oTd, action) {
	var cDiv = oTd.getElementsByTagName('DIV');
	if(cDiv && cDiv.length == 1)
		cDiv[0].style.display = (action == 'show' ? 'block' : 'none');

	return false;
}


function GetNode(n, name) {

	res = '';
	nTags = n.getElementsByTagName(name);

	if (nTags && nTags.length > 0 && nTags[0].childNodes.length > 0) {
		res = nTags[0].childNodes[0].nodeValue;
	}

	return res;
}

ShowMessage = function(id, type, text) {

	el1 = document.getElementById(id + '_notice');
	el2 = document.getElementById(id + '_ok');

	if(!el1 || !el2)
		return false;

	if(type == 'ok') {
		el1.style.display = 'none';
		el2.style.display = 'inline';
		co = el2.getElementsByTagName('SPAN');
		if(text) {
			co[0].innerHTML = text;
		} else {
			co[0].innerHTML = 'ok';
		}
	} else if(type == 'notice') {
		el1.style.display = 'inline';
		el2.style.display = 'none';
		if(text) {
			co = el1.getElementsByTagName('SPAN');
			co[0].innerHTML = text;
		}
	} else if(type == 'none') {
		el1.style.display = 'none';
		el2.style.display = 'none';
	}

	return true;
}