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(this.options.reIsOut, 'i')){
					selector.over = temp.replace(new RegExp(this.options.reIsOut, 'i'), this.options.reIsOver.replace('\\',''));
					selector.out = temp.replace(new RegExp(this.options.reIsOver, 'i'), this.options.reIsOut.replace('\\',''));
					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();
});