function addClass(el,c) { if(!containsClass(el, c)) el.className += " " + c; }
function removeClass(el, c) { el.className = el.className.replace(new RegExp(c,"g"),""); }
function containsClass(el, c) { return el.className.indexOf(c) != -1 }
function $(id) { return document.getElementById(id); }
function $g(tagName) { return document.getElementsByTagName(tagName); }
function $c(name) { return document.createElement(name); }
function setOpacity(el, o)
{
	el.style.opacity = o/100;
	el.style.filter = "alpha(opacity="+o+")";
}

function addEvent(obj, type, fn){
  if (obj.addEventListener)
    obj.addEventListener(type, fn, false);
  else if (obj.attachEvent){
    obj["e"+type+fn] = fn;
    obj[type+fn] = function(){obj["e"+type+fn](window.event);}
    obj.attachEvent("on"+type, obj[type+fn]);
  }
}

function myAlert(errorMessage, elementFocus)
{
	alert(errorMessage);
	if(elementFocus)
		elementFocus.focus();
	return false;
}

function ajaxRequest(url, method, containerResponse, postFunction)
{
	var req;
	if(window.XMLHttpRequest)
		req = new XMLHttpRequest();
	else if(window.ActiveXObject)
		req = new ActiveXObject("Microsoft.XMLHTTP");
	// if browser doesn't support ajax return true
	if(!req) return false;

	method = method.toUpperCase();

	// process function
 	req.onreadystatechange=function()
 	{
  		if (req.readyState == 4)
  			if(req.status == 200)
  			{
  				if(containerResponse) containerResponse.innerHTML = req.responseText;
  				if(postFunction) postFunction(req);
  			}
	}

	// send request
	if(method == "GET")
	{
		req.open(method, url, true );
		req.send(null);
	}
	else if(method == "POST")
	{
		try // catch an exception to prevent errors (opera <= 8 doesn't support post request)
		{
			req.open(method, url.slice(0,url.indexOf("?")), true );
			var parameters = url.slice(url.indexOf("?") + 1);
			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	      	req.setRequestHeader("Content-length", parameters.length);
	      	req.setRequestHeader("Connection", "close");
	      	req.send(parameters);
      	}
      	catch (e)
      	{
      		return false;
      	}
	}
	else
	{
		alert("Not normal method: " + method);
		return false;
	}

	return true;
}

window.onload = function()
{
	hoverElements();
	return;

	var content = $("content");
	var links = $("top").getElementsByTagName("a");
	for(var i = 0; i < links.length; i++)
		links[i].onclick = ajaxLink;
	$g("a")[0].onclick = ajaxLink;

	function ajaxLink()
	{
		this.blur();
		var url = this.pathname;
		if(url.charAt(0) == "/") url = url.slice(1);
		url = "/ajax," + url;
		ajaxRequest(url,"GET",null,showContent);
		return false;
	}

	function showContent(req)
	{
		var value = req.responseText;
		content.innerHTML = value;
		hoverElements();
		return;

		var step = 10;
		var speed = 10;
		var opacity = 100;
		var interval = setInterval(hideOld,speed);

		function hideOld()
		{
			if(opacity <= 0)
			{
				clearInterval(interval);
				content.innerHTML = value;
				interval = setInterval(showNew,speed);
				return;
			}
			setOpacity(content,opacity);
			opacity -= step;
		}

		function showNew()
		{
			if(opacity >= 100)
			{
				clearInterval(interval);
				return;
			}
			setOpacity(content,opacity);
			opacity += speed;
		}
	}

	function hoverElements()
	{
		hoverElement("input");
		hoverElement("textarea");

		function hoverElement(name)
		{
			var elements = $g(name);
			for( var i = 0; i < elements.length; i++)
			{
				elements[i].onfocus = function() { addClass(this,"focus"); }
				elements[i].onblur = function() { removeClass(this,"focus"); }
			}
		}
	}
}
