var flag_cate=0;
window.onload = function()
{
	var catflag = document.getElementById('cateringflag');
	if (catflag)
	{
		catflag.onchange = setcatering;
		var fobj = document.forms[0];
		fobj.type.onchange = setcateringselect;
		if (catflag.checked == true)
		{
			fobj.type.selectedIndex = 13;
			fobj.orientir.disabled = true;
		}
	}
}

function checkawardform(oForm)
{
	if (oForm.placename.value == '')
	{
		alert('Необходимо ввести название заведения');
		oForm.placename.focus();
		return false;
	}
	if (oForm.phones.value == '')
	{
		alert('Необходимо ввести телефоны');
		oForm.phones.focus();
		return false;
	}
	if (oForm.name.value == '')
	{
		alert('Необходимо ввести Ф.И.О.');
		oForm.name.focus();
		return false;
	}
	return true;
}

var voting = function(container, module, place)
{
	this.container = container;
	this.place = place;
	this.imgcontainer = G('div', this.container)[0];
	this.activeImgSrc = '/images/voting/star1.gif';
	this.inactiveImgSrc = '/images/voting/star0.gif';
	this.module = module;
	
	this.activeImgObj = new Image();
	this.activeImgObj.src = this.activeImgSrc;
	
	this.inactiveImgObj = new Image();
	this.inactiveImgObj.src = this.inactiveImgSrc;
	
	this.cfg = null;
	var self = this;
	
	this.init = function()
	{
		var req = getrequestobj();
		req.open('get', '/modules/voting.php?module='+this.module+'&id='+this.place);
		req.onreadystatechange = function()
		{
			if (req.readyState != 4 || req.status != 200) return false;
			self.cfg = eval('(' + req.responseText + ')');
			req.abort();
			
			for (var i=0; i<5; i++)
			{
				var img = i < self.cfg.intBall ? self.activeImgObj.cloneNode(true) : 
												self.inactiveImgObj.cloneNode(true);
				img.id = 'vote-' + self.module + '-' + i;
				if (self.cfg.disabled == 0)
				{
					img.onmouseover = self.reDraw;
					img.onmouseout = self.reStore;
					img.onclick = self.vote;
					img.style.cursor = 'pointer';
				}
				self.imgcontainer.appendChild(img);
			}
			var nums = G('span', self.container);
			nums[0].innerHTML = self.cfg.intBall;
			nums[1].innerHTML = self.cfg.voters;
		};
		req.send(null);
	}
	
	this.reStore = function()
	{
		var num = self.cfg.intBall;
		self.fill(num);
	}
	
	this.reDraw = function()
	{
		var num = parseInt(this.id.replace(/.*?(\d)$/, '$1')) + 1;
		self.fill(num);
	}
	
	this.fill = function(num)
	{
		var img = G('img', self.imgcontainer);
		for (var i=0; i<5; i++)
			img[i].src = i < num? self.activeImgSrc : self.inactiveImgSrc;
	}
	
	this.vote = function()
	{
		var mark = parseInt(this.id.replace(/.*?(\d)$/, '$1')) + 1;
		var req = getrequestobj();
		req.open('get', '/modules/voting.php?module='+self.module+'&id='+self.place+'&mark='+mark);
		req.onreadystatechange = function()
		{
			if (req.readyState != 4 || req.status != 200) return false;
			self.cfg = eval('(' + req.responseText + ')');
			var img = G('img', self.imgcontainer);
			for (var i=0; i<5; i++)
			{
				img[i].src = i < self.cfg.intBall ? self.activeImgSrc : self.inactiveImgSrc;
				
				img[i].onmouseover = null;
				img[i].onmouseout = null;
				img[i].onclick = null;
				img[i].style.cursor = 'auto';
			}
			var nums = G('span', self.container);
			nums[0].innerHTML = self.cfg.ball;
			nums[1].innerHTML = self.cfg.voters;
		};
		req.send(null);
	}
}

var voting2 = function(container, module, place)
{
	this.container = container;
	this.place = place;
	this.imgcontainer = G('div', this.container)[1];
	this.activeImgSrc = '/images/voting/star2_1.png';
	this.inactiveImgSrc = '/images/voting/star2_0.png';
	this.module = module;
	
	this.activeImgObj = new Image();
	this.activeImgObj.src = this.activeImgSrc;
	
	this.inactiveImgObj = new Image();
	this.inactiveImgObj.src = this.inactiveImgSrc;
	
	this.cfg = null;
	var self = this;
	
	this.init = function()
	{
		var req = getrequestobj();
		req.open('get', '/modules/voting.php?module='+this.module+'&id='+this.place);
		req.onreadystatechange = function()
		{
			if (req.readyState != 4 || req.status != 200) return false;
			self.cfg = eval('(' + req.responseText + ')');
			req.abort();
			for (var i=0; i<5; i++)
			{
				var img = i < self.cfg.intBall ? self.activeImgObj.cloneNode(true) : 
												self.inactiveImgObj.cloneNode(true);
				img.id = 'vote-' + self.module + '-' + i;
				if (self.cfg.disabled == 0)
				{
					img.onmouseover = self.reDraw;
					img.onmouseout = self.reStore;
					img.onclick = self.vote;
					img.style.cursor = 'pointer';
				}
				self.imgcontainer.appendChild(img);
			}
		};
		req.send(null);
	}
	
	this.reStore = function()
	{
		var num = self.cfg.intBall;
		self.fill(num);
	}
	
	this.reDraw = function()
	{
		var num = parseInt(this.id.replace(/.*?(\d)$/, '$1')) + 1;
		self.fill(num);
	}
	
	this.fill = function(num)
	{
		var img = G('img', self.imgcontainer);
		for (var i=0; i<5; i++)
			img[i].src = i < num? self.activeImgSrc : self.inactiveImgSrc;
	}
	
	this.vote = function()
	{
		var mark = parseInt(this.id.replace(/.*?(\d)$/, '$1')) + 1;
		var req = getrequestobj();
		req.open('get', '/modules/voting.php?module='+self.module+'&id='+self.place+'&mark='+mark);
		req.onreadystatechange = function()
		{
			if (req.readyState != 4 || req.status != 200) return false;
			self.cfg = eval('(' + req.responseText + ')');
			var img = G('img', self.imgcontainer);
			for (var i=0; i<5; i++)
			{
				img[i].src = i < self.cfg.intBall ? self.activeImgSrc : self.inactiveImgSrc;
				
				img[i].onmouseover = null;
				img[i].onmouseout = null;
				img[i].onclick = null;
				img[i].style.cursor = 'auto';
			}
		};
		req.send(null);
	}
}

var voting3 = function(container, module, place)
{
	this.container = container;
	this.place = place;
	this.imgcontainer = G('div', this.container)[0];
	this.activeImgSrc = '/images/voting/star_big1.gif';
	this.inactiveImgSrc = '/images/voting/star_big0.gif';
	this.module = module;
	
	this.activeImgObj = new Image();
	this.activeImgObj.src = this.activeImgSrc;
	
	this.inactiveImgObj = new Image();
	this.inactiveImgObj.src = this.inactiveImgSrc;
	
	this.cfg = null;
	var self = this;
	
	this.init = function()
	{
		var req = getrequestobj();
		req.open('get', '/modules/voting.php?module='+this.module+'&id='+this.place);
		req.onreadystatechange = function()
		{
			if (req.readyState != 4 || req.status != 200) return false;
			self.cfg = eval('(' + req.responseText + ')');
			req.abort();
			for (var i=0; i<5; i++)
			{
				var img = i < self.cfg.intBall ? self.activeImgObj.cloneNode(true) : 
												self.inactiveImgObj.cloneNode(true);
				img.id = 'vote-' + self.module + '-' + i;
				if (self.cfg.disabled == 0)
				{
					img.onmouseover = self.reDraw;
					img.onmouseout = self.reStore;
					img.onclick = self.vote;
					img.style.cursor = 'pointer';
				}
				self.imgcontainer.appendChild(img);
			}
		};
		req.send(null);
	}
	
	this.reStore = function()
	{
		var num = self.cfg.intBall;
		self.fill(num);
	}
	
	this.reDraw = function()
	{
		var num = parseInt(this.id.replace(/.*?(\d)$/, '$1')) + 1;
		self.fill(num);
	}
	
	this.fill = function(num)
	{
		var img = G('img', self.imgcontainer);
		for (var i=0; i<5; i++)
			img[i].src = i < num? self.activeImgSrc : self.inactiveImgSrc;
	}
	
	this.vote = function()
	{
		var mark = parseInt(this.id.replace(/.*?(\d)$/, '$1')) + 1;
		var req = getrequestobj();
		req.open('get', '/modules/voting.php?module='+self.module+'&id='+self.place+'&mark='+mark);
		req.onreadystatechange = function()
		{
			if (req.readyState != 4 || req.status != 200) return false;
			self.cfg = eval('(' + req.responseText + ')');
			var img = G('img', self.imgcontainer);
			for (var i=0; i<5; i++)
			{
				img[i].src = i < self.cfg.intBall ? self.activeImgSrc : self.inactiveImgSrc;
				
				img[i].onmouseover = null;
				img[i].onmouseout = null;
				img[i].onclick = null;
				img[i].style.cursor = 'auto';
			}
		};
		req.send(null);
	}
}

function checkbanketformplace(fobj)
{
	if (fobj.data.value == '')
	{
		alert('Необходимо заполнить поле');
		fobj.data.focus();
		return false;
	}
	if (fobj.persons.value == '')
	{
		alert('Необходимо заполнить поле');
		fobj.persons.focus();
		return false;
	}
	if (fobj.fio.value == '')
	{
		alert('Необходимо заполнить поле');
		fobj.fio.focus();
		return false;
	}
	if (fobj.phones.value == '')
	{
		alert('Необходимо заполнить поле');
		fobj.phones.focus();
		return false;
	}
	return true;
}

function setstate(box)
{
	var form = G('#stateform');
	var value = box.getAttribute('value');
	if (value == 0 || value == 1)
	{
		form.state.value = value;
		var replacefrom = G('#statelist');
		var replaceto = G('#state01');
		G('span', replaceto)[0].innerHTML = getstatename(value);
	}
	else if (value == 2 || value == 3)
	{
		form.state.value = value;
		var replacefrom = G('#statelist');
		var replaceto = G('#state23');
		G('span', replaceto)[0].innerHTML = getstatename(value);
	}
	else if (value == 'hui')
	{
		form.state.value = '';
		var replacefrom = G('div', form)[0];
		var replaceto = G('#statelist');
	}
	form.replaceChild(replaceto, replacefrom);
	G('#formdivcontent').appendChild(replacefrom);
	replaceto.style.display = 'block';
	replacefrom.style.display = 'none';
}

function switcher(self, obj, ifhide, ifunhide)
{
	var el = G('#'+obj) || false;
	if (!el) return false;
	var state = el.style.display;
	if (state == 'none')
	{
		el.style.display = 'block';
		self.src = ifhide;
	}
	else
	{
		el.style.display = 'none';
		self.src = ifunhide;
	}
}

function setcurrent(state)
{
	var form = G('#stateform');
	if (state === false)
	{
		var replaceto = G('#statelist');
		var replacefrom = G('#formcontent');
	}
	else if (state == 0 || state == 1)
	{
		var replaceto = G('#state01');
		var replacefrom = G('div', form)[0];
		G('span', replaceto)[0].innerHTML = getstatename(state);
	}
	else if (state == 2 || state == 3)
	{
		var replaceto = G('#state23');
		var replacefrom = G('div', form)[0];
		G('span', replaceto)[0].innerHTML = getstatename(state);
	}
	form.replaceChild(replaceto, replacefrom);
	G('#formdivcontent').appendChild(replacefrom);
	replaceto.style.display = 'block';
	replacefrom.style.display = 'none';
}

function getstatename(state)
{
	switch (state)
	{
		case '0': return 'Учасник Special Events'; break;
		case '1': return 'Ресторатор'; break;
		case '2': return 'Представитель компании'; break;
		case '3': return 'Частное лицо'; break;
	}
	return false;
}

function replaceform(linkobj, id)
{
	var fobj = document.getElementById('commentform');
	id = parseInt(id);
	var currentDiv = linkobj.parentNode.parentNode.parentNode;
	var commentsContainer = currentDiv.parentNode;
	var nextDiv = nextNode(currentDiv);
	if (!nextDiv) commentsContainer.appendChild(fobj);
	else commentsContainer.insertBefore(fobj, nextDiv);
	fobj.action = '?comment=' + id;
}

function nextNode(node)
{
	var next = node.nextSibling;
	if (!next) return false;
	return next.nodeType == 1 ? next : nextNode(next);
}

var hallcount = 0;
function addplaceappendhall()
{
	var templ = document.getElementById('halltemplate').cloneNode(true);
	templ.style.display = 'block';
	templ.id = null;
	var container = document.getElementById('listhall');
	if (hallcount > 0)
	{
		var inputs = templ.getElementsByTagName('INPUT');
		var count = inputs.length;
		for (var i=0; i<count; i++) inputs[i].name = inputs[i].name.replace(/\[0\]/, '[' + hallcount + ']');
		var txtarea = templ.getElementsByTagName('TEXTAREA')[0];
		txtarea.name = txtarea.name.replace('\[0\]', '[' + hallcount + ']');
	}
	hallcount ++;
	container.appendChild(templ);
}

function enablesubmit()
{
	var chs = document.getElementById('checksub');
	if (!chs) return false;
	document.getElementById('buttsub').disabled = !(chs.checked == true);
	return true;
}

function checkorderform(fobj)
{
	/*if (fobj.elements[2].options.selectedIndex == -1)
	{
		alert('Необходимо выбрать тип заведения');
		fobj.elements[2].focus();
		return false;
	}
	if (fobj.elements[3].options.selectedIndex == -1)
	{
		alert('Необходимо выбрать ориентир');
		fobj.elements[3].focus();
		return false;
	}*/
	if (fobj.elements[11].options.selectedIndex == -1)
	{
		alert('Необходимо выбрать должность');
		fobj.elements[11].focus();
		return false;
	}
	if (fobj.data.value=='')
	{
		alert('Необходимо ввести дату');
		fobj.data.focus();
		return false;
	}
	if (fobj.seat.value=='')
	{
		alert('Необходимо ввести количество человек');
		fobj.seat.focus();
		return false;
	}
	if (fobj.name.value=='')
	{
		alert('Необходимо ввести Ф.И.О.');
		fobj.name.focus();
		return false;
	}
	if (fobj.phone.value=='')
	{
		alert('Необходимо ввести телефон');
		fobj.phone.focus();
		return false;
	}
	return true;
}

var reqobjfunc = false;
var getrequestobj = function()
{
	if (reqobjfunc) return reqobjfunc();
	else if (window.ActiveXObject)
	{
		reqobjfunc = function()
		{return new ActiveXObject("Microsoft.XMLHTTP");}
	}
	else
	{
		reqobjfunc = function()
		{return new XMLHttpRequest;}
	}
	return getrequestobj();
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function hideel(el)
{
	var elobj = document.getElementById(el);
	if (!elobj) return false;
	elobj.style.display = elobj.style.display == 'none'?'block':'none';
}

var ndsearch = function(title, input, button, result, path)
{
	var otitle = document.getElementById(title);
	var oinput = document.getElementById(input);
	var obutton = document.getElementById(button);
	var oresult = document.getElementById(result)
	var strname, straddr, jres;
	var sitepath = path || 'places';
	this.sinst = null;
	var self = this;
	this.iName = '';
	
	this.init = function()
	{
		if (!oinput || !obutton || !oresult) return false;
		if (sitepath == 'places')
		{
			var spans = otitle.getElementsByTagName('SPAN');
			strname = spans[0]; straddr = spans[1];
			strname.onclick = this.setname;
			straddr.onclick = this.setaddr;
			jres = '/search/json/name/?query=';
		}
		else jres = '/catalog/json/?query=';
		this.iName = oinput.id.replace('_input', '');
		obutton.onclick = this.gosearch;
		this.sinst = new livesearch(oinput, jres, oresult);
		this.sinst.init();
		ndsearch.insts[this.iName] = this.sinst;
		document.onclick = function(e)
		{
			var e = !e ? window.event : e;
			var target = !e.target ? e.srcElement : e.target;
			if (target.nodeName != 'A' || target.className != 'searchresultrow')
				ndsearch.hideAll();
		}
	}
	
	this.gosearch = function()
	{
		if (sitepath == 'places')
		{
			if (jres == '/search/json/name/?query=' && oinput.value != '')
			document.location = '/search/name/?query='+oinput.value;
			else if (jres == '/search/json/address/?query=' && oinput.value != '')
			document.location = '/search/address/?query='+oinput.value;
		}
		else if (oinput.value != '') document.location = '/catalog/search/?query='+oinput.value;
	}
	
	this.setname = function()
	{
		jres = '/search/json/name/?query=';
		strname.style.textDecoration = 'underline';
		strname.style.cursor = 'default';
		straddr.style.textDecoration = 'none';
		straddr.style.cursor = 'pointer';
		this.sinst = new livesearch(oinput, jres, oresult);
		this.sinst.init();
		ndsearch.insts[this.iName] = this.sinst;
	}
	
	this.setaddr = function()
	{
		jres = '/search/json/address/?query=';
		strname.style.textDecoration = 'none';
		strname.style.cursor = 'pointer';
		straddr.style.textDecoration = 'underline';
		straddr.style.cursor = 'default';
		self.sinst = new livesearch(oinput, jres, oresult);
		self.sinst.init();
		ndsearch.insts[self.iName] = self.sinst;
	}
}

var livesearch = function(iobj, jres, sres)
{
	var oinput = iobj;
	var jres = jres;
	this.jjres = jres;
	var searchresult = sres;
	this.ssres = sres;
	var timeout = null;
	var prevt = new Date();
	var prevq = null;
	var thisobj = this;
	
	this.init = function()
	{
		oinput.onkeydown = function(e)
		{
			if (!e) var e = window.event;
			//if (e.keyCode == 13) thisobj.change(this.value, 100);
			if (e.keyCode == 13 && this.value != '')
			{
				if (jres.indexOf('/search/') != -1)
				document.location = jres.replace(/\/json\//, '/') + this.value;
				else document.location = jres.replace(/\/json\//, '/search/') + this.value;
				return false;
			}
			return true;
		}
		oinput.onkeyup = function(e)
		{
			if (!e) var e = window.event;
			if (e.keyCode == 13) return true;
			thisobj.change(this.value, e.keyCode==32? 1000 : null);
			return true;
		}
		
		oinput.onfocus = function()
		{
			var txt = sres.getElementsByTagName('UL')[0].innerHTML.replace(/\s/, '');
			if (txt == '')
			sres.style.display = 'none';
			else sres.style.display = 'block';
			return true;
		}
	}
	
	this.change = function(str, time)
	{
		var t = new Date();
		var wait = 0;
		if (time == null) dt = 2000;
		if (t.getTime() - prevt.getTime() < time)
		{
			prevt = t;
			wait = time;
		}
		if (timeout) { clearTimeout(timeout); timeout=null; }
		timeout = setTimeout(function() { prevt = t; timeout = null; thisobj.dosearch(str); }, wait);
	}
	
	this.dosearch = function(text)
	{
		sres.style.display = 'none';
		if (!text || text == '' || text.length < 3) return false;
		var req = getrequestobj();
		req.open('GET', jres + text);
		req.onreadystatechange = function()
		{
			if(req.readyState != 4 || req.status != 200) return false;
			var jresobj = false;
			eval(req.responseText);
			if (!jresobj) return false;
			var ulobj = sres.getElementsByTagName('UL')[0];
			ulobj.innerHTML = '';
			for (var i in jresobj)
			{
				var li = document.createElement('LI');
				var a = document.createElement('A');
				a.innerHTML = jresobj[i].name;
				a.href = jresobj[i].link;
				a.className = 'searchresultrow';
				li.appendChild(a);
				ulobj.appendChild(li);
			}
			if (ulobj.innerHTML != '') sres.style.display = 'block';
		}
		req.send(null);
	}
	
	this.hide = function()
	{
		this.ssres.style.display = 'none';
	}
}

ndsearch.insts = {}
ndsearch.hideAll = function()
{
	for (var i in ndsearch.insts)
	{
		ndsearch.insts[i].hide();
	}
}

function preparecut(obj, length)
{
	length = parseInt(length);
	if (length == 0) return false;
	var content = obj.innerHTML;
	var strlength = content.indexOf(' ', length);
	if (strlength == -1) return false;
	var part1 = content.substr(0, strlength + 1);
	
	var part2 = content.substr(strlength, content.length);
	var part2container = document.createElement('DIV');
	part2container.style.display = 'none';
	part2container.innerHTML = part2;
	
	var more = document.createTextNode('Раскрыть полностью...');
	var morecontainer = document.createElement('A');
	morecontainer.appendChild(more);
	morecontainer.onclick = showcut;
	morecontainer.href = '#menu';
	morecontainer.id = 'morecontlink';
	
	obj.innerHTML = '';
	obj.innerHTML += part1;
	obj.appendChild(part2container);
	obj.appendChild(morecontainer);
}

function emulink()
{
	var olink = document.getElementById('morecontlink');
	if (!olink) return false;
	var cutobj = olink.parentNode;
	var cutdiv = cutobj.getElementsByTagName('DIV')[0];
	if (cutdiv.style.display == 'none')
	{
		cutdiv.style.display = 'block';
		olink.innerHTML = '...скрыть';
	}
	else
	{
		cutdiv.style.display = 'none';
		olink.innerHTML = 'Раскрыть полностью...';
	}
}

function showcut()
{
	var cutobj = this.parentNode;
	var cutdiv = cutobj.getElementsByTagName('DIV')[0];
	if (cutdiv.style.display == 'none')
	{
		cutdiv.style.display = 'block';
		this.innerHTML = '...скрыть';
	}
	else
	{
		cutdiv.style.display = 'none';
		this.innerHTML = 'Раскрыть полностью...';
	}
}

function setcatering()
{
	var fobj = document.forms[0];
	var checkbox = document.getElementById('cateringflag');
	if (checkbox.checked == true)
	{
		fobj.type.selectedIndex = 13;
		fobj.orientir.disabled = true;
	}
	else
	{
		fobj.type.selectedIndex = 0;
		fobj.orientir.disabled = false;
	}
}

function setcateringselect()
{
	var fobj = document.forms[0];
	var checkbox = document.getElementById('cateringflag');
	if (this.selectedIndex == 13)
	{
		fobj.orientir.disabled = true;
		checkbox.checked = true;
	}
	else
	{
		fobj.orientir.disabled = false;
		checkbox.checked = false;
	}
}

function cate_add()
{
	if(flag_cate<1)
	{				
		var templ = document.getElementById('catetempl').cloneNode(true);				
		templ.style.display = 'block';
		templ.id = null;
		var container = document.getElementById('catelist');		
		hallcount ++;
		flag_cate ++;
		container.appendChild(templ);
	}
	
}

function winopen(url, w, h)
{
	Win = open(url, "displayWindow", "width="+w+",height="+h+",status=no,toolbar=no,menubar=no,location=no,scrollbars=yes");
	Win.focus();
}

function G(selector, container)
{
	container = container || document;
	selector = selector.replace(/\s/, '');
	//смотрим, есть ли последовательность элтов
	var isSequence = selector.indexOf('>');
	var dotNum = selector.indexOf('.');
	var cellNum = selector.indexOf('#');
	if (isSequence != -1)
	{
		var parentSelector = selector.substr(0, isSequence);
		var childSelector = selector.substr(isSequence);
		var elements = G(parentSelector, container) || false;
		if (!elements) return false;
		var count = elements.length || false;
		if (!count) return false;
		for (var i=0; i<count; i++)
		{}
		return false;
	}
	if (/^(\*|[a-z0-9]+)$/i.test(selector))
	{
		return container.getElementsByTagName(selector.toUpperCase());
	}
	else if (dotNum != -1)
	{
		var el = selector.substr(0, dotNum);
		el = el == ''?'*':el;
		var clname = selector.substr(dotNum);
		var elements = container.getElementsByTagName(el.toUpperCase()) || false;
		if (!elements) return false;
		var count = elements.length || false;
		if (!count) return false;
		var array = [];
		for (var i=0; i<count; i++)
		{
			if (elements[i].className == clname) array.push(elements[i]);
		}
		return array;
	}
	else if (cellNum != -1)
	{
		return document.getElementById(selector.substr(cellNum + 1));
	}
	return false;
}

function changeimage(obj)
{
	imgobj = obj.parentNode.getElementsByTagName('IMG')[0];
	imgobj.src = imgobj.src + '?' + Math.round(Math.random() * 999111);
	return true;
}

var checkForm = function(fobj)
{
	var self = this;
	this.form = fobj;
	this.fields = [];
	
	this.addField = function(field)
	{
		if (!!field) this.fields.push(field);
	}

	this.hendle = function()
	{
		var cnt = self.fields.length;
		var flag = true;
		if (cnt == 0) self.form.submit();
		for (var i in self.fields)
		{
			self.fields[i].check();
			if (self.fields[i].isError)
			{
				self.fields[i].action();
				flag = false;
			}
		}
		return flag;
	}
	
	this.form.onsubmit = this.hendle;
}

var field = function(json)
{
	this.isError = false;
	this.errorMessage = '';

	this.type = json.fieldType || 'stringValue';
	this.field = json.fieldsName[0];
	this.field2 = json.fieldsName[1] || false;
	this.response = json.responseUri || false;

	if (!window[this.type]) return false;
	var valInstance = new window[this.type](this);

	this.action = function()
	{
		return valInstance.action();
	}
	
	this.check = function()
	{
		return valInstance.check();
	}
	
	return this;
}

var stringValue = function(obj)
{
	var self = this;
	this.field = obj.field;
	this.responseUri = obj.response;

	var parent = obj;

	this.check = function()
	{
		var value = self.field.value;
		if (self.responseUri != '')
		{
			var req = getrequestobj();
			req.open('GET', self.responseUri + '?var=' + value, false);
			req.onreadystatechange = function()
			{
				if(req.readyState == 4)
				{
					if (req.status == 200)
					{
						var json = eval('(' + req.responseText + ')');
						if (!json.code) return false;
						if (json.code == 1)
						{
							parent.isError = true;
							parent.errorMessage = json.error;
						}
						else parent.isError = false;
					}
				}
			}
			req.send(null);
		}
		else
		{
			if (value == '')
			{
				parent.isError = true;
				parent.errorMessage = 'Необходимо заполнить обязательные поля';
			}
			else parent.isError = false;
		}
		if (parent.isError == false)
		{
			var fieldName = self.field.name.replace(/\W/, '');
			var messageContainer = G('#' + fieldName + 'em');
			messageContainer.style.display = 'none';
		}
	}
	
	this.field.onblur = this.check;
	
	this.action = function()
	{
		var fieldName = self.field.name.replace(/\W/, '');
		var messageContainer = G('#' + fieldName + 'em');
		if (!messageContainer) alert(parent.errorMessage);
		else
		{
			messageContainer.innerHTML = '(' + parent.errorMessage + ')';
			messageContainer.style.display = 'inline';
		}
		self.field.focus();
	}
}

var emailValue = function(obj)
{
	var self = this;
	this.field = obj.field;
	this.responseUri = obj.response;

	var parent = obj;
	
	this.check = function()
	{
		var value = self.field.value;
		value = value.replace(/[\;\#\n\r\*\'\"<>&\%\!\(\)\{\}\[\]\?\\/\s]/,'');
		if (self.responseUri != '')
		{
			var req = getrequestobj();
			req.open('GET', self.responseUri + '?var=' + value, false);
			req.onreadystatechange = function()
			{
				if(req.readyState == 4)
				{
					if (req.status == 200)
					{
						var json = eval('(' + req.responseText + ')');
						if (!json.code) return false;
						if (json.code == 1)
						{
							parent.isError = true;
							parent.errorMessage = json.error;
						}
						else parent.isError = false;
					}
				}
			}
			req.send(null);
		}
		else
		{
			if (value == '')
			{
				parent.isError = true;
				parent.errorMessage = 'Необходимо заполнить обязательные поля';
			}
			else if (!/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,4})(\]?)$/.test(value))
			{
				parent.isError = true;
				parent.errorMessage = 'Неправильный формат e-mail';
			}
			else parent.isError = false;
		}
		if (parent.isError == false)
		{
			var fieldName = self.field.name.replace(/\W/, '');
			var messageContainer = G('#' + fieldName + 'em');
			messageContainer.style.display = 'none';
		}
	}
	
	this.field.onblur = this.check;
	
	this.action = function()
	{
		var fieldName = self.field.name.replace(/\W/, '');
		var messageContainer = G('#' + fieldName + 'em');
		if (!messageContainer) alert(parent.errorMessage);
		else
		{
			messageContainer.innerHTML = '(' + parent.errorMessage + ')';
			messageContainer.style.display = 'inline';
		}
		self.field.focus();
	}
}

var passwordValue = function(obj)
{
	var self = this;
	this.field = obj.field;
	this.field2 = obj.field2;
	this.responseUri = obj.response;

	var parent = obj;
	
	this.check = function()
	{
		var value = self.field.value;
		var value2 = self.field2.value;
		
		if (self.responseUri != '')
		{
			var req = getrequestobj();
			req.open('GET', self.responseUri + '?var=' + value + '&var2=' + value2, false);
			req.onreadystatechange = function()
			{
				if(req.readyState == 4)
				{
					if (req.status == 200)
					{
						var json = eval('(' + req.responseText + ')');
						if (!json.code) return false;
						if (json.code == 1)
						{
							parent.isError = true;
							parent.errorMessage = json.error;
						}
						else parent.isError = false;
					}
				}
			}
			req.send(null);
		}
		else
		{
			if (value == '')
			{
				parent.isError = true;
				parent.errorMessage = 'Необходимо заполнить обязательные поля';
			}
			else if (value != value2)
			{
				parent.isError = true;
				parent.errorMessage = 'Пароли не совпадают';
			}
			else parent.isError = false;
		}
		if (parent.isError == false)
		{
			var fieldName = self.field.name.replace(/\W/, '');
			var messageContainer = G('#' + fieldName + 'em');
			messageContainer.style.display = 'none';
		}
	}
	
	
	this.field.onblur = this.check;
	
	this.action = function()
	{
		var fieldName = self.field.name.replace(/\W/, '');
		var messageContainer = G('#' + fieldName + 'em');
		if (!messageContainer) alert(parent.errorMessage);
		else
		{
			messageContainer.innerHTML = '(' + parent.errorMessage + ')';
			messageContainer.style.display = 'inline';
		}
		self.field.focus();
	}
}

var photoalbum = function(json)
{
	this.photoobj = json;
	this.photos = [];
	this.alts = [];
	this.counter = 0;
	this.total = 0;
	this.title = '';
	var self = this;
	
	for (var i in this.photoobj)
	{
		var tmpphoto = new Image();
		tmpphoto.src = 'http://vl.4banket.ru/images/photo/500/' + this.photoobj[i].id + '.' + this.photoobj[i].type;
		tmpphoto.alt = this.photoobj[i].alt;
		tmpphoto.title = this.photoobj[i].alt;
		this.photos.push(tmpphoto);
		this.alts.push(this.photoobj[i].alt);
		if (this.photoobj[i].current == 1) this.counter = i.replace(/ph/, '');
		this.total ++;
	}
	
	this.init = function()
	{
		var container = document.getElementById('maincontent');
		var spans = container.getElementsByTagName('SPAN');
		this.title = container.getElementsByTagName('B')[0];
		
		spans[0].onclick = this.previmg;
		
		spans[1].onclick = this.nextimg; spans[1].className = 'activ';
		
		if ((this.counter >= 0 && this.counter <= this.total) && typeof this.photos[this.counter] != 'undefined')
		{
			container.appendChild(this.photos[this.counter].cloneNode(true));
			this.title.innerHTML = this.alts[this.counter];
		}
		//document.oncontextmenu = function() {window.close();}
	}
	
	this.previmg = function()
	{
		if (self.counter > 0) self.counter --;

		var container = document.getElementById('maincontent');
		var spans = container.getElementsByTagName('SPAN');
		
		if (self.counter > 0)
		{ spans[0].className = 'activ';}
		else {spans[0].className = 'deactiv';}
		
		if (self.counter < self.total - 1)
		{ spans[1].className = 'activ';}
		else {spans[1].className = 'deactiv';}

		document.images[0].src = self.photos[self.counter].src;
		document.images[0].width = self.photos[self.counter].width;
		document.images[0].height = self.photos[self.counter].height;
		document.images[0].alt = self.alts[self.counter];
		self.title.innerHTML = self.alts[self.counter];
	}
	
	this.nextimg = function()
	{
		if (self.counter < self.total) self.counter ++;

		var container = document.getElementById('maincontent');
		var spans = container.getElementsByTagName('SPAN');
		
		if (self.counter > 0)
		{ spans[0].className = 'activ';}
		else {spans[0].className = 'deactiv';}
		
		if (self.counter < self.total - 1)
		{ spans[1].className = 'activ';}
		else {spans[1].className = 'deactiv';}
		if (!self.photos[self.counter]) return;
		document.images[0].src = self.photos[self.counter].src;
		document.images[0].width = self.photos[self.counter].width;
		document.images[0].height = self.photos[self.counter].height;
		document.images[0].alt = self.alts[self.counter];
		self.title.innerHTML = self.alts[self.counter];
	}
}
function openWin(url, w, h)
{
	Win= open(url, "displayWindow", "width="+w+",height="+h+",status=no,toolbar=no,menubar=no,location=no,scrollbars=yes");
}

<!--
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
//-->
