(function() {
	var Ev = YAHOO.util.Event,
		Sel = YAHOO.util.Selector,
		Dom = YAHOO.util.Dom,
		extensionRegExp = new RegExp('(.+)(\\.[a-z0-9]+)$', 'i'),
		urlRegExp = new RegExp('url\\([\'"]?(.*?)[\'"]?\\)');
	
	IRIS.widget.ImageSwitcher = function( el, uri ) {
		var matches;
		this.el = el;
		if( !uri ) {
			uri = this.getImageUri();
		}
		if( matches = extensionRegExp.exec(uri) ) {
			this.imageUri = [matches[1], matches[2]];
		}
	};
	IRIS.widget.ImageSwitcher.prototype = {
		el: null,
		imageUri: [],
		getImageUri: function( el ) {
			var rv, matches;
			if( !el ) {
				el = this.el;
			}
			if( el.tagName && (el.tagName.toLowerCase() == 'img') ) {
				rv = el.src;
			}
			else if( el.style ) {
				if( matches = urlRegExp.exec(Dom.getStyle(el, 'backgroundImage')) ) {
					rv = matches[1];
				}
			}
			return rv;
		},
		getStateUri: function( suffix ) {
			if( suffix ) {
				return this.imageUri[0] + '_' + suffix + this.imageUri[1];
			}
			else {
				return this.imageUri[0] + this.imageUri[1];
			}
		},
		preLoadImages: function() {
			var i;
			for( i = 0; i < this.states.length; i++ ) {
				this.preLoadImage(this.getStateUri(this.states[i]));
			}
		},
		preLoadImage: function( uri ) {
			var image = document.createElement('IMG');
			image.src = uri;
			image.style.visibility = 'hidden';
			document.getElement
		}
	};
	
	IRIS.widget.RolloverImage = function( el ) {
		IRIS.widget.RolloverImage.superclass.constructor.call(this, el);
	};
	YAHOO.extend(IRIS.widget.RolloverImage, IRIS.widget.ImageSwitcher, {
		states: ['over'],
		init: function() {
			Ev.addListener(this.el, 'mouseover', this.mouseOver, this, true);
			Ev.addListener(this.el, 'mouseout', this.mouseOut, this, true);
			this.preLoadImages();
		},
		mouseOver: function() {
			this.el.src = this.getStateUri('over');
		},
		mouseOut: function() {
			this.el.src = this.getStateUri();
		}
	});

	IRIS.widget.PreLoadImage = function( el ) {
		IRIS.widget.PreLoadImage.superclass.constructor.call(this, el);
	};
	YAHOO.extend(IRIS.widget.PreLoadImage, IRIS.widget.ImageSwitcher, {
		states: ['over'],
		init: function() {
			this.preLoadImages();
		}
	});

	IRIS.widget.ImageSwitcher.init = function() {
		var elements = Sel.query('.rollover'), i;
		for( i = 0; i < elements.length; i++ ) {
			new IRIS.widget.RolloverImage(elements[i]).init();
		}
	};

	IRIS.widget.ImageSwitcher.preLoadImages = function( selector ) {
		var elements = Sel.query(selector), i;
		for( i = 0; i < elements.length; i++ ) {
			new IRIS.widget.PreLoadImage(elements[i]).init();
		}
	};

	Ev.addListener(window, 'load', IRIS.widget.ImageSwitcher.init, IRIS.widget.ImageSwitcher, true);

}());
