var MooHover = new Class({
	Implements: Options,
	options: {
		selectors: 'img, input',
		clickStatus: false,
		rePngSuffix: '\.png$$',
		reIsOver: '_o.',
		reIsOut: '_n.',		
		filter: 'DXImageTransform.Microsoft.AlphaImageLoader'	
	},
	initialize: function(selectors, options){
		this.setOptions(options);
		if(!$$defined(selectors)) selectors = this.options.selectors;
		this.selectors = $$$$(selectors);
		if(!this.selectors.length) return;
		var temp = null;
		this.selectors.each(function(selector){		
			var selectorTag = selector.get('type');
			selector.prop = 'src'
			if($$defined(selectorTag) && (selectorTag == 'image' || selectorTag == 'submit')){
				if(!selector.src){
					selector.prop = 'background-image';					
				}				
			}
			temp = selector.get(selector.prop) || selector.getStyle(selector.prop);	
			if(Browser.Engine.trident4 && selector.filters[this.options.filter] && selector.filters[this.options.filter].src.test(this.options.rePngSuffix)){
				temp = selector.filters[this.options.filter].src;
			}
			if($$defined(temp)){				
				if(temp.test('_n\.', 'i')){
					selector.over = temp.replace(new RegExp('_n\\.', 'i'), '_o\.');
					selector.out = temp.replace(new RegExp('_o\\.', 'i'), '_n\.');
					selector.addEvents({
						'mouseover': function(){
							this.setSource(selector, selector.over);
						}.bind(this),
						'mouseout': function(){
							this.setSource(selector, selector.out);
						}.bind(this),
						'click': function(){
							this.setSource(selector, selector.over, this.options.clickStatus);
						}.bind(this)
					});					
				}				
			}
			
		}.bind(this));
	},
	setSource: function(selector, source, clicked){
		if(Browser.Engine.trident4 && selector.filters[this.options.filter] && selector.filters[this.options.filter].src.test(this.options.rePngSuffix)){
			selector.filters[this.options.filter].src = source;
		}
		else{
			if(selector.prop == 'src'){						
				selector.set(selector.prop, source);
			}
			else{
				selector.setStyle(selector.prop, source);
			}
		}
		if(clicked){
			selector.removeEvents('mouseover');
			selector.removeEvents('mouseout');
			selector.removeEvents('click');
		}
	}
});

window.addEvent('load', function(){
	new MooHover();
});