function match(o,subselectors) {
	var hit=0;
	
	if (o) {
		for (var i=0;i<subselectors.length;i++) {
			switch (subselectors[i].substr(0,1)) {
				case '.':
						if ('.'+o.className==subselectors[i]) hit++;
					break;
				case '#':
						if ('#'+o.id==subselectors[i]) hit++;
					break;
				default:
						if (o.tagName&&o.tagName.toLowerCase()==subselectors[i].toLowerCase()) hit++;
					break;
			}
		}
	}
	
	return hit;
}

function sselectors(selector) {
	var ssid=0;
	var subselectors=[];
	for (var i=0;i<selector.length;i++) {
		var chr=selector.substr(i,1);
		if (/\.|#/.test(chr)&&i>=1) ssid++;
		if (!subselectors[ssid]) subselectors[ssid]='';
		subselectors[ssid]+=chr;
	}
	return subselectors;
}

var xJS=function(selector) {
	if (typeof selector=="string") {
		// selectorok
		var rs=selector.split(' ');
		var tmb=[];
		var o;
		
		var subselectors=sselectors(rs[rs.length-1]);

		switch (subselectors[0].substr(0,1)) {
			case '.':
					o=document.getElementsByClassName(subselectors[0].replace('.',''));
				break;
			case '#':
					o=[document.getElementById(subselectors[0].replace('#',''))];
				break;
			default:
					o=document.getElementsByTagName(subselectors[0]);
				break;
		}
		
		var tmb=[];
		for (var i=0;i<o.length;i++) {
			if (subselectors.length==match(o[i],subselectors)) tmb[tmb.length]=o[i];
		}
		
		o=xJS.collToArray(tmb);
		tmb=[];
		
		for (var i=0;i<o.length;i++) {
			var ps=xJS.DOM.parents(o[i]);
			var c=rs.length-2;
			if (c>=0) {
				for (var j=0;j<ps.length;j++) {
					var subselectors=sselectors(rs[c]);
					if (subselectors.length==match(ps[j],subselectors)) c--;
					if (c<0) {
						tmb[tmb.length]=o[i];
						break;
					}
				}
			}
			else tmb=o;
		}
		
		var elements=xJS.collToArray(tmb);
	}
	else if (typeof selector=="object") {
		elements=[selector];
	}
	
	var self={
		// element functions
		elements:function(index) {
			return index?elements[index]:elements;
		},
		length:function() {
			return elements.length;
		},
		
		// events
		ready:function(func) {
			if (xJS.browser.ie()) {
				/*document.onreadystatechange=function(){
					if (document.readyState=='complete') {
						func();
					}
				}*/
				window.attachEvent("onload",function(){
					func();
				});
			}
			else window.addEventListener("load",func,false);
		},
        click:function(func) {
        	if (elements.length) {
        		for (var i=0;i<elements.length;i++) {
					if (xJS.browser.ie()) {
						window.attachEvent("click",function(){
							func(this);
						});
					}
					else {
						elements[i].addEventListener('click',function(){func(this)},true);
					}
        		}
        	}
        },

		// stylesheet
        css:function(options) {
			if (!elements) return false;
			
        	if (typeof options=='object'){
        		if (elements.length==null) {
        			for (var key in options) {
						elements.style[key]=options[key];
					}
        		}
        		else {
        			for (var i=0;i<elements.length;i++) {
        				for (var key in options) {
							elements[i].style[key]=options[key];
						}
        			}
        		}
        		return elements;
        	}
        	else if (typeof options=='string') {
				var val=xJS.browser.ie()?elements[0].currentStyle[options]:document.defaultView.getComputedStyle(elements[0],null)[options];
				return val=='auto'?0:val;
        	}
        },
		addClass:function(className) {
			for (var i=0;i<elements.length;i++) {
				var classNames=elements[i].className.split(' ');
				var tmp=[];
				classNames[classNames.length]=className;
				for (var j=0;j<classNames.length;j++) if (classNames[j]) tmp[tmp.length]=classNames[j];
				elements[i].className=tmp.join(' ');
			}
		},
		removeClass:function(className) {
			for (var i=0;i<elements.length;i++) {
				var classNames=elements[i].className.split(' ');
				var tmp=[];
				classNames[classNames.length]=className;
				for (var j=0;j<classNames.length;j++) if (classNames[j]&&classNames[j]!=className) tmp[tmp.length]=classNames[j];
				elements[i].className=tmp.join(' ');
			}
		},
		
        //animate:function(key,val,t,ifdone) {
        animate:function(values,t,ifdone) {
        	if (!elements) return false;
			else if (elements.length) {
				for (var j=0;j<elements.length;j++)  {
		        	for (var i in values) {
			        	if (!xJS.animation.animations) xJS.animation.animations=[];
			        	var id=xJS.animation.animations.length;
			        	xJS.animation.animations[id]={};
			        	xJS.animation(id,elements[j],i,values[i],t,ifdone);
		        	}
				}
			}
        },
        
        // dom functions
		before:function(tag,options) {
			for (var i=0;i<elements.length;i++)  {
				var newtag=document.createElement(tag);
				for (var j in options) newtag[j]=options[j];
				elements[i].parentNode.insertBefore(newtag,elements[i]);
			}
		},
		after:function(tag,options) {
			for (var i=0;i<elements.length;i++)  {
				var newtag=document.createElement(tag);
				for (var j in options) newtag[j]=options[j];
				elements[i].parentNode.insertBefore(newtag,elements[i].nextSibling);
			}
		},
		remove:function() {
			for (var i=0;i<elements.length;i++) elements[i].parentNode.removeChild(elements[i]);
			return true;
		},
		create:function(tag,options) {
			var newtag=document.createElement(tag);
			for (var j in options) newtag[j]=options[j];

			return newtag;
        },
        append:function(o) {
			if (elements.length) elements[0].appendChild(o);
			return true;
        },
        first:function() {
        	if (!elements.length) return null;
			var first=elements[0].firstChild;
			if (!first) return false;
			while (!first.tagName&&first) {
				first=first.nextSibling;
				if (!first) return null;
			}
			return first;
        },
        last:function() {
			if (!elements.length) return null;
			var last=elements[0].lastChild;
			while (!last.tagName&&last) {
				last=last.previousSibling;
				if (!last) return null;
			}
			return last;
        },
        prev:function() {
			if (!elements.length) return null;
			var prev=elements[0].previousSibling;
			while (!prev.tagName&&prev) {
				prev=prev.previousSibling;
				if (!prev) return null;
			}
			return prev;			
        },
        next:function() {
			if (!elements.length) return null;
			var next=elements[0].nextSibling;
			while (!next.tagName&&next) {
				next=next.nextSibling;
				if (!next) return null;
			}
			return next;			
        },
        parent:function() {
			if (!elements.length) return null;
			return elements[0].parentNode;
        },
        focus:function() {
			if (!elements.length) return null;
			elements[0].focus();
			return true;
        },
        
        // data functions
        html:function(html,overwrite,before) {
			if (typeof html=='string' || typeof html=='number') {
        		for (var i=0;i<elements.length;i++) {
					if (overwrite||overwrite==undefined) elements[i].innerHTML=html;
					else if (before) elements[i].innerHTML=html+elements[i].innerHTML;
					else if (!before) elements[i].innerHTML+=html;
				}
        		return true;
        	}
        	else {
        		return elements[0].innerHTML;
        	}
        	return null;
        },
        text:function(text) {
        	if (text) {
        		for (var i=0;i<elements.length;i++) elements[i].innerHTML=text;
        		return true;
        	}
        	else {
        		return elements[0].innerHTML.htmlspchars();
        	}
        	return null;
        },
        val:function(val) {
			if (!elements.length) return null;
			if (val) {
        		for (var i=0;i<elements.length;i++) elements[i].value=val;
        		return true;
			}
			else if (elements[0].value) return elements[0].value;
			return null;
        },
        bind:function(funcname,func) {
        	if (elements.length) {
        		for (var i=0;i<elements.length;i++) {
					if (xJS.browser.ie()) {
						elements[i].pack=function(){return func(this);};
					}
					else {
	        			elements[i].addEventListener(funcname,function(event){func(event)},false);
					}
        		}
        	}
        },
		unbind:function(funcname,func) {
        	if (elements.length) {
        		for (var i=0;i<elements.length;i++) {
        			elements[i].removeEventListener(funcname,func,false);
        		}
        	}
		},
		obj:function() {
			return elements.length?elements[0]:false;
		},
		attr:function(attributes) {
			if (typeof attributes=='string') {
				return elements[0][attributes];
			}
			else if (typeof attributes=='object') {
				for (var i=0;i<elements.length;i++) {
					for (var j in attributes) {
						elements[i][j]=attributes[j];
					}
				}
				return true;
			}
		},
		// other functions
		pngfix:function(blank_gif) {
			if (xJS.browser.ie6()) {
				for (var i=0;i<elements.length;i++) {
					var src = elements[i].src;
					if (/.+\.png/.test(src)) {
						elements[i].src = blank_gif;
						elements[i].runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"',sizingMethod='image')";
						elements[i].width = elements[i].width;
						elements[i].height = elements[i].height;
					}
				}
			}
		},
		pngfixbg:function() {
			if (xJS.browser.ie6()) {
				for (var i=0;i<elements.length;i++) {
					var bg=xJS(elements[i]).css('backgroundImage');
					if (/\([\'|\"](.+\.png)[\'|\"]\)/.test(bg)) {
						elements[i].style.backgroundImage = '';
						elements[i].runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+(RegExp.$1)+"',sizingMethod='crop')";
					}
				}
			}
		}

    }	
    	
    return self;
};

xJS.collToArray=function(collection) {
	var tmp=[];
	if (collection) {
		if (collection.length) {
			for (var i=0;i<collection.length;i++) {
				tmp[tmp.length]=collection[i];
			}
		}
	}
	else {
		tmp=collection;
	}
	return tmp;
};

xJS.getPos=function(e){ 
	var left=0;
	var top=0;
	while (e.offsetParent) {
		left+=e.offsetLeft+(e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);  
		top+=e.offsetTop+(e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);  
		e=e.offsetParent;
	}
	return new Array(left,top);
};

xJS.animation=function(id,o,key,val,t,ifdone) {
	if (!xJS.animation.animations[id].start_time) xJS.animation.animations[id].start_time=new Date().getTime();
	if (xJS.animation.animations[id].start_value==undefined) {
		var anim_keys={
			margin:"0px",marginTop:o.clientTop,marginBottom:"0px",marginRight:"0px",marginLeft:o.clientLeft+'px',
			padding:"0px",paddingLeft:"0px",paddingBottom:"0px",paddingRight:"0px",paddingTop:"0px",
			borderTopWidth:"0px",borderBottomWidth:"0px",borderRightWidth:"0px",borderWidth:"0px",borderLeftWidth:"0px",
			fontSize:xJS(document.body).css("fontSize"),fontWeight:400,lineHeight:o.offsetHeight+"px",textIndent:"0px",letterSpacing:"0px",wordSpacing:0,
			right:"0px",left:o.offsetLeft,bottom:"0px",top:o.offsetTop,height:o.offsetHeight,width:o.offsetWidth,
			zIndex:0,outlineWidth:"0px",backgroundPositionX:"0px",backgroundPositionY:"0px"
		};

		var anim_value=xJS(o).css(key);

		if (!anim_value||!/^[0-9\.\-]+$/.test(anim_value.replace('px',''))) {
			anim_value=anim_keys[key];
		}

		if (String(anim_value).search("px")>0) {
			anim_value=anim_value.replace('px','')*1;
			xJS.animation.animations[id].unit='px';
		}
		else xJS.animation.animations[id].unit='';

		var aval=anim_value;

		if (/([-+]{0,2})([0-9]+)(%|px)/.test(val)) {
			if (RegExp.$3=="%") {
				if (RegExp.$1=="+") val=aval+aval/100*RegExp.$2*1;
				else if (RegExp.$1=="-") val=aval-aval/100*RegExp.$2*1;
				else val=aval/100*RegExp.$2*1;
			}
			else {
				if (RegExp.$1=="++") val=aval+RegExp.$2*1;
				else if (RegExp.$1=="--") val=aval-RegExp.$2*1;
				else if (RegExp.$1=="-") val=-RegExp.$2*1;
				else val=RegExp.$2*1;
			}
		}
		
		xJS.animation.animations[id].start_value=String(anim_value).replace('px','')*1;
		xJS.animation.animations[id].stop_value=val+xJS.animation.animations[id].unit;
	}

	xJS.animation.animations[id].now=new Date().getTime();
	xJS.animation.animations[id].elapsed=xJS.animation.animations[id].now-xJS.animation.animations[id].start_time;
	xJS.animation.animations[id].distance=val-xJS.animation.animations[id].start_value;
	
	xJS.animation.animations[id].opt={};
	xJS.animation.animations[id].opt[key]=(xJS.animation.animations[id].start_value+xJS.animation.animations[id].elapsed*xJS.animation.animations[id].distance/t)+xJS.animation.animations[id].unit;
	xJS(o).css(xJS.animation.animations[id].opt);
	
	if (xJS.animation.animations[id].now-xJS.animation.animations[id].start_time<t) {
		xJS.animation.animations[id].timeout='xJSTimeout'+window.setTimeout(function(){xJS.animation(id,o,key,val,t*1,ifdone)},1);
	}
	else {
		xJS.animation.animations[id].opt={};
		xJS.animation.animations[id].opt[key]=xJS.animation.animations[id].stop_value;
		xJS(o).css(xJS.animation.animations[id].opt);
		
		xJS.animation.animations[id].start_value=null;
		window.clearTimeout('xJSTimeout'+xJS.animation.animations[id].timeout);
		if (typeof ifdone=='function') {
			ifdone(o);
		}
	}
};

xJS.ajax={
	type:"html",
	charset:"utf-8",
	onstart:null,
	ondone:null,
	
	post:function(target,parameters,success) {
		return this.http_request(target,parameters,"post",success);
	},
	get:function(target,parameters,success) {
		return this.http_request(target,parameters,"get",success);
	},
	http_request:function(target,parameters,method,success) {
		var params=parameters;
		if (typeof parameters=='object') {
			var tmp=[];
			for (i in parameters) {
				tmp[tmp.length]=i+'='+(parameters[i]&&parameters[i].replace?parameters[i].replace(/&/g,"%26").replace(/\+/g,"%2B"):parameters[i]);
			}
			parameters=tmp.join('&');
		}
		
		if (this.onstart&&typeof this.onstart=='function') this.onstart(params);

		var http_request;
		
	    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
	        http_request=new XMLHttpRequest();
	        if (http_request.overrideMimeType) {
				http_request.overrideMimeType('text/'+this.type);
	        }
	    } 
	    else if (window.ActiveXObject) { // IE
	        try {
	            http_request=new ActiveXObject("Ms"+this.type+"2."+(this.type).toUpperCase()+"HTTP");
			}
			catch (e) {
				try {
					http_request=new ActiveXObject("Microsoft."+(this.type).toUpperCase()+"HTTP");
				}
				catch (e) {}
			}
		}
	

		if (typeof success=="function") {
			http_request.onreadystatechange = function() { 
				if (http_request.readyState == 4) {
					if (http_request.status == 200) {
						success(http_request.responseText);
					}
				}
			}
			http_request.open(method,target,true);	
		}
		else http_request.open(method,target,false);
		
		http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset="+this.charset);
		if (parameters) http_request.setRequestHeader("Content-length", parameters.length);
		http_request.setRequestHeader("Connection","close");
		http_request.send(parameters);
		
		if (this.ondone&&typeof this.ondone=='function') this.ondone(params);
		
		if (!success) return this.ajax_alertContents(http_request);
	},
	ajax_alertContents:function(http_request) {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				return http_request.responseText;
			}
		}
	},
	getXMLdata:function(xmltext,tagname) {
		parser=new DOMParser();
		xmldoc=parser.parseFromString(xmltext,"text/xml");
		return xmldoc.getElementsByTagName(tagname);
	},
	getXMLDOM:function(xmltext) {
		parser=new DOMParser();
		return parser.parseFromString(xmltext,"text/xml");
	}
};

xJS.win={
	layerid:"pwinlayer",
	pwinid:"default_pwinid",
	pwinscroll:false,
	page:null,
	attributes:"",
	//bgcolor:"white",
	zindex:100,
	//opacity:0.5,
	onclose:'',
	
	keypress:function(e) {
		if(!e) e = window.event;
		if(e.target) node = e.target; else node = e.srcElement;	
		key = e.keyCode||e.which;
	
		if (key==27) this.close();
	},
	open:function(page,attributes,options) {
		this.page=page;
		this.attributes=attributes?attributes:"";
				
		for (var key in options) this[key]=options[key];
						
		var obj=this;
		var wh=window.innerHeight;
		var dh=document.body.offsetHeight;
		var dw=document.body.offsetWidth;
		
		window.onkeypress=function(event) { obj.keypress(event); }

		// layer letezesenek ellenorzese
		if (xJS("#"+this.pwinid).obj()) return false;

		// atlatszo layer letrehozasa
		var newdiv=document.createElement("div");
		newdiv.id=this.layerid;
		
		xJS(newdiv).css({
			left:0,
			top:0,
			height:(wh>dh?wh:dh)+"px",
			width:dw+"px",
			backgroundColor:this.bgcolor,
			opacity:this.opacity,
			filter:"alpha(opacity="+(this.opacity*100)+")",			
			position:"fixed",
			zIndex:this.zindex
		});
		
		document.body.insertBefore(newdiv,document.body.firstChild);
		
		// ablak layer letrehozasa
		var newdiv=document.createElement("div");
		newdiv.id=this.pwinid;
		xJS(newdiv).css({
			top:"100px",
			position:"fixed",
			overflow:"hidden",
			zIndex:this.zindex+1
		});
		
		newdiv.innerHTML=xJS.ajax.post(this.page,this.attributes);
				
		document.body.insertBefore(newdiv,document.body.firstChild);
		
		xJS(newdiv).css({
			left:(dw/2-newdiv.offsetWidth/2)+"px"
		});
	},
	close:function(isconfirm) {
		if (this.onclose&&typeof this.onclose=='function'&&isconfirm) if (!eval(this.onclose)()) return false;
		
		xJS("#"+this.pwinid).remove();
		xJS("#"+this.layerid).remove();
	}	
};

xJS.info={
	infoid:"infodiv",
	moving:true,
	css:"info",
	
	show:function(e,c) {
		if (!e) e=window.event;
		var o = e.target||window.event.srcElement;

		var obj=this;

		if (!xJS("#"+this.infoid) && c.length) {
			var newdiv=document.createElement('div');
			document.body.insertBefore(newdiv,document.body.firstChild);
			newdiv.innerHTML=c;
			newdiv.id=this.infoid;
			newdiv.style.position="absolute";
			newdiv.style.left=(e.pageX?e.pageX:e.clientX+document.documentElement.scrollLeft)+10+"px";
			newdiv.style.top=(e.pageY?e.pageY:e.clientY+document.documentElement.scrollTop)+10+"px";
			newdiv.style.zIndex=2;
			if (this.css) newdiv.className=this.css;
			else {
				newdiv.style.border="1px solid black";
				newdiv.style.backgroundColor="white";
				newdiv.style.padding="2px 4px 2px 4px";
			}
			if (this.moving) o.onmousemove=function(event) { obj.move(event,newdiv); }
			o.onmouseout=function(event) { obj.hide(newdiv); }
		}
	},	
	move:function(e,o) {
		if (!e) e=window.event;
		o.style.left=(e.pageX?e.pageX:e.clientX+document.documentElement.scrollLeft)+20+"px";
		o.style.top=(e.pageY?e.pageY:e.clientY+document.documentElement.scrollTop)+"px";
	},	
	hide:function(o) {
		document.body.removeChild(o);
	}
};

xJS.dnd={
	tags:[],
	dndclass:"dndtag",
	dragobject:"self",
	zindex:102,
	ondrag:null,
	ondrop:null,
	onmove:null,
	val:null,
	opacity:0.5,
	show:true,
	dobj:null,
	dragpos:null,
	melm:null,
	axis:0,
	area:null,

	setval:function(value) {
		this.val=value;
	},
	getvals:function() {
		return this.val.split('|');
	},
	drag:function(ev,o,type,options) {
		if (type) this.dragobject=type;
		var obj=this;
		
		for (var i in options) if (typeof this[i]!='undefined') this[i]=options[i];
		
		this.dobj=o;
		
		if (this.ondrag) this.ondrag();
		
		if (this.show) {
			if (this.dragobject=="self") {
				dragobj=o;
			}
			else if (this.dragobject=="clone") {
				var clone=o.cloneNode(true);
				document.body.insertBefore(clone,document.body.firstChild)
				clone.style.position="absolute";
				clone.style.opacity=0.5;
				clone.style.zIndex=200;
				
				dragobj=clone;
			}
			else if (typeof this.dragobject=="object") {			
				document.body.insertBefore(this.dragobject,document.body.firstChild);
				this.dragobject.style.position="absolute";
				this.dragobject.style.zIndex=200;
				this.dragobject.style.marginLeft=ev.pageX+10+"px";
				this.dragobject.style.marginTop=ev.pageY+10+"px";
				
				dragobj=this.dragobject;
			}
		}
		
		window.onmouseup=function(event) { obj.drop(event,dragobj); }
		
		document.body.onmousemove=function(event) { obj.move(event,dragobj); }
		for (var i=0;i<window.frames.length;i++) window.frames[i].onmousemove=function(event) { obj.move(event,dragobj); }
		
		document.body.onmousedown=function() { 
			obj.dragpos=xJS.getPos(o);
			obj.dragpos[0]=ev.pageX-obj.dragpos[0];
			obj.dragpos[1]=ev.pageY-obj.dragpos[1];
			dragobj.style.left=(ev.pageX-obj.dragpos[0])+'px';
			dragobj.style.top=(ev.pageY-obj.dragpos[1])+'px';
			return false;
		}
	},
	drop:function(e,nd) {
		if (nd&&this.dragobject!="self") document.body.removeChild(nd);
		window.onmouseup=null;
		document.body.onmousedown=null;
		document.body.onmousemove=null;
		for (var i=0;i<window.frames.length;i++) window.frames[i].onmousemove=null;
		
		if (this.ondrop) if (!this.ondrop(e)) return false;
		
		var place=xJS.DOM.isParent(e.target,'className',/this.dndclass/);
		if (place) place.appendChild(this.dobj);
	},
	move:function(e,o) {
		if (this.onmove) this.onmove(e,o);
		
		if (o) {
			this.melm=new Array(e.pageX-this.dragpos[0],e.pageY-this.dragpos[1])

			if (this.area&&this.melm[0]<this.area[0]) this.melm[0]=this.area[0];
			if (this.area&&this.melm[0]+o.offsetWidth>this.area[2]) this.melm[0]=this.area[2]-o.offsetWidth;
			if (this.area&&this.melm[1]<this.area[1]) this.melm[1]=this.area[1];
			if (this.area&&this.melm[1]+o.offsetHeight>this.area[3]) this.melm[1]=this.area[3]-o.offsetHeight;
			
			if (!this.axis||this.axis==1) o.style.left=this.melm[0]+"px";
			if (!this.axis||this.axis==2) o.style.top=this.melm[1]+"px";
		}
	},
	getdndtag:function(e) {
		return xJS.DOM.isParent(e.target,'className',/this.dndclass/);
	}	
};

xJS.DOM={
	tree:function(o) {
		if (typeof o=='string') o=xJS('#'+o);
		
		var tree=[o];
		while (o.parentNode) tree[tree.length]=o=o.parentNode;
		return tree;
	},
	isParent:function(o,key,rxp){
		if (o.getAttribute) {
			if (rxp.test(o.getAttribute(key))) return o;
			while (o=o.parentNode) {
				if (o.getAttribute) if (rxp.test(o.getAttribute(key))) return o;
			}
		}
		return false;
	},
	parents:function(o) {
		var ret=[];
		var p;
		while (p=o.parentNode) {
			o=p;
			ret[ret.length]=p;
		}
		return ret;
	}
};

xJS.css={
	styleSheet:null,
	document:document,
	
	find:function(rule) {
		for (var i=0;i<this.document.styleSheets.length;i++) {
			if (!this.styleSheet||(this.styleSheet&&this.document.styleSheets[i].ownerNode.id==this.styleSheet)) {
				
				for (var j in this.document.styleSheets[i].cssRules) {
					if (this.document.styleSheets[i].cssRules[j].selectorText==rule) return {sheet:this.document.styleSheets[i],pos:j};
				}
			}
		}
		return false;
	},
	get:function(rule) {
		var find=this.find(rule);
		if (find) {
			var cssdata=[];
			var tmp=find['sheet'].cssRules[find['pos']].cssText.replace(/ {0,1}([{}():;]) {0,1}/ig,'$1');
			tmp=/[^{]+\{([^}]+)\}/.exec(tmp);
			tmp=tmp[1].split(';');
			
			for (var i=0;i<tmp.length;i++) {
				var tmp2=tmp[i].split(':');
				if (tmp2.length==2) cssdata[tmp2[0]]=tmp2[1];
			}
			
			return cssdata;
		}
		return false;
	},
	gets:function(rule) {
		if (rule) {
			var find=this.find(rule);
			if (find) {
				
				return find['sheet'].cssRules[find['pos']].cssText;
			}			
			
		}
	},
	set:function(rule,key,value) {
		var find=this.find(rule);
		if (find) {
			this.document.styleSheets[0].cssRules[find['pos']].style[key]=value;
			//this.document.styleSheets[0].cssRules[find['pos']].style[css['key']]=css['value'];
			return find['sheet'].cssRules[find['pos']].cssText;
		}
		return false;
	},
	add:function(rule) {
		var find=this.find(rule);
		if (!find) this.document.styleSheets[0].insertRule(rule+'{}',0);
		return true;
	},
	del:function(rule) {
		var find=this.find(rule);
		if (find) {
			find['sheet'].deleteRule(find['pos']);
			return true;
		}
		return false;
	},
	list:function() {
		var sheets=[];
		for (var i=0;i<this.document.styleSheets.length;i++) {
			sheets[i]=[];
			
			for (var j=0;j<this.document.styleSheets[i].cssRules.length;j++) {
				//var tmp=/[^{]+\{[^}]+\}/.exec(this.document.styleSheets[i].cssRules[j].cssText);
				var tmp=this.document.styleSheets[i].cssRules[j].cssText.replace(/ {0,1}[{}():;] {0,1}/,'');
				alert(tmp)
				sheets[i][this.document.styleSheets[i].cssRules[j].selectorText]=this.document.styleSheets[i].cssRules[j].cssText;
			}
		}
		return sheets;
	},
	friendlyName:function(name) {
		var key=name.replace('style_','').split('-');
		for (var i=1;i<key.length;i++) key[i]=key[i].substring(0,1).toUpperCase()+key[i].substring(1,key[i].length);
		return key.join('');
	},
	addStyleSheet:function(href) {
		var link=this.document.createElement('link');
		link.rel="stylesheet"
		link.type="text/css"
		link.href=href;
		this.document.getElementsByTagName('head')[0].appendChild(link);
	}
};

xJS.page={
	documents:[],

	build:function(id,pages,options) {
		var obj=this;
		
		// document feljegyzese
		this.documents[id]={
			id:null,
			core:null,
			pages:[],
			active:null,
			scrollable:true
		};
		
		this.documents[id].id=id;
		this.documents[id].core=document.getElementById(id);

		// options
		for (var i in options) if (this.documents[id][i]!='undefined') this.documents[id][i]=options[i];
		
		// tabs
		var tabcont=xJS(document).create('div');
		xJS(tabcont).css({overflow:'hidden'});
		var first=xJS('#'+id).first();
		if (first) xJS('#'+id).before(tabcont,first); else xJS('#'+id).append(tabcont);
		
		var tabs=xJS(document).create('div');
		tabs.id=id+'tabs';
		var scrollpos=new RegExp(id+'-scrollpos=([^;]+)').exec(document.cookie);
		if (scrollpos) xJS(tabs).css({marginLeft:scrollpos[1]});
		xJS(tabcont).append(tabs);
		
		var tabcontwidth=0;
		
		// pages
		for (var i in pages) {
			// active
			var actives=/#tab:(.+)/.exec(document.location.hash);
			if (actives) {
				document.location.hash='';
				actives=actives[1].split(',');
				xJS.cookie.set('pager_tabs',actives,'/admin/');
			}
			else if (xJS.cookie.has('pager_tabs')) {
				actives=xJS.cookie.get('pager_tabs').split(',');
			}
			else actives=[];
			
			if (!this.documents[id].active) this.documents[id].active=i;
			else if (/[0-9]+/.test(inarray(actives,i))) this.documents[id].active=i;

			// tartalom
			if (!document.getElementById(i)) {
				var cdiv=xJS(document).create('div');
				cdiv.id=i;
				cdiv.className='page';
				xJS('#'+id).append(cdiv);
				
				if (!pages[i].insert||pages[i].insert=='oncreate'||this.documents[id].active==i) this.setContent({id:i},{html:pages[i].html,text:pages[i].text,file:pages[i].file,params:pages[i].params},pages[i].events);
			}
			else cdiv=document.getElementById(i);

			// ful
			var tdiv=xJS(document).create('div');
			tdiv.id="sht_"+i;
			tdiv.style.cssFloat="left";

			xJS(tdiv).html(pages[i].title);
			xJS(tabs).append(tdiv);
			if (pages[i].disabled=='undefined'||!pages[i].disabled) eval('tdiv.onclick=function() { eval(obj.change("'+id+'","'+i+'")); }');
							
			var click='';
			if (pages[i].disabled=='undefined'||!pages[i].disabled) click='if((!event.target.onclick&&event.target!=this)||event.target==this)obj.change("'+id+'","'+i+'");';
			if (pages[i].click) click+='pages["'+i+'"].click();'
			if (click) eval('tdiv.onclick=function(event) { '+click+' }');
			
			if (pages[i].mousedown) eval('tdiv.onmousedown=function(event) { pages["'+i+'"].mousedown(event); }');
						
			// lap feljegyzese
			this.documents[id].pages[i]={
				id:i,
				tab:tdiv,
				tag:cdiv,
				cont:{html:pages[i].html,text:pages[i].text,file:pages[i].file},
				params:pages[i].params,
				events:pages[i].events
			};
			
			if (typeof pages[i].onchange=='function') this.documents[id].pages[i].onchange=pages[i].onchange;
			if (typeof pages[i].onreload=='function') this.documents[id].pages[i].onreload=pages[i].onreload;
		}
		
		for (var i in this.documents[id].pages) {
			if (typeof this.documents[id].pages[i]=='object') {
				if (i==this.documents[id].active) {
					this.documents[id].pages[i].tab.className="pager "+id+'_aktiv';
					this.documents[id].pages[i].tag.style.display='block';
				}
				else {
					this.documents[id].pages[i].tab.className="pager "+id+'_inaktiv';
					this.documents[id].pages[i].tag.style.display='none';
				}
				tabcontwidth+=this.documents[id].pages[i].tab.offsetWidth;
			}
		}
		
		if (this.documents[id].scrollable&&tabs.offsetWidth<tabcontwidth) {
			tabs.style.width=tabcontwidth+'px';

			// scroller
			var scroller=xJS(document).create('div');
			scroller.style.cssFloat="right";
			scroller.style.position="absolute";
			tabcont.appendChild(scroller);
					
			var scleft=xJS(document).create('div');
			scleft.className=id+"_scrollLeft";
			scleft.style.cssFloat="left";
			scleft.onmousedown=function(){ window.setTimeout("xJS.page3.scroll('"+id+"','right')",10); };
			scroller.appendChild(scleft);
			
			var scright=xJS(document).create('div');
			scright.className=id+"_scrollRight";
			scright.style.cssFloat="left";
			scright.onmousedown=function(){ window.setTimeout("xJS.page3.scroll('"+id+"','left')",10); };
			scroller.appendChild(scright);
			
			//scroller.style.marginTop=-tabcont.offsetHeight+'px';
			scroller.style.marginLeft=(tabcont.offsetWidth-scleft.offsetWidth-scright.offsetWidth)+'px';
			
			tabcont.style.width=(tabcont.offsetWidth-scleft.offsetWidth-scright.offsetWidth+2)+'px';
		}
	},
	scroll:function(id,way) {
		if (window.mouse[0]) {
			window.setTimeout("xJS.page3.scroll('"+id+"','"+way+"')",10);
		}
		else {
			document.cookie=id+"-scrollpos="+document.getElementById(id+'tabs').style.marginLeft;
		}
		var left=(document.getElementById(id+'tabs').style.marginLeft.replace('px','')*1+(way=='left'?-5:5));
		if (left<=0&&document.getElementById(id+'tabs').offsetWidth-Math.abs(left)>document.getElementById(id+'tabs').parentNode.offsetWidth) document.getElementById(id+'tabs').style.marginLeft=left+'px';
	},
	setContent:function(page,cont,events) {
		var c=null;
		if (cont.html) c=cont.html;
		if (cont.text) c=cont.text.htmlspchars();
		if (cont.file) c=xJS.ajax.post(cont.file,cont.params,events);
		
		xJS('#'+page.id).html(c);
	},
	change:function(id,tab) {
		for (var i in this.documents[id].pages) {
			if (typeof this.documents[id].pages[i]=='object') {
				if (this.documents[id].pages[i].id==tab) {
					this.documents[id].active=tab;
					
					if (!document.getElementById(this.documents[id].pages[i].id).innerHTML) {
						this.documents[id].pages[i].cont.params=this.documents[id].pages[i].params;
						this.setContent(this.documents[id].pages[i],this.documents[id].pages[i].cont,this.documents[id].pages[i].events);
					}
					
					document.getElementById("sht_"+this.documents[id].pages[i].id).className="pager "+id+'_aktiv';
					document.getElementById(this.documents[id].pages[i].id).style.display='block';
				}
				else {
					document.getElementById("sht_"+this.documents[id].pages[i].id).className="pager "+id+'_inaktiv';
					document.getElementById(this.documents[id].pages[i].id).style.display='none';
				}
			}
		}

		if (typeof this.documents[id].pages[tab].onchange=='function') this.documents[id].pages[tab].onchange();
		
		var hash=[];
		for (var i in this.documents) if (this.documents[i].id) hash[hash.length]=this.documents[i].active;
		xJS.cookie.set('pager_tabs',hash.join(','),'/admin/');
		//document.location.hash='#tab:'+hash.join(',');
	},
	first:function(id) {
		var first=null;
		for (var i in this.documents[id].pages) {
			if (!first) first=this.documents[id].pages[i].id;
			else break;
		}
		
		this.documents[id].active=first;
		this.change(id,first);
	},
	last:function(id) {
		var last=null;
		for (var i in this.documents[id].pages) last=this.documents[id].pages[i].id;
		
		this.documents[id].active=last;
		this.change(id,last);
	},
	reload:function(id,tab,params,events) {
		if (this.documents[id].pages[tab]) {
			if (typeof this.documents[id].pages[tab].onreload=='function') this.documents[id].pages[tab].onreload();
			this.documents[id].pages[tab].cont.params=this.documents[id].pages[tab].params;
			for (var j in params) this.documents[id].pages[tab].cont.params[j]=params[j];
			this.setContent(this.documents[id].pages[tab],this.documents[id].pages[tab].cont,events);
			return true;
		}
		
		return false;
	},
	remove:function(id,tab) {
		if (this.documents[id].pages[tab]) {
			this.documents[id].pages[tab].tag.parentNode.removeChild(this.documents[id].pages[tab].tag)
			this.documents[id].pages[tab].tab.parentNode.removeChild(this.documents[id].pages[tab].tab)
		}
		
		var c=0;
		for (var i in this.documents[id].pages) {
			delete this.documents[id].pages[tab];
			if (i==tab) this.documents[id].pages.splice(c);
			c++;
		}

		if (tab==this.documents[id].active) {
			this.first(id);
		}
	},
	add:function(id,pages) {
		var tabs=document.getElementById(id+'tabs');
		var obj=this;
		
		for (var i in pages) {
			if (!this.documents[id].pages[i]) {
			if (xJS.cookie.has('pager_tabs')) {
				actives=xJS.cookie.get('pager_tabs').split(',');
			}
			else actives=[];
			
			if (!this.documents[id].active) this.documents[id].active=i;
			else if (/[0-9]+/.test(inarray(actives,i))) this.documents[id].active=i;
				
				
				
				xJS.cookie.set('pager_tabs',actives,'/admin/');
				
				if (xJS.cookie.has('pager_tabs')) actives=xJS.cookie.get('pager_tabs').split(','); else actives=[];
				
				if (!this.documents[id].active) this.documents[id].active=i;
				else if (/[0-9]+/.test(inarray(actives,i))) this.documents[id].active=i;
				
				// tartalom
				if (!document.getElementById(i)) {
					var cdiv=xJS(document).create('div');
					cdiv.id=i;
					cdiv.className='page';
					xJS('#'+id).append(cdiv);
					
					if (!pages[i].insert||pages[i].insert=='oncreate'||this.documents[id].active==i) this.setContent({id:i},{html:pages[i].html,text:pages[i].text,file:pages[i].file,params:pages[i].params},pages[i].events);
				}
				else cdiv=document.getElementById(i);
	
				// ful
				var tdiv=xJS(document).create('div');
				tdiv.id="sht_"+i;
				tdiv.style.cssFloat="left";
	
				xJS(tdiv).html(pages[i].title);
				xJS(tabs).append(tdiv);
				if (pages[i].disabled=='undefined'||!pages[i].disabled) eval('tdiv.onclick=function() { eval(obj.change("'+id+'","'+i+'")); }');
								
				var click='';
				if (pages[i].disabled=='undefined'||!pages[i].disabled) click='if((!event.target.onclick&&event.target!=this)||event.target==this)obj.change("'+id+'","'+i+'");';
				if (pages[i].click) click+='pages["'+i+'"].click();';
				if (click) eval('tdiv.onclick=function(event) { '+click+' }');
				
				if (pages[i].mousedown) eval('tdiv.onmousedown=function(event) { pages["'+i+'"].mousedown(event); }');
							
				// lap feljegyzese
				this.documents[id].pages[i]={
					id:i,
					tab:tdiv,
					tag:cdiv,
					cont:{html:pages[i].html,text:pages[i].text,file:pages[i].file},
					params:pages[i].params,
					events:pages[i].events
				};
				
				if (typeof pages[i].onchange=='function') this.documents[id].pages[i].onchange=pages[i].onchange;
				if (typeof pages[i].onreload=='function') this.documents[id].pages[i].onreload=pages[i].onreload;
			}
		}
		
		for (var i in this.documents[id].pages) {
			if (typeof this.documents[id].pages[i]=='object') {
				if (i==this.documents[id].active) {
					this.documents[id].pages[i].tab.className="pager "+id+'_aktiv';
					this.documents[id].pages[i].tag.style.display='block';
				}
				else {
					this.documents[id].pages[i].tab.className="pager "+id+'_inaktiv';
					this.documents[id].pages[i].tag.style.display='none';
				}
				//tabcontwidth+=this.documents[id].pages[i].tab.offsetWidth;
			}
		}		
	}
};

xJS.countdown=function(sec,ifdone,name){
	if (!window.timeout) window.timeout={};
	if (!name) name='timeout_'+Math.round(Math.random()*1000);
	window.clearTimeout(window.timeout[name]);
	window.timeout[name]=window.setTimeout(ifdone,sec);
};

xJS.form={
	send:function(method,action,parameters) {
		var frm=xJS(document).create('FORM');
		frm.action=action;
		frm.method=method?method:'get';
		frm.enctype='multipart/form-data';
		xJS(document.body).append(frm);
		
		for (var i in parameters) {
			var inp=xJS(document).create("INPUT");
			inp.type='hidden';
			inp.name=i;
			inp.value=parameters[i];
			frm.appendChild(inp);
		}	

		frm.submit();
	},
	post:function(action,parameters) {
		this.send('post',action,parameters);
	},
	get:function(action,parameters) {
		this.send('get',action,parameters);
	}
};

xJS.timer={
	timers:[],
	
	start:function(id,func,sec) {
		window.setTimeout(func,sec);
	},
	stop:function(id) {
		window.clearTimeout(this.timers[id]);
	}
};

xJS.cal={
	days:["H","K","Sze","Cs","P","Szo","V"],
	months:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],
	options:null,
	
	show:function(e,options) {
		e=window.event||e;
		
		xJS(document.body).bind('mousemove',function(event) {
			if (!xJS.DOM.isParent(event.target,'id',/xJSCalendar/)) {
				xJS.cal.close();
			}
		});
		
		this.options=options?options:{};
		this.create(e);
	},
	create:function(e) {
		if (document.getElementById("xJSCalendar")) return false;
		
		// napok
		if (!this.options.start) {
			var start=new Date();
			this.options.start=[
				start.getFullYear(),
				start.getMonth()+1,
				start.getDate(),
			];
		}
		
		var y=Number(this.options.start[0]);
		var m=Number(this.options.start[1]);
		var dom=(new Date((new Date(y, m,1))-1)).getDate();
		var pdom=(new Date((new Date(y, m-1,1))-1)).getDate();
		fdom=new Date(y,m-1,1).getDay()-1<0?6:new Date(y,m-1,1).getDay()-1;
		newdiv=xJS(document.body).create('DIV');
		newdiv.id="xJSCalendar"
		
		xJS(newdiv).css({
			//display:'none',
			background:'white',
			position:this.options.fixed?'fixed':'absolute',
			zIndex:'200',
			left:(this.options.fixed?e.pageX-document.documentElement.scrollLeft:e.pageX-10)+'px',
			top:(this.options.fixed?e.pageY-document.documentElement.scrollTop:e.pageY-10)+'px'
		});
		xJS(document.body).append(newdiv);
		
		// navigator
		var navigator=document.createElement('DIV');
		navigator.className='navigator';
		newdiv.appendChild(navigator);
		var navleft=document.createElement('span');
		navleft.className='cal_navLeft';
		navleft.onclick=function(){ xJS.cal.prev(y,m) }
		navigator.appendChild(navleft);
		var text=document.createElement('span');
		text.className='cal_navText';
		//text.innerHTML='<input type="text" value="'+y+'" /> '+this.months[m-1];
		text.innerHTML=y+' '+this.months[m-1];
		navigator.appendChild(text);
		var navright=document.createElement('span');
		navright.className='cal_navRight';
		navright.onclick=function(){ xJS.cal.next(y,m); }
		navigator.appendChild(navright);
		
		newtable=xJS(document).create('TABLE');
		newdiv.appendChild(newtable);
		newtable.cellPadding=2;
		newtable.cellSpacing=0;
		newtable.border=0;

		// hÃ©t napjai
		newthead=xJS(document).create('THEAD');
		xJS(newtable).append(newthead);
		newtr=xJS(document).create('TR');
		xJS(newthead).append(newtr);
		newtd=xJS(document).create('TD');
		xJS(newtr).append(newtd);
		for (var i=0;i<7;i++) {
			newtd=xJS(document).create('TD');
			xJS(newtr).append(newtd);
			newtd.innerHTML=this.days[i];
			if (i>=5) newtd.className="weekend"; else newtd.className="weekday";
		}
		
		newtbody=xJS(document).create('TBODY');
		xJS(newtable).append(newtbody);
		
		var day=0;
		var c=1;
		var out=false;
		for (var i=0;i<6;i++) {
			newtr=xJS(document).create('TR');
			xJS(newtbody).append(newtr);
			for (var j=0;j<8;j++) {
				newtd=xJS(document).create('TD');
				xJS(newtr).append(newtd);
				if (j>0) {
					day++;
					if (day>=fdom+1) {
						if (c>dom) {
							c=1;
							var out=true;
						}
						
						newtd.innerHTML=c++;
						
						if (out) newtd.className="outofmonth";
						else {
							if (Number(this.options.start[2])==c-1) newtd.className="now";
							else if (j>=6) newtd.className="weekend";
							else newtd.className="weekday";
							
							if (typeof this.options.select=='function') eval('newtd.onclick=function() { xJS.cal.options.select("'+y+'","'+m+'","'+(c-1)+'"); }');
						}
					}
					else {
						xJS(newtd).html(pdom+day-fdom);
						newtd.className="outofmonth";
					}
				}
				else {
					xJS(newtd).html(new Date(y,m-1,day).getWeek()+'.');
					newtd.className="week";
				}
			}
		}
	},
	reload:function(y,m) {
		var core=document.getElementById("xJSCalendar");
		
		var dom=(new Date((new Date(y, m,1))-1)).getDate();
		var pdom=(new Date((new Date(y, m-1,1))-1)).getDate();
		fdom=new Date(y,m-1,1).getDay()-1<0?6:new Date(y,m-1,1).getDay()-1;

		core.getElementsByClassName("cal_navLeft")[0].onclick=function() { xJS.cal.prev(y,m); }
		core.getElementsByClassName("cal_navText")[0].innerHTML=y+' '+this.months[m-1]
		core.getElementsByClassName("cal_navRight")[0].onclick=function() { xJS.cal.next(y,m); }
		
		var c=1;
		var out=false;
		var tds=core.getElementsByTagName('TBODY')[0].getElementsByTagName('TD');
		for (var i=0;i<tds.length;i++) {
			if (i%8>0) {
				if (i>=fdom+1) {
					if (c>dom) {
						c=1;
						var out=true;
					}
					
					xJS(tds[i]).html(c++);
					
					if (out) {
						tds[i].className="outofmonth"
						tds[i].onclick=null;
					}
					else {
						if (Number(this.options.start[2])==c-1&&Number(this.options.start[0])==y&&Number(this.options.start[1])==m) tds[i].className="now";
						else if (i%8>=6) tds[i].className="weekend";
						else tds[i].className="weekday";
						
						if (typeof this.options.select=='function') eval('tds[i].onclick=function() { xJS.cal.options.select("'+y+'","'+m+'","'+(c-1)+'"); }');
					}
				}
				else {
					xJS(tds[i]).html(pdom+i-fdom);
					tds[i].className="outofmonth";
					tds[i].onclick=null;
				}
			}
			else {
				xJS(tds[i]).html(new Date(y,m-1,i).getWeek()+'.');
				tds[i].className="week";
			}
			
		}
	},
	prev:function(y,m) {
		var prev=(new Date((new Date(y, m-1,1))-1));
		this.reload(prev.getFullYear(),prev.getMonth()+1);
	},
	next:function(y,m) {
		var prev=(new Date((new Date(y, m+1,1))-1));
		this.reload(prev.getFullYear(),prev.getMonth()+1);
	},
	close:function() {
		xJS("#xJSCalendar").remove();
	}
};

xJS.order={
	rowColors:[],
	
	create:function(options) {
		for (var i in options) if (typeof this[i]!='undefined') this[i]=options[i];
	
		var tables=document.getElementsByClassName('order');
		var obj=this;
		for (var i=0;i<tables.length;i++) {
			var tds=tables[i].getElementsByTagName('thead')[0].getElementsByTagName('td');
			var rn=0;
			for (var j=0;j<tds.length;j++) {
				var lnk=tds[j].getElementsByTagName('a')[0];
				if (lnk&&!lnk.innerHTML) {
					var up=document.createElement('span');
					var down=document.createElement('span');
					
					up.className='orderUp';
					down.className='orderDown';
					
					xJS(lnk).append(up);
					xJS(lnk).append(down);
					
					eval("up.onclick=function() {xJS.order.ord("+rn+",this,'asc')}");
					eval("down.onclick=function() {xJS.order.ord("+rn+",this,'desc')}");
				}
				rn+=tds[j].colSpan;
			}
		}
	},
	gettags:function(o,tag) {
		var nodes=new Array();
		for (var i=0;i<o.childNodes.length;i++) if (o.childNodes[i].tagName==tag&&o.childNodes[i].className!='noorder') nodes[nodes.length]=o.childNodes[i];
		return nodes;
	},
	get:function(o) {
		var tbody=o.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByTagName('tbody')[0];
		var trs=this.gettags(tbody,'TR');
		var cols=new Array();
		for (var i=0;i<trs.length;i++) {
			var tds=this.gettags(trs[i],'TD');
			for (var j=0;j<=tds.length;j++) {
				if (j==tds.length) {
					if (!cols[j]) cols[j]=new Array();
					cols[j][i]=trs[i];
				}
				else {
					if (!cols[j]) cols[j]=new Array();
					cols[j][i]=tds[j].innerHTML;
				}
			}
		}
		return cols;
	},
	update:function(o,cols) {
		var tbody=o.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByTagName('tbody')[0];
		var trs=this.gettags(tbody,'TR');
		for (var i=cols[cols.length-1].length-1;i>=0;i--) tbody.appendChild(cols[cols.length-1][i]);
		if (this.rowColors.length) this.recolor(tbody);
	},
	recolor:function(tbody) {
		var trs=this.gettags(tbody,'TR');
		for (var i=0;i<trs.length;i++) trs[i].style.backgroundColor=this.rowColors[i%this.rowColors.length];
	},
	ord:function(col,o,way) {
		var noorder=document.getElementsByClassName('noorder');
		for (var i=noorder.length-1;i>=0;i--) noorder[i].parentNode.removeChild(noorder[i]);
		var cols=this.get(o);
		if (way=='asc') cols[col].msort(cols,col); else cols[col].rmsort(cols,col);
		this.update(o,cols);
	}
};

xJS.cookie={
	set:function(key,val,path) {
		document.cookie=key+'='+val+(path?';path='+path:'');
	},
	get:function(key) {
		return this.has(key)?this.all()[key]:false;
	},
	del:function(key) {
		if (key) {
			document.cookie=key+'='+';expires='+new Date().toGMTString();
			return true;
		}
		else return false;
	},
	has:function(key) {
		return this.all()[key]?true:false;
	},
	all:function() {
		var all=document.cookie.replace(/; /g,'|').split('|');
		var cookies=[];
		for (var i=0;i<all.length;i++) {
			var cookie=all[i].split('=');
			cookies[cookie[0]]=cookie[1];
		}
		return cookies;
	}
}


// 09.11.11
xJS.fill={
	target:null,
	last:null,
	pos:0,
	size:null,
	
	search:function(e,action,options) {
		this.target=e.target;
		
		e.target.onkeydown=function(e) {
			switch (e.keyCode) {
				case 38:
						xJS.fill.pos=xJS.fill.pos-1<0?0:xJS.fill.pos-1;
						xJS.fill.setPos();
					break;
				case 40:
						xJS.fill.pos=xJS.fill.pos+1>xJS.fill.size-2?xJS.fill.size-2:xJS.fill.pos+1;
						xJS.fill.setPos();
					break;
				case 13:
						var divs=document.getElementById('xJSfillbox').getElementsByTagName('DIV');
						var value='';
						for (var i=0;i<divs.length;i++) {
							if (i==xJS.fill.pos) {
								value=divs[i].innerHTML;
								break;
							}
						}
						
						if (document.getElementById('xJSfillbox')) xJS('#xJSfillbox').remove();
						if (value) {
							xJS.fill.last=value;
							e.target.value=value;
						}
					break;
			}
		}
		
		if (this.last!=e.target.value) {
			var fillbox=document.getElementById('xJSfillbox');
			if (!fillbox) {
				e.target.onblur=function() { if (document.getElementById('xJSfillbox')) xJS('#xJSfillbox').remove();};
				fillbox=xJS(document).create('div');
				fillbox.id='xJSfillbox';
				xJS(fillbox).css({position:'absolute',top:(e.target.offsetTop+e.target.offsetHeight)+'px',left:e.target.offsetLeft+'px'});
				xJS(document.body).append(fillbox);
			}
	
			this.last=e.target.value;
			var hits=xJS.ajax.post(document.location,{action:action,value:e.target.value}).split(options&&options.separator?options.separator:',');
			fillbox.innerHTML='';
			this.size=0;
			for (var i=0;i<hits.length;i++) {
				if (String.trim(hits[i]).length) {
					fillbox.innerHTML+="<div onmouseover='xJS.fill.select(this.innerHTML)'>"+hits[i]+"</div>";
					this.size++;
				}
			}
			this.pos=0;
			this.size=hits.length;
			this.setPos();
		}
	},
	select:function(value) {
		this.target.value=value;
	},
	setPos:function() {
		var divs=document.getElementById('xJSfillbox').getElementsByTagName('DIV');
		for (var i=0;i<divs.length;i++) divs[i].className=(i==this.pos)?'selected':'';
	}
}

xJS.editor={
	
}

xJS.tray={
	tray:null,
	id:"tray",
	items:{},
	options:{active:null},
	
	create:function(options) {
		for (var i in options) if (typeof this.options[i]!='undefined') this.options[i]=options[i];
		
		this.tray=document.createElement('div');
		document.body.insertBefore(this.tray,document.body.firstChild);
		
		this.tray.id=this.id
    	this.tray.style.width=(document.body.offsetWidth-20)+"px";
    	this.tray.style.left="10px";
	},
	addItem:function(item) {
		this.items[item.id]={};
		this.items[item.id].item=document.createElement('div');
		this.items[item.id].item.innerHTML=item.title;
		this.items[item.id].item.className="item fr";
		this.tray.appendChild(this.items[item.id].item);

		// box		
		this.items[item.id].box=document.createElement('div');
		this.items[item.id].item.appendChild(this.items[item.id].box);
		this.items[item.id].box.innerHTML=item.text?item.text.htmlspchars():(item.html?item.html:(item.file?xJS.ajax.post(item.file,{}):""));
		this.items[item.id].box.className="itembox";
		this.items[item.id].box.style.visibility=this.options.active==item.id?"":"hidden";
		this.items[item.id].box.id=item.id;
		
		var paddingLeft=xJS(this.items[item.id].item).css("paddingLeft").replace('px','');
		var paddingRight=xJS(this.items[item.id].item).css("paddingRight").replace('px','');
		
		var marginLeft=-paddingLeft;
		
		if (this.tray.offsetLeft+this.tray.offsetWidth<this.items[item.id].item.offsetLeft+this.items[item.id].box.offsetWidth) {
			marginLeft-=((this.items[item.id].item.offsetLeft+this.items[item.id].box.offsetWidth)-(this.tray.offsetLeft+this.tray.offsetWidth))+this.tray.offsetLeft
		}
		
		this.items[item.id].box.style.marginLeft=marginLeft+"px";
		
		// events
	
		document.onclick=function(event) {
			for (var i in xJS.tray.items) {
				if (xJS.tray.items[i].item==event.target) {
					if(xJS.tray.items[i].box.style.visibility=="hidden") {
						xJS.tray.items[i].box.style.visibility="";
						xJS.tray.options.active=i;
					}
					else if (xJS.tray.items[i].item==event.target) {
						xJS.tray.items[i].box.style.visibility="hidden";
						xJS.tray.options.active=null;
					}					
				}
				else if (!event.target.offsetParent || (event.target.offsetParent && event.target.offsetParent.className!='itembox')) {
					xJS.tray.items[i].box.style.visibility="hidden";
				}
			}
			
			if (!xJS.tray.options.active) xJS.cookie.del('active_tray_item'); else xJS.cookie.set('active_tray_item',xJS.tray.options.active);
		}
		
		
	},
	addSeparator:function() {
		var sep=document.createElement('div');
		sep.className="sep fr";
		this.tray.appendChild(sep);
	}
}

xJS.scroll={
	move:function(e,o) {
		var scale=o.offsetHeight/o.scrollHeight;
		var elm=0;
		var y=e.target.offsetTop;
		
		xJS(e.target).css({position:'absolute',height:(scale*o.offsetHeight)+'px'});
		
		xJS.dnd.drag(e,e.target,false,{axis:2,onmove:function(event){
			elm=(e.target.offsetTop-y)*scale*100
			document.getElementById('aaa').innerHTML=scale;
			o.scrollTop=Math.ceil(elm);
		}})
	}
};

xJS.browser={
	name:function() {
		var name=''
		if (/MSIE ([5|6|7|8]\.[0|5])/.exec(navigator.userAgent)) return 'IE'+RegExp.$1;
		else if (/Firefox\/([0-9\.]+)/.exec(navigator.userAgent)) return 'FF'+RegExp.$1;
		else if (/Opera\/([0-9]{1,2}\.[0-9]{1,2})/.exec(navigator.userAgent)) return 'O'+RegExp.$1;
		else if (/Chrome\/([0-9\.]+)/.exec(navigator.userAgent)) return 'C'+RegExp.$1;
		else if (/Safari\/([0-9\.]+)/.exec(navigator.userAgent)) return 'S'+RegExp.$1;
		else return 'Ismeretlen';
	},
	ie:function() { return /IE[0-9\.]+/.test(this.name())?true:false; },
	ie55:function() { return /IE5\.5/.test(this.name())?true:false; },
	ie6:function() { return /IE6\.0/.test(this.name())?true:false; },
	ie7:function() { return /IE7\.0/.test(this.name())?true:false; },
	ie8:function() { return /IE8\.0/.test(this.name())?true:false; },
	ff:function() { return /FF[0-9\.]+/.test(this.name())?true:false; },
	o:function() { return /O[0-9\.]+/.test(this.name())?true:false; },
	c:function() { return /C[0-9\.]+/.test(this.name())?true:false; },
	s:function() { return /S[0-9\.]+/.test(this.name())?true:false; }
};

xJS.error={
	error_msg_className:'error_message',
	error_input_className:'error',
	work:function(frm,r) {
		if (/^\{[^}]*\}$/.test(r)) {
			eval('var errors='+r);
			xJS("."+this.error_msg_className).remove();
			for (var i in errors) {
				if (frm[i]) {
					xJS(frm[i]).addClass(this.error_input_className);
					
					xJS(frm[i]).bind("focus",function(){
						xJS(this).removeClass(xJS.error.error_input_className);
						var next=xJS(this.parentNode).last();
						if (next.className==xJS.error.error_msg_className) next.parentNode.removeChild(next);
					});
					/*
					frm[i].addEventListener('focus',function(){
						xJS(this).removeClass(xJS.error.error_input_className);
						var next=xJS(this.parentNode).last();
						if (next.className==xJS.error.error_msg_className) next.parentNode.removeChild(next);
					},false);
					*/
					
					xJS(frm[i].parentNode.lastChild).after("span",{
						innerHTML:errors[i],
						className:xJS.error.error_msg_className
					});
				}
			}
		}
		else return false;
	}
};

xJS.browser={
	name:function() {
		var name=''
		if (/MSIE ([5|6|7|8]\.[0|5])/.exec(navigator.userAgent)) return 'IE'+RegExp.$1;
		else if (/Firefox\/([0-9\.]+)/.exec(navigator.userAgent)) return 'FF'+RegExp.$1;
		else if (/Opera\/([0-9]{1,2}\.[0-9]{1,2})/.exec(navigator.userAgent)) return 'O'+RegExp.$1;
		else if (/Chrome\/([0-9\.]+)/.exec(navigator.userAgent)) return 'C'+RegExp.$1;
		else if (/Safari\/([0-9\.]+)/.exec(navigator.userAgent)) return 'S'+RegExp.$1;
		else return 'Ismeretlen';
	},
	ie:function() { return /IE[0-9\.]+/.test(this.name())?true:false; },
	ie55:function() { return /IE5\.5/.test(this.name())?true:false; },
	ie6:function() { return /IE6\.0/.test(this.name())?true:false; },
	ie7:function() { return /IE7\.0/.test(this.name())?true:false; },
	ie8:function() { return /IE8\.0/.test(this.name())?true:false; },
	ff:function() { return /FF[0-9\.]+/.test(this.name())?true:false; },
	o:function() { return /O[0-9\.]+/.test(this.name())?true:false; },
	c:function() { return /C[0-9\.]+/.test(this.name())?true:false; },
	s:function() { return /S[0-9\.]+/.test(this.name())?true:false; }
};

xJS.toggle=function(o,values){
	var index=0;
	for (var i=0;i<values.length;i++) {
		if (values[i]==o.innerHTML) {
			index=i+1;
			if (index>values.length-1) index=0;
			break;
		}
	}
	o.innerHTML=values[index];
}

/*
xJS.toggle=function(o,opts){
	var index=0;
	for (var i in opts) {
		if (values[i]==o.innerHTML) {
			index=i+1;
			if (index>values.length-1) index=0;
			break;
		}
	}
	o.innerHTML=values[index];
}
*/
xJS.slider={
	outerId:null,
	outer:null,
	elements:null,
	largeImg:null,
	spd:300,
	pos:0,
	step:1,
	success:null,
	
	init:function(options) {
		for (var i in options) this[i]=options[i];
		this.outer=xJS("#"+this.outerId).elements(0);
		this.inner=xJS("#"+this.innerId).elements();
		/*xJS("#"+this.largeImg+" img").bind('onload',function(t){
			//xJS.slider.fade(t);
			alert(1)
		});*/
		xJS("#"+this.largeImg+" img").attr({onload:function(e){
			xJS.slider.fade(e.target);
		}});
		this.elements=xJS("#"+this.outerId+" a").elements();
	},
	fade:function(t) {
		xJS(t.parentNode.parentNode).animate({height:t.offsetHeight},this.spd,function(){
			xJS("#"+xJS.slider.largeImg).animate({opacity:1},xJS.slider.spd,function(){
				if (typeof xJS.slider.success=='function') xJS.slider.success(xJS.slider);
			});
		});
	},
	slideRight:function() {
		if (this.pos<this.elements.length-5) {
			xJS("#"+this.largeImg).animate({opacity:0},this.spd,function(o){
				o.firstChild.src=xJS.slider.elements[xJS.slider.pos+xJS.slider.step+1].getElementsByTagName('IMG')[0].src.replace('small','large');
			});
			xJS("#"+this.innerId).animate({marginLeft:"-"+(this.step*130)+"px"},this.spd);
			xJS(this.elements[this.pos+this.step+1]).animate({opacity:1},this.spd);
			xJS(this.elements[this.pos+this.step+2]).animate({opacity:0},this.spd);
			this.pos++;
		}
	},
	slideLeft:function() {
		if (this.pos>0) {
			xJS("#"+this.largeImg).animate({opacity:0},this.spd,function(o){
				o.firstChild.src=xJS.slider.elements[xJS.slider.pos+xJS.slider.step+1].getElementsByTagName('IMG')[0].src.replace('small','large');
			});
			xJS("#"+this.innerId).animate({marginLeft:"+"+(this.step*130)+"px"},this.spd);
			xJS(this.elements[this.pos+this.step]).animate({opacity:0},this.spd);
			xJS(this.elements[this.pos+this.step+1]).animate({opacity:1},this.spd);
			this.pos--;
		}
	}
	
}

xJS.slider2={
	sliders:{},
	opts:null,
	
	init:function(options) {
		this.opts=options;
		
		this.sliders[this.opts.outer]={
			outer:null,
			inner:null,
			elements:null,
			spd:300,
			pos:0,
			step:1,
			success:null,
			length:null
		};
		for (var i in options) this.sliders[this.opts.outer][i]=options[i];
		this.sliders[this.opts.outer].elements=xJS("#"+this.sliders[this.opts.outer].inner+" li").elements();
		this.sliders[this.opts.outer].length=this.sliders[this.opts.outer].elements.length;

		var width=0;
		for (var i=0;i<this.sliders[this.opts.outer].elements.length;i++) {
			width+=this.sliders[this.opts.outer].elements[i].clientWidth;
			width+=String(xJS(this.sliders[this.opts.outer].elements[i]).css('marginLeft')).replace('px','')*1+String(xJS(this.sliders[this.opts.outer].elements[i]).css('marginRight')).replace('px','')*1;
			width+=String(xJS(this.sliders[this.opts.outer].elements[i]).css('paddingLeft')).replace('px','')*1+String(xJS(this.sliders[this.opts.outer].elements[i]).css('paddingRight')).replace('px','')*1;
		}

		xJS("#"+this.sliders[this.opts.outer].inner).css({width:width+'px'});
	},
	slideRight:function(id) {
		if (!this.sliders[id].length) return false;
		
		var disp=0;
		for (var i=0;i<this.sliders[id].step;i++) {
			var elem=this.sliders[id].elements[this.sliders[id].pos+i];
			if (elem) {
				var width=elem.offsetWidth;
				var margin=String(xJS(elem).css('marginLeft')).replace('px','')*1+String(xJS(elem).css('marginRight')).replace('px','')*1;
				var padding=String(xJS(elem).css('paddingLeft')).replace('px','')*1+String(xJS(elem).css('paddingRight')).replace('px','')*1;
				
				disp+=width+margin+padding;
			}
		}
		
		var a=String(xJS("#"+this.sliders[id].inner).css('width')).replace('px','')*1;
		var b=String(xJS("#"+this.sliders[id].outer).css('width')).replace('px','')*1;
		var c=String(xJS("#"+this.sliders[id].inner).css('marginLeft')).replace('px','')*1;

		if (a>b) {
			if ((Math.abs(c)+b)+disp>a) {
				disp=a-(Math.abs(c)+b);
			}
			else {
				this.sliders[id].pos++;
			}
			
			xJS("#"+this.sliders[id].inner).animate({marginLeft:"--"+disp+"px"},this.sliders[id].spd);
		}
	},
	slideLeft:function(id) {
		if (!this.sliders[id].length) return false;
		
		this.sliders[id].pos--;
		if (this.sliders[id].pos<0) this.sliders[id].pos=0;
		
		var disp=0;
		for (var i=0;i<this.sliders[id].step;i++) {
			var elem=this.sliders[id].elements[(this.sliders[id].pos+1)*this.sliders[id].step-i];
			if (elem) {
				var width=elem.offsetWidth;
				var margin=String(xJS(elem).css('marginLeft')).replace('px','')*1+String(xJS(elem).css('marginRight')).replace('px','')*1;
				var padding=String(xJS(elem).css('paddingLeft')).replace('px','')*1+String(xJS(elem).css('paddingRight')).replace('px','')*1;
				
				disp+=width+margin+padding;
			}
		}
		
		var c=String(xJS("#"+this.sliders[id].inner).css('marginLeft')).replace('px','')*1;

		if (c+disp>0) {
			disp=Math.abs(c);
		}

		xJS("#"+this.sliders[id].inner).animate({marginLeft:"++"+disp+"px"},this.sliders[id].spd);
	},
	
	slideTo:function(id,lid) {
		var elm=xJS('#'+lid).obj().offsetLeft;
		var mx=xJS("#"+this.sliders[id].inner).obj().offsetWidth-xJS("#"+id).obj().offsetWidth;
		if (elm>mx) elm=mx;
		xJS("#"+this.sliders[id].inner).animate({marginLeft:(elm*-1)+"px"},this.sliders[id].spd);
	}
	
}

var prototypes=function(){
	String.prototype.replacem=function() {
		var str=this;
		if (arguments.length&&arguments[0].length&&arguments[0].length==arguments[1].length) {
			for (var i=0;i<arguments[0].length;i++) {
				str=str.replace(new RegExp(arguments[0][i],'g'),arguments[1][i]);
			}
		}
		return str;
	}
		
	String.prototype.subreplace=function() {
		var str=this;
		var args=arguments;
		var r=new RegExp('^(.{'+args[0]+'}).{'+args[1]+'}(.*)$');
		return str.replace(r,'$1'+args[2]+'$2');
	}
	
	String.prototype.htmlspchars=function() {
		return this.replacem(['<','>'],['&lt;','&gt;']);
	}
	
	String.prototype.htmlspchars_decode=function() {
		return this.replacem(['&lt;','&gt;'],['<','>']);
	}
	
	String.prototype.repeat=function(count) {
		var temp='';
		for (var i=0;i<count;i++) temp+=this;
		return temp;
	}
	
	String.prototype.highlight=function() {
		var temp='';
		var lvl=0;
		for (var i=0;i<this.length;i++) {
			switch (this[i]) {
				case '{':
						lvl++;
						temp+=this[i]+'<br />'+('&nbsp;'.repeat(lvl*5));
					break;
				case '}':
						lvl--;
						temp+='<br />'+('&nbsp;'.repeat(lvl*5))+this[i];
					break;
				default:
						temp+=this[i];
					break;
			}
		}
		//return this.replacem(['(\t+)','{','}','\t'],['<br />$1','{<br />','<br />}','&nbsp;&nbsp;&nbsp;&nbsp;']);
		return temp;
	}
	
	String.prototype.pad=function() {
		var tmp=this;
		for (var i=0;i<arguments[0]-tmp.length;i++) tmp=arguments[1]+tmp;
		return tmp;
	}
	
	Array.prototype.msort=function(cols,col) {
		var sortArray =  [];
		for (var i=0; i<this.length; i++) {
			sortArray[i] = new Array(trim([this[i]][0].replace(/<[^>]+>/g,'')).toLowerCase());
			for (var j=0; j<cols.length; j++) {
				if (j!=col) {
					if (cols[j].length!=this.length) { return false; }
					sortArray[i][j+1] = cols[j][i];
				}
			}
			sortArray[i][sortArray[i].length]=[this[i]][0];
		}
		sortArray.sort();
		for (var i=0; i<sortArray.length; i++) {
			this[i] = sortArray[i][sortArray[i].length-1];
			for (var j=0; j<cols.length; j++) {
				if (j!=col) cols[j][i] = sortArray[i][j+1];
			}
		}
		return true;
	}
	
	Array.prototype.rmsort=function(cols,col) {
		var sortArray = [];
		for (var i=0; i<this.length; i++) {
			sortArray[i] = new Array(trim([this[i]][0].replace(/<[^>]+>/g,'')).toLowerCase());
			for (var j=0; j<cols.length;j++) {
				if (j!=col) {
					if (cols[j].length!=this.length) { return false; }
					sortArray[i][j+1] = cols[j][i];
				}
			}
			sortArray[i][sortArray[i].length]=[this[i]][0];
		}
		sortArray.sort();
		for (var i=0; i<sortArray.length; i++) {
			this[sortArray.length-i-1] = sortArray[i][sortArray[i].length-1];
			for (var j=0; j<cols.length; j++) {
				if (j!=col) cols[j][sortArray.length-i-1] = sortArray[i][j+1];
			}
		}
		return true;
	}
	
	Array.prototype.search=function() {
		for (var i=0;i<this.length;i++) if (this[i]==arguments[0]) return true;
		return false;
	}
	
	Date.prototype.getWeek = function() {
	    var year=this.getFullYear();
	    var month=this.getMonth()+1;
	    var day=this.getDate();
	    var a = Math.floor((14-(month))/12);
	    var y = year+4800-a;
	    var m = (month)+(12*a)-3;
	    var jd = day + Math.floor(((153*m)+2)/5) + (365*y) + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400) - 32045;
	    var d4 = (jd+31741-(jd%7))%146097%36524%1461;
	    var L = Math.floor(d4/1460);
	    var d1 = ((d4-L)%365)+L;
	    return Math.floor(d1/7) + 1;
	}
	
	form_pack=function(e) {
		var form=e||this;

		var frm={};
		for (var i=0;i<form.length;i++) {
			if (form[i].name) {
				if ((form[i].type!="checkbox"&&form[i].type!="radio")||((form[i].type=="checkbox"||form[i].type=="radio")&&form[i].checked)) {
					frm[form[i].name]=form[i].value;
				}
			}
			if (form[i].type=='file') {
				for (var j=0;j<form[i].files.length;j++) {
					if (form[i].files[j].name) frm[form[i].name+'['+j+'][name]']=form[i].files[j].name;
					if (form[i].files[j].size) frm[form[i].name+'['+j+'][size]']=form[i].files[j].size;
					if (form[i].files[j].type) frm[form[i].name+'['+j+'][type]']=form[i].files[j].type;
				}
			}
		}
		return frm;
	}
	
	if (!document.getElementsByClassName) {
		document.getElementsByClassName=function(className) {
			var tmb=[];
			for (var i=0;i<document.all.length;i++) {
				var classNames=document.all[i].className.split(' ');
				for (var j=0;j<classNames.length;j++) {
					if (classNames[j]==className) {
						tmb[tmb.length]=document.all[i];
						break;
					}
				}
			}
			return tmb;
		}
	}

	xJS().ready(function(){
		if (xJS.browser.ie()) {
			xJS("form").bind("pack",form_pack);
		}
		else HTMLFormElement.prototype.pack=form_pack;
	});
	
	window.mouse=[false,false,false];
	window.onmousedown=function(event) { window.mouse[event.button]=true; }
	window.onmouseup=function(event) { window.mouse[event.button]=false; }
	
	window.keyboard={};
	window.onkeydown=function(e) { window.keyboard[e.keyCode||e.which]=true; }
	window.onkeyup=function(e) { window.keyboard[e.keyCode||e.which]=false; }
}();
