/**
 * @param String ul_selector The selector string for the ul navigation.
 * @param String group_selector The selector string for the group wrappers.
 * @option Integer groups_of The number of items in a group.
 * @option String group_sufix The sufix selector for the group, it will be added a number (example: 'div#mygroup' will be 'div#mygroup1')
 * @option String toggle_speed The speed for the show() method when switching between pages.
 *
 */
jQuery.carousel = function(ul_selector, group_selector, options) {
	var _options = {
		groups_of: 5,
		group_sufix: 'div#group-',
		toggle_speed: 'fast',
		groups_wrapper: '#carousel'
	};
	$.extend(_options, options);
	var _current = 0;
	var _groups_count = $(group_selector, $(_options.groups_wrapper)).length;
	var _a = $('<a />').attr('href', '#');
	var _lnav = _a.clone().addClass('lnav');
	var _rnav = _a.clone().addClass('rnav');
	var _links = [];
	
	if(_groups_count > 1) {
		$(ul_selector).append($('<li />').html(_lnav));

		for (var i=0; i < _groups_count; i++) {
			var _link = _a.clone().addClass('page').attr('rel', i);
			if(i == 0) _link.addClass('active');

			$(ul_selector).append($('<li />').html(_link));

			_link.click(function() {
				var _i = parseInt(($(this).attr('rel')));
				var _group = $(_options.group_sufix+(_i * _options.groups_of));

				if(!_group.is(':visible')) {
					var _current_tmp = _current;
					_current = (_i * _options.groups_of);
					$(group_selector+':visible', $(_options.groups_wrapper)).hide();
					_group.show(_options.toggle_speed);
					_links[_current_tmp/_options.groups_of].removeClass('active');
					_links[_current/_options.groups_of].addClass('active');
				}

				return false;
			});

			_links.push(_link);
		}

		$(ul_selector).append($('<li />').html(_rnav));

		_lnav.click(function() {
			if(_current > 0) {
				var _current_tmp = _current;
				var _group = $(_options.group_sufix+_current_tmp);
				var _prev_group = $(_options.group_sufix+(_current -= _options.groups_of));

				_group.hide();
				_prev_group.show(_options.toggle_speed);
				_links[_current_tmp/_options.groups_of].removeClass('active');
				_links[_current/_options.groups_of].addClass('active');
			}

			return false;
		});

		_rnav.click(function() {
			if((_current/_options.groups_of) < _groups_count - 1) {
				var _current_tmp = _current;
				var _group = $(_options.group_sufix+_current_tmp);
				var _prev_group = $(_options.group_sufix+(_current += _options.groups_of));

				_group.hide();
				_prev_group.show(_options.toggle_speed);
				_links[_current_tmp/_options.groups_of].removeClass('active');
				_links[_current/_options.groups_of].addClass('active');
			}

			return false;
		});
	} else {
		$(ul_selector).hide();
	}
};