/* * e107 website system * * Copyright (C) 2008-2009 e107 Inc (e107.org) * Released under the terms and conditions of the * GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * * Featurebox Javascript Class * * $Source: /cvs_backup/e107_0.8/e107_plugins/featurebox/featurebox.js,v $ * $Revision$ * $Date$ * $Author$ * */ // Temporary solution, will be moved to e107Widgets var Featurebox = Class.create({ initialize: function(container, options) { this._container = $(container); if(!this._container) return; this.options = Object.extend({ 'ajax_container': null, 'ajax_navbar': null, 'ajax_nav_selector': 'a.featurebox-nav-link', 'ajax_loader': null, 'ajax_hide_onload': false, 'continuous': false, 'ajax_url': '#{e_JS}'.parsePath() + 'e_ajax.php' }, options || {}); this._ajax_container = this.options.ajax_container && $(this.options.ajax_container) ? $(this.options.ajax_container) : this._container.down('.body'); this._ajax_navbar = this.options.ajax_navbar && $(this.options.ajax_navbar) ? $(this.options.ajax_navbar) : this._container.down('.featurebox-nav'); this._ajax_loader = this.options.ajax_loader && $(this.options.ajax_loader) ? $(this.options.ajax_loader) : this._container.down('.featurebox-loader'); this._current = $A(); if(!this._ajax_container || !this._ajax_navbar) return; this._ajax_nav = this._ajax_navbar.select(this.options.ajax_nav_selector); this.clickObserverHandler = this.clickObserver.bindAsEventListener(this); this.nextObserverHandler = this.nextObserver.bindAsEventListener(this); this.prevObserverHandler = this.prevObserver.bindAsEventListener(this); this.startObserve(); }, clickObserver: function(event) { var element = event.element('a'); event.stop(); this.run(element); }, nextObserver: function(event) { event.stop(); var current = this._current[1] ? parseInt(this._current[1]) : 1, next = current >= this._ajax_nav.length ? 0 : current; if(!this.options.continuous && next == 0) return; this.run(this._ajax_nav[next]); }, prevObserver: function(event) { event.stop(); var current = this._current[1] ? parseInt(this._current[1]) : 1, prev = (current - 2) < 0 ? this._ajax_nav.length - 1 : current - 2; if(!this.options.continuous && prev == this._ajax_nav.length - 1) return; this.run(this._ajax_nav[prev]); }, run: function(element) { var options = element.href.split('#',2)[1].split('.'), that; this._current = options; if(element.hasClassName('active')) return; this._ajax_navbar.select('.active').invoke('removeClassName', 'active'); element.addClassName('active'); if(element.up('li')) { element.up('li').addClassName('active'); // only li support at this time } this.showLoader(); that = this; new e107Ajax.Request(this.options.ajax_url, { parameters: { 'ajax_sc': 'featurebox_items|' + varset(options[0], '') + '=from=' + varset(options[1], 0) + '&cols=' + varset(options[2], 0) + '&no_fill_empty=' + varset(options[3], 0) }, method: 'post', onComplete: function(transport) { that.hideLoader(transport.responseText); } }); }, startObserve: function() { this._ajax_navbar.select('a.featurebox-nav-link').invoke('observe', 'click', this.clickObserverHandler); this._ajax_navbar.select('a.featurebox-nav-next').invoke('observe', 'click', this.nextObserverHandler); this._ajax_navbar.select('a.featurebox-nav-prev').invoke('observe', 'click', this.prevObserverHandler); }, stopObserve: function() { this._ajax_navbar.select('a.featurebox-nav-link').invoke('stopObserving', 'click', this.clickObserverHandler); this._ajax_navbar.select('a.featurebox-nav-next').invoke('stopObserving', 'click', this.nextObserverHandler); this._ajax_navbar.select('a.featurebox-nav-prev').invoke('stopObserving', 'click', this.prevObserverHandler); }, showLoader: function() { if(this._ajax_loader) { if(this.options.ajax_hide_onload) { this._ajax_container.hide(); } this._ajax_loader.show(); } this.stopObserve(); }, hideLoader: function(text) { if(this._ajax_loader) { this._ajax_loader.hide(); if(this.options.ajax_hide_onload) { this._ajax_container.show(); } } this._ajax_container.update(text); this.startObserve(); } });