	var xmlHttp;
	var something = document.getElementById("something"); 
	var notice = document.getElementById("notice");
	var email = document.getElementById("email");
	var name = document.getElementById("name");
	var hiddenid = document.getElementById("hiddenid");
	var somethingElse = "";

	function saySomething() {
		if (something.value == '') {
			setNotice(notice, true, "Напишите что-нибудь... " +
				"Ну хоть что-нибудь :)");
			something.select(); something.focus();
		} else {
			if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
			setNotice(notice, false, "Обрабатываем...");
			xmlHttp.onreadystatechange = handleSay;
			xmlHttp.open("POST", www+"ajax.php?xml=true&ts=" + new Date().getTime(), true);
			xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			xmlHttp.send(
				"id=" + hiddenid.value + somethingElse +
				"&name=" + encodeURIComponent(name.value) + //.replace(/&/g, "%26") +
				"&email=" + encodeURIComponent(email.value) + //.replace(/&/g, "%26") +
				"&something=" + encodeURIComponent(something.value)); //.replace(/&/g, "%26"));
		}
		return false;
	}

	function handleSay() {
		if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			xml = xmlHttp.responseXML;                     
			if (xml.getElementsByTagName("said").length > 0) {
				setNotice(notice, false, "Сообщение отправлено! Большое спасибо за " +
					"обратную связь :) Если вы оставили ваш контактный адрес, я отвечу вам, " +
					"как только смогу.");
				location.href = location.href;
//				reloadStories();
			} else if (xml.getElementsByTagName("updated").length > 0) {
				setNotice(notice, false, "Сообщение обновлено.");
				hiddenid.value = "";
				something.value = "";
				location.href = location.href;
//				reloadStories();
			} else {
				setNotice(notice, true, "Почему-то не удалось связаться... " +
			  		"Если текст не пустой (проверьте на всякий случай еще раз?), значит глюки на " +
			  		"нашей стороне. Мы будем над этим работать. Извините :о)");
				something.select(); something.focus();
			}
		} 
	}

	var storylist = document.getElementById("storylist");

	function reloadStories() {
		if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
		xmlHttp.onreadystatechange = handleReload;
		xmlHttp.open("GET", www+"ajax.php?xml=true&storylist", true);
		xmlHttp.send(null);
	}
	function handleReload() {
		if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			removeChildren(storylist);
			xml = xmlHttp.responseXML;                     
			stories = xml.getElementsByTagName("story");
			for (i = 0; i < stories.length; i++) {
				text = stories[i].getElementsByTagName("text")[0].firstChild;
				author = stories[i].getElementsByTagName("author")[0].firstChild;
				date = stories[i].getAttribute("date");
				li = document.createElement("li");
				li.appendChild(document.createTextNode(text.nodeValue));
				li.appendChild(document.createElement("br"));
				p = document.createElement("p");
				p.setAttribute("class", "author"); p.setAttribute("className", "author");
				p.appendChild(document.createTextNode(
					(author == null ? "неизвестный" : author.nodeValue) + ", "));
				span = document.createElement("span");
				span.setAttribute("class", "date"); span.setAttribute("className", "date");
				span.appendChild(document.createTextNode(date));
				p.appendChild(span);
				li.appendChild(p);
				storylist.appendChild(li);
			}
		}
	}

	var book = document.getElementById("book");
	if (book) book.setAttribute("id", "");
	var tellAStory = document.getElementById("tell-a-story");
	if (tellAStory) tellAStory.setAttribute("id", "");

	function edit(id) {
		text = document.getElementById("storytext"+id).innerHTML.replace(/<br>/gi, "\n");
		author = document.getElementById("storyauthor"+id).innerHTML;

		hiddenid.value = id;
		something.value = text;
		name.value = author;
		return false;
	}

	function deleteStory(id) {
		if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
		xmlHttp.onreadystatechange = handleDelete;
		xmlHttp.open("GET", www+"ajax.php?xml=true&deletestory=" + id, true);
		xmlHttp.send(null);
		return false;
	}

	function handleDelete() {
		if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			xml = xmlHttp.responseXML;                     
			location.href=location.href;
		}
	}

	function register() {
		if (! checkEmail(email.value)) {
			setNotice(notice, true, "Проверьте правильность адреса, как-то он не очень... :) " +
				"Хочется чего-то вроде email@server.com");
			email.select(); email.focus();
		} else {
			if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
			setNotice(notice, false, "Обрабатываем...");
			xmlHttp.onreadystatechange = handleRegister;
			xmlHttp.open("GET", www+"ajax.php?xml=true&register=" + email.value, true);
			xmlHttp.send(null);
		}

		return false;
	}

	function handleRegister () {
		if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			xml = xmlHttp.responseXML;                     
			if (xml.getElementsByTagName("sent").length > 0) {
				setNotice(notice, false, "На ваш e-mail " + email.value + 
					" отправлено письмо! Большое спасибо за внимание к моему проекту!");
			} else {
				setNotice(notice, true, "Почему-то не удалось связаться... " +
			  		"Если с e-mail все в порядке (проверьте на всякий случай еще раз?), значит глюки на " +
			  		"нашей стороне. Мы будем над этим работать. Извините :о)");
				email.select(); email.focus();
			}
		}
	}

	function addComment(id) {
		var parent = document.getElementById("comments" + id);
		removeChildren(parent);

		parent.style.background = "#FFC";
		parent.style.border = "1px solid #CCC";
		parent.style.padding = "0.5em";
		parent.style.margin = "0.5em";

		appendText(parent, "Написать комментарий");

		var form = createEl("form");
		form.setAttribute("method", "get"); form.setAttribute("action", "");
		form.onsubmit = function() {
			return submitComment(id);
		}
		parent.appendChild(form);

		form.appendChild(createInput("hidden", "comment" + id + "story", id));

		var textarea = createEl("textarea");
		textarea.setAttribute("id", "comment" + id + "text");
		form.appendChild(textarea);
		textarea.focus();
		form.appendChild(createBr());

		var p = createEl("p");
		p.setAttribute("id", "comment" + id + "notice");
		setElClass(p, "notice");
		form.appendChild(p);

		var label = createLabel("comment" + id + "name", 
			"Ваше имя: (Если не хотите, не заполняйте)");
		setElClass(label, "optional");
		form.appendChild(label);
		form.appendChild(createBr());

		var input = createInput("text", "comment" + id + "name", name.value);
		setElClass(input, "name");
		form.appendChild(input);
		form.appendChild(createBr());

		var label = createLabel("comment" + id + "email", 
			"Ваше e-mail: (Заполнять не обязательно. На сайте не публикуется)");
		setElClass(label, "optional");
		form.appendChild(label);
		form.appendChild(createBr());

		var input = createInput("text", "comment" + id + "email", email.value);
		setElClass(input, "email");
		form.appendChild(input);
		form.appendChild(createBr());

		var input = createInput("submit", "comment" + id + "submit", "Отправить");
		input.style.padding = "0.5em";
		form.appendChild(input);

		return false;
	}

	var commentNotice;
	var commentText;

	function submitComment(id) {
		var story = document.getElementById("comment" + id + "story");
		var name = document.getElementById("comment" + id + "name");
		var email = document.getElementById("comment" + id + "email");
		commentNotice = document.getElementById("comment" + id + "notice");
		commentText = document.getElementById("comment" + id + "text");

		if (commentText.value == '') {
			setNotice(commentNotice, true, "Напишите что-нибудь... " +
				"Ну хоть что-нибудь :)");
			commentText.select(); commentText.focus();
		} else {
			if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
			setNotice(commentNotice, false, "Обрабатываем...");
			xmlHttp.onreadystatechange = handleSubmitComment;
			xmlHttp.open("POST", www+"ajax.php?xml=true&comment=&ts=" + new Date().getTime(), true);
			xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			xmlHttp.send(
				"story=" + story.value +
				"&name=" + encodeURIComponent(name.value) + //.replace(/&/g, "%26") +
				"&email=" + encodeURIComponent(email.value) + //.replace(/&/g, "%26") +
				"&text=" + encodeURIComponent(commentText.value)); //.replace(/&/g, "%26"));
		}

		return false;
	}

	function handleSubmitComment() {
		if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			xml = xmlHttp.responseXML;
			if (xml.getElementsByTagName("sent").length > 0) {
				setNotice(commentNotice, false, "Комментарий добавлен.");
				location.href = xml.getElementsByTagName("sent")[0].getAttribute("url");
			} else {
				setNotice(commentNotice, true, "Почему-то не удалось добавить комментарий. " +
			  		"Если текст не пустой (проверьте на всякий случай еще раз?), значит глюки на " +
			  		"нашей стороне. Мы будем над этим работать. Извините :о)");
				commentText.select(); commentText.focus();
			}
		}
	}


