// Copyright 2009 Marcin Jabłoński
// Wszelkie prawa zastrzeżone

var kontener;
var tresc;
var ula;
var dra;
var poziomo;
var skok;
var tryb;
var pozycja;
var predkosc;
var kierunek;
var przewijaj = false;
var predkoscPocz;

var downrightAktyw = false;
var upleftAktyw = false;
var wymiarKontener;
var wymiarTresc;
var wymiarUla;
var wymiarDra;

var dranorm;
var ulanorm;
var dradis;
var uladis;
var drapush;
var ulapush;

function galeria(kont, zawart, poziom, sko, pred, ul, dr, uln, drn, ulp, drp)
{
	kontener = document.getElementById(kont);
	tresc = document.getElementById(zawart);
	ula = document.getElementById(ul);
	dra = document.getElementById(dr);
	poziomo = poziom;
	skok = sko;
	tryb = 1;
	predkoscPocz=pred;
	tresc.style.position = "relative";
	kontener.style.position ="relative";
	kontener.style.overflow ="hidden";
	
	downrightAktyw = true;
	upleftAktyw = false;
	wymiarKontener;
	wymiarTresc;
	
	dradis = new Image(); dradis.src = dra.src;
	uladis = new Image(); uladis.src = ula.src;
	
	if ((drn!=null)&&(uln!=null))
	{
		dranorm = new Image(); dranorm.src = drn;
		ulanorm = new Image(); ulanorm.src = uln;
	    tryb = 2;
		if ((drp!=null)&&(ulp!=null))
		{
			drapush = new Image(); drapush.src = drp;
			ulapush = new Image(); ulapush.src = ulp;
			tryb=3;
		}
	}

	if (poziomo)
	{
		wymiarKontener = kontener.offsetWidth;
		wymiarTresc = tresc.offsetWidth;
		tresc.style.left="0px";
		wymiarUla = ula.offsetWidth;
		wymiarDra = dra.offsetWidth;
	}
	else
	{
		wymiarKontener = kontener.offsetHeight;
		wymiarTresc = tresc.offsetHeight;
		tresc.style.top="0px";
		wymiarUla = ula.offsetHeight;
		wymiarDra = dra.offsetHeight;
	}

	if (skok==0)
	{
		dra.onmousemove = przewinStart;
		if (dra.captureEvents) dra.captureEvents(Event.MOUSEMOVE);
		ula.onmousemove = przewinStart;
		if (ula.captureEvents) ula.captureEvents(Event.MOUSEMOVE);
		dra.onmouseout = przewinStop;
		ula.onmouseout = przewinStop;

	}
	else
	{
		ula.onmousedown = przesowKlik;
		ula.onmouseup = przesowStart;
		dra.onmousedown = przesowKlik;
		dra.onmouseup = przesowStart;
	}
	
	if (0>=wymiarTresc-wymiarKontener)
	{
		dra.src = dradis.src;
		downrightAktyw=false;
	}
	else if (tryb>1) dra.src = dranorm.src;
}


function przewinStart(e)
{
	var aktPoz;		
	if (poziomo) 
	{
		aktPoz = parseInt(tresc.style.left);
	}
	else aktPoz = parseInt(tresc.style.top);
		
	if (document.all) e = event;
	
	var pos=0;
	var obj=this;

	if (this==dra)
	{
		if (aktPoz>(-1*(wymiarTresc-wymiarKontener)))
		{
			if (obj.offsetParent)
			{
				do 
				{
					if (poziomo) pos += obj.offsetLeft;
					else pos += obj.offsetTop;
				}
				while (obj = obj.offsetParent);
			}
			var ofset;
			var krok = Math.ceil(wymiarDra/predkoscPocz);
			
			if (poziomo) ofset = Math.floor(e.clientX - pos);
			else ofset = Math.floor(e.clientY - pos);
			
			ofset++;
			kierunek=-1;
			predkosc = Math.ceil(ofset/krok);

			if (tryb>1) ula.src=ulanorm.src;
			if (tryb==3) dra.src=drapush.src;

			if (przewijaj==false)
			{
				przewijaj=true;
				przewin();
			}
			
		}
	}
	else
	{	
		if (aktPoz<0)
		{
			if (obj.offsetParent)
			{
				do 
				{
					if (poziomo) pos += obj.offsetLeft;
					else pos += obj.offsetTop;
				}
				while (obj = obj.offsetParent);
			}
			
			var ofset;

			var krok = Math.ceil(wymiarDra/predkoscPocz);
			
			if (poziomo) ofset = Math.floor(wymiarUla - (e.clientX - pos));
			else ofset = Math.floor(wymiarUla - (e.clientY - pos));
			
			ofset++;
			kierunek=1;
			predkosc = Math.ceil(ofset/krok);
			if (tryb>1) dra.src=dranorm.src;
			if (tryb==3) ula.src=ulapush.src;
										
			if (przewijaj==false)
			{
				przewijaj=true;
				przewin();
			}
		}
	}
}


function przewinStop()
{
	kierunek=0;
	predkosc=0;
	przewijaj=false;
	if (upleftAktyw)
	{
		if (tryb>1) ula.src=ulanorm.src;
	}
	else ula.src=uladis.src;
	if (downrightAktyw)
	{
		if (tryb>1) dra.src=dranorm.src;
	}
	else dra.src=dradis.src;
}

function przewin()
{
    if (przewijaj)
    {
        var aktPoz;
		var nastPoz;
		if (poziomo) 
		{
			aktPoz = parseInt(tresc.style.left);
			nastPoz = parseInt(tresc.style.left)+(kierunek*predkosc);
			if ((nastPoz>=-2*predkoscPocz)||(nastPoz<=(-1*(wymiarTresc-wymiarKontener))+2*predkoscPocz))
			{
				predkosc=Math.ceil(predkosc/2);
			}
			tresc.style.left = aktPoz+(kierunek*predkosc)+"px";
			nastPoz = parseInt(tresc.style.left)+(kierunek*predkosc);
		}
		else
		{
			aktPoz = parseInt(tresc.style.top);
			nastPoz = parseInt(tresc.style.top)+(kierunek*predkosc);
			if ((nastPoz>=-2*predkoscPocz)||(nastPoz<=(-1*(wymiarTresc-wymiarKontener))+2*predkoscPocz))
			{
				predkosc=Math.ceil(predkosc/2);
			}
			tresc.style.top = aktPoz+(kierunek*predkosc)+"px";
			nastPoz = parseInt(tresc.style.top)+(kierunek*predkosc);
		}
		if (nastPoz>0)
		{
			ula.src=uladis.src;
			upleftAktyw=false;
			przewijaj=false;
		}
		else if (nastPoz<(-1*(wymiarTresc-wymiarKontener)))
		{
			dra.src=dradis.src;
			downrightAktyw=false;
			przewijaj=false;
		}
		else
		{
			setTimeout('przewin()',20);
			upleftAktyw=true;
			downrightAktyw=true;
		}
				
    }
}


function przesowKlik()
{
	if (!przewijaj)
	{
		if (tryb==3)
		{
			if (this==dra)
			{
				if (downrightAktyw==true) dra.src=drapush.src;
			}
			else if (upleftAktyw==true) ula.src=ulapush.src;
		}
	}
}

function przesowStart()
{
	if (!przewijaj)
		{
		if (this==dra)
		{
			if (downrightAktyw==true)
			{
				if (tryb>1) dra.src=dranorm.src;
				if (!upleftAktyw)
				{
					upleftAktyw=true;
					if (tryb>1) ula.src = ulanorm.src;
				}
				
				przewijaj=true;
				pozycja=0;
				predkosc=predkoscPocz;
				kierunek=-1;
		
				var aktPoz;
				if (poziomo) 
				{
					aktPoz = parseInt(tresc.style.left);
				}
				else 
				{
					aktPoz = parseInt(tresc.style.top);
				}

				if (0>=(wymiarTresc+aktPoz-wymiarKontener-skok))
				{
					dra.src = dradis.src;
					downrightAktyw=false;
				}
				przesuwaj();
			}
		}
		else if (upleftAktyw) 
		{
			if (tryb>1) ula.src=ulanorm.src;
			if (!downrightAktyw)
			{
				downrightAktyw=true;
				if (tryb>1) dra.src = dranorm.src;
			}
			
			przewijaj=true;
			pozycja=0;
			predkosc=predkoscPocz;
			kierunek=1;

			var aktPoz;
			if (poziomo) 
			{
				aktPoz = parseInt(tresc.style.left);
			}
			else aktPoz = parseInt(tresc.style.top);

			if (0<=aktPoz+skok)
			{
				ula.src = uladis.src;
				upleftAktyw=false;
			}
			przesuwaj();
		}
	}
}

function przesuwaj()
{
    if (przewijaj)
	{
					
		var aktPoz;		
		if (poziomo) 
		{
			aktPoz = parseInt(tresc.style.left);
		}
		else aktPoz = parseInt(tresc.style.top);
		
		if (predkosc>0)
		{
			if (predkosc>1) predkosc-=1;
		}
		
		if (pozycja+predkosc>=skok)
		{
			predkosc=1;
		}
		
		if (pozycja<skok)
		{
			if (poziomo) 
			{
				tresc.style.left = aktPoz+(predkosc*kierunek)+"px";
			}
			else
			{
				tresc.style.top = aktPoz+(predkosc*kierunek)+"px";
			}
			pozycja+=predkosc;
			setTimeout('przesuwaj()',20);
		}
		else przewijaj=false;
	}
}
