StarFlyer.SizeSwitcher = function(options) { this.init(options); } StarFlyer.SizeSwitcher.prototype = { init : function(options) { this.toggler = $(options.toggler); this.defaultSize = options.defaultSize; this.images = {}; this.setDefaultImages(); this.setDefaultSize(); this.addListeners(); }, setDefaultImages : function() { var self = this; this.toggler.each(function() { var togglerImg = $('img', this); var src = togglerImg.attr('src'); self.images[$(this).attr('rel')] = src; }); }, setDefaultSize : function() { if ( $.cookie('SFJ5') != null ) { var cookieVals = $.cookie('SFJ5').split('&'); for (i = 0, x = cookieVals.length; i < x; i ++) { var cookieKeyVal = cookieVals[i].split('='); if ( cookieKeyVal[0] == 'SIZE' ) { this.setActiveStylesheet(cookieKeyVal[1]); this.setActiveImage(this.toggler, cookieKeyVal[1]); } } } else { this.setActiveStylesheet(this.defaultSize); this.setActiveImage(this.toggler, this.defaultSize); } }, addListeners : function() { var self = this; $(self.toggler).click(function(e) { e.preventDefault(); var size = $(this).attr('rel'); self.setActiveStylesheet(size); self.setActiveImage(self.toggler, size); $.cookie('SFJ5', 'SIZE=' + size, { expires: 30, path: "/" }); }); }, setActiveStylesheet : function(size) { $('link[@rel*=style][title*=size]').each(function() { this.disabled = true; if ( $(this).attr('title') === ('size-' + size) ) { this.disabled = false; } }); }, setActiveImage : function(toggler, size) { var self = this; toggler.each(function() { var togglerImg = $('img', this); togglerImg.unbind('mouseenter mouseleave'); var src = self.images[$(this).attr('rel')]; var ftype = src.substring(src.lastIndexOf('.'), src.length); if ( $(this).attr('rel') === size ) { src = src.replace(ftype, '_s' + ftype); } else { var overSrc = src.replace(ftype, '_o' + ftype); togglerImg.hover( function() { togglerImg.attr('src', overSrc); }, function() { togglerImg.attr('src', src); } ); } togglerImg.attr('src', src); }); } } $(document).ready(function(){ var sf = StarFlyer; new sf.SizeSwitcher({toggler : 'a.sizeSwitcher', defaultSize : 'small'}); });