function addEvent(obj, event, func) {
	try {
		obj.addEventListener(event, func, false);
	} catch (e) {
		if (typeof eval("obj.on"+event) == "function") {
			var existing = obj['on'+event];
			obj['on'+event] = function () { existing(); func(); };
		} else {
			obj['on'+event] = func;
		}
	}
}


function stopEvent(e) {
	if (e.stopPropagation)
		e.stopPropagation();
	if (e.preventDefault)
		e.preventDefault();

	e.cancelBubble = true;
	e.returnValue  = false;
	return false;
}


function printPage()
{
	window.print();
	return false;
}


function getCurrentStyle(ele, prop)
{
	if (ele.currentStyle) {
		prop = prop.replace(/(\-\w)/gi, function(w){return w.replace("-", "").toUpperCase()})
		return ele.currentStyle[prop];
	} else {
		return document.defaultView.getComputedStyle(ele, "").getPropertyValue(prop);
	}
	return null;
}


function createCookie(name, value, days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();
	}
	else expires = "";
	document.cookie = name + "=" + value + expires + "; path=/";
}


function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i=0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}


function includeJS(filename)
{
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.src = filename;
	document.getElementsByTagName("head")[0].appendChild(script);
}


function bookmarksOrPhotos ()
{
	var xml = this.getXMLobject();
	var bms = xml.getElementsByTagName("bookmark");
	if (bms.length) {
		var ul = document.getElementById("sites-list");
		ul.removeChild(ul.getElementsByTagName("li")[0]);
		for (var i = 0;i < bms.length; i++) {
			var li = document.createElement("li");
			var a = document.createElement("a");
			a.setAttribute("href", bms[i].getElementsByTagName("url")[0].firstChild.nodeValue);
			a.setAttribute("title", bms[i].getElementsByTagName("title")[0].firstChild.nodeValue);
			var img = document.createElement("img");
			img.setAttribute("src", bms[i].getElementsByTagName("screenshot")[0].firstChild.nodeValue);
			img.setAttribute("alt", bms[i].getElementsByTagName("title")[0].firstChild.nodeValue);
			img.setAttribute("width", 100);
			img.setAttribute("height", 75);
			a.appendChild(img);
			li.appendChild(a);
			ul.appendChild(li);
		}
		document.getElementById("sites").className = "box";
	}
	bms = xml.getElementsByTagName("photo");
	if (bms.length) {
		var ul = document.getElementById("photos-list");
		ul.removeChild(ul.getElementsByTagName("li")[0]);
		for (var i = 0;i < bms.length; i++) {
			var li = document.createElement("li");
			var a = document.createElement("a");
			a.setAttribute("href", "http://www.flickr.com/photos/dmitry-baranovskiy/" + bms[i].getAttribute("id") + "/");
			a.setAttribute("title", bms[i].getAttribute("title"));
			var img = document.createElement("img");
			img.setAttribute("src", "http://static.flickr.com/" + bms[i].getAttribute("server") + "/" + bms[i].getAttribute("id") + "_" + bms[i].getAttribute("secret") + "_t.jpg");
			img.setAttribute("alt", bms[i].getAttribute("title"));
			img.setAttribute("width", 100);
			img.setAttribute("height", 75);
			a.appendChild(img);
			li.appendChild(a);
			ul.appendChild(li);
		}
		document.getElementById("photos").className = "box";
	}
}


function openSource ()
{
	document.location.href = this.getAttribute("href") + ".html";
	return false;
}


function avatarCheck()
{
	if (email && icon && email.value != icon.email) {
		icon.email = email.value;
		icon.src = "/icon?email=" + escape(email.value);
	}
}


function validateForm ()
{
	if (!email || !text) return false;
	if (email.value.match(/^(\s|\n)*$/g)) {
		email.focus();
		alert("Email is required. Please fill in.");
		return false;
	}
	if (text.value.match(/^(\s|\n)*$/g)) {
		text.focus();
		alert("Comment can not be empty. Please fill in.");
		return false;
	}
	if (!email.value.match(/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/g)) {
		email.focus();
		alert("Email is not valid.");
		return false;
	}
	return true;
}


function ticker ()
{
	if (text && preview && pusername && name && (preview.comment != text.value || pusername.innerHTML != name.value)) {
		var textlength = text.value.length;
		if (textlength > 500) {
			text.value = text.value.substring(0, 500);
			if (textlength > 501) {
				alert("String, you inserted, was too big for comment and was trancated.");
			}
			textlength = 500;
		}
		charleft.innerHTML = (500 - textlength);
		var typing = text.value.toString().UTF2HTML();
		hiddentext.value = typing;
		preview.innerHTML = typing.toString().textile();
		preview.comment = text.value;
		td = new Date();
		today.innerHTML = td.getFullYear() + "-" + (td.getMonth() < 10?"0" + td.getMonth():td.getMonth()) +
		"-" + (td.getDate() < 10?"0" + td.getDate():td.getDate()) + " " + (td.getHours() < 10?"0" + td.getHours():td.getHours()) +
		":" + (td.getMinutes() < 10?"0" + td.getMinutes():td.getMinutes()) + ":" + (td.getSeconds() < 10?"0" + td.getSeconds():td.getSeconds());
		pusername.innerHTML = name.value;
	}
	setTimeout(ticker, 50);
}


/* initialization */
var isIE = (typeof(window.print) == "object");
var isSafari = ((document.doctype == null) && (typeof(document.getElementById) == 'function') && (document.compatMode != 'CSS1Compat'));
var panel, main, panelHolder, Top, Bottom, email, icon, text, preview, pusername, today, name, charleft, feedback;
includeJS("/scripts/ajax.js");
includeJS("/scripts/textile.js");
includeJS("/scripts/typo.js");

function init ()
{
	panel = document.getElementById("panel");
	Top = document.getElementById("top");
	Bottom = document.getElementById("bottom");
	main = document.getElementById("main");
	panelHolder = document.getElementById("panel-holder");
	if (isSafari) {
		var field = document.getElementById("term");
		if (field) {
			field.setAttribute("type", "search");
			field.setAttribute("placeholder", "Search");
			field.setAttribute("results", 10);
			field.setAttribute("class", "")
		}
	}
	if (typeof Ajax != "undefined") {
		Ajax.send("/bookmarks/", "", "", bookmarksOrPhotos);
		Ajax.send("/flickr/", "", "", bookmarksOrPhotos);
	}

	var sources = document.getElementsByTagName("a");
	for (var i = 0; i < sources.length; i++) {
		if (sources[i].getAttribute("rel") == "source") {
			sources[i].onclick = openSource;
		}
	}
	var pblock = document.getElementById("preview-block");
	if (pblock) pblock.className = "hreview";
	email = document.getElementById("email");
	if (email) email.onchange = avatarCheck;
	feedback = document.getElementById("feedback");
	if (feedback) feedback.onsubmit = validateForm;
	icon = document.getElementById("Icon");
	text = document.getElementById("text");
	hiddentext = document.getElementById("hidden-text");
	charleft = document.getElementById("charleft");
	preview = document.getElementById("preview");
	pusername = document.getElementById("pusername");
	name = document.getElementById("name");
	today = document.getElementById("today");
	setTimeout(ticker, 10);

	var printing = document.getElementById("print");
	if (printing) {
		printing.onclick = function () {window.print(); return false;}
	}
}


function isloaded()
{
	if (document.getElementById("loaded")) {
		var images = document.getElementsByTagName("img");
		for (var i = 0; i < images.length; i++) {
			if (images[i].className == "photo") {
				images[i].onerror = function(){this.src = "/res/defaulticon.png";}
			}
		}
	} else {
		setTimeout(isloaded, 10);
	}
}

isloaded();
window.onload = init;