(function($) {
	$.fn.tagAjax = function(options) {		
		$.fn.tagAjax.options.el=this;
		$.fn.tagAjax.options.model=options.model;
		
		parentClass=$(this).parent().attr('class')
			.replace('cercaAjax ','')
			.replace('aggiungiTagAjax ','')
			.replace(' habtm','')
			.replace(' belongsTo','')
		;
	
		tipo=$(this).parent().attr('class').match('.*'+parentClass+' (.*)')[1];

		if($(this).next().is('#Tags')==false)
			$(this).after('<div id="Tags">');

		$(this).keyup(function(){
			input_value=$(this).val();
			
			if(input_value!=''){
				data_add={
					el:this,
					model:options.model,
					parentClass:parentClass,
					tipo:tipo,
					input_value:input_value
				};
				
				if($(this).next().is('img')==false){
					$(this).after('<img src="'+DIR+'/img/add.png" />');

					$(this).next('img').click(function(){
						$(this).tagAjax.addTag(data_add);
					});					
				}
			}
		});		
	}
	
	$.fn.tagAjax.addTag= function(data) {		
		parentClass=$(data.el).parent().attr('class')
			.replace('cercaAjax ','')
			.replace('aggiungiTagAjax ','')
			.replace(' habtm','')
			.replace(' belongsTo','')
		;
	
		tipo=$(data.el).parent().attr('class').match('.*'+parentClass+' (.*)')[1];
		
		ce_gia=0;
		$('.'+data.parentClass+' .tagNome').each(function(){
			if($(this).text()==data.input_value+' [X]')
				ce_gia=1;
		});

		if(ce_gia==0){
			$(data.el).next('img').attr('src',''+DIR+'/img/ajax-loader-small.gif');

			data_post={
				nome:data.input_value,
				model:data.model,
				parentClass:parentClass,
				tipo:tipo
			};
			
			$.post(
				DIR+'tags/add/', 
				data_post, 
				$.fn.tagAjax.addTagResponse, 
				"json"
			);
		}
	}
	
	$.fn.delTagAjax= function() {
		$(this).click(function(){
			$(this).parent().remove();

			$.fn.tagAjax.attivaHasOne();
		});
	}
	
	$.fn.tagAjax.addTagResponse= function(data) {
		ce_gia=0;
		$('.'+data.parentClass+' .tagNome').each(function(){
//			console.log($(this).text());
			if($(this).text()==(data.nome+' [X]').replace("\r",''))
				ce_gia=1;
		});

		if(ce_gia==0){
			model=data.parentClass
				.replace('cerca','')
				.replace('aggiungi','')
			;
			
			html='';
			html+='';
			html+='<div class="tagNome">';
			html+=data.nome;
			html+=' <span class="elimina">';
			html+='[X]';
			html+='</span>';

			switch(data.tipo){
				case 'habtm':
					html+='<input type="hidden" id="'+model+model+data.id+'" name="data['+model+']['+model+'][]" value="'+data.id+'" />';
				break;
				
				case 'belongsTo':
					html+='<input type="hidden" id="'+model+'Id'+data.id+'" name="data['+model+'][id][]" value="'+data.id+'" />';
				break;
			}
			
			html+='</div>';
	
			$('.'+data.parentClass+' #Tags').append(html);
			
			$('.'+data.parentClass+' .tagNome').hover(
				function(){
					$(this).find('.elimina').css('visibility','visible');
				},
				function(){
					$(this).find('.elimina').css('visibility','hidden');				
				}
			);
	
			$('.'+data.parentClass+' .tagNome>.elimina').delTagAjax();
						
			$.fn.tagAjax.attivaHasOne();
		}
		
		$('.'+data.parentClass+' input').eq(0).val('');
		$('.'+data.parentClass+' input').eq(0).next('img').remove();
	}

	$.fn.tagAjax.attivaHasOne= function() {
		hasOne='';
		$('.hasOne').each(function(){
		    classe=$(this).attr('class');
		    classe=classe.replace(/hasOne /,'');

		    hasOne+=classe+',';
		});

		
		$('.tagNome').each(function(){
			nomeTag=$(this).text();

			nomeTag=nomeTag.replace(/ /g,'').replace(/\[X\]/g,'');
			
			if(hasOne.search(nomeTag+',')>-1){
				$('.'+nomeTag).slideDown();
				hasOne=hasOne.replace(nomeTag+',','')
			}
		});
		
		inattivi=hasOne.split(',');
		for (i in inattivi){
		    if(inattivi[i]!='')
		    	$('.'+inattivi[i]).slideUp();
		}
	}
	
	$.fn.tagAjax.options = {
		el:'',
		model:'',
		parentClass:''
	};
})(jQuery);
