public Elevator CallUp(int fromFloor){
//		System.out.println("just added " + fromFloor);
		//check for error cases such as rider on top floor calling up
		if ((fromFloor>super.numFloors) || (fromFloor<0)){
			System.out.println("This floor does not exist");
		}
		//first we will send the first idle elevator
		for (Elevator e: elevators){
//			System.out.println("before the sync");
			synchronized(e){
				//if the elevator is idle
				//or if the elevator is below the rider and it's going up
				if(e.getMyDirection()==Elevator.DIRECTION_NEUTRAL){
					//add in condition about space
//					System.out.println("before the return");
					e.addFloor(fromFloor);
//					System.out.println("between add & arrive");
					e.getUpBarriers()[fromFloor].arrive();
					return e;
				}
			}
		}
		//else we will send the first elevator going in the correct elevator
		for (Elevator e: elevators){
			synchronized(e){
				//deals with the base case of the guy at the bottom
				//we send an elevator that is 
				if (fromFloor==1 && e.getMyDirection()==Elevator.DIRECTION_DOWN){
					e.addFloor(fromFloor);
					e.getUpBarriers()[fromFloor].arrive();
					return e;
				}
				//for the normal case
				if(e.getMyDirection()==Elevator.DIRECTION_UP && e.getFloor()<=fromFloor){
					e.addFloor(fromFloor);
					e.getUpBarriers()[fromFloor].arrive();
					return e;
				}
			}
		}
		//else if there are no elevators
		return null;
	}