// Constructor. var RichFXInterface = function(name, methods) { if(arguments.length != 2) { RICHFX.jQuery.Console.Error("RichFXInterface constructor called with " + arguments.length + "arguments, but expected exactly 2."); } this.name = name; this.methods = []; if ( methods != undefined ) { for(var i = 0, len = methods.length; i < len; i++) { if(typeof methods[i] !== 'string') { RICHFX.jQuery.Console.Error("RichFXInterface constructor expects method names to be passed in as a string."); } this.methods.push(methods[i]); } } }; // Static class method. RichFXInterface.ensureImplements = function(object) { if(arguments.length < 2) { RICHFX.jQuery.Console.Error("Function RichFXInterface.ensureImplements called with " + arguments.length + "arguments, but expected at least 2."); } for(var i = 1, len = arguments.length; i < len; i++) { var intrface = arguments[i]; if(intrface.constructor !== RichFXInterface) { RICHFX.jQuery.Console.Error("Function RichFXInterface.ensureImplements expects arguments two and above to be instances of RichFXInterface."); } if ( object != null ) { for(var j = 0, methodsLen = intrface.methods.length; j < methodsLen; j++) { var method = intrface.methods[j]; if(!object[method] || typeof object[method] !== 'function') { RICHFX.jQuery.Console.Error("Function RichFXInterface.ensureImplements: object does not implement the " + intrface.name + " interface. Method " + method + " was not found."); } } } } }; // We pass into the RichFXInterface the name of the current RichFXInterface instance, // followed by an Array of the methods we are expecting to find var Viewer = new RichFXInterface('Viewer',['init', 'require', 'register', 'embed']); var ViewerFactory = function(){}; ViewerFactory.prototype = { createViewer: function(name, oSettings) { var viewer; if (name == 'imageZoom') { viewer = new ImageZoom(); } else if (name == 'imageDragBox') { viewer = new ImageDragBox(); } else if (name == 'imageSlider') { viewer = new ImageSlider(); } else if (name == 'imageCloseUp') { viewer = new ImageEnlarge(); } else if (name == 'imageCloseUpFade') { oSettings = RICHFX.jQuery.extend({}, oSettings, {"showEffect": "fade", "hideEffect": "fade"}); viewer = new ImageEnlarge(); } else if (name == 'imageEnlarge') { viewer = new ImageEnlarge(); } else if (name == 'enlargePop') { viewer = new ImageEnlarge(); } else if (name == 'enlargeFade') { oSettings = RICHFX.jQuery.extend({}, oSettings, {"showEffect": "fade", "hideEffect": "fade"}); viewer = new ImageEnlarge(); } else if (name == 'imageColorChange') { viewer = new ImageColorChange(); } else if (name == 'imagePanZoom') { viewer = new ImagePanZoom(); } else if (name == 'imagePanRotate') { viewer = new ImagePanRotate(); } else if (name == 'imageRotate') { viewer = new ImageRotate(); } else if (name == 'imageVideo') { viewer = new ImageVideo(); } else if (name == 'socialMedia') { viewer = new SocialMedia(); } else if (name == 'socialBookmark') { viewer = new SocialBookmark(); } else if (name == 'facebookConnect') { viewer = new FacebookConnect(); } else if (name == 'imageEnlargeStandard') { viewer = new ImageEnlargeStandard(); } else if (name == 'imagePromoBanner') { viewer = new ImagePromoBanner(); } else if (name == 'imageCC') { viewer = new ImageCC(); } else if (name == 'imageMultiSegment') { viewer = new ImageMultiSegment(); } RichFXInterface.ensureImplements(viewer, Viewer); RICHFX.helpers.timer('Initializing '+name+':'); viewer.init(oSettings); return viewer; } }; var viewerFactory = new ViewerFactory();