var $ = function (id) { return document.getElementById(id); }
function setElClass(el, cl) { el.setAttribute("class", cl); el.setAttribute("className", cl); }
function iconOnChange() { 
	if ($('favicon').checked) {
		$('icon').setAttribute('disabled', 'disabled'); 
	} else {
		$('icon').removeAttribute('disabled');
		$('icon').focus();
		$('icon').select();
	}
}
var xmlHttpList;
var notice;
function showNotice(err, msg, el) {
	if (el == undefined)
		el = notice;
	el.innerHTML = msg;
	el.style.color = err ? '#A00' : '#0A0';
	el.style.display = 'block';
}
var strangeParam = false;
function addNewService() {
	notice = $('notice');
	showNotice(false, 'Добавляем...');

	if ($('serviceurl').value.match(/^\s*$/)) {
		showNotice(true, 'URL сервиса забыли написать.');
		$('serviceurl').focus();
		$('serviceurl').select();
		return false;
	} else if (! $('serviceurl').value.match(/^https?:\/\/[\w\d-_.:%+\/?=&]+$/)) {
		showNotice(true, 'URL, вероятно, неправильный, хочется чего-то вроде http://server.com/.');
		$('serviceurl').focus();
		$('serviceurl').select();
		return false;
	}

	if (! $('urlparam').value.match(/^[\w\d-\[\]_]+$/)) {
		if ($('urlparam').value == strangeParam) {
			// that's ok
			strangeParam = '';
		} else {
			showNotice(true, 'Проверьте, пожалуйста, параметр для адреса закладки. Нет ли там ошибки? Если нет, просто нажмите кнопку &laquo;Добавить&raquo; еще раз.');
			strangeParam = $('urlparam').value;
		}
	}

	if (!$('favicon').checked && $('icon').value.match(/^\s*$/)) {
		showNotice(true, 'Если не хотите взять иконку по умолчанию, надо бы задать ее адрес.');
		$('icon').focus();
		$('icon').select();
		return false;
	}

	if (window.ActiveXObject) xmlHttpList = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest) xmlHttpList = new XMLHttpRequest();
	xmlHttpList.onreadystatechange = handleAddNewService;
	xmlHttpList.open("GET", "ajax.php?do=addservice" +
		"&serviceurl=" + encodeURIComponent($('serviceurl').value) + 
		"&urlparam=" + $('urlparam').value +
		"&titleparam=" + $('titleparam').value +
		"&favicon=" + ($('favicon').checked ? '1' : '0') +
		"&icon=" + $('icon').value +
		"&ts=" + new Date().getTime(), true);
	xmlHttpList.send(null);
	return false;
}
function handleAddNewService () {
	try {
		if(xmlHttpList && xmlHttpList.readyState == 4 && xmlHttpList.status == 200) {
			var result = xmlHttpList.responseXML.documentElement;
			if (result.nodeName == "added") {
				showNotice(false, "Сервис добавлен. Спасибо!");
				reloadServiceList();
			} else {
			    showNotice(true, result.firstChild.nodeValue);
			}
		}	
	} catch(e) {
		showNotice(true, "Извините, не получается добавить. Может быть нет связи?");
	}
}
var serviceList;
function reloadServiceList() {
	serviceList = $('list');
	serviceList.innerHTML = '<li><img src="ajax-loader.gif"/>Загружаем...</li>';
	if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
	xmlHttp.onreadystatechange = handleReloadServiceList;
	xmlHttp.open("GET", "ajax.php?do=servicelist" +
		"&ts=" + new Date().getTime(), true);
	xmlHttp.send(null);
	return false;
}
function handleReloadServiceList() {
	if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
		serviceList.innerHTML = xmlHttp.responseText;
	}
}

var currentSite;
var currentName;
var mySites;
var xmlHttpMySites;
function reloadMySites() {
	if (window.ActiveXObject) xmlHttpMySites = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest) xmlHttpMySites = new XMLHttpRequest();
	xmlHttpMySites.onreadystatechange = handleReloadMySites;
	xmlHttpMySites.open("GET", "ajax.php?do=mysitelist" +
		"&ts=" + new Date().getTime(), true);
	xmlHttpMySites.send(null);
	return false;
}
function handleReloadMySites() {
	if(xmlHttpMySites && xmlHttpMySites.readyState == 4 && xmlHttpMySites.status == 200) {
		mySites.innerHTML = xmlHttpMySites.responseText;
		if (currentSite != "")
			selectSite(currentSite, currentName, true);
	}
}

var myList;
var xmlHttpMyList;
function reloadMyList() {
	if (window.ActiveXObject) xmlHttpMyList = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest) xmlHttpMyList = new XMLHttpRequest();
	xmlHttpMyList.onreadystatechange = handleReloadMyList;
	xmlHttpMyList.open("GET", "ajax.php?do=mysiteservicelist" +
		"&site=" + encodeURIComponent(currentSite) + 
		"&ts=" + new Date().getTime(), true);
	xmlHttpMyList.send(null);
	return false;
}
function handleReloadMyList() {
	if(xmlHttpMyList && xmlHttpMyList.readyState == 4 && xmlHttpMyList.status == 200) {
		myList.innerHTML = xmlHttpMyList.responseText;
	}
}

var xmlHttpSaveList;
var listnotise;
var code;
var codepanel;
function saveList() {
	listnotise = $('listnotice');
	code = $('code');
	codepanel = $('codepanel');

	showNotice(false, "Сохраняем...", listnotise);

	var values = new Array();
	var boxes = $('mylist').getElementsByTagName('input');
	for(var i = 0; i < boxes.length; i++) {
		var boxId = boxes[i].getAttribute('id');
		values[boxId.substr(1)] = boxes[i].checked;
	}
	var value = "";
	for(var i = 0; i < values.length; i++)
		value += values[i] ? "1" : "0";

//	if (value.match(/^0+$/)) {
//		showNotice(true, 'У вас не выбрана ни одна служба закладок. Скрипт выдаст пустую панельку. Это именно то, что вы хотите?', $('listnotice'));
//	}

	currentSite = $('site').value;
	currentName = $('sitename').value;

	if (window.ActiveXObject) xmlHttpSaveList = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest) xmlHttpSaveList = new XMLHttpRequest();
	xmlHttpSaveList.onreadystatechange = handleSaveList;
	xmlHttpSaveList.open("GET", "ajax.php?do=savemysiteservicelist" +
		"&value=" + value +
		"&site=" + encodeURIComponent($('site').value) + 
		"&name=" + encodeURIComponent($('sitename').value) +
		"&ts=" + new Date().getTime(), true);
	xmlHttpSaveList.send(null);
	return false;
}
function handleSaveList() {
	if(xmlHttpSaveList && xmlHttpSaveList.readyState == 4 && xmlHttpSaveList.status == 200) {
		var result = xmlHttpSaveList.responseXML.documentElement;
		if (result.nodeName == "saved") {
			showNotice(false, "Готово!", listnotise);

			code.value = result.firstChild.nodeValue;
			codepanel.style.display = "block";

			reloadMySites();
		} else {
		    showNotice(true, result.firstChild.nodeValue, listnotise);
		}
	}
}
function onChange() {
	listnotice.style.display = 'none';
	codePanel.style.display = 'none';
}

function paramParam() {
 	$('paramparam').innerHTML = 
 		$('serviceurl').value + 
 		($('serviceurl').value == '' ? '' : ($('serviceurl').value.match(/[?&]/) ? '&' : '?'))
 		 + 
 		($('urlparam').value != '' ? $('urlparam').value + '=<адрес сайта>' + 
 			($('titleparam').value != '' ? '&' + $('titleparam').value + '=<название>' : '') : '');
}

function selectSite(id, name) {
	selectSite(id, name, false);
}

function selectSite(id, name, dontReload) {
	var links = mySites.getElementsByTagName('a');
	for(var i = 0; i < links.length; i++) {
		setElClass(links[i], links[i].getAttribute('id') == id ? 'selected' : 'case');
	}
	site.value = id;
	siteName.value = name;

	currentSite = id;
	currentName = name;

	if (! dontReload) {
		onChange();
		reloadMyList();
	}
}

function addNewSite() {
	var a = document.createElement('a');
	var newId = 'site' + new Date().getTime();
	var newName = 'Новый сайт';
	myList = $('mylist');

	a.setAttribute('id', newId);
	a.setAttribute('href', 'javascript:selectSite("' + newId + '", "' + newName + '")');
	a.appendChild(document.createTextNode(newName));
	mySites.insertBefore(a, $('addnewsite'));

	selectSite(newId, newName);
}

var codePanel, listnotice;
window.onload = function () {
	mySites = $('mysites');
	myList = $('mylist');
	site = $('site');
	siteName = $('sitename');
	codePanel = $('codepanel');
	listnotice = $('listnotice');
	paramParam();
}

