When you do this:

    $querystr = "SELECT * FROM `wp_posts` WHERE post_content LIKE '%Alba%' AND post_type='post' OR LOWER(post_title) LIKE '%$nume_searchq%' OR LOWER(post_content) LIKE '%$spec_searchq%' OR LOWER(post_content) LIKE '%$instit_searchq%' LIMIT $limit ";

If ANY of the variables are blank ($nume_searchq || $spec_searchq || $instit_searchq ), you will get all posts, because  "LIKE '%%'" matches everything.

So this leaves you with a couple of options. 1) Explicitly set each of those variables every time --or-- 2) Conditionally include them depending on if they contain something valuable.

For example:

    case "AB":
        $querystr = "SELECT * FROM `wp_posts` WHERE post_content LIKE '%Alba%' AND post_type='post'";
    
    	if ( isset( $nume_searchq ) && $nume_searchq !== '' )
    		$querystr .= " OR LOWER(post_title) LIKE '%$nume_searchq%'";
    
    	if ( isset( $spec_searchq ) && $spec_searchq !== '' )
    		$querystr .= " OR LOWER(post_content) LIKE '%$spec_searchq%'";
    
    	if ( isset( $instit_searchq ) && $instit_searchq !== '' )
    		$querystr .= " OR LOWER(post_content) LIKE '%$instit_searchq%'";
    
    	$querystr .= " LIMIT $limit ";
    
        break;