function add_onload(element, new_function) {
	var old_onload = element.onload;

	if (typeof old_onload != 'function') {
		old_onload = function(){};
	}

	element.onload = function (){
		old_onload();
		new_function();
	}
}

function add_onunload(element, new_function) {
	var old_onunload = element.onunload;

	if (typeof old_onunload != 'function') {
		old_onunload = function(){};
	}

	element.onunload = function (){
		old_onunload();
		new_function();
	}
}

function add_onfocus(element, new_function) {
	var old_onfocus = element.onfocus;

	if (typeof old_onfocus != 'function') {
		old_onfocus = function(){};
	}

	element.onfocus = function (){
		old_onfocus();
		new_function();
	}
}

/* mm */

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
var slideshow = {
	id: "gallery_inner",
	fadeSpeed: 5,
	fadeDegree: 0.02,
	autoSpeed: 5000,
	currentlyVisible: 0,
	images: [],
	fadeIn_i: "",
	fadeOut_i: "",
	auto_i: "",
	init: function(){
		if(document.getElementById && document.getElementById(slideshow.id)){
			var container = document.getElementById(slideshow.id);
			var imgs = container.getElementsByTagName('img');
			var i=0;
			for(z in imgs){
				//nodelist to array. there's probably a better way to do it, but I'm not a js guru.
				if (imgs[z].style){
					slideshow.images[i] = imgs[z];

					if (slideshow.images[i].style.display == 'block'){

						slideshow.currentlyVisible = i;
					}
					i++;
				}
			}
			if(slideshow.images.length > 1){

				for(n in slideshow.images){
					if(!isNaN(n)){
						if(n == slideshow.currentlyVisible){
							slideshow.show(n);
						} else {
							slideshow.hide(n);
						}
					}
				}
				slideshow.auto()
			}
		}
	},
	show: function(n){

		slideshow.currentlyVisible = n;
		if(slideshow.fadeIn_i){clearInterval(slideshow.fadeIn_i)}
		slideshow.images[n].style.display = 'block';
		slideshow.images[n].style.opacity = '1';
		slideshow.images[n].style.filter = "alpha(opacity=100)";

	},
	hide: function(n){

			if(slideshow.fadeOut_i){clearInterval(slideshow.fadeOut_i)}
			slideshow.images[n].style.display = 'none';
			slideshow.images[n].style.opacity = '0';
			slideshow.images[n].style.filter = "alpha(opacity=0)";
	},
	auto: function(){
		if(slideshow.auto_i){clearInterval(slideshow.auto_i)}
		slideshow.auto_i = setInterval("slideshow.fadeInOut()", slideshow.autoSpeed);
	},
	jumpto: function(n){
		if(slideshow.currentlyVisible != n){
			//otherwise it tries hiding && showing at the same time. not a good look.
			if(slideshow.auto_i){clearInterval(slideshow.auto_i)}
			slideshow.fadeOut(slideshow.currentlyVisible);
			slideshow.fadeIn(n);
		}
	},
	fadeInOut: function(){
		var cur = Number(slideshow.currentlyVisible);
		var nxt = cur == slideshow.images.length - 1 ? 0 : cur + 1;
		slideshow.fadeOut(cur);
		slideshow.fadeIn(nxt);
	},
	fadeIn: function(n){
		slideshow.images[n].style.display = 'block';
		if(slideshow.fadeIn_i){clearInterval(slideshow.fadeIn_i)}
		slideshow.fadeIn_i = setInterval("slideshow.run("+n+", 1)", slideshow.fadeSpeed);
	},
	fadeOut: function(n){
		if(slideshow.fadeOut_i){clearInterval(slideshow.fadeOut_i)}
		slideshow.fadeOut_i = setInterval("slideshow.run("+n+", -1)", slideshow.fadeSpeed);
	},
	run: function(n, dir){
		var o = Number(slideshow.images[n].style.opacity) + slideshow.fadeDegree * dir;
		if(o >= 1 && dir > 0){
			slideshow.show(n);
		} else if(o <= 0 && dir < 0) {
			slideshow.hide(n);
		} else {
			slideshow.images[n].style.opacity = o;
			slideshow.images[n].style.filter = "alpha(opacity="+o*100+")";
		}
	}
}
//
add_onload(window, function(){ slideshow.init(); });