//****************Objekt preview****************
/*
zobrazuje nahledy u zakazek, ochrana proti zbytecnemu nacitani, primitivni cache
	
	Parametry konstruktoru:
		name_obj				- nazev objektu, pod kterym je spusten
		id_previewDiv			- id elementu
		text_loading			- text, ktery se ma zobrazit, kdyz se nacitaji nahledy
		delay					- doba v ms, kterou se ma pockat, nez se zobrazi nahledy
		position_horizontal		- kam se maji vzhledem ke kurzoru mysi horizontalne zobrazovat nahledy
		position_vertical		- kam se maji vzhledem ke kurzoru mysi vertikalne zobrazovat nahledy
		space_horizontal		- horizontalni mezera mezi nahledy a kurzorem mysi
		space_vertical			- vertikalni mezera mezi nahledy a kurzorem mysi
		
	Metody:
	
	Verejne:
		plan					- naplanuje spusteni zobrazeni nahledu, podle nastavene prodlevy
								  parametry:
									obj		- odkaz na objekt, ktery spustil tuto metodu
									images	- pole s url nahledu
				
	Privatni:
		register_method			- zaregistruje metody
		register_event			- zaregistruje udalosti
		get_idAnchor			- vrati id odkazu, pokud neexistuje vytvori ho
		get_idImage				- vrati id obrazku s danou adresou, pripadne ho nacte
		position_previewElement	- nastavi pozici elemnentu s nahledy
		show					- nahraje obrazky a zobrazi div
		hide					- skryje div a nastavi promenne, aby se ukoncilo soucasne stahovani
		
OKi98
*/
function preview(name_obj,id_previewElement,text_loading,delay,position_horizontal,position_vertical,space_horizontal,space_vertical) {
	this.error=false;
	this.path=new Array();
	if (!(this.path['previewElement']=document.getElementById(id_previewElement))) {
//		alert('nebyl nalezen náhledovy element s id='+id_previewElement+' náhledy nebudou fungovat');
		this.error=true;
		}
	this.register_method=preview_register_method;
	this.register_method();
	this.userAgent=get_userAgent();
	if (this.userAgent=='na') {
//		alert('používáte neznámý typ prohlížeče, náhledy se nebudou zobrazovat');
		this.error=true;
		}
	if (!this.error) {
		this.delay=delay;
		this.timer='na';
		this.idAnchor=new Array();
		this.idAnchor['last']=0;
		this.idAnchor['processing']='na';
		this.imageCache=new Array();
		this.names=new Array();
		this.names['obj']=name_obj;
		this.texts=new Array();
		this.texts['loading']=text_loading;
		this.position=new Array();
		this.position['horizontal']=position_horizontal.toLowerCase();
		this.position['vertical']=position_vertical.toLowerCase();
		this.space=new Array();
		this.space['horizontal']=space_horizontal;
		this.space['vertical']=space_vertical;
		this.register_event();
		}
	}

function preview_register_method() {
	this.register_event=preview_register_event;
	this.get_idAnchor=preview_get_idAnchor;
	this.get_idImage=preview_get_idImage;
	this.position_previewElement=preview_position_previewElement;
	this.plan=preview_plan;
	this.show=preview_show;
	this.hide=preview_hide;
	}

function preview_register_event() {
	switch (this.userAgent) {
		case 'ie':
			eval('document.attachEvent(\'onmousemove\',function anonymous(event) {'+this.names['obj']+'.position_previewElement(event);})');
			
		break;
		case 'ns':
			eval('document.addEventListener(\'mousemove\',function anonymous(event) {'+this.names['obj']+'.position_previewElement(event);},false)');
		break;
		}
	}

function preview_get_idAnchor(obj,images) {
	if (typeof(obj.idAnchor)=='undefined') {
		this.idAnchor['last']++;
		obj.idAnchor=this.idAnchor['last'];
		this.idAnchor[''+obj.idAnchor+'']=new Array();
		this.idAnchor[''+obj.idAnchor+'']['images']=images;
		eval('obj.onmouseout=function anonymous() {'+this.names['obj']+'.hide();}');
		}
	return obj.idAnchor;
	}

function preview_position_previewElement(event) {
	var x,y,scrolled=new Array(),width,height;
	switch (this.userAgent) {
		case 'ie':
//			uvazuji pouze ie >=5
			if (document.documentElement.clientWidth!=0) {
//				standard compliant mod
				width=document.documentElement.clientWidth;
				height=document.documentElement.clientHeight;
				scrolled['x']=document.documentElement.scrollLeft;
				scrolled['y']=document.documentElement.scrollTop;
				}
				else {
//					quirks mod
					width=document.body.clientWidth;
					height=document.body.clientHeight;
					scrolled['x']=document.body.scrollLeft;
					scrolled['y']=document.body.scrollTop;
					}
		break;
		case 'ns':
			width=window.innerWidth;
			height=window.innerHeight;
			scrolled['x']=window.pageXOffset;
			scrolled['y']=window.pageYOffset;
			window.status=width+'x'+height;
		break;
		}
	if (width>this.path['previewElement'].offsetWidth) {
		x=(this.position['horizontal']=='left') ? event.clientX-this.space['horizontal']-this.path['previewElement'].offsetWidth : event.clientX+this.space['horizontal'];
		if ((x+this.path['previewElement'].offsetWidth)>width) x=width-this.path['previewElement'].offsetWidth;
			else if (x<0) x=0;
		}
		else x=event.clientX+this.space['horizontal'];
	if (height>this.path['previewElement'].offsetHeight) {
		y=(this.position['vertical']=='top') ? event.clientY-this.space['vertical']-this.path['previewElement'].offsetHeight : event.clientY+this.space['vertical'];
		if ((y+this.path['previewElement'].offsetHeight)>height) y=height-this.path['previewElement'].offsetHeight;
			else if (y<0) y=0;
		}
		else y=event.clientY+this.space['vertical'];
	this.path['previewElement'].style.left=(x+scrolled['x'])+'px';
	this.path['previewElement'].style.top=(y+scrolled['y'])+'px';
	}

function preview_get_idImage(url) {
	var i,idImage='na';
	while ((i<this.imageCache.length) && (idImage=='na')) {
		if (this.imageCache[i].src==url) idImage=i;
			else i++;
		}
	if (idImage=='na') {
		idImage=this.imageCache.length;
		this.imageCache[idImage]=new Image();
		this.imageCache[idImage].src=url;
		}
	return idImage;
	}
	
function preview_plan(obj,images) {
	if (!this.error) {
		var idAnchor=this.get_idAnchor(obj,images);
		if (this.idAnchor['processing']!=idAnchor) {
			this.idAnchor['processing']=idAnchor;
			if (this.delay>0) {
				if (this.timer!='na') clearTimeout(this.timer);
				this.timer=setTimeout(this.names['obj']+'.show('+idAnchor+')',this.delay);
				}
				else this.show(idAnchor);
			}
		}
	}

function preview_show(idAnchor) {
	if (this.idAnchor['processing']==idAnchor) {
		var i,newElement=new Array();
		while (this.path['previewElement'].hasChildNodes()) this.path['previewElement'].removeChild(this.path['previewElement'].lastChild);
		newElement['div']=document.createElement('div');
		newElement['div'].innerHTML=this.texts['loading'];
		this.path['previewElement'].appendChild(newElement['div']);
		show_block_element(this.path['previewElement']);
		for (i=0;i<this.idAnchor[''+idAnchor+'']['images'].length;i++) {
			idImage=this.get_idImage(this.idAnchor[''+idAnchor+'']['images'][i]);
			if (this.idAnchor['processing']==idAnchor) this.path['previewElement'].appendChild(this.imageCache[idImage]);
				else break;
			}
		}
	if (this.idAnchor['processing']==idAnchor) this.path['previewElement'].childNodes[0].style.display='none';
	}

function preview_hide() {
	this.idAnchor['processing']='na';
	this.path['previewElement'].style.display='none';
	}

/*
all scripts on www.agentura-acco.cz were created by OKi98, all are tested for IE and Mozilla. I dont care about other
browsers.
Scripts can be freely used but keep this note intact.
*/
