function gebi(id) {
	return document.getElementById(id);
}

function addHandler(object, event, handler, useCapture) {
	if (object.addEventListener) { 
		object.addEventListener(event, handler, useCapture ? useCapture : false); 
	} else if (object.attachEvent) { 
		object.attachEvent('on' + event, handler); 
	} else alert("Add handler is not supported"); 
}

function absPosition(obj) { 
      var x = y = 0; 
      while(obj) { 
            x += obj.offsetLeft; 
            y += obj.offsetTop; 
            obj = obj.offsetParent; 
      } 
      return {x:x, y:y}; 
}

function screenSize() { 
	var w, h;
	w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth)); 
	h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight)); 
	return {w:w, h:h}; 
}

function domReady(i) {
	var u =navigator.userAgent;
	var e=/*@cc_on!@*/false;
	var st = setTimeout;
	if (/webkit/i.test(u)) {
		st(
			function() {
				var dr=document.readyState;
				if(dr=="loaded"||dr=="complete"){
					i()
				} else {
					st(arguments.callee,10);
				}
			},
			10
		);
	} else if ((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))) {
		document.addEventListener("DOMContentLoaded", i, false);
	} else if (e) {(
		function(){
			var t=document.createElement('doc:rdy');
			try {
				t.doScroll('left');
				i();
				t=null;
			} catch(e) {
				st(arguments.callee,0);
			}
		})();
	} else {
		window.onload=i;
	}
}

function preload(images) {
	if (typeof document.body == "undefined") return;
	try {
		var div = document.createElement("div");
		var s = div.style;
		s.position = "absolute";
		s.top = s.left = 0;
		s.visibility = "hidden";
		document.body.appendChild(div);
		for (var i = 0; i < images.length; i++) div.innerHTML += "<img src=\"" + images[i] + "\" />";
	} catch(e) {/* Error, do nothing */}
}

function cancelBubbling(evt) {
	evt = evt || window.event;
	evt.cancelBubble = true;
}

function stopLink(evt) {
	evt = evt || window.event;
	cancelBubbling(evt);
	if (evt.preventDefault) evt.preventDefault(); 
	evt.returnValue = false;
}

function fixClassName(node, addclass, delclass) {
	var re = new RegExp("\\b" + delclass + "\\b", "g");
	if (delclass) node.className = node.className.replace(re, "");
	if (addclass) if (node.className.indexOf(addclass) == -1) node.className += " " + addclass;
}

// AJAX-object
var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;

net.ContentLoader = function(key, method, url, params, onload, onerror, contentType, headers) {
      this.hashKey = key; 
      this.unrequestBrowser = false;
      this.req = null;
      this.onload = onload;
      this.onerror = (onerror) ? onerror : this.defaultError;
      this.loadXMLDoc(method, url, params, contentType, headers);
}

net.ContentLoader.prototype = {
      loadXMLDoc : function(method, url, params, contentType, headers) {
            if (!method) method="GET";
            if (!contentType && method=="POST") contentType='application/x-www-form-urlencoded';
            if (window.XMLHttpRequest) {
                  this.req=new XMLHttpRequest(); 
            } else if (window.ActiveXObject) {
                  this.req=new ActiveXObject("Microsoft.XMLHTTP");
            } else {
                  this.unrequestBrowser = true;
                  return;
            }
            if (this.req) {
                  try {
                        this.req.open(method,url,true);
                        if (contentType){
                              this.req.setRequestHeader('Content-Type', contentType);
                        }
                        if (headers) {
                              for (var h in headers) {
                                    this.req.setRequestHeader(h,headers[h]);
                              }
                        }
                        var loader=this;
                        this.req.onreadystatechange=function() {
                              loader.onReadyState.call(loader);
                        }
                        this.req.send(params);
                  } catch (err){
                        this.onerror.call(this);
                  }
            }
      },
      onReadyState : function() {
            var req=this.req;
            var ready=req.readyState;
            if (ready==net.READY_STATE_COMPLETE) {
                  var httpStatus=req.status;
                  if (httpStatus==200 || httpStatus==0) {
                        this.onload.call(this);
                  } else {
                        this.onerror.call(this);
                  }
            }
      },
      defaultError : function() {
            alert("error fetching data!"+"\n\nreadyState:"+this.req.readyState +"\nstatus: "+this.req.status+"\nheaders: "+this.req.getAllResponseHeaders());
      }
}

var requestsHash = [];
function setAjaxRequest(method, url, params, onload, onerror, contentType, headers) {
      if (!url) {
            alert("Necessary parameters are not specified");
            return;
      }
      requestsHash.push(new net.ContentLoader(requestsHash.length, method, url, params, onload, onerror, contentType, headers));
      return requestsHash[requestsHash.length - 1].unrequestBrowser;
}

function goTop() {
	window.scrollTo(0,0);
	return false;
}

function checkURL(url) {
	var re = /^(http|https|ftp|news)+(:\/\/){1}[a-zA-Z_\-]+\.(.*)$/i;
	return re.test(url);
}