/**
 * MooSwap - Automatic swap images
 *
 * Dependencies: MooTools 1.2
 *
 * @version            0.1.1
 *
 * @license          MIT-style license
 * @author           Davide Caffaratti <davcaffa [at] gmail.com>
 * @copyright        Author
 * @site             http://davidecaffaratti.com
 */ 
var MooSwap = new Class({

    Implements: [Options],

    options: {
        imgHoverPrefix: '_hover',
        useTransition: false,
        transition: Fx.Transitions.Sine.easeOut,
        transitionDuration: 400,
        opacity: 0.8    
    },
    
    initialize: function(elements, options) {
        //set options
        this.setOptions(options);
        // Set elements
        this.setSwap(elements);
    },
    
    setSwap: function(elements) { 
        $$(elements).each(function(el) { 
                    
            var holdSrc = el.getProperty('src');   
            var extension = holdSrc.substring(holdSrc.lastIndexOf('.'),holdSrc.length);       
            var newSrc = holdSrc.replace(extension, this.options.imgHoverPrefix + '' + extension);
            
            // set new image for preloading
            new Asset.image(newSrc, { alt: el.getProperty('alt') });
      
            // default link on current img element
            var link = el;
            
            // check if there is a link a href parent
            var parent_a = el.getParent('a');
            if (parent_a) {
                var link = parent_a;        
            }
            
            if (this.options.useTransition && this.options.opacity < 1) {
                el.setStyles({'opacity': this.options.opacity});  
                var effect = new Fx.Morph(el, {duration: this.options.transitionDuration, transition: this.options.transition});
            } 
            
            link.addEvents({
                mouseover: function() {
                    if (this.options.useTransition && this.options.opacity < 1) {
                        effect.cancel();
                        effect.start({opacity:1});
                    }
                    el.setProperty('src', newSrc);
                }.bind(this),
                mouseout: function() {
                    if (el.getProperty('class') != "bla"){
                    if (this.options.useTransition && this.options.opacity < 1) {
                        effect.cancel();
                        effect.start({opacity: this.options.opacity});
                    }
                    
                    //alert(el.getProperty('class'));
                    el.setProperty('src', holdSrc);
                    }
                }.bind(this)
           });
        }, this);    
    }
});
