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.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;
	}
	
	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;
	}
	
	HTMLFormElement.prototype.pack=function() {
		var frm={};
		for (var i=0;i<this.length;i++) {
			if (this[i].name) if (this[i].type!="checkbox"||(this[i].type=="checkbox"&&this[i].checked)) frm[this[i].name]=this[i].value;
		}
		return frm;
	}
	
	window.mouse=[false,false,false];
	window.onmousedown=function(event) { window.mouse[event.button]=true; }
	window.onmouseup=function(event) { window.mouse[event.button]=false; }
}();

xJS=function(selector) {
	if (typeof selector=="string") {
		var regs=/^([#|\.|\*]){0,1}([^[]+).*$/.exec(selector);
		
		if (regs) {
			switch (regs[1]) {
				case '#':
						elements=document.getElementById(regs[2]);
					break;
				case '.':
						elements=xJS.collToArray(document.getElementsByClassName(regs[2]));
					break;
				default:
						elements=xJS.collToArray(document.getElementsByTagName(regs[2]));
					break;
			}
		}
	}
	else if (typeof selector=="object") elements=selector;
	
	var self={
		// events
		ready:function(func) {
			window.onload=func;
		},
				
		// 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]; //this[key]?this[key]=options[key]:false; 
        		}
        		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') {
        		if (elements && typeof elements=="object") return xJS.iecheck()?elements.currentStyle[options]:document.defaultView.getComputedStyle(elements,null)[options]
				else if (elements && typeof elements=="array") return xJS.iecheck()?elements[0].currentStyle[options]:document.defaultView.getComputedStyle(elements[0],null)[options];
        		/*if (!elements) return xJS.iecheck()?elements.currentStyle[options]:document.defaultView.getComputedStyle(elements,null)[options];
				if (!elements.length) return xJS.iecheck()?elements[0].currentStyle[options]:document.defaultView.getComputedStyle(elements[0],null)[options];*/
				return false;
        	}
        },
        
        // dom functions
		before:function(o,o2) {
			if (!elements) return false;
			if (!elements.length) elements.insertBefore(o,o2);
			return true;			
		},
		after:function(o,o2) {
			if (!elements) return false;
			if (!elements.length) elements.insertBefore(o,o2.nextSibling);
			return true;
		},
		remove:function() {
			if (!elements) return false;
			if (!elements.length) elements.parentNode.removeChild(elements);
			return true;
		},
		create:function(tag) {
			if (!elements) return false;
			if (!elements.length) var newelement=elements.createElement(tag);
			return newelement;
        },
        append:function(o) {
			if (!elements) return false;
			if (!elements.length) elements.appendChild(o);
			return true;
        },
        first:function() {
        	if (!elements) return false;
			if (!elements.length) {
				var first=elements.firstChild;
				if (!first) return false;
				while (!first.tagName&&first) {
					first=first.nextSibling;
					if (!first) return false;
				}
				return first;
			}
        },
        last:function() {
			if (!elements) return false;
			if (!elements.length) {
				var last=elements.lastChild;
				while (!last.tagName&&last) {
					last=last.nextSibling;
					if (!last) return false;
				}
				return last;
			}        	
        },
        prev:function() {
			if (!elements||elements.length) return null;
			else {
				var prev=elements.previousSibling;
				while (!prev.tagName&&prev) {
					prev=prev.previousSibling;
					if (!prev) return false;
				}
				return prev;			
			}
        },
        next:function() {
			if (!elements||elements.length) return null;
			else {
				var next=elements.nextSibling;
				while (!next.tagName&&next) {
					next=next.nextSibling;
					if (!next) return false;
				}
				return next;
			}
        },
        parent:function() {
			if (!elements||elements.length) return null;
			else return elements.parentNode;
        },
        focus:function() {
			if (!elements) return false;
			if (!elements.length) elements.focus();
			return true;
        },
        
        // data functions
        html:function(html) {
        	if (elements.length) {
        		if (html) for (var i=0;i<elements.length;i++) elements[i].innerHTML=html;
        		else return null;
        	}
        	else {
        		if (html=='undefined') return elements.innerHTML;
        		else elements.innerHTML=html;
        	}
        },
        text:function(text) {
        	if (elements.length) {
        		if (text) for (var i=0;i<elements.length;i++) elements[i].innerHTML=text.htmlspchars();
        		else return null;
        	}
        	else {
        		if (text) elements.innerHTML=text.htmlspchars();
        		else return elements.innerHTML;
        	}
        },
        value:function(val) {
        	if (elements&&typeof elements=='array') {
        		if (val) for (var i=0;i<elements.length;i++) elements[i].value=val;
        		else return null;
        	}
        	else {
        		if (val) elements.value=val;
        		else return elements.value;
        	}        	
        }
    }	
    	
    return selector&&!elements?false: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.iecheck=function() {
	var pos = navigator.userAgent.indexOf("MSIE ");
	if (pos == -1) return false;
	var version = navigator.userAgent.substring(pos + 5);
	return (((version.indexOf("5.5") == 0) || (version.indexOf("6") == 0)  || (version.indexOf("7") == 0)) && (navigator.platform == ("Win32")));
};

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.ajax={
	type:"html",
	charset:"utf-8",
	onstart:null,
	ondone:null,
	
	post:function(target,parameters,events,success) {
		return this.http_request(target,parameters,"post",events,success);
	},
	get:function(target,parameters,type,events) {
		if (type) this.type=type;
		return this.http_request(target,parameters,"get",events,success);
	},
	http_request:function(target,parameters,method,events,success) {
		var params=parameters;
		if (typeof parameters=='object') {
			var tmp=[];
			for (i in parameters) tmp[tmp.length]=i+'='+parameters[i];
			parameters=tmp.join('&');
		}
		
		if (events&&events.onstart&&typeof events.onstart=='function') events.onstart(params);
		else 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 (events&&events.ondone&&typeof events.ondone=='function') events.ondone(params);
		else 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)) 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.window={
	windows:[],
	className:"window",
	transparent:1,

	generate:function(to,o) {
		for (var i in o) {
			alert(i)
			var tag=xJS(document).create(o.tag);
			xJS(to).append(tag);
			//if (o.text) tag.text=o.text;
			if (o.sub) this.generate(o.tag,o.sub)
		}
	},
	open:function(id,data,parameters) {
		if (this.windows[id]) return false;

		/*

		
		var s={
			name:'',
			type:'',
			html:'',
			sub:s
		};
		
		var win={
			tag:'div',
			sub:{
				head:{
					tag:'div',
					sub:{
						title:{
							tag:'div'
						},
						buttons:{
							tag:'div',
							sub:{
								minimize:{
									tag:'span',
									text:'-'
								},
								close:{
									tag:'span',
									text:'x'
								}
							}
						}
					}
				},
				body:{
					tag:'div'
				},
				foot:{
					tag:'div'
				}
			}
		}
		
		this.generate(document.body,win);
		/*
		// win
		xJS(document.body).append(win.tag);
		
		// head
		xJS(win.tag).append(win.sub.head.tag);

		// head title
		xJS(win.sub.head.tag).append(win.sub.head.sub.title.tag);
		
		// head buttons
		xJS(win.sub.head.tag).append(win.sub.head.sub.buttons.tag);
		xJS(win.sub.head.sub.buttons.tag).append(win.sub.head.sub.buttons.sub.minimize.tag);
		win.sub.head.sub.buttons.sub.minimize.tag.innerHTML='-';
		xJS(win.sub.head.sub.buttons.tag).append(win.sub.head.sub.buttons.sub.close.tag);
		win.sub.head.sub.buttons.sub.close.tag.innerHTML='x';
		
		// body
		xJS(win.tag).append(win.sub.body.tag);
		
		// foot
		xJS(win.tag).append(win.sub.foot.tag);
		
		alert(1);
		*/
		
		var divs=[0,0,0,0];
		for (var i in divs) divs[i]=document.createElement('div');
		
		//divs[0].style.position="absolute";
		divs[0].className=this.className;
		divs[0].style.zIndex=this.count()+1;
		divs[0].style.opacity=this.transparent;
		
		var o=this;
		divs[0].onmousedown=function(){
			var z=0;
			for (var i in o.windows) {
				if (o.windows[i]) {
					if (o.windows[i].id!=this.id) o.windows[i].style.zIndex=z+1;
					else o.windows[i].style.zIndex=o.count()+1;
				}
			}			
			
			//divs[0].style.zIndex=this.windows.length+1;
			//o.windows[this.id].style.zIndex=
		}
		
		if (id) divs[0].id=id;
		
		// head
		divs[1].className='window_head';
		if (data.dragable!=false) {
			divs[1].onmousedown=function(event){
				xJS.dnd.drag(event,this.parentNode);
			};
		}
		divs[0].appendChild(divs[1]);
		
		// head buttons
		var buttons=[0,0,0,0];
		for (var i in buttons) buttons[i]=xJS(document).create(i<2?'div':'span');
		
		xJS(divs[1]).append(buttons[0]);
		xJS(divs[1]).append(buttons[1]);
		var clear=xJS(document).create('div');
		xJS(clear).css({clear:'both'});
		xJS(divs[1]).append(clear);
		
		xJS(buttons[0]).css({cssFloat:'left'});
		xJS(buttons[1]).css({cssFloat:'right'});
		xJS(buttons[1]).append(buttons[2]);
		xJS(buttons[1]).append(buttons[3]);
		xJS(buttons[2]).html('-');
		xJS(buttons[3]).html('x');
		buttons[2].className='button_minimize';
		buttons[3].className='button_close';
		
		// body
		divs[2].className='window_body';
		divs[0].appendChild(divs[2]);
		
		// foot
		divs[3].className='window_foot';
		divs[3].innerHTML="<a href=\"javascript:void(0);\" onclick=\"xJS.window.close('"+id+"')\">bezár</a>";
		divs[3].innerHTML+=" | <a href=\"javascript:void(0);\" onclick=\"xJS.window.minimize('"+id+"')\">be/ki</a>";
		divs[0].appendChild(divs[3]);
		
		document.body.appendChild(divs[0]);
		
		this.windows[id]=divs[0];
		
		this.set(id,data,parameters);
	},
	set:function(id,data,parameters) {
		for (var i in data) {
			switch (i) {
				case 'className':
						this.windows[id].className=data[i];
					break;
				case 'file':
						this.windows[id].getElementsByTagName('div')[1].innerHTML=xJS.ajax.post(data[i],parameters);
					break;
				case 'height':
						this.windows[id].getElementsByTagName('div')[1].style.height=data[i];
					break;
				case 'left':
						this.windows[id].style.left=data[i];
					break;
				case 'html':
						this.windows[id].getElementsByTagName('div')[1].innerHTML=data[i];
					break;
				case 'size':
						this.windows[id].style.left=typeof data[i][0]=='number'?data[i][0]+'px':data[i][0];
						this.windows[id].style.top=typeof data[i][1]=='number'?data[i][1]+'px':data[i][1];
						this.windows[id].style.width=typeof data[i][2]=='number'?data[i][2]+'px':data[i][2];
						if (data[i][3]) this.windows[id].getElementsByTagName('div')[1].style.height=typeof data[i][3]=='number'?data[i][3]+'px':data[i][3];
					break;
				case 'title':
						//this.windows[id].getElementsByTagName('div')[0].insertBefore(,this.windows[id].getElementsByTagName('div')[0].firstChild);
						this.windows[id].getElementsByTagName('div')[0].firstChild.innerHTML=data[i];
					break;
				case 'top':
						this.windows[id].style.top=data[i];
					break;
				case 'width':
						this.windows[id].style.width=data[i];
					break;
			}
		}
	},
	close:function(id) {
		document.body.removeChild(this.windows[id]);
		this.windows[id]=null;
	},
	minimize:function(id) {
		var tmp=this.windows[id].getElementsByTagName('DIV')[1];
		tmp.style.display=tmp.style.display=="none"?"":"none";
	},
	count:function() {
		var c=0;
		for (var i in this.windows) c++;
		return c;
	}
};

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,

	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.axis||this.axis==1) o.style.left=(e.pageX-this.dragpos[0])+"px";
			if (!this.axis||this.axis==2) o.style.top=(e.pageY-this.dragpos[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;
	}
};

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++) sheets[i][sheets[i].length]=this.document.styleSheets[i].cssRules[j].cssText;
			sheets[i]=sheets[i].join('\n');*/
			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={
	pages:[],
	id:"pager",
	active:0,
	div:document.getElementById(this.id),
	core:null,

	build:function(id,pages) {
		if (id) this.id=id;
		if (pages) for (var i=0;i<pages.length;i++) this.pages[this.pages.length]=pages[i];
		
		var obj=this;
		this.core=document.getElementById(this.id);
		for (var i=this.pages.length-1;i>=0;i--) {
			var d=document.createElement('div');
			
			if (i==this.active) {
				d.id="sht_"+this.pages[i][0];
				d.className="pager "+this.id+'_aktiv';
				document.getElementById(this.pages[i][0]).style.display='block';
			}
			else {
				d.id="sht_"+this.pages[i][0];
				d.className="pager "+this.id+'_inaktiv';
			}
			
			d.innerHTML=this.pages[i][1];
			d.onclick=function() { obj.change(); }
				
			eval('d.onclick=function() { eval(obj.change("'+obj.pages[i][0]+'")); }');
			
			this.core.insertBefore(d,this.core.firstChild);
		}
	},
	change:function(id) {
		if (id) {
			for (var i=0;i<this.pages.length;i++) {
				if (this.pages[i][0]==id) {
					document.getElementById("sht_"+this.pages[i][0]).className="pager "+this.id+'_aktiv';
					document.getElementById(this.pages[i][0]).style.display='block';
				}
				else {
					document.getElementById("sht_"+this.pages[i][0]).className="pager "+this.id+'_inaktiv';
					document.getElementById(this.pages[i][0]).style.display='none';
				}
			}
		}
	}
};

xJS.page2={
	pages:[],
	id:null,
	active:0,
	div:document.getElementById(this.id),
	core:null,

	build:function(id,pages) {
		if (id) this.id=id;
		
		var obj=this;
		this.core=document.getElementById(this.id);
		
		var div=xJS(document).create('div');
		xJS(div).css({clear:'both'});
		var first=xJS('#'+this.id).first();
		if (first) xJS('#'+this.id).before(div,first); else xJS('#'+this.id).append(div);
		
		var c=0;
		for (var i in pages) {
			// tartalom
			if (!document.getElementById(i)) {
				var cdiv=xJS(document).create('div');
				cdiv.id=i;
				cdiv.className='page';
				xJS('#'+this.id).append(cdiv);
				
				if (!pages[i].insert||pages[i].insert=='oncreate') 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);
			
			if (c!=this.active) cdiv.style.display='none';

			// ful
			var tdiv=xJS(document).create('div');
			tdiv.id="sht_"+i;
			tdiv.style.cssFloat="left";
			
			if (c==this.active) {
				tdiv.className="pager "+this.id+'_aktiv';
				xJS('#'+i).css({display:'block'});
			}
			else {
				tdiv.className="pager "+this.id+'_inaktiv';
			}
			
			eval('tdiv.onclick=function() { eval(obj.change("'+i+'")); }');
			
			xJS(tdiv).html(pages[i].title);
			xJS('#'+this.id).before(tdiv,div);
			
			this.pages[this.pages.length]={
				id:i,
				tag:tdiv,
				cont:{
					html:pages[i].html,
					text:pages[i].text,
					file:pages[i].file
				},
				params:pages[i].params,
				events:pages[i].events,
			};
			
			c++;
		}
	},
	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) {
		for (var i=0;i<this.pages.length;i++) {
			if (this.pages[i].id==id) {
				if (!document.getElementById(this.pages[i].id).innerHTML) {
					this.pages[i].cont.params=this.pages[i].params;
					this.setContent(this.pages[i],this.pages[i].cont,this.pages[i].events);
				}
				
				document.getElementById("sht_"+this.pages[i].id).className="pager "+this.id+'_aktiv';
				document.getElementById(this.pages[i].id).style.display='block';
			}
			else {
				document.getElementById("sht_"+this.pages[i].id).className="pager "+this.id+'_inaktiv';
				document.getElementById(this.pages[i].id).style.display='none';
			}
		}
	},
	reload:function(id,params,events) {
		for (var i in this.pages) {
			if (this.pages[i].id==id) {
				for (var j in params) this.pages[i].cont.params[j]=params[j];
				this.setContent(this.pages[i],this.pages[i].cont,events);
				return true;
			}
		}
		
		return false;
	}
};

xJS.page3={
	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;
		}
		
		// clear
		/*var clr=xJS(document).create('div');
		xJS(clr).css({clear:'both'});
		xJS(tabs).append(clr);*/
		
		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]) {
				// active
				/*var actives=/#tab:(.+)/.exec(document.location.hash);
				if (actives) {
					actives=actives[1].split(',');
					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;
				
				
				
				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={
	start:function(sec,options){
		window.setTimeout(options.ondone,sec);
	}
};

xJS.form={
	send:function(method,action,parameters) {
		var frm=xJS(document).create('FORM');
		frm.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) {
		window.onmousemove=function(event) {
			if (!xJS.DOM.isParent(event.target,'id',/xJSCalendar/)) {
				xJS.cal.close();
			}
		}
		
		this.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).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)+'px',
			top:(this.options.fixed?e.pageY-document.documentElement.scrollTop:e.pageY)+'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;
						}
						
						xJS(newtd).html(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() {
		if (xJS("#xJSCalendar")) 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",
	chips:{},
	
	create:function(chips) {
		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";
    	
    	for (var i in chips) {
    		this.chips[i]={};
    		this.chips[i].data=chips[i];
    		this.chips[i].html=document.createElement('div');
    		this.tray.appendChild(this.chips[i].html);
    		this.chips[i].html.innerHTML=this.chips[i].data.title;
    		this.chips[i].html.className="chip fr";
    	}
	},
	addChip:function(chip) {
		this.chips[chip.id]={};
		this.chips[chip.id].data=chip;
		this.chips[chip.id].html=document.createElement('div');
		this.chips[chip.id].html.innerHTML=this.chips[chip.id].data.title;
		this.chips[chip.id].html.className="chip fr";
		this.tray.appendChild(this.chips[chip.id].html);

		// win		
		this.chips[chip.id].win=document.createElement('div');
		this.chips[chip.id].html.appendChild(this.chips[chip.id].win);
		this.chips[chip.id].win.innerHTML=chip.html?chip.html:"";
		this.chips[chip.id].win.className="chipwin";
		this.chips[chip.id].win.style.visibility="hidden";
		this.chips[chip.id].win.id=chip.id;
		
		var paddingLeft=document.defaultView.getComputedStyle(this.chips[chip.id].html,null)["paddingLeft"].replace('px','');
		var paddingRight=document.defaultView.getComputedStyle(this.chips[chip.id].html,null)["paddingRight"].replace('px','');
		var marginLeft=-paddingLeft;
		
		if (this.chips[chip.id].html.offsetLeft+this.chips[chip.id].win.offsetWidth>this.tray.offsetLeft+this.tray.offsetWidth) {
			marginLeft=(this.chips[chip.id].win.offsetWidth-this.chips[chip.id].html.offsetWidth)*-1-paddingLeft;
		}
		
		this.chips[chip.id].win.style.marginLeft=marginLeft+"px";
		
		// events
		this.chips[chip.id].html.onclick=function(event) {
			for (var i in xJS.tray.chips) {
				if (xJS.tray.chips[i].html==event.target) {
					xJS.tray.chips[i].win.style.visibility=xJS.tray.chips[i].win.style.visibility=="hidden"?"":"hidden";
				}
				else {
					xJS.tray.chips[i].win.style.visibility="hidden";
				}
			}
			xJS.tray.chips[chip.id].win.style.visibility=="hidden"?"":"hidden";
		}
		
		
	},
	addSep:function() {
		var sep=document.createElement('div');
		sep.className="sep fr";
		this.tray.appendChild(sep);
	}
}*/

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
		/*
		this.items[item.id].item.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 {
					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);
			//xJS.tray.items[item.id].box.style.visibility=="hidden"?"":"hidden";
		}
		*/
		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; }
};