var $j = jQuery.noConflict();

var TagsFilterFormLogic = function() {

    var tagsAmount=0;
	
	var obj = {};
	
	var convertSelectToTagsList = function(element) {
		
		var tags = $j('<div class="status_tags"></div>');
		
		$j(element).children('option').each(function(i, dom){
			
				var span = $j('<span></span>').attr({
					'id': 'tag_' + $j(dom).val(),
					'class': 'tag'
				}).append(
					$j('<span></span>')
						.addClass('leftCorner')
				).append(
					$j('<a></a>')
						.text($j(dom).text()
				)).append(
                    $j('<span></span>')
                        .addClass('rightCorner')
                );
				if ($j(dom).attr('selected')) {
					span.addClass('selected');
				}
				tags.append(span);
			
		});
		tags.appendTo($j(element).parent());
		
		if ($j(element).attr('multiple')) {
			tags.addClass('multiple');
		}
	}
	
	var toggleSelectValue = function(element) {
		var id = $j(element).attr('id').substr('tag_'.length);
		var option = $j(element).parent().siblings('select.status_tag').children("option[value='"+id+"']");
		if (option.attr('selected')) {           
            
			option.removeAttr('selected');
		} else {
            if (tagsAmount<5) {
                  
			    option.attr('selected', 'selected')
            }
		}
	}
	
	var toggleSelectedClass = function(element) {
		if (!$j(element).parent().hasClass('multiple')) {
			$j(element).parent().children().removeClass('selected');
            toggleSelectedClassSimple(element);
            return false;
		}
    
        if($j(element).hasClass('selected')){
            if (tagsAmount==5) {
                $j('#tags_amount_exception').removeClass('show');    
            }
            tagsAmount--;    
            $j(element).removeClass('selected'); 
        }
        else {
            if (tagsAmount<5) {
                tagsAmount++; 
                $j(element).addClass('selected'); 
            }
            else {
                if(!$j('#tags_amount_exception').hasClass('show')) {
                    $j('#tags_amount_exception').addClass('show'); 
                }
            }
        }
        
		
	}
    
    var toggleSelectedClassSimple = function(element) {
        $j(element).toggleClass('selected');  
    }
	
	var addEvents = function() {
		$j('.status_tags .tag').click(function() {
			toggleSelectedClass(this);
			toggleSelectValue(this);  
			return false;
		});
		$j('.star-rating').mouseover(function() {
			var id = $j(this).attr('id').substr('spicy_'.length);
			$j(this).parent().siblings('input[value='+id+']').next('label').show();
		});
		$j('.star-rating').mouseout(function() {
			var id = $j(this).attr('id').substr('spicy_'.length);
			$j(this).parent().siblings('input[value='+id+']').next('label').hide();
		});
		
	}
	
	var convertAllSelectsToTagsList = function() {
		$j('select.status_tag').hide();
		$j('select.status_tag').each(function(index, domElement) {
			if ($j(domElement).hasClass()) {
				convertSelectToRatableList(domElement);
			} else {
				convertSelectToTagsList(domElement);
			}
		});
	};
	
	var convertRatableTags = function() {
		$j('input.ratable_tags').rating();
		$j('.ratable_tag_description').hide();
	}

	obj.init = function() {
		convertAllSelectsToTagsList();
		convertRatableTags();
		addEvents();
	}

	return obj;
}();

$j(document).ready(function(){
	TagsFilterFormLogic.init()
});
