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

					selector.out = temp.replace(new RegExp(this.options.reIsOver, 'i'), this.options.reIsOut);

					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');

		}

	}

});



