	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 removeHandler(object, e, handler, useCapture) {		if(handler) {
			if (object.removeEventListener) {
				object.removeEventListener(e, handler, useCapture ? useCapture : false);
			} else if (object.detachEvent) {
				object.detachEvent('on' + e, handler);
			} else alert("Add handler is not supported");
		}
	}

	function parentNode(curNode) {
		return (curNode.parentNode)?curNode.parentNode:((curNode.parentElement)?curNode.parentElement:((curNode.parent)?curNode.parent:null));
	}


	function pageWidth() {
		return document.body.scrollWidth;
	}
	function pageHeight() {
		return document.body.scrollHeight;
	}

	function setOpacity(elem,level)
	{
		if(elem.filters)
		{
			elem.style.filter="alpha(opacity="+level+")";
		}
		else elem.style.opacity=level/100;
	}
	function windowHeight()
	{
		var de=document.documentElement;
		return self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;
	}
	function windowWidth()
	{
		var de=document.documentElement;
		return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
	}
	function scroll_X()
	{
		var de=document.documentElement;
		return self.pageXOffset || (de && de.scrollLeft) || document.body.scrollLeft;
	}

	function scrollX2() {
		var xScroll;
		 if (window.innerHeight && window.scrollMaxY) {
			 xScroll = window.innerWidth + window.scrollMaxX;
		 } else if (document.body.scrollHeight > document.body.offsetHeight){
			 xScroll = document.body.scrollWidth;
		 } else {
			 xScroll = document.body.offsetWidth;
		 }
		 return xScroll;
	}

	function scrollY2() {
		var yScroll;
		if (window.innerHeight && window.scrollMaxY) {
			 yScroll = window.innerHeight + window.scrollMaxY;
		 } else if (document.body.scrollHeight > document.body.offsetHeight){
			 yScroll = document.body.scrollHeight;
		 } else {
			 yScroll = document.body.offsetHeight;
		 }
		return yScroll;
	}


	function scroll_Y()
	{
		var yScroll;
		if(self.pageYOffset) yScroll=self.pageYOffset;
		else if(document.documentElement && document.documentElement.scrollTop) yScroll=document.documentElement.scrollTop;
		else yScroll=document.body.scrollTop;
		return yScroll;
	}

	function getStyle(elem,name) {
		if(elem.style[name]) return elem.style[name];
		else if(elem.currentStyle) return elem.currentStyle[name];
		else if(document.defaultView && document.defaultView.getComputedStyle) {
			name=name.replace(/([A-Z])/g,"-$1");
			name=name.toLowerCase();
			var s=document.defaultView.getComputedStyle(elem,"");
			return s && s.getPropertyValue(name);
		} else return null;
	}

	function getWidth(elem)
	{
		return parseInt(getStyle(elem,'width'));
	}
	function getHeight(elem)
	{
		return parseInt(getStyle(elem,'height'));
	}

	function fullWidth(elem) {
		if(getStyle(elem,'display')!='none')
			return elem.offsetWidth || getWidth(elem);
		var old=resetCSS(elem,{display:"",visibility:"hidden",position:"absolute"});
		var w=elem.offsetWidth||getWidth(elem);
		restoreCSS(elem,old);
		return w;
	}

	function fullHeight(elem) {
		if(getStyle(elem,'display')!='none')
			return elem.offsetHeight || getHeight(elem);

		var old=resetCSS(elem,{position:"absolute",visibility:"hidden",display:""});
		var h=elem.offsetHeight||getHeight(elem);
		restoreCSS(elem,old);
		return h;
	}

	function hide(elem) {
		elem.style.display='none';
	}
	function show(elem) {
		elem.style.display='block';
	}
	function gebi(id) {
		return document.getElementById(id);
	}
	function gebtn(elem,tag) {
		return elem.getElementsByTagName(tag);
	}

	function getPageSize() {

		 var xScroll=scrollX2();
		 var yScroll=scrollY2();

		 var windowWidth, windowHeight;

		 if (self.innerHeight) {
			 if(document.documentElement.clientWidth){
					 windowWidth = document.documentElement.clientWidth;
			 } else {
				 windowWidth = self.innerWidth;
			 }
		 	windowHeight = self.innerHeight;
		 } else if (document.documentElement && document.documentElement.clientHeight) {
			 windowWidth = document.documentElement.clientWidth;
			 windowHeight = document.documentElement.clientHeight;
		 } else if (document.body) {
			 windowWidth = document.body.clientWidth;
			 windowHeight = document.body.clientHeight;
		 }

		 var pageHeight,pageWidth;

		 if(yScroll < windowHeight){
			 pageHeight = windowHeight;
		 } else {
			 pageHeight = yScroll;
		 }

		 if(xScroll < windowWidth){
			 pageWidth = xScroll;
		 } else {
			 pageWidth = windowWidth;
		 }

		 return [pageWidth,pageHeight];
	}

	function resetCSS(elem,prop) {
		var old={};
		for(var i in prop) {
		 	old[i]=elem.style[i];
		 	elem.style[i]=prop[i];
		}
		return old;
	}

	function restoreCSS(elem,prop) {
		for(var i in prop) {
			elem.style[i]=prop[i];
		}
	}

	Function.prototype.bind = function(context) {
	   var fn = this;
	   return function() {
	      return fn.apply(context, arguments);
	   };
	}

	function sibling( n, elem ) {
		var r = [];

		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType == 1 && n != elem )
				r.push( n );
		}
		return r;
	}

	function childrens(elem,tag) {

		var elems=sibling(elem.firstChild);
		if(tag) {
			var r=[];
			for(var i=0;i<elems.length;i++) {
				if(elems[i].tagName.toLowerCase()==tag) r.push(elems[i]);
			}
			return r;
		}else return elems;
	}

function objectToCenterScreen(object)
{
	object.style.display='block';
	object.style.left=document.body.clientWidth/2-fullWidth(object)/2+"px";
	var t=scrollY()+(windowHeight()/2) - fullHeight(object)/2;
	if(t<0) t=0;
	object.style.top=t+"px";
	object.style.display='none';
}

function Ajax(url,params,func,method)
{
	var d=new Transport(url,(method ? method :'GET'));
    d.handlers.onComplete=function(aa){
	    var g=aa.responseText;
	 	var result=eval("("+unescape(g)+")");
        func(result,params);
    }
    for(var i in params) {
    		d.setParam(i,unescape(params[i]));
    }
    d.get();
}

function find(expression,cur) {
	var selectors=expression.split(/\s/);
	var curnodes=[(cur ? cur : document)];
	for(var i=0;i<selectors.length;i++) {
		var newcurnodes=[];
		var matches=/(\w*)?(?:(#|\.)(\w*))?/.exec(selectors[i]);
		if(matches[2]=='#') newcurnodes=[gebi(matches[3])];
		else {
			for(var j=0;j<curnodes.length;j++) {
				var n=curnodes[j].getElementsByTagName(matches[1]?matches[1]:'*');
				for(var k=0;k<n.length;k++) {

					if((matches[2]===undefined && matches[3]===undefined)||(matches[2]=='' && matches[3]=='')||(matches[2]=='.' && n[k].className.match(matches[3]))) {
						newcurnodes.push(n[k]);
					}
				}
			}
		}
		curnodes=newcurnodes;
	}
	return (curnodes.length==1 ? curnodes[0] : curnodes);
}

function GetFormParams(form)
{
	elems=form.elements;
	formParams={};
	for(var i=0;i<elems.length;i++)
	{
		if(elems[i].name){
                  if(elems[i].type=='checkbox' || elems[i].type=='radio') {
                  	if(elems[i].checked==false) continue;
                  }
			if(form[elems[i].name].length>1 && elems[i].type=='checkbox'){
				if(!formParams[elems[i].name]){
					formParams[elems[i].name]=[elems[i].value];
				}
				else formParams[elems[i].name].push(elems[i].value);
			}
			else {
				if(/^(hidden|checkbox|text|radio|password)$/.test(elems[i].type)) {
					formParams[elems[i].name]=elems[i].value;
				}
				if(elems[i].tagName=='SELECT' || elems[i].tagName=='select') {
					formParams[elems[i].name]=elems[i].options[elems[i].selectedIndex].value;
				}
				if(elems[i].tagName=='textarea' || elems[i].tagName=='TEXTAREA') {
					formParams[elems[i].name]=elems[i].value;
				}
			}
		}
	}
	return formParams;
}

