/* utils */

// dom
function $(id) { return document.getElementById(id) }
function $t(name) { return document.getElementsByTagName(name); }
function $c(name) { return document.createElement(name); }

// class
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 }

// events
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]); }
}

// dimensions
function getScrollY() { return parseInt( window.pageYOffset ? window.pageYOffset : ( document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) - 20 ); }
function getScrollX() { return parseInt( window.pageXOffset ? window.pageXOffset : ( document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) - 20 ); }

// cookies
function getCookie(name)
{
	var arg	= name + '=';
	var alen = arg.length;
	var	clen =document.cookie.length;
	var i = 0;
	while (i<clen) { var j = i + alen; if (document.cookie.substring(i,j)==arg) return getCookieVal(j); i = document.cookie.indexOf(" ",i) + 1; if (i==0) break; };
	return null;
}

function setCookie(name,value,path,expires)
{
	str = name + "=" + value;
	if (expires) str += " ;expires="+expires;
 	if (path) str += " ;path="+path;
	document.cookie = str;
}

function getCookieVal(offset)
{
	var endstr = document.cookie.indexOf(";", offset);
	if (endstr==-1) endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset,endstr));
};

function delCookie(name)
{
	if (getCookie(name)) document.cookie = name + "=; expires=Thu, 01-Jan-70 00:00:01 GMT";
}

// debug
function debug(object,newWin)
{
	var t = "";
	for(var i in object) t+=i+" -> "+object[i]+"<br>";
	if(!newWin) { document.write(t); return; }
	var win = window.open ("","win","left=10,top=10,status=1,width=800,height=800,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no");
	if(win) win.document.write(t);
	else document.write(t);
}

// ajax request
function ajaxRequest(url, method, respBox, callback)
{
	var req;
	if(window.XMLHttpRequest) req = new XMLHttpRequest();
	else if(window.ActiveXObject) req = new ActiveXObject("Microsoft.XMLHTTP");
	if(!req) return false;
	
	req.onreadystatechange=function() { if (req.readyState == 4) if(req.status == 200) { if(respBox) respBox.innerHTML = req.responseText; if(callback) callback(req); } }
	
	method = method.toUpperCase();
	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("Method not allowed: " + method); return false; }
	return true;
}

// sf
function setOpacity(el, o)
{
	el.style.opacity = o/100;
	el.style.filter = "alpha(opacity="+o+")";
}

// prettier dialog
// errorMesssage - display message
// elementFocus - set focus to element after hide alert (optional)
function myAlert(errorMessage, elementFocus)
{
	var box = new AlertBox();
	box.addMessage(errorMessage);
	box.addPostElement(elementFocus);
	box.addButton("OK","Zamknij","button",false);
	box.show();
	box.addShadow();
	return false;
}

function AlertBox()
{
	var dialogAlertId = "dialog_alert";
	
	var elementFocus = null;
	var buttons = new Array();
	var returnVal = null;
	
	var alertBg = document.createElement("div");
	alertBg.setAttribute("id", dialogAlertId);
	document.getElementsByTagName("body").item(0).appendChild(alertBg);

	var dialog = document.createElement("div");
	dialog.className = "dialog";
	dialog.onclick = function(e) { e = e||event; e.cancelBubble = true; return false; }
	alertBg.appendChild(dialog);
	
	this.addShadow = function()
	{
		// shadow
		var shadow = document.createElement("div");
		shadow.className = "shadow";
		shadow.style.position = "absolute";
		shadow.style.background = "#000";
		shadow.style.top = (dialog.offsetTop + 3) + "px";
		shadow.style.left = (dialog.offsetLeft + 3) + "px";
		shadow.style.width = dialog.offsetWidth + "px";
		shadow.style.height = dialog.offsetHeight + "px";
		shadow.style.opacity = 0.15;
		shadow.style.filter = "alpha(opacity=15)";
		alertBg.appendChild(shadow);		
	}
	
	this.addPostElement = function(elem)
	{
		elementFocus = elem;
	}
	
	this.addMessage = function(msg)
	{
		var text = document.createElement("div");
		text.className = "text";
		text.innerHTML = msg;
		text.onselectstart = new Function("return false");
		dialog.appendChild(text);
	}
	
	this.addButton = function(text, title, className, ret)
	{
		var button = document.createElement("a");
		button.setAttribute("href","#");
		button.innerHTML = text;
		button.className = className;
		button.onfocus = function() { addClass(this,"focus"); }
		button.title = title;
		button.onblur = function() { removeClass(this,"focus"); }
		dialog.appendChild(button);
		button.onclick = function()
		{
			alertBg.parentNode.removeChild(alertBg);
			if(elementFocus) elementFocus.focus();
			return false;
		}
		buttons[buttons.length] = button;
	}
	
	this.show = function()
	{
		var scroll = getPageScroll();
	
		alertBg.style.width = document.documentElement.scrollWidth + "px";
		alertBg.style.height = document.documentElement.scrollHeight + "px";
		
		var innerHeight = window.innerHeight ? window.innerHeight : ( screen.availHeight - 100 )
		
		dialog.style.position = "absolute";
		dialog.style.top = ( ( scroll.y + ( innerHeight/2 )  ) - ( dialog.offsetHeight / 2 ) ) + "px";
		dialog.style.left = ( (parseInt(alertBg.style.width) / 2) - ( dialog.offsetWidth / 2 ) ) + "px";
		
		alertBg.onclick = function()
		{
			dialog.className += " alert";
			setTimeout( function()
			{
				removeClass(dialog,"alert");
				if(buttons.length == 1) buttons[0].focus();
			}, 1000 );
		}
		
		buttons[buttons.length - 1].focus();
	}
	
	function getPageScroll()
	{
		var scroll = new Object();
		if (self.pageYOffset)
		{
			scroll.x = self.pageXOffset;
			scroll.y = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop)
		{
			scroll.x = document.documentElement.scrollLeft;
			scroll.y = document.documentElement.scrollTop;
		}
		else if (document.body)
		{
			scroll.x = document.body.scrollLeft;
			scroll.y = document.body.scrollTop;
		}
		return scroll;
	}
}

function getAbsolutePosition(o)
{
	var left = 0;
	var top = 0;
	if (!o.offsetParent)
		return [left,top]
	
	left = o.offsetLeft; top = o.offsetTop;
	while (o = o.offsetParent) { left += o.offsetLeft; top += o.offsetTop }
	return [left,top];
}