function _getPageSize() {
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}
	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
	return arrayPageSize;
};

var KiroModal={
	// alapertelmezett adatok
	version: 0.2,
	windowTemplate:null,
	pageSize: null,
	effect: 'fade',		//fade, slide, zoom
	opacity: 70,
	fadeSpeed: 250,
	openers: 'openModal',
	closers: 'close',
	modalClass: 'modal',
	modalInBox: 'modalInBox',
    newWinLink: false,
	/** Kiro TOOLS
	 * 
	 * @param {Object} obj
	 */

	$Kiro: function(element) {
		if (arguments.length > 1) {
			for (var i = 0, elements = [], length = arguments.length; i < length; i++)
			  elements.push($(arguments[i]));
			return elements;
	  }
		if (document.getElementById(element)) 
		    return document.getElementById(element);	  
	},
	
	/**
	 * 
	 * @param {Object} obj
	 * @param {Object} evt
	 * @param {Object} fn
	 */
	addEvent: function(obj, evt, fn){
        if(obj.addEventListener){obj.addEventListener(evt, fn, false);}
        else{obj.attachEvent('on' + evt, fn);}
    },

	eventStop: function(ev,element) {
		if (ev.preventDefault) {
		     ev.preventDefault(); ev.stopPropagation();
		    } else {
		    ev.cancelBubble = true; ev.returnValue = false;
		   }
		  if (element) {
			  if (typeof element!='object') element=KiroModal.$Kiro(element);
			  if (element.removeEventListener) {
			  }
		  }
		return false;		
	},
	
	css: function (_className, objElement){
        var elements=KiroModal.elements(objElement);
        var results=[];
        for (i=0;i<elements.length;i++){
            if (elements[i].className.indexOf(_className)>-1) {
                results.push(elements[i]);
            }            
        }
        return results;
    },
    elements: function(objElement, tagElement){
        var object= KiroModal.$Kiro(objElement) || document;
        var _element=tagElement || '*';
        var elements=object.getElementsByTagName(_element);
        return elements;
    },    
	
	hasClassName: function(element, _className) {
		{
			if (typeof element!='object') element=KiroModal.$Kiro(element);
            if (element.className.indexOf(_className)>-1) return true;
				else return false;
		}
	},
	addClassName: function(element,_className) {
		{
			element.className+=' ' + _className;
		}
	},
	
	removeClassName: function(element,className) {
		{
			element.className=element.className.replace(eval("/"+className+"/g")," ");
		}
	},
	up: function(element) {		
		var _parent=element.parentNode;
		var expression = KiroModal.hasClassName(_parent,KiroModal.modalClass);
		
		while (!expression) {
			_parent=_parent.parentNode;
			expression = KiroModal.hasClassName(_parent,KiroModal.modalClass);
		}
		return _parent;
	},
	getAjax: function(url){
	      var xmlhttp=false;
	      /*@cc_on @*/
	      /*@if (@_jscript_version >= 5)
	      // JScript gives us Conditional compilation, we can cope with old IE versions.
	      // and security blocked creation of the objects.
	        try {     
	        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	        } catch (e) {
	         try {       
	          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	         } catch (E) {
	          xmlhttp = false;
	         }  
	        }   
	      @end @*/
	      if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp = new XMLHttpRequest();
	      if(xmlhttp.overrideMimeType) xmlhttp.overrideMimeType('text/xml');
	      if(url != ""){
	         xmlhttp.open("GET", url, false);
	         xmlhttp.send(null);
	         return xmlhttp.responseText;
	      }
	   },	

	/** Inicializalas, belepo pont
	 * 
	 */
	init: function() {
        this.create();
		var root=document.getElementsByTagName("body")[0];
		root.appendChild(this.windowTemplate);
		this.resize();
		this.selfEvents();
	},
	
	pack: function (obj,pType){
		var _box=null;
		switch(pType) {
			case 'iframe': 
					_box=document.createElement('iframe');
					_box.src=obj.href;
					_box.id=this.modalInBox;				
				break;
			case 'div' : 
					_box=document.createElement('div');
					_box.innerHTML=obj;
					_box.id=this.modalInBox;
				break;
		}
		KiroModal.addClassName(_box,'hidden');
		var root=document.getElementsByTagName("body")[0];
		root.appendChild(_box);
		return _box;
	},
	/**
	 * 
	 */
	selfEvents: function() {
        this.ret=null;
        var self=this;
		var openers = KiroModal.css(this.openers);
		var closers = KiroModal.css(this.closers);
		var _link=null;
		for (i=0;i<openers.length;i++) {
			if (KiroModal.hasClassName(openers[i],'iframeWindow')){
				openers[i].onclick=function(ev){
					sender = KiroModal.pack(this,'iframe').id;
					KiroModal.setElementSize(sender,{'width':900,'height':600});
					KiroModal.show(sender);
					KiroModal.eventStop(ev,sender);
				}
			}
			if (KiroModal.hasClassName(openers[i],'ajaxWindow')){
				openers[i].onclick = function(ev){					
					sender = KiroModal.pack(KiroModal.getAjax(this.href),'div').id;
					KiroModal.show(sender);
					KiroModal.eventStop(ev, this);
				}
			}
			else 
			KiroModal.addEvent(openers[i], 'click', function(ev){
                if (!ev) var ev = window.event;
				var sender=ev.target || ev.srcElement;
				while (sender.tagName.toUpperCase()!='A'){
                    sender=sender.parentNode;
                }
                
                /* ha uj ablakba nyitottak a linket, akkor a ? utani lesz a ret */
                if (sender.href.indexOf('?redirect=http://')!=-1) self.ret=sender.href.split('?redirect=')[1];
                else self.ret=sender.href;
                
                if (KiroModal.$Kiro(sender.rel)) {					
                    KiroModal.show(sender.rel);
				}                
                				
				KiroModal.eventStop(ev);
			});
		}
		for (i=0;i<closers.length;i++) {
			KiroModal.addEvent(closers[i], 'click', function(ev){		
                if (!ev) var ev = window.event;
				var sender=ev.target || ev.srcElement;
				while (sender.tagName.toUpperCase()!='A'){
                    sender=sender.parentNode;
                }                
				var modal=KiroModal.up(sender).id;
				if (KiroModal.$Kiro(modal)) {
					/*if (KiroModal.hasClassName(this,'iframeWindow')) {
						KiroModal.destroy(modal,'remove');
					}
					else */
						KiroModal.destroy(modal);
				}
               
                /* ha van uj ablakba nyitott link, akkor ez lesz a ret */
                if (self.newWinLink) {
                    self.ret=self.newWinLink;
                }
                
                /* little hack */
               
                if (sender.href.length < 1) {
                    KiroModal.eventStop(ev);
                }
                if (KiroModal.hasClassName(sender,'passedLink') && self.ret) {
                    document.location.href=self.ret;
               }
               else 
                KiroModal.eventStop(ev);
			});
		}
	},
	
	/**
	 * 
	 */
	create: function() {
		if (!this.$Kiro('kiroModalLayer')){
			this.windowTemplate=document.createElement('div');
			this.windowTemplate.setAttribute('id','kiroModalLayer');
		}
	},
	
	/**
	 * 
	 */
	getPageSize: function() {
		this.pageSize = _getPageSize();
		this.pageSizeX=this.pageSize[0]>this.pageSize[2]?this.pageSize[0]:this.pageSize[2];
		this.pageSizeY=this.pageSize[1]>this.pageSize[3]?this.pageSize[1]:this.pageSize[3];
		this.screenSizeX=this.pageSize[0]<this.pageSize[2]?this.pageSize[0]:this.pageSize[2];
		this.screenSizeY=this.pageSize[1]<this.pageSize[3]?this.pageSize[1]:this.pageSize[3];
	},
	
    
	getElementSize: function(element) {
		return ({_w:element.offsetWidth,_h:element.offsetHeight,_t:element.offsetTop,_l:element.offsetLeft});
	},
	
	setElementSize: function(element,newSize) {
		element=this.$Kiro(element);
		element.style.width=newSize.width+'px';
		element.style.height=newSize.height+'px';
		return (element);
	},
	
	setPosition: function (element) {
		var _size=this.getElementSize(element);
		var _left=Math.ceil(this.screenSizeX/2)-Math.ceil(_size._w/2);
		var _top=Math.ceil(this.screenSizeY/2)-Math.ceil(_size._h/2);
		element.style.top=_top+'px';
		element.style.left=_left+'px';
	},
	
	/**
     * 
     * @param {Object} obj
     * @param {Object} opacity
     * @param {Object} params
     */
	changeOpacity: function(obj,opacity,params){
		var object=this.$Kiro(obj).style;
        object.opacity = (opacity / 100);
        object.MozOpacity = (opacity / 100);
        object.KhtmlOpacity = (opacity / 100);
        object.filter = "alpha(opacity=" + opacity + ")";
		if (params && opacity==0 && params.remove) {
			this.$Kiro(obj).style.display='none';
		}
    },        
	
	/**
	 * 
	 */
	resize: function(objID) {
		this.getPageSize();
		this.windowTemplate.style.width=this.pageSizeX+'px';
		this.windowTemplate.style.height=this.pageSizeY+'px';
		if (objID) KiroModal.setPosition(this.$Kiro(objID));
	},
	
	/**
	 * 
	 */
	show: function(objID) {
		var obj=this.$Kiro(objID);
        var params=null;
		this.removeClassName(obj,'hidden');
		this.addClassName(obj,'modal');
		this.setPosition(obj);
		this.windowTemplate.style.display='block';
		this.changeOpacity(this.windowTemplate.id,0);
		
		switch (this.effect) {
			case 'fade':	this.fade(this.windowTemplate,{start:0,end:this.opacity});
				break;
		}
		this.addEvent(window, 'resize', function(){
			KiroModal.resize(objID);
		});
		
		this.addEvent(document,'keypress',function(evt){
			if (!evt) var evt = window.event;
			var sender=evt.target || evt.srcElement;
			if (KiroModal.hasClassName(sender,'iframeWindow')) {
				params='remove';
			}
			if (evt.keyCode == 27) {
				KiroModal.destroy(objID,params);
			}
		});
	},
	
	/**
	 * 
	 */
	hide: function(objID) {
		this.fade(this.windowTemplate,{start:this.opacity,end:0,remove:true});
		var obj=this.$Kiro(objID);
		this.addClassName(obj,'hidden');
		this.removeClassName(obj,'modal');
	},
	
	/**
	 * 
	 */
	destroy: function(objID,params) {
		this.hide(objID);
		if (params=='remove') {
			KiroModal.$Kiro(objID).parentNode.removeChild(KiroModal.$Kiro(objID));
		}
	},

	/**
	 * 
	 * @param {Object} objID
	 * @param {Object} params
	 */
	fade: function(objID,params){
		if (params.start>=0) {opacStart=params.start }
			else opacStart=100;
		if (params.end>=0) opacEnd=params.end 
			else opacEnd=0;
		if (params.duration) millisec=params.duration 
			else millisec=this.fadeSpeed;
		if (params.remove) remove=true;
			else remove=false;
        var speed = Math.round(millisec / 100);
        var timer = 0;
		
		if(opacStart > opacEnd) {
			for(i = opacStart; i >= opacEnd; i--) {
				setTimeout("KiroModal.changeOpacity('"+objID.id+"',"+i+",{remove:"+remove+"})",(timer * speed));
                timer++;
            }
        } else if(opacStart < opacEnd) {
            for(i = opacStart; i <= opacEnd; i++)
                {
				setTimeout("KiroModal.changeOpacity('"+objID.id+"',"+i+",{remove:"+remove+"})",(timer * speed));
                timer++;
            }
        }
	} 
}

KiroModal.addEvent(window, 'load', function(){
	
    KiroModal.init();
    
    /* uj oldalba nyitas eseten jogiNyilatkozat modal */
    if (location.href.indexOf('?redirect=http://')!=-1 && KiroModal.$Kiro("jogiNyilatkozat")) {
        KiroModal.newWinLink=location.href.split('?redirect=')[1];
        KiroModal.show("jogiNyilatkozat");
    }
});