private List<PartyResults> internalCalculations(List<Party> list){
		int chair = 0;
		int votes = 0;
		int counter = 0;

		if (!(list.size()>0)) return results;
		// Set to 0 totalVotes, not already calculated
		totalVotes=0;
		totalChairs=0;
		results.clear();

		for (Iterator it = list.iterator(); it.hasNext();) 
		{         
			Party p = (Party)it.next();             
			if (counter<3) {
				counter++;
				PartyResults pr = new PartyResults();
				pr.setChairs(p.getChairs());
				pr.setName(p.getName());
				pr.setVotes(p.getVotes());
				results.add(pr);
			}
			else {
				chair += p.getChairs();
				votes += p.getVotes();				
			}
			totalVotes += p.getVotes();
			totalChairs += p.getChairs();
		} 
		PartyResults other = new PartyResults();
		other.setName("Others");
		other.setChairs(chair);
		other.setVotes(votes);
		results.add(other);
		
		// We have the partial data calculated, now we only have to update the percentage and possible winner
		//		votes -- x
		//		total -- 100      x = votes*100/total
		//		
		//		chairs -- x
		//		650    -- 100     x = chairs*100/650
		
		for (Iterator it = results.iterator(); it.hasNext();){
			PartyResults p = (PartyResults) it.next();
			if (totalChairs>0) p.setPercChairs(p.getChairs()*100.0/650);
			if (totalVotes>0)  p.setPercVotes(p.getVotes()*100.0/totalVotes);
		}			
		return results;
	}