Element.implement({
	addoption: function(){
		Array.flatten(arguments).each(function(element){
			var newOption = new Option(element.text, element.value);
			try {
				this.add(newOption, null);
			} catch (err) {
				this.add(newOption);
			}
		}, this);
		return this;
	}
});

function array_max(input) {
	var i, max;
	for (i in input) {
		if (!max || max < input[i])
			max = input[i];
	}
	return max;
}

function refreshCaptcha() {
	var src = $('captcha_img').get('src');
	$('captcha_img').set('src', src.replace(/\d+$/g, $random(100000, 999999)));
}

// User List

var url = '';
var inPid = '';
var listname = 'userlist';
var userId = 'user_id';

function insertUname(key, val)
{
	$(userId).value = key;
	$(inPid).value = val;
	hideList();
}

function usersByMask(pid, value)
{
	inPid = pid;
	if (value.length == 0)
	{
		$(listname).setStyle('display', 'none');
		$(userId).value = 0;
		return;
	}
	new Request.JSON({
		method: "post",
		url: url,
		onSuccess: function(responseText) {
			$(listname).setStyle('display', 'block');
			$(listname).setStyle('width', $(inPid).getStyle('width').toInt() - 10);
			$(listname).setStyle('position', 'absolute');
			$(listname).setStyle('top', $(inPid).getTop() + $(inPid).getStyle('height').toInt());
			$(listname).setStyle('left', $(inPid).getLeft() + 2);
			$(listname).innerHTML = '';
			if (responseText.aAccounts.length > 0)
			{
				for (var i = 0; i < responseText.aAccounts.length; i++)
					$(listname).innerHTML += '<a href="#" onclick="insertUname(\'' + responseText.aAccounts[i].account_id + '\', \'' + responseText.aAccounts[i].login + '\'); return false">' + responseText.aAccounts[i].login + ' (' + responseText.aAccounts[i].account_id + ')</a><br>';
			}
			else
				$(listname).innerHTML += 'Нет записей<br>';
			$(listname).innerHTML += '[x] <a href="#" onclick="insertUname(\'0\', \'\'); return false">close</a>';
		},
		onFailure: function(status) {alert('AJAX error: ' + status)}
	}).send('mask=' + encodeURIComponent(value));
}

function userList(pid, value)
{
	inPid = pid;
	if (value.length == 0)
	{
		$(listname).setStyle('display', 'none');
		$(userId).value = 0;
		return;
	}
	new Ajax(url, {
		method: 'post',
		postBody: 'mask=' + encodeURIComponent(value),
		onComplete: function(responseText) {
			$(listname).setStyle('display', 'block');
			//$(listname).setStyle('width', $(inPid).getStyle('width').toInt() - 10);
			//$(listname).setStyle('position', 'absolute');
			//$(listname).setStyle('top', $(inPid).getTop() + $(inPid).getStyle('height').toInt());
			//$(listname).setStyle('left', $(inPid).getLeft() + 2);
			$(listname).innerHTML = responseText;
		}
	}).request();
}

function hideList()
{
	$(listname).setStyle('display', 'none');
}

// categories

function getX(o)
{
	var iX = 0;
	while (o)
	{
		iX += parseInt(o.offsetLeft);
		o = o.offsetParent;
	}
	return iX;
}

function getY(o)
{
	var iY = 0;
	while (o)
	{
		iY += parseInt(o.offsetTop);
		o = o.offsetParent;
	}
	return iY;
}

function isForbidden(iCategoryId)
{
	for (var i = 0; i < aForbidden.length; i++)
	{
		if (aForbidden[i] == iCategoryId)
			return true;
	}
	return false;
}

function changeCategory(o)
{
	if (isForbidden(o.options[o.selectedIndex].value) && !confirm('Назначить сайту данную категроию?'))
		o.selectedIndex = o.options.length - 1;
}

function doChangeCategory(o)
{
	new Request.JSON({
		method: "post",
		url: o.action,
		onSuccess: function(responseText) {
			if (responseText.iCategoryId > 0)
			{
				document.getElementById('category_setter').style.display = 'none';
				document.getElementById('a' + o.pad_id.value).innerHTML = o.category_id.options[o.category_id.selectedIndex].innerHTML;
			}
			else
				alert('Ошибка измения категории');
		},
		onFailure: function(status) {alert('AJAX error: ' + status)}
	}).send('pad_id=' + encodeURIComponent(o.pad_id.value) + '&category_id=' + encodeURIComponent(o.category_id.options[o.category_id.selectedIndex].value) + '&comment=' + encodeURIComponent(o.comment.value));
}

function getSelectIndex(oSelect, mValue)
{
	for (var i = 0; i < oSelect.options.length; i++)
	{
		if (oSelect.options[i].value == mValue)
			return i;
	}
	return 0;
}

function getRadioValue(sName)
{
	a = document.getElementsByName(sName);
	for (var i = 0; i < a.length; i++)
	{
		if (a[i].checked == true)
			return a[i].value;
	}
	return 0;
}

function doRate(o)
{
	new Request.JSON({
		method: "post",
		url: o.action,
		onSuccess: function(responseText) {
			if (responseText.aAnswer.answer_id > 0)
			{
				var a = responseText.aAnswer;
				var oTr = document.getElementById('a' + a.answer_id);
				oTr.cells['score'].innerHTML = a.score;
				oTr.cells['total_score'].innerHTML = a.total_score;
				oTr.cells['total_votes'].innerHTML = a.total_votes;
			}
			else
				alert('Ошибка измения категории');
		},
		onFailure: function(status) {alert('AJAX error: ' + status)}
	}).send('voiting_id=' + encodeURIComponent(o.voiting_id.value) + '&answer_id=' + encodeURIComponent(o.answer_id.value) + '&score=' + encodeURIComponent(getRadioValue('score')));
}

// Pads List

var sPadUrl = '';
var sPadListname = 'padlist';
var sPadId = 'pad_id';
var sInPid = '';
var bPadAuditored = 0;

function insertPadName(iId, sUrl)
{
	$(sPadId).value = iId;
	$(sInPid).value = sUrl;
	hidePadList();
}

function padsByMask(oInput)
{
	sInPid = oInput.id;
	if (oInput.value.length == 0)
	{
		$(sPadListname).setStyle('display', 'none');
		$(sPadId).value = 0;
		return;
	}
	if (oInput.form.account_id != null)
		iAccountId = oInput.form.account_id.value;
	else
		iAccountId = 0;
	new Request.JSON({
		method: 'post',
		url: sPadUrl,
		onSuccess: function(responseText) {
			$(sPadListname).setStyle('display', 'block');
			$(sPadListname).setStyle('width', $(sInPid).getStyle('width').toInt() - 10);
			$(sPadListname).setStyle('position', 'absolute');
			$(sPadListname).setStyle('top', $(sInPid).getTop() + $(sInPid).getStyle('height').toInt());
			$(sPadListname).setStyle('left', $(sInPid).getLeft() + 2);
			$(sPadListname).innerHTML = '';
			if (responseText.aPads.length > 0)
			{
				for (var i = 0; i < responseText.aPads.length; i++)
					$(sPadListname).innerHTML += '<a href="#" onclick="insertPadName(\''+ responseText.aPads[i].pad_id +'\', \''+ responseText.aPads[i].url +'\'); return false">'+ responseText.aPads[i].url +' ('+ responseText.aPads[i].pad_id +')</a><br>';
			}
			else
				$(sPadListname).innerHTML += 'Нет записей<br>';
			$(sPadListname).innerHTML += '[x] <a href="#" onclick="insertPadName(\'0\', \'\'); return false">close</a>';
		},
		onFailure: function(sStatus) {alert('AJAX error: '+ sStatus)}
	}).send('mask='+ encodeURIComponent(oInput.value) +'&account_id='+ iAccountId +'&auditored='+ (bPadAuditored ? 1 : 0));
}

function hidePadList()
{
	$(sPadListname).setStyle('display', 'none');
}

function setFilter(order, desc)
{
	var o = $('filter_form');
	o.order.value = order;
	o.desc.value = desc;
	o.submit();
}

function setPage(page)
{
	var o = $('filter_form');
	o.page.value = page;
	o.submit();
}

function setLimit(limit)
{
	var o = $('filter_form');
	o.page.value = 1;
	o.limit.value = limit;
	o.submit();
}

function changeAll(o, name)
{
	var a = document.getElementsByName(name);
	for (var i = 0; i < a.length; i++)
		a[i].checked = o.checked;
}

function changeAllByClassName(o, className)
{
	var a = $$('input.'+ className);
	for (var i = 0; i < a.length; i++)
		a[i].checked = o.checked;
}

/* sites processing */
var sThisAction = '';

var sUpdateSiteFieldUrl = '';
function updateSiteField(o, site_id)
{
	new Request.JSON({
		method: 'post',
		url: sUpdateSiteFieldUrl,
		onSuccess: function(response)
		{
			if (!response.iSiteId)
				return;
			if (response.iResult > 0)
				$(response.sField +'_'+ response.iSiteId).setStyle('border-color', '#0C0');
			else
				$(response.sField +'_'+ response.iSiteId).setStyle('border-color', '#C00');
		},
		onFailure: function(status) {alert('AJAX error: '+ status)}
	}).send('field='+ encodeURIComponent(o.name) +'&value='+ encodeURIComponent(o.value) +'&site_id='+ site_id);
}

var sSetSiteStatusUrl = '';
function setSiteStatus(o, site_id, status)
{
	new Request.JSON({
		method: 'post',
		url: sSetSiteStatusUrl,
		onSuccess: function(response)
		{
			if (!response.iSiteId)
				return;
			if (response.iResult > 0)
				$('site_'+ response.iSiteId).setStyle('display', 'none');
		},
		onFailure: function(status) {alert('AJAX error: '+ status)}
	}).send('status='+ encodeURIComponent(status) +'&site_id='+ site_id);
}

var sSendSiteEmailUrl = '';
function sendSiteEmail(o, site_id)
{
	new Request.JSON({
		method: 'post',
		url: sSendSiteEmailUrl,
		onSuccess: function(response)
		{
			if (!response.iSiteId)
				return;
			if (response.iResult > 0)
			{
				if (sThisAction != 'mailed')
					$('site_'+ response.iSiteId).setStyle('display', 'none');
				else
				{
					if ($('mail_count_'+ response.iSiteId))
						$('mail_count_'+ response.iSiteId).innerHTML = response.aSite.mail_count;
					if ($('last_mail_'+ response.iSiteId))
						$('last_mail_'+ response.iSiteId).innerHTML = response.aSite.last_mail;
				}
			}
		},
		onFailure: function(status) {alert('AJAX error: '+ status)}
	}).send('letter='+ encodeURIComponent(o.form.letter.value) +'&site_id='+ site_id);
}

function sendAllSiteEmails()
{
	var a = $$('email_form');
	for (var i in a)
		sendSiteEmail(a[i].send, a[i].site_id.value);
}

var sSetSiteAccountUrl = '';
function setSiteAccount(o, site_id)
{
	if ($('counter_url_'+ site_id).value == '' || $('counter_password_'+ site_id).value == '')
	{
		alert('Не указаны данные щётчика');
		return false;
	}

	new Request.JSON({
		method: 'post',
		url: sSetSiteAccountUrl,
		onSuccess: function(response)
		{
			if (!response.iSiteId)
				return;
			if (response.iResult > 0)
				$('account_id_'+ response.iSiteId).innerHTML = response.aAccount.login;
			else
				$('account_id_'+ response.iSiteId).setStyle('border-color', '#C00');
		},
		onFailure: function(status) {alert('AJAX error: '+ status)}
	}).send('account_id='+ encodeURIComponent(o.form.account_id.options[o.form.account_id.selectedIndex].value) +'&site_id='+ site_id);
}

function setDefaultBorder(element)
{
	element.setStyle('border-color', '#CCC');
}

function updatePadField(o, zorka_pad_id)
{
	new Request.JSON({
		method: 'post',
		url: absolutePath + 'pad/updateField/',
		onSuccess: function(response)
		{
			if (!response.iZorkaPadId)
				return;
			if (response.iResult > 0)
				$(response.sField +'_'+ response.iZorkaPadId).setStyle('border-color', '#0C0');
			else
				$(response.sField +'_'+ response.iZorkaPadId).setStyle('border-color', '#C00');
		},
		onFailure: function(status) {alert('AJAX error: '+ status)}
	}).send('field='+ encodeURIComponent(o.name) +'&value='+ encodeURIComponent(o.value) +'&zorka_pad_id='+ zorka_pad_id);
}

function createTicket()
{
	account_id = $('ticket_account_id').value;
	type_id    = $('ticket_type_id').value;
	title      = $('ticket_title').value;
	message    = $('ticket_message').value;
	$('ticket_status').innerText = '';

	new Request.JSON({
		method: 'post',
		url: absolutePath + 'ticket/spam/',
		onSuccess: function(response)
		{
			if (!response.sRedirectUrl && !response.aErrors)
				return;
			if (response.sRedirectUrl && response.sRedirectUrl == absolutePath +'ticket/getList/' && response.sRedirectMessage)
				$('ticket_status').innerHTML = response.sRedirectMessage;
			else
				$('ticket_status').innerHTML = 'Ошибка: '+ response.aErrors.join(', ');
		},
		onFailure: function(status) {alert('AJAX error: '+ status)}
	}).send('account_ids[]='+ encodeURIComponent(account_id) +'&type_id='+ encodeURIComponent(type_id) +'&title='+ encodeURIComponent(title) +'&message='+ encodeURIComponent(message) +'&send=1');
}