var ClickExpandGroup = Class.create();
ClickExpandGroup.prototype = {
    triggers : null,
    contents : null,
    
    _toggle : null,
    
    initialize : function(config) {
        if (!this.initialized) {
            this.triggers = $$(config.triggerSelector);
			this.contents = $$(config.contentSelector);

            this.eventType = config.eventType || 'click';
            
            this.toggleVisibility = config.toggleVisibility || false;
            this.oneAtATime = config.oneAtATime || false;
			this.startHidden = config.startHidden || false;
            
            this._toggle = this.toggle.bindAsEventListener(this);
            this.createEvents();
            this.initialized = true;
        }
    },
    
    createEvents : function(){
        for (var i=0, c=this.triggers.length; i < c; i++) {
            var trigger = this.triggers[i];
            trigger.content = this.contents[i];
			
			if (this.startHidden) {
				trigger.content.hide();
			}
			
            if (this.contents[i].visible()) {
                trigger.shown = true;
            } else {
                trigger.shown = false;
            };
            Event.observe(trigger, this.eventType, this._toggle);
        };
    },
    
    toggle : function(event) {
        var elem = event.element();
        if (elem.shown && this.toggleVisibility) {
            this.hide(elem);
        } else {
            this.show(elem);
        };
        event.stop();
    },

    show : function(target) {
        target.removeClassName('selected');
        var content = target.content;
		
		content.appear({duration: .2});
		
        if (this.oneAtATime) {
            this.hideOther(target);
        }
        target.shown = true;
    },

    hide : function(target) {
        target.removeClassName('selected');
        var content = target.content;
        if (content) {
			content.fade({duration: .2});
            target.shown = false;
        };
    },
    
    hideOther : function(keep) {
        for (var i=0, c=this.triggers.length; i < c; i++) {
            var trigger = this.triggers[i];
            if (trigger != keep && trigger.shown) {
                this.hide(trigger);
            };
        };
    }
}

Event.observe(window, 'load', function() {
    var sampleClickExpandGroup = new ClickExpandGroup({
        eventType : 'click',
        oneAtATime : false,
		startHidden : true,
        toggleVisibility : true,
        triggerSelector : '.services h2',
        contentSelector : '.services p '
    });
});
