/**
 * Плагин hierarchy (by Roman Hodko www.pivot at gmail.com)
 * предназначен для создания анимированных списков с любым уровнем вложенности
 * Каждый элемент списка должен содержать ссылку (при щелчке по ней будет раскрываться вложенный список,
 * если такой имеется. Если вложенного списка нет, то произойдет переход по ссылке)
 * Структура списка может быть, например, такой
 * <pre>
 * 	<ul>
 * 		<li><a href="">1</a></li>
 * 		<li><a href="">2</a></li>
 * 		<li><a href="">3</a>
 * 			<ul>
 * 				<li><a href="">3.1</a></li>
 * 				<li><a href="">3.2</a></li>
 * 				<li><a href="">3.3</a></li>
 * 			</ul>
 * 		</li>
 * 	</ul>
 * </pre>
 * 
 * Плагин принимает в качестве аргумента объект параметров
 * @param durationShow - длительность разворачивания списка
 * @param durationHide - длительность сворачивания списка
 * @param noAnimationCSS - css для li, не содержащему вложенного списка
 * @param showCSS - css для li, который содержит вложенный список, который в свою очередь находится в свернутом состоянии
 * @param hideCSS - css для li, который содержит вложенный список, который в свою очередь находится в развернутом состоянии
 * @param expand - true - после применения стилей список будет в развернутом состоянии (все вложенные списки видны), false - наоборот
 */

(function($){
	var SETTINGS;

	$.fn.hierarchy = function(userSettings){
		if (typeof userSettings === 'string') {
			if (userSettings === 'collapse') {
				
			} else if (userSettings === 'expand') {
				
			}
			return this;
		}
		
		SETTINGS = $.extend({
			durationShow : 800
			,durationHide : 400
			,noAnimationCSS : {listStyleImage : 'none'}
			,showCSS : {}
			,hideCSS : {}
			,noAnimationClass : ''
			,showClass : ''
			,hideClass : ''
			,callback : function(){}
			,expand : false
		}, userSettings || {} );

		
		this.each(function(){

			$(this).find('li').each(function(){

				var me = $(this);
				var hasUL = me.is(':has(ul)');

				if ( hasUL ) {
					me.find('a:first').click(function(e){
						e.preventDefault();
						if (me.find('ul:first').is(':hidden')) {
							if (SETTINGS.hideClass !== '' && (typeof SETTINGS.hideClass === 'string')) {
								me.addClass(SETTINGS.hideClass);
							}
							me.css( SETTINGS.hideCSS ).find('ul:first').slideDown( SETTINGS.durationShow );
						} else {
							if (SETTINGS.showClass !== '' && (typeof SETTINGS.showClass === 'string')) {
								me.addClass(SETTINGS.showClass);
							}
							me.css( SETTINGS.showCSS ).find('ul:first').slideUp( SETTINGS.durationHide );
						}
					});
					
					// применяем настройки в первый раз
					if (SETTINGS.expand) {
						me.css( SETTINGS.hideCSS ).find('ul:first').slideDown( 1 );
					} else {
						me.css( SETTINGS.showCSS ).find('ul:first').slideUp( 1 );
					}
					
				} else {
					if (SETTINGS.noAnimationClass !== '' && (typeof SETTINGS.noAnimationClass === 'string')) {
						me.addClass(SETTINGS.noAnimationClass);
					}
					me.css( SETTINGS.noAnimationCSS );
				}
			});
			
		});
		
		//callback
		try {
			(SETTINGS.callback)();
		} catch (err) {}
		
		return this;
	};


})(jQuery)
