// ImageSwitcher 2.7 by tvst from varal.org
// Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
var IS =
{
all : new Array(),
active : new Array(),
loadingImage : new Image(),
makeViewports : function()
{
var c = window.ISConf;
var order = (c && c.order)? c.order : new Array('numbers', 'prevleft', 'prevright', 'viewport');
var tt = (c && c.tooltip)? c.tooltip : false;
var lt = (c && c.listType)? c.listType.toLowerCase() : 'numbers';
var th = (c && lt=='thumbnails');
var ths = (th && c.thumbnailSuffix)? c.thumbnailSuffix : '';
var thw = (th && c.thumbnailWidth)? c.thumbnailWidth : 0;
var thh = (th && c.thumbnailHeight)? c.thumbnailHeight : 0;
var countFrom = (c && c.countFrom)? c.countFrom : 0;
var pt = (c && c.prevText)? c.prevText : '<';
var nt = (c && c.nextText)? c.nextText : '>';
IS.loadingImage.src = (c && c.loadingImgSrc) ? c.loadingImgSrc : '_img/loading.gif';
var all = IS.all;
var a = document.getElementsByTagName('*');
for (i = 0; i < a.length; i++)
{
if (a[i].className == 'imgsw')
{
a[i].className = 'imgsw_toplevel';
var b = a[i].getElementsByTagName('*');
var x = all.length;
var y = 0;
var e = (c && c.elementsPerPage) ? c.elementsPerPage : 1;
a[i].id = 'imgsw'+x;
all[x] = new Array();
var v, l, sp;
var needsTh = true;
var listdiv = document.createElement('div');
listdiv.className = 'imgsw_list_' + lt;
// specify which image is active (image 0)
IS.active[x] = new Array();
IS.active[x][0] = x;
IS.active[x][1] = 'imgsw'+x+'_link0';
// go through all children
while (b.length > 0)
{
var isImg = b[0].tagName == 'IMG';
b[0].origTitle = (b[0].title)? b[0].title : false;
if (tt) b[0].title = tt;
if (isImg)
{
// save data about the image
b[0].id = 'imgsw'+x+'_img'+y;
b[0].realSrc = b[0].src;
if (c && !c.usePreloader) b[0].src = '';
}
// if this is the first image in its group, make a link
if (y % e == 0 || (th && isImg && needsTh))
{
// create the number link
var j = Math.floor(y / e);
//if (th)
switch (lt)
{
case 'thumbnails':
if (isImg)
{
var src = b[0].realSrc;
src = src.substr(0, src.lastIndexOf('.')) + ths + src.substr(src.lastIndexOf('.'));
l = IS.imgLink(src, thw, thh, b[0].title, x, j, true);
needsTh = false;
} else needsTh = true;
break;
case 'titles':
if (b[0].origTitle) {l = IS.textLink(b[0].origTitle, null, x, j, true); break;}
case 'filenames':
if (isImg) {l = IS.textLink(b[0].src.substring(b[0].src.lastIndexOf('/')+1), null, x, j, true); break;}
default:
l = IS.textLink(j+countFrom, null, x, j, true);
}
if (y == 0) l.className += ' active';
listdiv.appendChild(l);
}
//b[0].style.display = "none";
all[x][y] = b[0];
y++;
a[i].removeChild(b[0]);
}
// make prev/next links
var prevleftdiv = document.createElement('div');
prevleftdiv.className = 'imgsw_prevleft';
prevleftdiv.appendChild(IS.textLink(pt, 'Previous Image', x, -2, null, 'imgsw_prev'));
var prevrightdiv = document.createElement('div');
prevrightdiv.className = 'imgsw_prevright';
prevrightdiv.appendChild(IS.textLink(nt, 'Next Image', x, -1, null, 'imgsw_next'));
// make viewport
var viewportdiv = document.createElement('div');
viewportdiv.className = 'imgsw_viewport';
viewportdiv.id = 'imgsw'+x+'_viewport';
// make title
var titlediv = document.createElement('div');
titlediv.className = 'imgsw_title';
titlediv.id = 'imgsw'+x+'_title';
// write all divs to the DOM tree, in the correct order
for (var j = 0; j < order.length; j++) a[i].appendChild(eval(order[j]+'div'));
IS.doTheSwitch(x, 0);
}
}
},
nodeLink : function (node, tt, x, y, id, cl)
{
var l = document.createElement('a');
l.title = tt;
l.href = 'javascript:IS.doTheSwitch('+x+', '+y+');';
if (id) l.id = 'imgsw'+x+'_link'+y;
if (cl) l.className = cl;
sp = document.createElement('span');
sp.appendChild(node);
l.appendChild(sp);
return l;
},
textLink : function (txt, tt, x, y, id, cl)
{
return IS.nodeLink(document.createTextNode(txt), tt, x, y, id, cl);
},
imgLink : function (src, w, h, tt, x, y, id, cl)
{
var im = document.createElement('img');
im.src = src;
im.id = 'imgsw'+x+'_link'+y+'_thumb';
if (w) im.style.width = w;
if (h) im.style.height = h;
return IS.nodeLink(im, tt, x, y, id, cl);
},
doTheSwitch : function (x, y)
{
var all = IS.all;
var c = window.ISConf;
var e = (c && c.elementsPerPage) ? c.elementsPerPage : 1;
var n = !c.order || c.order.toString().indexOf('list') != -1;
var y0 = IS.active[x][0];
var id = IS.active[x][1];
if (y == -1) y = y0+1;
if (y == -2) y = y0-1;
if (y >= all[x].length / e) y = 0;
if (y < 0) y = Math.ceil(all[x].length / e)-1;
// title
var el = IS.all[x][e*y];
var titlediv = document.getElementById('imgsw'+x+'_title');
if (titlediv) titlediv.innerHTML = (el.origTitle)? el.origTitle : el.src? el.src.substring(el.src.lastIndexOf('/')+1) : '';
// links
if (!document.getElementById(id)) return;
if (n) document.getElementById(id).className = '';
IS.active[x][0] = y;
id = IS.active[x][1] = 'imgsw'+x+'_link'+y;
if (!document.getElementById(id)) return;
if (n) document.getElementById(id).className = 'active';
var v = document.getElementById('imgsw'+x+'_viewport');
v.innerHTML = '';
// "elements per page"-related stuff
for (var i = 0; i < e; i++)
{
var j = e*y+i;
if (j >= all[x].length) break;
if (all[x][j].tagName == "IMG") IS.loadImg(x, j, v);
else IS.switchEl(x, j, v);
}
},
loadImg : function (x, y, v)
{
var all = IS.all;
var i = all[x][y];
var im = new Image();
var c = window.ISConf;
var j = v.childNodes.length;
i.id = 'imgsw_img_'+x+'_'+y+'_'+j;
im.original = i;
im.src = i.realSrc;
var li = c && c.useLoadingImage && !im.complete;
// can't use DOM for IE to resize correctly :(
var s = (li) ?
'
' :
'
';
if (c && c.clickImageForNext)
{
l = document.createElement('a');
l.href = 'javascript:IS.doTheSwitch('+x+', -1);';
l.innerHTML=s;
v.appendChild(l);
}
else v.innerHTML+=s;
if (li)
{
im.src = "";
im.onload = function () {IS.imgOnLoad(this);};
im.onerror = function () {IS.imgOnError(this);};
im.src = i.realSrc;
return;
}
var im = document.getElementById(i.id);
im.onclick = i.onclick;
},
switchEl : function (x, y, v)
{
var i = IS.all[x][y].cloneNode(false); // for IE
i.innerHTML = IS.all[x][y].innerHTML;
v.appendChild(i);
},
imgOnLoad : function (o)
{
o.onload = "";
var im = o.original;
var i = document.getElementById(im.id);
if (!i) return; // for IE
i.src = im.realSrc;
if (im.height) i.height = im.height;
if (im.width) i.width = im.width;
i.onclick = im.onclick;
i.className = 'imgsw_image '+im.className;
},
imgOnError : function (o)
{
alert("Error! Can't load image "+o.realSrc);
}
};
// "onparse" setup code - should go before any window.onloads!
if (document.getElementsByTagName && !window.ParseCtl)
{
window.appendHandler = function(eventStr, f) {var f0 = eval("window."+eventStr); eval("window."+eventStr+" = function () {f0(); f();}");};
window.onparse = function() {};
window.ParseCtl =
{
complete : false, timer : null,
callOnParse : function ()
{
if (this.complete || !document.body || !document.getElementsByTagName('body')) return;
clearInterval(this.timer);
this.complete = true;
window.onparse();
}
};
if (navigator.appName.indexOf('Netscape') != -1
&& eval(navigator.appVersion.substring(0,navigator.appVersion.indexOf('('))) >= 5
&& navigator.userAgent.indexOf('KHTML') == -1)
document.addEventListener("DOMContentLoaded", window.ParseCtl.callOnParse, null);
else ParseCtl.timer = setInterval('ParseCtl.callOnParse()', 1);
window.onload = ParseCtl.callOnParse;
};
// run
if (document.getElementsByTagName)
{
// optionally use window.onload, if things are going terribly wrong
var c = window.ISConf;
if (c && c.useOnLoad) window.onload = function() {IS.makeViewports();};
else window.appendHandler("onparse", IS.makeViewports);
}