if (typeof JP == "undefined" || !JP) { var JP = {};}
JP.ImageRollOver = {};

JP.ImageRollOver.config = {
    css_class: 'jp-mouseover',
    img_over_ending: '_ov',
    element_types: ['img', 'input'], //Looking for images and button inputs
    root_node: ''
}

JP.ImageRollOver.rollover = function (mouseover_image, img_over_ending) {
    this.init(mouseover_image, img_over_ending);  
};

JP.ImageRollOver.rollover.prototype = function (mouseover_image){
    var $ = YAHOO.util.Dom.get;
    
    var init = function (mouseover_image, img_over_ending) {
        var self = this;
        
        if(YAHOO.lang.isString(mouseover_image)) {
            self.mouseover_image = $(mouseover_image)
        } else {
            self.mouseover_image = mouseover_image;
        }
        if (YAHOO.lang.isUndefined(img_over_ending) || !img_over_ending) { 
            img_over_ending = '_ov'; 
        }
        
        self.off_src = self.mouseover_image.src;
        self.hover_src = '';
        if (self.off_src.indexOf(".gif") > 0) {
            self.hover_src = self.off_src.replace(".gif", img_over_ending + ".gif");
        } else if (self.off_src.indexOf(".jpg") > 0) {
            self.hover_src = self.off_src.replace(".jpg", img_over_ending + ".jpg");
        } else if (self.off_src.indexOf(".png") > 0) {
            self.hover_src = self.off_src.replace(".png", img_over_ending + ".png");
        }
    
        YAHOO.util.Event.addListener(self.mouseover_image, 'mouseover', self.hover, self); 
        YAHOO.util.Event.addListener(self.mouseover_image, 'mouseout', self.mouseout, self);
            
        self.preloaded_image = new Image();
        YAHOO.util.Event.addListener(self.preloaded_image, 'error', self.no_image, self);
        self.preloaded_image.src = self.hover_src;
        
    }

    var hover = function(e, self) {
        self.mouseover_image.src = self.hover_src;
    }
      
    var mouseout = function(e, self) {
        self.mouseover_image.src = self.off_src;
    }
    
    var no_image = function(e, self) {
        YAHOO.util.Event.removeListener(self.mouseover_image, "mouseover"); 
        YAHOO.util.Event.removeListener(self.mouseover_image, "mouseout"); 
    }

    return {
        init: init,
        hover: hover,
        mouseout: mouseout,
        no_image: no_image
    }
}();


JP.ImageRollOver.auto = function () {
    var self = this;
    var $class = YAHOO.util.Dom.getElementsByClassName;

    var config = JP.ImageRollOver.config;
    
    for(var i=0, el_type; el_type=config.element_types[i]; i++) {
	    var rollover_elements = $class(config.css_class, el_type, config.root_node);
	    for(var j=0, item; item=rollover_elements[j]; j++) {
            new JP.ImageRollOver.rollover(item, config.img_over_ending);
        }
	}
};
YAHOO.util.Event.addListener(window, 'load', JP.ImageRollOver.auto);