(function($){
	
	var baseClass = "sg-admin-list ui-widget-content ui-corner-all ui-helper-clearfix",
		itemClass = "sg-item",
		selectedItemClass = "sg-selected",
		titleSelector = ".sg-title";
	
	$.widget( "sg.sg_admin_list", {
		options: { 
			buttons: {},
			buttons_setup: {},
			itemFunction: false,
			itemSelector: '.sg-item',
			iconSelector: '.sg-icons',
			defaultItemClass: 'ui-state-default',
			hoverItemClass: 'ui-state-hover',
			selectedItemClass: 'ui-state-active',
			hide_icons: false
		},
		
		_create: function() {
			var $widget = this;
			var $wrapper = this.element;
			var $options = this.options;
			
			$widget.customSetup();
			
			// setup wrapper
			$wrapper.addClass( baseClass );
			
			// setup item
			var $tag_item = $wrapper.find( $options.itemSelector );
			$tag_item.addClass( itemClass );
			$tag_item.addClass( $options.defaultItemClass );
			$tag_item.first().addClass( 'ui-corner-top' );
			$tag_item.last().addClass( 'ui-corner-bottom last' );
			// hover actions
			$tag_item.hover(function(){
				if( !$widget.isSelected( $(this) ) ){
					$(this).removeClass( $options.defaultItemClass );
					$(this).addClass( $options.hoverItemClass );
				}
				if($options.hide_icons){
					$(this).find( $options.iconSelector ).show();
				}
			},function(){
				if( !$widget.isSelected( $(this) ) ){
					$(this).removeClass( $options.hoverItemClass );
					$(this).addClass( $options.defaultItemClass );
				}
				if($options.hide_icons){
					$(this).find( $options.iconSelector ).hide();
				}
			});
			//click action
			if($options.itemFunction){
				//$tag_item.find( titleSelector ).click($options.itemFunction);
				$tag_item.find( titleSelector ).bind('click', {
						//btn: $btn,
						//wrapper: $wrapper
					},
					function(e){
						e.data.index = $tag_item.index($(this).parents($options.itemSelector));
						$options.itemFunction(e);
					}
				);
				
			}
			
			// setup icons
			$widget.setupIcons();
			
			// setup selected item
			var $tag_selected = $tag_item.filter( '.'+selectedItemClass );
			$tag_selected.addClass( $options.selectedItemClass );
			$tag_selected.removeClass( $options.defaultItemClass );
		},
		
		setupIcons: function(){
			var $widget = this;
			var $wrapper = this.element;
			var $options = this.options;
			
			$tag_iconwrapper = $wrapper.find( $options.iconSelector );
			if($tag_iconwrapper.length){
				$tag_iconwrapper.sg_admin_icons({
					buttons: $options.buttons,
					buttons_setup: $options.buttons_setup
				});
			}
			// hide icons
			if($options.hide_icons){
				if($tag_iconwrapper.length){
					$tag_iconwrapper.hide();
				}
			}	
		},
				
		switchSelected: function($index){
			var $widget = this;
			var $wrapper = this.element;
			var $options = this.options;
			
			var $tag_item = $wrapper.find( $options.itemSelector + ':eq('+$index+')' );
			if($widget.isSelected( $tag_item )){
				$tag_item.addClass( $options.defaultItemClass );
				$tag_item.removeClass( selectedItemClass );
				$tag_item.removeClass( $options.selectedItemClass );
			}else{
				$tag_item.addClass( selectedItemClass );
				$tag_item.addClass( $options.selectedItemClass );
				$tag_item.removeClass( $options.defaultItemClass );
				$tag_item.removeClass( $options.hoverItemClass );
			}
		},
		
		deSelectAll: function(){
			var $widget = this;
			var $wrapper = this.element;
			var $options = this.options;
			
			var $tag_item = $wrapper.find( $options.itemSelector );
			$tag_item.addClass( $options.defaultItemClass );
			$tag_item.removeClass( selectedItemClass );
			$tag_item.removeClass( $options.selectedItemClass );
		},
		
		isSelected: function($tag_item){
			if( $tag_item.hasClass(selectedItemClass) ){
				return true;	
			}else{
				return false;
			}
		},
		
		customSetup: function(){
			
		}
	});
}(jQuery));
