function preload_document_images() {
	var images = document.getElements('img');
	var src, img;
	for (var i=0;i<images.length;i++) {
		img = new Image();
		img.src = images[i].src;
		if (images[i].src.lastIndexOf('fish_') > 0) {
			img = new Image();
			img.src = images[i].src.replace('.jpg','_hover.jpg');
		}
	}
}

function cssPreloadImages() {
	var i, j, img;
	var pos, cssDir, rules;
	var style, filename;
	for (i=0; i<document.styleSheets.length; i++) {
		pos = document.styleSheets[i].href.lastIndexOf("/");
		cssDir = (pos != -1) ? document.styleSheets[i].href.substring(0, pos + 1) : "";
		rules = document.styleSheets[i].cssRules ? document.styleSheets[i].cssRules : document.styleSheets[i].rules;
		for (j=0; j<rules.length; j++) {
			style = rules[j].style;
			if (style) {
				if (style.backgroundImage.toLowerCase().substr(0,4) == "url(") {
					filename = style.backgroundImage.substring(4, style.backgroundImage.length - 1);
					if (filename.indexOf("http://") != 0 && filename.indexOf("/") != 0) filename = cssDir + filename;
					img = new Image();
					img.src = filename;
				}
			}
		}
	}
	preload_document_images();
}

if (window.attachEvent) { // IE
	window.attachEvent("onload", cssPreloadImages);
}
else { // DOM
	window.addEventListener("load", cssPreloadImages, false);
}

/**/
document.getElements = function(e, elem) {
	if (!e || !e.length || e.length == 0) return [];
	var store = [elem||document.body];
	var store_t = [];
	e = e.split(" ");
	for (var i=0; i<e.length; i++) {
		var r = {
			id:  "",
			tag: "*",
			clas:[]
		};
		var c, s, t=e[i];
		while (t.length > 0) {
			s = t.search(/.[#\.]/) + 1 || t.length;
			c = t.substr(0, s);

			if (c.substr(0, 1) == "#")		r.id = c.substr(1);
			else if (c.substr(0, 1) == ".")	r.clas.push(c.substr(1));
			else							r.tag = c;

			t = t.substr(s);
		}
		while (store.length > 0) {
			var curr = [], temp = store.shift().getElementsByTagName(r.tag);
			for (var j=0; j<temp.length; j++) {
				curr.push(temp[j]);
			}
			while (curr.length > 0) {
				var ok = true, ce = curr.shift();
				if (r.id && ce.id!=r.id) ok = false;
				for (j=0; j<r.clas.length; j++) {
					if ((" "+ce.className+" ").indexOf(" "+r.clas[j]+" ") == -1) {
						ok = false;
						break;
					}
				}
				if (ok) store_t.push(ce);
			}
		}
		store = store_t;
		store_t = [];
	}
	return store;
}
