﻿	(function(scope, name) {
						//create a base class
						var $ = window[scope], c = function(wrapper, options) {
							if(this.__construct) {
								this.__construct(wrapper, options || {}); //call the construct
							}
						};
						
						/* Base Class Definition
						-------------------------------------*/
						c.prototype = (function() {
							var p =  c.prototype;  //scope
							
							/* Private Properties
							-------------------------------------*/
							var _this = null;
							
							/* Construct
							-------------------------------------*/
							p.__construct = function(wrapper, options) {
								this.wrapper = $(wrapper);
								options = this.getDefaultOptions(options);
								_this = this;
								
								this.tabs = this.wrapper.find(options.tabs);
								this.content = options.content;
								this.activeClass = options.activeClass;
								
								this.tabs.click(_eventMakeActiveTab).each(function() {
									if(!$(this).hasClass(_this.activeClass)) {
										$(this).find(_this.content).hide();
									}
								});
								
								this.tabs.find(_this.content).find(options.items).click(options.itemClickAction);
							};
							
							/* Public Methods
							-------------------------------------*/
							p.getDefaultOptions = function(options) {
								options 				= options || {};
								options.tabs 			= options.tabs || 'li.tab';
								options.items			= options.items || 'li';
								options.content 		= options.content || 'ul';
								options.activeClass		= options.activeClass || 'selected';
								options.itemClickAction	= options.itemClickAction || function(e) {};
								return options;
							};
							
							/* Private Methods
							-------------------------------------*/
							var _eventMakeActiveTab = function(e) {
								e.preventDefault();
								
								var target = this;
								
								_this.tabs.each(function(index) {
									if(index == _this.tabs.index(target)) {
										$(target).addClass(_this.activeClass).find(_this.content).slideDown();
									} else if($(this).hasClass(_this.activeClass)) {
										var oldTarget = this;
										$(this).find(_this.content).slideUp(function() {
											$(oldTarget).removeClass(_this.activeClass);
										});
									}
								});
							};
							
							return p;
						})();
						
						//This is the jQuery adapter
						//so that anytime this method is
						//called it will create a new instance
						//of our actual class
						$.fn.extend(new function() {
							this[name] = function(options, returnInstance) {
								returnInstance = returnInstance || false;
								var instance = new c(this, options || {});
								if(returnInstance) {
									return instance;
								}
								return this;
							}
						});
					})('jQuery', 'accordion');