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();
	}
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
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(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(); });