function clSlideshow() {
	var items = new Array();
	var act_img = null;


	this.Add = function(data) {
		var im = new Image();
		im.custSrc = (typeof data.src != 'undefined') ? data.src : null;
		im.custTitle = (typeof data.title != 'undefined') ? data.title : null;
		im.custImType = (typeof data.type != 'undefined') ? data.type : null;
		im.custLoaded = false;
		im.custNotify = null;
		im.custId = items.length;
		items[items.length] = im;
		if (im.custImType == 'p') im.custLoaded = true;
	}

	this.GetOrderedImage = function(command, callback) {
		var new_img;
		if (!this.ImageIsLoaded(act_img)) return false;
		switch (command) {
			case 1: new_img = 0; break;
			case 2: new_img = ((act_img - 1) >= 0) ? act_img-1 : items.length - 1; break;
			case 3: new_img = ((act_img + 1) < items.length) ? act_img+1 : 0; break;
			case 4: new_img = items.length - 1; break;
			default: return false; break;
		}
		if (new_img == act_img) return false;
		return new_img;
	}

	this.GetImage = function(nr) { if (nr < items.length) { act_img = nr; return  items[nr]; } else return false; }
	this.ImageIsLoaded = function(nr) { return ((nr < items.length) && (items[nr].custLoaded)) ? true : false; }

	this.Load = function(nr, notify) {
		if (nr < items.length) {
			if (typeof notify != 'undefined') act_img = nr;
			if ((items[nr].custLoaded) && (typeof notify != 'undefined')) {
				notify(nr);
				return false;
			} else {
				var loader = this;
				items[nr]['onload'] = function() { loader.evOnload(nr, notify); };
				items[nr].custNotify = notify;
				items[nr].src = items[nr].custSrc;
				return true;
			}
		}
		return false;
	}

	this.evOnload = function(nr) {
		items[nr].custLoaded = true;
		//if (nr+1 < items.length) this.Load(nr+1,null);
		items[nr]['onload'] = null;
		if (typeof items[nr].custNotify != 'undefined') items[nr].custNotify(nr);
		items[nr].custNotify = null;
	}
}


function clOverlay() {
	var initOK = false;
	var contWidth = 0;
	var contHeight = 0;
	var pHideSelect = null;
	var pOverlay = null;
	var pWindow = null;
	var pLoad = null;
	var pTitle = null;
	var pOvr_content = null;
	var pContent = null;
	var Slideshow = null;
	var apTimer = null;

	load_hr = null; // XMLHttpRequest

	var loader = this;

	AttachEvent(window,'load',function(){ loader.Init(); },false);
	AttachEvent(window,'unload',function(){ loader.Finalize(); },false);

	this.Init = function() {

		try {
			pHideSelect = document.createElement('iframe');
			pHideSelect.id = 'OVR_hideselect';
			pHideSelect.frameBorder=0;
			pOverlay = document.createElement('div');
			pOverlay.id = 'OVR_overlay';
			pWindow = document.createElement('div');
			pWindow.id = 'OVR_window';
			pWindow.innerHTML = "<table id='im_box' class='skin1'><tr><td><div class='title'><strong></strong><em></em><h3><a id='butClose' href='#' onclick='return !Overlay.OVRclose();'></a><span id='ovr_title'></span></h3></div><div class='content'><div id='ovr_content'></div></div><div class='footer'><strong></strong><em></em></div></td></tr></table>";
			pLoad = document.createElement('div');
			pLoad.id = 'OVR_load';
			pLoad.innerHTML = "&nbsp;";
			setOpacity(pHideSelect, 0);
			setOpacity(pOverlay, 80);

			var loader = this;
			AttachEvent(window,'resize',function(){loader.evOnresize();});
			AttachEvent(window,'scroll',function(){loader.evOnscroll();});
			pOverlay['onclick'] = function(){loader.evOnclick();};
			initOK = true;

		} catch(e) {
			initOK = false;
		}
	}

	this.Finalize = function() {
		if (typeof pOverlay != 'undefined')
			pOverlay['onclick'] = null;
	}


	var Show = function() {
		pWindow.style.zIndex = -1;
		pWindow.style.display = 'block';
		pWindow.style.left = '0px';
		pWindow.style.top = '0px';
		placeWindow();
		pWindow.style.zIndex = 101;
		pLoad.style.display = 'none';
		placeWindow();
		pWindow.style.display = 'block';
	}

	var Hide = function() {
		if (pHideSelect.style.display=='block') {
			var closeBut = document.getElementById('butClose');
			if (closeBut) closeBut.blur();
			dropChildNodes(pContent);

			pOvr_content.style.width = "";
			pWindow.style.display = 'none';
			pHideSelect.style.display = 'none';
			pLoad.style.display = 'none';
			pOverlay.style.display = 'none';

			document.body.removeChild(pWindow);
			document.body.removeChild(pLoad);
			document.body.removeChild(pOverlay);
			document.body.removeChild(pHideSelect);
		}
		if (apTimer != null) {
			clearTimeout(apTimer);
			apTimer = null;
		}
	}

	this.OVRshow = function(param){
		if (!initOK) return true;
		try {
			if (load_hr && (load_hr.readyState != 0)) RPCcancel(load_hr);
			load_hr = null;
			load_hr = RPCinit();
			if (!load_hr) return false;

			var loader=this;
			load_hr.open('POST', baseURL+'/rpc/overlay_data.php', true);
			load_hr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			load_hr.onreadystatechange = function() {
				loader.loadGetData(loader);
			}
			load_hr.send(param);

			document.body.appendChild(pHideSelect);
			document.body.appendChild(pOverlay);
			document.body.appendChild(pLoad);
			document.body.appendChild(pWindow);
			pTitle = document.getElementById('ovr_title');
			pOvr_content = document.getElementById('ovr_content');
			pContent = pOvr_content;
			overlayResize();
			pHideSelect.style.display = 'block';
			pOverlay.style.display = 'block';
			placeLoad();
		} catch(e) {
			return false;
		}
		return true;
	}

	this.OVRclose = function(){
		Hide();
		return true;
	}

	this.loadGetData = function() {
		var hr = load_hr;
		if (hr.readyState == 4) {
			try {
				if (hr.status && (hr.status == 200) && hr.responseText) {
					var data = JSON.parse(hr.responseText);
					var first;

					if (typeof data.title != 'undefined')
					pTitle.innerHTML = (typeof data.title != 'undefined') ? data.title : '';
					pOvr_content.innerHTML = (typeof data.content != 'undefined') ? data.content : '';
					pOvr_content.style.width = (typeof data.width != 'undefined') ? data.width+'px' : '';
					pOvr_content.style.height = (typeof data.height != 'undefined') ? data.height+'px' : '';

					Slideshow = null;
					pContent = (typeof data.images_container != 'undefined') ? document.getElementById(data.images_container) : pOvr_content;
					pWindow.firstChild.className = (typeof data.skin != 'undefined') ? "skin"+data.skin : "skin1";
					if (typeof data.images != 'undefined') {
						var img;
						Slideshow = new clSlideshow();
						for (img in data.images)
							if (isFinite(img)) Slideshow.Add(data.images[img]);
						var loader = this;
						if (typeof data.loadfirst != 'undefined') first = data.loadfirst;
						else first = 0;
						Slideshow.Load(first, function(){loader.loadImageLoaded(first);});
					} else {
						Show();
						if (typeof data.script != 'undefined')
							eval(data.script);
					}
				} else {
					alert('error1');
				}
			} catch(e) {
				alert(e);
			}
		}
	}

	this.loadImageLoaded = function(nr) {
		dropChildNodes(pContent);
		var im = Slideshow.GetImage(nr);
		if (typeof im.custTitle != 'undefined') pTitle.innerHTML = im.custTitle;
		if ((typeof im.custImType != 'undefined') && (im.custImType == 'p')) {
			var iframe = document.createElement("iframe");
			iframe.src = im.custSrc;
			iframe.width = '420px';
			iframe.height = '320px';
			iframe.frameBorder = 'no';
			iframe.scrolling = 'no';
			pContent.appendChild(iframe);
		} else pContent.appendChild(im);
		if (apTimer != null) {
			clearTimeout(apTimer);
			apTimer = setTimeout('Overlay.autoPlay(1)', 5000);
		}
		Show();
	}

	this.autoPlay = function(command, trg) {
		if (typeof trg != 'undefined') trg.blur();
		if (command == 1) {
			if ((typeof trg != 'undefined') && (trg.className.search('active') < 0))
				trg.className += ' active';
			if ((apTimer != null) && (typeof trg == 'undefined'))
				this.loadImageControl(3);
			if (apTimer == null)
				apTimer = setTimeout('Overlay.autoPlay(1)', 5000);
		} else if (command == 2) {
			if ((typeof trg != 'undefined') && (trg.previousSibling.className.search('active') >= 0))
				trg.previousSibling.className = trg.previousSibling.className.replace(' active', '');
			if (apTimer != null) {
				clearTimeout(apTimer);
				apTimer = null;
			}
		}

		return true;
	}

	this.loadImageControl = function(command, trg) {
		if (typeof trg != 'undefined') trg.blur();
		var loader = this;
		var im_nr = Slideshow.GetOrderedImage(command);
		if ((typeof im_nr == 'boolean')  && (im_nr == false))
			return true;

		if (!Slideshow.ImageIsLoaded(im_nr)) {
			placeLoad();
			pLoad.style.display = 'block';
		}
		Slideshow.Load(im_nr, function(){ loader.loadImageLoaded(im_nr);});
		return true;
	}

	this.loadPrevImage = function() {
		if (Slideshow.PrevIsLoaded()) {
			dropChildNodes(pContent);
			var im = Slideshow.GetPrevImage();
			if (typeof im.custTitle != 'undefined') pTitle.innerHTML = im.custTitle;
			pContent.appendChild(im);
		}
		return true;
	}

	var dropChildNodes = function(obj) {
		while (obj.childNodes && (obj.childNodes.length > 0))
			obj.removeChild(obj.childNodes[0]);
	}

	var overlayResize = function() {
		var pagesize = getPageSize();
		var arrayPageScroll = getPageScrollTop();

    	pOverlay.style.height = (pagesize[1])+'px'; //yScroll+'px';
    	pOverlay.style.width = (pagesize[0])+'px'; //xScroll+'px';
    	pHideSelect.style.height = (pagesize[1])+'px'; //yScroll+'px';
    	pHideSelect.style.width = (pagesize[0])+'px'; //xScroll+'px';
    	pOverlay.style.left = arrayPageScroll[0]+'px';
    	pOverlay.style.top = arrayPageScroll[1]+'px';
    	pHideSelect.style.left = arrayPageScroll[0]+'px';
    	pHideSelect.style.top = arrayPageScroll[1]+'px';
	}

	var placeWindow = function() {
		var pagesize = getPageSize();
		var arrayPageScroll = getPageScrollTop();
		var w = pWindow.firstChild.tBodies[0].offsetWidth;
		var h = pWindow.firstChild.tBodies[0].offsetHeight;
		pWindow.style.width = w + 'px';
		pWindow.style.height = h + 'px';
		pWindow.style.left = (arrayPageScroll[0] + (pagesize[0] - w)/2)+"px";
		pWindow.style.top = (arrayPageScroll[1] + (pagesize[1] - h)/2)+"px";
	}

	var placeLoad = function() {
		var pagesize = getPageSize();
		var arrayPageScroll = getPageScrollTop();
		pLoad.style.left = (arrayPageScroll[0] + (pagesize[0] - 100)/2)+"px";
		pLoad.style.top = (arrayPageScroll[1] + ((pagesize[1]-100)/2))+"px";
		pLoad.style.display = 'block';
	}

	this.evOnclick = function() {
		Hide();
	}

	this.evOnresize = function() {
		if (typeof(pOldOnresize) == 'function') pOldOnresize();
		recalcPosition();
	}

	this.evOnscroll = function() {
		if (typeof(pOldOnscroll) == 'function')	pOldOnscroll();
		recalcPosition();
	}

	var recalcPosition = function() {
		if (initOK && (pWindow.style.display == 'block')) {
			overlayResize();
			placeWindow();
		}
	}
}

Overlay = new clOverlay();
