var iBox = function() {
	var _pub = {
		close_label :"Close",
		padding :100,
		inherit_frames :false,
		fade_in_speed :0,
		attribute_name :"rel",
		tags_to_hide : [ "select", "embed", "object" ],
		default_width :450,
		is_opera :navigator.userAgent.indexOf("Opera/9") != -1,
		is_ie :navigator.userAgent.indexOf("MSIE ") != -1,
		is_ie6 :false
		/* @cc_on || @_jscript_version < 5.7 @ */
		,
		is_firefox :navigator.appName == "Netscape"
				&& navigator.userAgent.indexOf("Gecko") != -1
				&& navigator.userAgent.indexOf("Netscape") == -1,
		is_mac :navigator.userAgent.indexOf("Macintosh") != -1,
		base_url :"",
		setPath : function(path) {
			_pub.base_url = path
		},
		bind : function(fn) {
			var args = [];
			for ( var n = 1; n < arguments.length; n++) {
				args.push(arguments[n])
			}
			return function(e) {
				return fn.apply(this, [ e ].concat(args))
			}
		},
		html : function(content, params) {
			if (content === undefined) {
				return els.content
			}
			if (cancelled) {
				return
			}
			_pub.clear();
			els.wrapper.style.display = "block";
			els.wrapper.style.visibility = "hidden";
			els.content.style.height = "auto";
			if (typeof (content) == "string") {
				els.content.innerHTML = content
			} else {
				els.content.appendChild(content)
			}
			var elemSize = _pub.getElementSize(els.content);
			var pageSize = _pub.getPageSize();
			if (params.can_resize === undefined) {
				params.can_resize = true
			}
			if (params.fade_in === undefined) {
				params.use_fade = true
			}
			if (params.width) {
				var width = parseInt(params.width)
			} else {
				var width = _pub.default_width
			}
			if (params.height) {
				var height = parseInt(params.height)
			} else {
				var height = elemSize.height
			}
			els.wrapper.style.width = width + "px";
			els.wrapper.style.height = height + "px";
			if (!params.height) {
				var elemSize = _pub.getElementSize(els.content);
				var height = elemSize.height
			}
			if (params.can_resize) {
				_pub.resizeObjectToScreen(els.content, width, height,
						params.constrain)
			} else {
				els.content.style.width = width + "px";
				els.content.style.height = height + "px"
			}
			var elemSize = _pub.getElementSize(els.content);
			els.wrapper.style.width = elemSize.width + "px";
			els.wrapper.style.height = elemSize.height + "px";
			_pub.reposition();
			els.wrapper.style.visibility = "visible";
			_pub.fadeIn(els.wrapper, 10, params.fade_in ? _pub.fade_in_speed
					: 0)
		},
		clear : function() {
			els.loading.style.display = "none";
			while (els.content.firstChild) {
				els.content.removeChild(els.content.firstChild)
			}
		},
		show : function(text, title, params) {
			_pub.hide();
			showInit(title, params, function() {
				_pub.html(text, params)
			})
		},
		showURL : function(url, title, params) {
			showInit(title, params, function() {
				cancelled = false;
				for ( var i = 0; i < _pub.plugins.list.length; i++) {
					var plugin = _pub.plugins.list[i];
					if (plugin.match(url)) {
						active_plugin = plugin;
						plugin.render(url, params);
						break
					}
				}
			})
		},
		hide : function() {
			if (active_plugin) {
				if (active_plugin.unload) {
					active_plugin.unload()
				}
				active_plugin = null
			}
			window.onscroll = null;
			_pub.clear();
			for ( var i = 0; i < _pub.tags_to_hide.length; i++) {
				showTags(_pub.tags_to_hide[i])
			}
			els.loading.style.display = "none";
			els.overlay.style.display = "none";
			els.wrapper.style.display = "none";
			_pub.fireEvent("hide")
		},
		resizeObjectToScreen : function(obj, width, height, constrain) {
			var pagesize = _pub.getPageSize();
			var x = pagesize.width - _pub.padding;
			var y = pagesize.height - _pub.padding;
			if (!height) {
				var height = obj.height
			}
			if (!width) {
				var width = obj.width
			}
			if (width > x) {
				if (constrain) {
					height = height * (x / width)
				}
				width = x
			}
			if (height > y) {
				if (constrain) {
					width = width * (y / height)
				}
				height = y
			}
			obj.style.width = width + "px";
			obj.style.height = height + "px"
		},
		reposition : function(e) {
			_pub.center(els.loading);
			_pub.center(els.wrapper);
			var pageSize = _pub.getPageSize();
			var scrollPos = _pub.getScrollPos();
			if (_pub.is_ie6) {
				els.overlay.style.width = document.documentElement.clientWidth
						+ "px"
			}
			var height = Math.max(document.documentElement.clientHeight,
					document.body.clientHeight);
			els.overlay.style.height = height + "px"
		},
		center : function(obj) {
			var pageSize = _pub.getPageSize();
			var scrollPos = _pub.getScrollPos();
			var emSize = _pub.getElementSize(obj);
			var x = Math.round((pageSize.width - emSize.width) / 2
					+ scrollPos.scrollX);
			var y = Math.round((pageSize.height - emSize.height) / 2
					+ scrollPos.scrollY);
			obj.style.left = x + "px";
			obj.style.top = y + "px"
		},
		getStyle : function(obj, styleProp) {
			if (obj.currentStyle) {
				return obj.currentStyle[styleProp]
			} else {
				if (window.getComputedStyle) {
					return document.defaultView.getComputedStyle(obj, null)
							.getPropertyValue(styleProp)
				}
			}
		},
		getScrollPos : function() {
			var docElem = document.documentElement;
			return {
				scrollX :document.body.scrollLeft || window.pageXOffset
						|| (docElem && docElem.scrollLeft),
				scrollY :document.body.scrollTop || window.pageYOffset
						|| (docElem && docElem.scrollTop)
			}
		},
		getPageSize : function() {
			return {
				width :window.innerWidth
						|| (document.documentElement && document.documentElement.clientWidth)
						|| document.body.clientWidth,
				height :window.innerHeight
						|| (document.documentElement && document.documentElement.clientHeight)
						|| document.body.clientHeight
			}
		},
		getElementSize : function(obj) {
			return {
				width :obj.offsetWidth || obj.style.pixelWidth,
				height :obj.offsetHeight || obj.style.pixelHeight
			}
		},
		fadeIn : function(obj, level, speed, callback) {
			if (level === undefined) {
				var level = 100
			}
			if (speed === undefined) {
				var speed = 70
			}
			if (!speed) {
				_pub.setOpacity(null, obj, level * 10);
				if (callback) {
					callback()
				}
				return
			}
			_pub.setOpacity(null, obj, 0);
			for ( var i = 0; i <= level; i++) {
				setTimeout(_pub.bind(_pub.setOpacity, obj, i * 10), speed * i)
			}
			if (callback) {
				setTimeout(callback, speed * (i + 1))
			}
		},
		setOpacity : function(e, obj, value) {
			obj.style.opacity = value / 100;
			obj.style.filter = "alpha(opacity=" + value + ")"
		},
		createXMLHttpRequest : function() {
			var http;
			if (window.XMLHttpRequest) {
				http = new XMLHttpRequest();
				if (http.overrideMimeType) {
					http.overrideMimeType("text/html")
				}
			} else {
				if (window.ActiveXObject) {
					try {
						http = new ActiveXObject("Msxml2.XMLHTTP")
					} catch (e) {
						try {
							http = new ActiveXObject("Microsoft.XMLHTTP")
						} catch (e) {
						}
					}
				}
			}
			if (!http) {
				alert("Cannot create XMLHTTP instance");
				return false
			}
			return http
		},
		addEvent : function(obj, evType, fn) {
			if (obj.addEventListener) {
				obj.addEventListener(evType, fn, false);
				return true
			} else {
				if (obj.attachEvent) {
					var r = obj.attachEvent("on" + evType, fn);
					return r
				} else {
					return false
				}
			}
		},
		addEventListener : function(name, callback) {
			if (!events[name]) {
				events[name] = new Array()
			}
			events[name].push(callback)
		},
		fireEvent : function(name) {
			if (events[name] && events[name].length) {
				for ( var i = 0; i < events[name].length; i++) {
					var args = [];
					for ( var n = 1; n < arguments.length; n++) {
						args.push(arguments[n])
					}
					if (events[name][i](args) === false) {
						break
					}
				}
			}
		},
		parseQuery : function(query) {
			var params = new Object();
			if (!query) {
				return params
			}
			var pairs = query.split(/[;&]/);
			var end_token;
			for ( var i = 0; i < pairs.length; i++) {
				var keyval = pairs[i].split("=");
				if (!keyval || keyval.length != 2) {
					continue
				}
				var key = unescape(keyval[0]);
				var val = unescape(keyval[1]);
				val = val.replace(/\+/g, " ");
				if (val[0] == '"') {
					var token = '"'
				} else {
					if (val[0] == "'") {
						var token = "'"
					} else {
						var token = null
					}
				}
				if (token) {
					if (val[val.length - 1] != token) {
						do {
							i += 1;
							val += "&" + pairs[i]
						} while ((end_token = pairs[i][pairs[i].length - 1]) != token)
					}
					val = val.substr(1, val.length - 2)
				}
				params[key] = val
			}
			return params
		},
		handleTag : function(e) {
			var t = this.getAttribute("rel");
			var params = _pub.parseQuery(t.substr(5, 999));
			if (params.target) {
				var url = params.target
			} else {
				if (this.target && !params.ignore_target) {
					var url = this.target
				} else {
					var url = this.href
				}
			}
			var title = this.title;
			if (_pub.inherit_frames && window.parent) {
				window.parent.iBox.showURL(url, title, params)
			} else {
				_pub.showURL(url, title, params)
			}
			return false
		},
		plugins : {
			list :new Array(),
			register : function(func, last) {
				if (!last) {
					_pub.plugins.list = _pub.plugins.list.concat( [ func ],
							_pub.plugins.list)
				} else {
					_pub.plugins.list.push(func)
				}
			}
		}
	};
	var cancelled = false;
	var active_plugin = null;
	var events = {};
	var els = {
		wrapper :null,
		footer :null,
		content :null,
		overlay :null,
		loading :null
	};
	var create = function(elem) {
		var container = document.createElement("div");
		container.id = "ibox";
		container.style.display = "block";
		els.overlay = document.createElement("div");
		els.overlay.style.display = "none";
		els.overlay.id = "ibox_overlay";
		els.overlay.onclick = _pub.hide;
		container.appendChild(els.overlay);
		els.loading = document.createElement("div");
		els.loading.id = "ibox_loading";
		els.loading.innerHTML = "Načítám...";
		els.loading.style.display = "none";
		els.loading.onclick = function() {
			_pub.hide();
			cancelled = true
		};
		container.appendChild(els.loading);
		els.wrapper = document.createElement("div");
		els.wrapper.id = "ibox_wrapper";
		els.wrapper.style.display = "none";
		els.content = document.createElement("div");
		els.content.id = "ibox_content";
		els.wrapper.appendChild(els.content);
		var child = document.createElement("div");
		child.id = "ibox_footer_wrapper";
		var child2 = document.createElement("a");
		child2.innerHTML = _pub.close_label;
		child2.href = "javascript:void(0)";
		child2.onclick = _pub.hide;
		child.appendChild(child2);
		els.footer = document.createElement("div");
		els.footer.id = "ibox_footer";
		els.footer.innerHTML = "&nbsp;";
		child.appendChild(els.footer);
		els.wrapper.appendChild(child);
		container.appendChild(els.wrapper);
		elem.appendChild(container);
		return container
	};
	var hideTags = function(tag) {
		var list = document.getElementsByTagName(tag);
		for ( var i = 0; i < list.length; i++) {
			if (_pub.getStyle(list[i], "visibility") != "hidden"
					&& list[i].style.display != "none") {
				list[i].style.visibility = "hidden";
				list[i].wasHidden = true
			}
		}
	};
	var showTags = function(tag) {
		var list = document.getElementsByTagName(tag);
		for ( var i = 0; i < list.length; i++) {
			if (list[i].wasHidden) {
				list[i].style.visibility = "visible";
				list[i].wasHidden = null
			}
		}
	};
	var showInit = function(title, params, callback) {
		els.loading.style.display = "block";
		_pub.center(els.loading);
		_pub.reposition();
		if (!_pub.is_firefox) {
			var amount = 8
		} else {
			var amount = 10
		}
		for ( var i = 0; i < _pub.tags_to_hide.length; i++) {
			hideTags(_pub.tags_to_hide[i])
		}
		window.onscroll = _pub.reposition;
		els.footer.innerHTML = title || "&nbsp;";
		els.overlay.style.display = "block";
		els.overlay.style.backgroundImage = "url('" + _pub.base_url
				+ "images/bg.png')";
		_pub.fadeIn(els.overlay, amount, _pub.fade_in_speed, callback);
		_pub.fireEvent("show")
	};
	var drawCSS = function() {
		var core_styles = "#ibox {z-index:1000000;} #ibox_overlay {position:absolute;top:0;left:0;right:0;z-index:1000000;} #ibox_loading {position:absolute;z-index:1000001;} #ibox_wrapper {position:absolute;top:0;left:0;z-index:1000001;padding:25px 10px 10px 10px;} #ibox_content {z-index:1000002;overflow:auto;height:100%;position:relative;padding:2px;text-align:left;} #ibox_content object { display:block;} #ibox_content .ibox_image {width:100%;height:100%;margin:0;padding:0;border:0;display:block;} #ibox_footer_wrapper a {float:right;display:block;outline:0;margin:0;padding:0;} #ibox_footer_wrapper {text-align:left;position:absolute;top:5px;right:10px;left:10px;white-space:nowrap;overflow:hidden;}";
		var default_skin = "#ibox_footer_wrapper {font-weight:bold;}#ibox_footer_wrapper a {text-decoration:underline;color:darkblue;text-transform:lowercase;font-weight:normal;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;}#ibox_footer_wrapper {font-size:12px;font-family:Verdana, Arial, Helvetica, sans-serif;}#ibox_wrapper {border:1px solid #ccc;}#ibox_wrapper, #ibox_footer_wrapper a {background-color:#999;}#ibox_content {background-color:#fff;border:1px solid #666;}#ibox_loading {padding:50px; background:#000;color:#fff;font-size:16px;font-weight:bold;}";
		var head = document.getElementsByTagName("head")[0];
		var htmDiv = document.createElement("div");
		htmDiv.innerHTML = '<p>x</p><style type="text/css">' + default_skin
				+ "</style>";
		head.insertBefore(htmDiv.childNodes[1], head.firstChild);
		htmDiv.innerHTML = '<p>x</p><style type="text/css">' + core_styles
				+ "</style>";
		head.insertBefore(htmDiv.childNodes[1], head.firstChild)
	};
	var initialize = function() {
		drawCSS();
		var els = document.getElementsByTagName("a");
		for ( var i = 0; i < els.length; i++) {
			if (els[i].getAttribute(_pub.attribute_name)) {
				var t = els[i].getAttribute(_pub.attribute_name);
				if ((t.indexOf("ibox") != -1) || t.toLowerCase() == "ibox") {
					els[i].onclick = _pub.handleTag
				}
			}
		}
		create(document.body);
		_pub.http = _pub.createXMLHttpRequest()
	};
	_pub.addEvent(window, "keypress", function(e) {
		if (e.keyCode == (window.event ? 27 : e.DOM_VK_ESCAPE)) {
			iBox.hide()
		}
	});
	_pub.addEvent(window, "resize", _pub.reposition);
	_pub.addEvent(window, "load", initialize);
	var iBoxPlugin_Container = function() {
		var was_error = false;
		var original_wrapper = null;
		return {
			match : function(url) {
				return url.indexOf("#") != -1
			},
			unload : function() {
				if (was_error) {
					return
				}
				var elemSrc = _pub.html().firstChild;
				elemSrc.style.display = "none";
				original_wrapper.appendChild(elemSrc)
			},
			render : function(url, params) {
				was_error = false;
				var elemSrcId = url.substr(url.indexOf("#") + 1);
				var elemSrc = document.getElementById(elemSrcId);
				if (!elemSrc) {
					was_error = true;
					_pub
							.html(
									document
											.createTextNode("There was an error loading the document."),
									params)
				} else {
					original_wrapper = elemSrc.parentNode;
					elemSrc.style.display = "block";
					_pub.html(elemSrc, params)
				}
			}
		}
	}();
	_pub.plugins.register(iBoxPlugin_Container, true);
	var iBoxPlugin_Image = function() {
		var image_types = /\.jpg|\.jpeg|\.png|\.gif/gi;
		return {
			match : function(url) {
				return url.match(image_types)
			},
			render : function(url, params) {
				var img = document.createElement("img");
				img.onclick = _pub.hide;
				img.className = "ibox_image";
				img.style.cursor = "pointer";
				img.onload = function() {
					_pub.html(img, {
						height :img.height,
						width :img.width,
						constrain :true
					})
				};
				img.onerror = function() {
					_pub
							.html(
									document
											.createTextNode("There was an error loading the document."),
									params)
				};
				img.src = url
			}
		}
	}();
	_pub.plugins.register(iBoxPlugin_Image);
	var iBoxPlugin_YouTube = function() {
		var youtube_url = /(?:http:\/\/)?(?:www\d*\.)?(youtube\.(?:[a-z]+))\/(?:v\/|(?:watch(?:\.php)?)?\?(?:.+&)?v=)([^&]+).*/;
		return {
			match : function(url) {
				return url.match(youtube_url)
			},
			render : function(url, params) {
				var _match = url.match(youtube_url);
				var domain = _match[1];
				var id = _match[2];
				params.width = 425;
				params.height = 355;
				params.can_resize = false;
				var html = '<div><object width="425" height="355"><param name="movie" value="http://www.'
						+ domain
						+ "/v/"
						+ id
						+ '"/><param name="wmode" value="transparent"/><embed src="http://www.'
						+ domain
						+ "/v/"
						+ id
						+ '" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></div>';
				_pub.html(html, params)
			}
		}
	}();
	_pub.plugins.register(iBoxPlugin_YouTube);
	var iBoxPlugin_Document = function() {
		return {
			match : function(url) {
				return true
			},
			render : function(url, params) {
				_pub.http.open("get", url, true);
				_pub.http.onreadystatechange = function() {
					if (_pub.http.readyState == 4) {
						if (_pub.http.status == 200 || _pub.http.status == 0) {
							_pub.html(_pub.http.responseText, params)
						} else {
							_pub
									.html(
											document
													.createTextNode("There was an error loading the document."),
											params)
						}
					}
				};
				_pub.http.setRequestHeader("Content-Type",
						"application/x-www-form-urlencoded; charset=UTF-8");
				_pub.http.send(null)
			}
		}
	}();
	_pub.plugins.register(iBoxPlugin_Document);
	return _pub
}();

// konfigurace
iBox.setPath('/JS/');
