// NaviSovitin 2.0.2, 25.2.1999; Yleinen toiminnekoodi esim. kuvanvaihtoa varten.
// Huom! Tämä versio ei sovellu Netscape Navigator 3:lle oliomallin puutteiden
// takia. [2.0.2-versio sisältää tuen .php3/.asp/.mv -päätteille]
//
// Copyright (C) 1998 Ambient Factor Osuuskunta, Hämeenlinna, Finland.
// Tämä koodi on vapaata ohjelmistoa (free software); voit jakaa tai muuttaa sitä
// GNU Library General Public License -käyttöoikeussopimuksen mukaisesti,
// sellaisena kuin sen on Free Software Foundation julkaissut, soveltamalla
// halutessasi käyttöoikeussopimuksen versiota kaksi (2) tai uudempaa.
//
// Tämä koodi on jaossa siinä toivossa että se osoittautuisi käyttökelpoiseksi,
// mutta ilman takuuta sen käyttökelpoisuudesta tai soveltuvuudesta johonkin
// tarkoitukseen.
//
// GNU Library General Public License on luettavissa Internetistä osoitteessa:
// http://www.gnu.org/copyleft/lgpl.html
//
// tai vaihtoehtoisesti voit tilata sen osoitteesta:
//
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
// Boston, MA  02111-1307, USA.
//

// luokan rakentaja
function NaviSovitin(doc, imgprefiksi, prefiksi, suffiksi_a, suffiksi_b)
{
	this.document = doc;
	this.suffiksi_a = suffiksi_a ? suffiksi_a : "-a.gif";
	this.suffiksi_b = suffiksi_b ? suffiksi_b : "-b.gif";
	this.prefiksi = prefiksi ? prefiksi : "pics/n-";
	this.imgprefiksi = imgprefiksi ? imgprefiksi : "n_";
	this.vaihtolinkit = Object();
}

// metodit
function NaviSovitin_kopioi(navisovitin)
{
	for (i in navisovitin)
	{
		this[i] = navisovitin[i];
	}
}

function NaviSovitin_paljasNimi(l, hakemistoja)
{
	var s = l.href + "";
	var rx = new RegExp('#_' + this.imgprefiksi + '(.*)$');
	var m = s.match(rx);
   	
	if (m)
		return m[1];
	else if (hakemistoja == 1)
	{
		var m = s.match(
			new RegExp('[\/](f-|na-)?([-a-zA-Z0-9]+)[\/]([-a-zA-Z0-9]+)([\/]index)?\.(html?|pl|php3?|asp|mv)$')
			);
		return m ? m[2] + '_' + m[3]: null;
	}
	else
	{
		var m = s.match(
			new RegExp('[\/](f-|na-)?([-a-zA-Z0-9]+)([\/]index)?\.(html?|pl|php3?|asp|mv)$')
			);
		return m ? m[2] : null;
	}
}

function NaviSovitin_perusNimi(s1, s2)
{
	var rv = s1.substring(0, s1.lastIndexOf(s2));
	if (this.DEBUG && this.DEBUG.perusNimi)
		alert('perusNimi: (' + rv + ')');

	return rv;
}

function NaviSovitin_onmouseover()
{
   	if (this.img && this.perusnimi)
   	{
   		this.img.src = this.img_b.src;
   		if (this.DEBUG && this.DEBUG.onmouseover)
   			alert('onmouseover: src on (' + this.img.src + ')');
   	}
   	return true;
}

function NaviSovitin_onmouseout()
{
   	if (this.img && this.perusnimi)
   		this.img.src = this.alkup_src;
   	return true;
}

new NaviSovitin();
NaviSovitin.prototype.onmouseover = NaviSovitin_onmouseover;
NaviSovitin.prototype.onmouseout = NaviSovitin_onmouseout;
NaviSovitin.prototype.onclick = new Function();
NaviSovitin.prototype.paljasNimi = NaviSovitin_paljasNimi;
NaviSovitin.prototype.perusNimi = NaviSovitin_perusNimi;
NaviSovitin.prototype.kopioi = NaviSovitin_kopioi;

// apuluokka, joka rekisteröidään joka linkille, jolle löytyy vastaava kuvapaikka

function Navi(navisovitin, l, paljasnimi)
{
	this.kopioi(navisovitin);
	this.linkki = l;
	if (paljasnimi && this.alusta(paljasnimi))
		return this;
	else if (this.alusta(this.paljasNimi(l)) ||
			this.alusta(this.paljasNimi(l, 1)))
		return this;
	else
		return new Object();
}

function Navi_alusta(paljasnimi)
{
   	var imgs = this.document.images;
   	
		if (imgs[this.imgprefiksi + paljasnimi])
		{
			this.img = imgs[this.imgprefiksi + paljasnimi];
			this.alkup_src = this.img.src;
	 		this.paljasnimi = paljasnimi;
			this.perusnimi = this.perusNimi(this.img.src, this.suffiksi_a);
			
			this.img_b = new Image();
			if (this.perusnimi)
				this.img_b.src = this.perusnimi + this.suffiksi_b;
			return true;
		}
		else
			return false;
}

Navi.prototype = new NaviSovitin();
Navi.prototype.alusta = Navi_alusta;

function Navi__onmouseover()
{
	return this._navi.onmouseover(this)
}

function Navi__onmouseout()
{
	return this._navi.onmouseout(this)
}

function Navi__onclick()
{
	return this._navi.onclick(this)
}

// apufunktio, joka rekisteröi sovittimen jokaiselle linkille

function RekisteroiNavi(navisovitin)
{
	if (self.Image)
	{
		var links = navisovitin.document.links;
		
		for (var i = 0, l = links[0];
			i < links.length;
			i++, l = links[i])
		{
			if (l._navi)
				continue;

			var navi = new Navi(navisovitin, l);
			if (navi.constructor == Object)
				continue;

			l._navi = navi;
			if (!l.onmouseover)
				l.onmouseover = Navi__onmouseover;
			if (!l.onmouseout)
				l.onmouseout = Navi__onmouseout;
			if (!l.onclick)
				l.onclick = Navi__onclick;
			l._navi.valmis = true;
		}
	}
}

