var setup = true;
var elem_id;
var url;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function update_fields(cur)
{
	var f = $('findForm');
	f.enable();
	var data = f.serialize(true);
	data.action = 'nextStep';
	if (cur && cur.name)
	{
		data.changedField = cur.name;
	}

	f.disable();
 	$('foundProcess').innerHTML = 'Идет загрузка данных...';
	$('foundProcess').style.display = 'block';
	new Ajax.Request('/catalogue/ajax',
		{
			method: 'post',
			onSuccess: refresh_form.bindAsEventListener(this, (cur && cur.name)?cur.name:''),
			onFailure: function(t) { window.alert('Ошибка связи с сервером! Попробуте ещё раз.\n\n(' + t.responseText + ')') },
			parameters: data
		});
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function init_fields(r, initLists, initDisabled, initSelected)
{
	var f = $('findForm');
	var inps = f.getElementsByTagName('input');
	for (var i = 0; i < inps.length; i++)
	{
		var type = inps[i].getAttribute('type');
		if (initSelected[inps[i].name] && (type == 'text'))
		{
			inps[i].value = initSelected[inps[i].name];
		}
		if (parseInt(initSelected[inps[i].name.substr(3)]) && (type == 'checkbox'))
		{
			inps[i].setAttribute('checked', 'checked');
			f[inps[i].name.substr(3)].value = 1;
		}
	}
	for (var i = 0; i < initDisabled.length; i++)
	{
		if (f[initDisabled[i]])
		{
			f[initDisabled[i]].disabled = true;
		}
	}
	var sels = f.getElementsByTagName('select');
	for (var i = 0; i < sels.length; i++)
	{
		var  s = sels[i];
		while(s.childNodes[0])
		{
			s.removeChild(s.childNodes[0]);
		}
		if (initLists[s.name])
		{
			for (var j = 0; j < initLists[s.name].length; j++)
			{
				var n = document.createElement('option');
				n.setAttribute('value', initLists[s.name][j].value);
				if (initSelected[s.name] && (initSelected[s.name] == initLists[s.name][j].value))
				{
					n.setAttribute('selected', 'selected');
				}
				n.innerHTML = initLists[s.name][j].title;
				s.appendChild(n);
			}
		}
	}
	return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function switchCheckbox(cb, cur)
{
	cur = $('findForm')[cur];
	cur.value = cb.checked?1:0;
	update_fields(cur);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function saveState(f)
{
	var s = f.getElementsByTagName('select');
	var lists = new Array();
	for (var i = 0; i < s.length; i++)
	{
		var t = s[i];
		var items = new Array();
		for (var j = 0; j < t.options.length; j++)
		{
			items[j] = '{"value": ' + t.options[j].value.toJSON() + ', "title": ' + t.options[j].innerHTML.toJSON() + '}';
		}
		lists[i] = t.name.toJSON() + ': [' + items.join(', ') + ']';
	}
	lists = '{' + lists.join(', ') + '}';
	f['ss_lists'].value = lists;
	var dis = new Array();
	for (var i = 0; i < f.elements.length; i++)
	{
		if (f.elements[i].disabled && f.elements[i].name && (f.elements[i].name.substr(0, 3) != 'ss_'))
		{
			dis[dis.length] = f.elements[i].name.toJSON();
		}
	}
	f['ss_disabled'].value = '[' + dis.join(', ') + ']';
	f['ss_disabled'].disabled = false;
	f['ss_lists'].disabled = false;
	return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function refresh_form(t, curField)
{
	var requiredFields = {
		'location_1' : '',
		'location_2' : '',
		'location_3' : ''
	};
	var updateNext = '';
	var breakRecursing = false;
	var f = $('findForm');
	var validFields = t.responseXML.getElementsByTagName('validFields');
	if (validFields && validFields.length)
	{
		validFields = validFields[0].firstChild.nodeValue.split(',');
	}
	for (var i = 0; i < validFields.length; i++)
	{
		f[validFields[i]].enable();
		if (f['cb_' + validFields[i]])
		{
			f['cb_' + validFields[i]].enable();
		}
		if (validFields[i] == 'credit')
		{
			breakRecursing = true;
		}
	}
	$('findFormSubmitButton').enable();
	if ($('findFormGeneratorButton'))
	{
    	$('findFormGeneratorButton').enable();
	}
	f['type'].enable();
	if (f['title'])
	{
		f['title'].enable();
	}
	if (f['lastName'])
	{
		f['lastName'].enable();
	}
	var r = t.responseXML.getElementsByTagName('field');
	for (var i = 0; i < r.length; i++)
	{
		var field = r[i].getAttribute('id');
		var el = f[field];
		if (!el)
		{
			continue;
		}
		while(el.childNodes[0])
		{
			el.removeChild(el.childNodes[0]);
		}
		var v = r[i].getElementsByTagName('value');
		if (v.length)
		{
			el.enable();
			if (f['cb_' + field])
			{
				f['cb_' + field].enable();
			}
		}

		if (el.tagName.toLowerCase() == 'input')
		{
			if ((v.length == 1) && parseInt(v[0].getAttribute('value')))
			{
				f['cb_' + field].checked = true;
				f[field].value = 1;
			} else if (v.length == 1) {
				f[field].value = 0;
				f['cb_' + field].disable();
			}
			if ((field in requiredFields) || ((field == 'discount') && !breakRecursing))
			{
				updateNext = field;
			}
			continue;
		}

		if (field in requiredFields)
		{
			updateNext = field;
		} else {
			var n = document.createElement('option');
			n.setAttribute('value', '');
			n.innerHTML = '--выберите значение--';
			el.appendChild(n);
			var n = document.createElement('option');
			n.setAttribute('value', '');
			n.innerHTML = 'не важно';
			el.appendChild(n);
		}
		var sorted = new Array();
		var selected = false;
		for (var j = 0; j < v.length; j++)
		{
		    sorted[j] = v[j].getAttribute('title') + '%%' + v[j].getAttribute('value');
			if (!selected && v[j].getAttribute('selected'))
			{
				selected = v[j].getAttribute('value');
			}
		}
		sorted.sort();
		for (var j = 0; j < v.length; j++)
		{
		    var op = sorted[j].split('%%');
			var n = document.createElement('option');
			n.setAttribute('value', op[1]);
			if (selected == op[1])
			{
				n.setAttribute('selected', 'selected');
			}
			n.innerHTML = op[0];
//			n.setAttribute('value', v[j].getAttribute('value'));
//			if (v[j].getAttribute('selected'))
//			{
//				n.setAttribute('selected', 'selected');
//			}
//			n.innerHTML = v[j].getAttribute('title');
			el.appendChild(n);
		}
	}
	var lists = f.getElementsByTagName('select');
	for (var i = 0; i < lists.length; i++)
	{
		if (lists[i].disabled)
		{
			while(lists[i].childNodes[0])
			{
				lists[i].removeChild(lists[i].childNodes[0]);
			}
		}
	}
	var lists = f.getElementsByTagName('input');
	for (var i = 0; i < lists.length; i++)
	{
		if ((lists[i].getAttribute('type') == 'checkbox') && lists[i].disabled)
		{
			lists[i].checked = false;
		} else if (lists[i].disabled) {
			lists[i].value = '';
		}
	}
	$('foundProcess').style.display = 'none';
	if (updateNext != '')
	{
		update_fields(f[updateNext]);
	}
}

function resetUserType(type)
{
	$('currentFilterFields').innerHTML = '<div style="height: 100px; margin-top: 80px; text-align: center">Подождите, идёт загрузка...</div>';
	new Ajax.Updater('currentFilterFields', '/catalogue/ajax', {
		parameters: { 'action': 'loadFilter', 'type': type },
		onComplete: update_fields
	});
}

function openContact(ctrl, physic)
{
	if (!ctrl)
	{
		return false;
	}
	ctrl.blur();
	var arrow = ctrl.getElementsByTagName('img');
	arrow = (arrow.length == 1)?arrow[0]:arrow[1];
	while (ctrl.nextSibling && !ctrl.nextSibling.tagName)
	{
		ctrl.parentNode.removeChild(ctrl.nextSibling);
	}
	if (ctrl.nextSibling)
	{
		ctrl.parentNode.removeChild(ctrl.nextSibling);
		arrow.src = '/res/design/arrow1_down.gif';
		return false;
	}
	if (physic)
	{
		var n = document.createElement('div');
		n.className = 'pmForm';
		n.innerHTML = '<label>Текст сообщения</label><textarea onkeyup="checkLength(this)"></textarea><input type="button" class="submit" value="Отправить" onclick="return sendPM(this)" />';
		ctrl.parentNode.appendChild(n);
		arrow.src = '/res/design/arrow1_up.gif';
	} else {
		var n = document.createElement('div');
		n.className = 'pmForm';
		n.innerHTML = '<label>Тема сообщения</label><input type="text" name="topic" value="" />';
		n.innerHTML += '<label>Текст сообщения</label><textarea></textarea><input type="button" class="submit" value="Отправить" onclick="return sendMail(this)" />';
		ctrl.parentNode.appendChild(n);
		arrow.src = '/res/design/arrow1_up.gif';
	}
	return false;
}

function needAuthorization(ctrl)
{
	if (!ctrl)
	{
		return false;
	}
	ctrl.blur();
	window.location.href = '/user/register';
	return false;
	while (ctrl.nextSibling && !ctrl.nextSibling.tagName)
	{
		ctrl.parentNode.removeChild(ctrl.nextSibling);
	}
	if (ctrl.nextSibling)
	{
		ctrl.parentNode.removeChild(ctrl.nextSibling);
		ctrl.getElementsByTagName('img')[0].src = '/res/design/arrow1_down.gif';
		return false;
	}
	var n = document.createElement('div');
	n.className = 'pmForm';
	n.innerHTML = '<label>Для отправки сообщений требуется авторизация на портале, причём для отправки сообщения физическому лицу требуется авторизация в качестве физического лица. Если у Вас ещё нет аккаунта, пройдите процедуру <a href="/user/register" target="_blank">регистрации</a></label>';
	ctrl.parentNode.appendChild(n);
	ctrl.getElementsByTagName('img')[0].src = '/res/design/arrow1_up.gif';
	return false;
}

function sendPM(ctrl)
{
	var msg = ctrl.previousSibling.value;
	var user = parseInt(ctrl.parentNode.parentNode.id.split('_')[1]);
	if (!msg || !user)
	{
		return false;
	}
	new Ajax.Request(
		'/message/ajax/action/send/to/' + user,
		{
			parameters: { 'msg_text': msg },
			onSuccess: function(transport)
			{
				ctrl.disabled = false;
				ctrl.previousSibling.value = '';
				var r = transport.responseXML;
				if (!r || !r.getElementsByTagName('message').length)
				{
					window.alert('При отправке сообщения произошла ошибка. Попробуйте отправить его ещё раз');
					return false;
				}
				window.alert('Ваше сообщение успешно отправлено! Уведомление о возможном ответе смотрите на личной панели');
				return true;
			},
			onFailure: function(transport)
			{
				ctrl.disabled = false;
				ctrl.previousSibling.value = '';
				window.alert('При отправке сообщения произошла ошибка. Попробуйте отправить его ещё раз');
				return false;
			},
			onComplete: function(transport)
			{
				if (ctrl.disabled)
				{
					ctrl.disabled = false;
					ctrl.previousSibling.value = '';
					window.alert('При отправке сообщения произошла ошибка. Попробуйте отправить его ещё раз');
					return false;
				}
				return true;
			}
		}
	);
	ctrl.disabled = true;
	ctrl.previousSibling.value = 'Подождите, идёт отправка сообщения...';
	return true;
}

function sendMail(ctrl)
{
	var msg = ctrl.previousSibling.value;
	var topic = ctrl.parentNode.getElementsByTagName('input')[0].value;
	var user = parseInt(ctrl.parentNode.parentNode.id.split('_')[1]);
	if (!user)
	{
		return false;
	}
	if (!msg || !topic)
	{
		window.alert('Все поля являются обязательными для заполнения!');
		return false;
	}
	new Ajax.Request(
		'/catalogue/mail/to/' + user,
		{
			parameters: { 'msg_text': msg, 'msg_topic': topic },
			onSuccess: function(transport)
			{
				ctrl.disabled = false;
				ctrl.previousSibling.value = '';
				ctrl.parentNode.getElementsByTagName('input')[0].value = '';
				var r = transport.responseXML;
				if (!r || !r.getElementsByTagName('message').length)
				{
					window.alert('При отправке сообщения произошла ошибка. Попробуйте отправить его ещё раз');
					return false;
				}
				window.alert('Ваше сообщение успешно отправлено!');
				return true;
			},
			onFailure: function(transport)
			{
				ctrl.disabled = false;
				ctrl.previousSibling.value = '';
				ctrl.parentNode.getElementsByTagName('input')[0].value = '';
				window.alert('При отправке сообщения произошла ошибка. Попробуйте отправить его ещё раз');
				return false;
			},
			onComplete: function(transport)
			{
				if (ctrl.disabled)
				{
					ctrl.disabled = false;
					ctrl.previousSibling.value = '';
					ctrl.parentNode.getElementsByTagName('input')[0].value = '';
					window.alert('При отправке сообщения произошла ошибка. Попробуйте отправить его ещё раз');
					return false;
				}
				return true;
			}
		}
	);
	ctrl.disabled = true;
	ctrl.previousSibling.value = 'Подождите, идёт отправка сообщения...';
	ctrl.parentNode.getElementsByTagName('input')[0].value = '';
	return true;
}

function changePage(base, page)
{
	window.location.href = base + page.options[page.selectedIndex].value;
}

