﻿;jQuery.noConflict();
(function(jQuery) {
	jQuery.fn.tvhideshowlist = function(options) {
		// default settings
		var defaults = {
			toggle: "> *", // elements inside the object to toggle
			minimum: 10, // number to show in collapsed form
			showText: "More (+)", // text for the expand link
			hideText: "Less (-)", // text for the collapse link
			linkLocation: "after", // use "after" or "before" to determine where link displays
			defaultState: "collapsed", // use "collapsed" or "expanded" to show or hide items by default
			wrapLink: null // specify HTML code to wrap around the link
		};
		var options = jQuery.extend(defaults, options);
		
		return this.each(function() {
			// only execute if there are more than minimum items
			if(jQuery(options.toggle, this).length > options.minimum) {
				// setup variables
				var jQueryobj = jQuery(this);
				var jQuerytargets = jQuery(options.toggle, this);
			
				// hide the items if necessary
				if(options.defaultState == "collapsed") {
					jQuerytargets.filter(":gt("+(options.minimum-1)+")").hide();
				}
				
				
				// append/prepend the toggle link to the object
				var jQuerytoggler = jQuery('<a href="#" class="tvtoggler"></a>');
				if(options.linkLocation == "before") {
					jQueryobj.before(jQuerytoggler);
				}
				else {
					jQueryobj.after(jQuerytoggler);
				}
				if(options.wrapLink) {
					jQuerytoggler.wrap(options.wrapLink);
				}
				
				// set data, link class, and link text
				if(options.defaultState == "expanded") {
					jQueryobj.data("status", "expanded");
					jQuerytoggler.addClass("expanded");
					jQuerytoggler.html(options.hideText);
				}
				else {
					jQueryobj.data("status", "collapsed");
					jQuerytoggler.addClass("collapsed");
					jQuerytoggler.html(options.showText);
				}
				
				// click actions
				jQuerytoggler.click(function() {
					if(jQueryobj.data("status") == "collapsed") {
						jQuerytargets.filter(":hidden").show();
						jQuerytoggler.html(options.hideText);
						jQueryobj.data("status", "expanded");
					}
					else if(jQueryobj.data("status") == "expanded") {
						jQuerytargets.filter(":gt("+(options.minimum-1)+")").hide();
						jQuerytoggler.html(options.showText);
						jQueryobj.data("status", "collapsed");
					}
					jQuery(this).toggleClass("collapsed").toggleClass("expanded");
					return false;
				});
			}
		});
	}
})(jQuery);
