(function( $ ){
	$.fn.gselect = function( options ) {  
		var settings = {
			'emptyText'         : '--'
		};

		$(document).click(function(event){
			var trg = $(event.target).parents().andSelf().filter('.gselect-dropdown');
			
			var ddlist = $('.gselect-dropdown');
			
			if (trg.length>0) ddlist=ddlist.not(trg);
			ddlist.slideUp();
		});

		
		return this.each(function(si) {

			if ( options ) { 
				$.extend( settings, options );
			}

			var $this = $(this);

			var selwidth = $this.width();
			if (!selwidth) selwidth = $this.css('width').replace(/px/,'');
			
			//zoberieme moznosti zo selectu

			var sname = $this.attr('name');
			var smulti = $this.attr('multiple');
			var firstitem, firstitemvalue;

			var dd = $('<div />', { 'class':'gselect-dropdown' });

			$this.find('option').each(function(chi){
				var chid = 'gselchck'+si+'o'+chi;
				if (smulti) dd.append('<div><input type="checkbox" id="'+chid+'" name="'+sname+'" value="'+$(this).attr('value')+'" /><label for="'+chid+'">'+$(this).attr('value')+'</label></div>');
					else {
						if (!firstitem) {
							firstitem=$(this).html();
							firstitemvalue = $(this).attr('value');
						}
						dd.append('<a href="'+$(this).attr('value')+'">'+$(this).html()+'</a>');
					}
			});
			
			var a=$('<a />', { href: '#', text:(firstitem ? firstitem : settings.emptyText), 'class':'gselect', 'style':'width:'+selwidth+'px'});
			$this.after(a);
			
			a.after(dd);

			a.click(function(){
				var ddw = dd.width();
				var tw = a.outerWidth();
				
				if (ddw<tw) {
					tw = tw - (dd.outerWidth() - ddw);
					dd.width(tw);
				}
				
				var apos = a.offset();
				dd.css({ left:apos.left+'px', top: (apos.top+a.outerHeight())+'px' });

				dd.slideToggle('fast');
				return false;
			});

			if (smulti) {
				dd.find('input[type="checkbox"]').change(function(){
					var vals= new Array();
					var ddiv = $(this).closest('.gselect-dropdown');
					ddiv.find('input[type="checkbox"]:checked').each(function(){
						vals.push($(this).val());
					});
				
					ddiv.prev().html(vals.join(', '));
				});
				$this.remove();
			} else {
				$this.css('display','none');
				dd.find('a').click(function(){
					var ta = $(this);
					dd.prev().html(ta.html());
					ta.closest('.gselect-dropdown').slideUp('fast');
					$this.find('option').removeAttr('selected')
					 .filter('[value="'+ta.attr('href')+'"]').attr('selected','selected');
					 $this.change();
					return false;
				});
			}
			
			
		});
		
	};
})( jQuery );

