	(function($){
		$.fn.radioSel = function(valueToSel){
			/* 	Usage
				$('input[id=sexo]', '#formInfo_Sexo').radioSel('F') -> Marca o radio cujo valor é 'F';
				$('input[id=sexo]', '#formInfo_Sexo').radioSel()	-> Retorna o valor do radio selecionado ou 'false' caso nenhum esteja marcado;
				$('input[id=sexo]', '#formInfo_Sexo').radioSel('')	-> Limpa todos o radio marcado;
			*/


			if(arguments.length>0){
				if(valueToSel!=''){
					return this.each(function(){ // iterate and reformat each matched element
						if($(this).val()==valueToSel)this.checked = true;
					})
				}else{ //Se veio fazio é para limpar todas as marcações
					return this.each(function(){ this.checked = false; })
				}
			}else{
				valorSelecionado = false;
				this.each(function(){ // iterate and reformat each matched element
					if(this.checked){
						valorSelecionado = $(this).val();
						return valorSelecionado;
					}
				});
				return valorSelecionado;
			}
		};

		$.fn.checkedValues = function(){
			/* 	Usage
				$('input:checkbox:checked', '#divTiposBairros').checkedValues();
			*/
			var arrCheckBoxes = [];

			this.each(function(){
				if(this.checked==true)arrCheckBoxes.push(this.value);
			});

			return arrCheckBoxes;
		};


	    $.fn.shuffle = function(){
			/*  Usage
		
				// Shuffle all list items within a list:
				$('ul#list li').shuffle();
				 
				// Shuffle all DIVs within the document:
				$('div').shuffle();
				 
				// Shuffle all <a>s and <em>s:
				$('a,em').shuffle();
				
				This plugin can be used on any set of elements, obviously performance needs to be taken into account when shuffling many elements.
			*/
	        var allElems = this.get(),
	            getRandom = function(max) {
	                return Math.floor(Math.random() * max);
	            },
	            shuffled = $.map(allElems, function(){
	                var random = getRandom(allElems.length),
	                    randEl = $(allElems[random]).clone(true)[0];
	                allElems.splice(random, 1);
	                return randEl;
	           });
	 
	        this.each(function(i){
	            $(this).replaceWith($(shuffled[i]));
	        });
	 
	        return $(shuffled);	 
	    };


		$.fn.fck = function(options){
			var opts = $.extend({}, $.fn.fck.defaults, options);
			return this.each(function() {
				var id = $(this).attr('id');
	
				eval(id +' = new FCKeditor("'+ id +'")');
				eval(id +'.BasePath = opts.BasePath');
				eval(id +'.ToolbarSet = opts.ToolbarSet');
				eval(id +'.ReplaceTextarea()');
	
	
				if(src.indexOf(opts.strSrc1) >= 0){
					alt = 'clique para fechar';
					src = src.replace(opts.strSrc1,opts.strSrc2);
				}else{
					alt = 'clique para abrir';
					src = src.replace(opts.strSrc2,opts.strSrc1);
				}
				$(this).attr('src', src);
				$(this).attr('alt', alt);
				$(this).attr('title', alt);
			});
		};$.fn.fck.defaults = {
			BasePath: '/../../_libs/fckeditor/',
			ToolbarSet: 'Basic'
		};


		$.fn.toggleSrc = function(options){
			var opts = $.extend({}, $.fn.toggleSrc.defaults, options);
			return this.each(function() {
				var alt, src = $(this).attr('src');
				if(src.indexOf(opts.strSrc1) >= 0){
					alt = 'clique para fechar';
					src = src.replace(opts.strSrc1,opts.strSrc2);
				}else{
					alt = 'clique para abrir';
					src = src.replace(opts.strSrc2,opts.strSrc1);
				}
				$(this).attr('src', src);
				$(this).attr('alt', alt);
				$(this).attr('title', alt);
			});
		};$.fn.toggleSrc.defaults = {
			strSrc1: 'Abre',
			strSrc2: 'Fecha'
		};


		$.fn.replaceInSrc = function(options){
			var opts = $.extend({}, $.fn.replaceInSrc.defaults, options);
			
			return this.each(function(){
				var img = $(this), src = img.attr('src');
				if($.isArray(opts.from)){
					$.each( opts.from, function(i, estaStr){
						src = src.replace(estaStr, opts.to);
						img.attr('src', src);
					});
				}else{
					src = src.replace(opts.from, opts.to);
					img.attr('src', src);
				}
			});
		};$.fn.replaceInSrc.defaults = {
			from : '', 
			to   : ''
		};


		$.fn.jsonPopulate = function(options){
			var opts = $.extend({}, $.fn.jsonPopulate.defaults, options);
			return this.each(function() {

				if(typeof(fb)!='undefined'){
					if(fb.habilitado==true){
						if(typeof(console)!='undefined'){
							console.groupCollapsed('jsonPopulate');
								console.debug(this);
								console.groupCollapsed('estrutura json passada como parâmetro');
									console.dir(opts.json);
								console.groupEnd();
							console.groupEnd();
						}
					}
				}else{
					if(typeof(console)!='undefined'){
						console.groupCollapsed('jsonPopulate');
							console.debug(this);
							console.groupCollapsed('estrutura json passada como parâmetro');
								console.dir(opts.json);
							console.groupEnd();
						console.groupEnd();
					}
				}

				htmlOpts = (opts.firstOptionBlank) ? '<option value="" selected></option>' : '';
				$.each(opts.json, function(i, option){
					j=0;
					valor  ='';
					codigo ='';
					$.each(option, function(i, n){
						j++;
						if(j==1)codigo = n;
						if(j==2)valor  = n;
					});
					htmlOpts += '<option value="'+ codigo +'">'+ valor +'</option>';
				});
				$(this).html(htmlOpts);
			});
		};$.fn.jsonPopulate.defaults = {
			json: [],
			firstOptionBlank: true
		};

		$.isArray = function(obj){
			if(typeof(obj) !== 'undefined'){
				if (obj.constructor.toString().indexOf("Array") == -1){
					return false;
				}else return true;
			}else return false;
		}
	})(jQuery);