When pressing F flash does not stay on.

So after I have a flashlight after I make hastorch = true which kinda works but the torch does not stay on. Sorry about the long post.
Here is my FlashLight script.

var lightSource : Light; 
static var EnergyPerBattery : float = 75;
static var BatteriesLeft : int = 0; 
static var turnedOn : boolean = false; 
private var drainSpeed : float = 0.5;
static var hastorch = false;

 
 
function Update () {
   if(hastorch == true){
    	if (Input.GetKey(KeyCode.F)) ToggleFlashlight();
	}
}
 

function ToggleFlashlight(){
   if(hastorch == true){
     turnedOn=!turnedOn;
    	if(turnedOn && EnergyPerBattery>0){
       		TurnOnAndDrainEnergy();
   	}
} 
    else{
       lightSource.enabled = false;
    }
}
 

function TurnOnAndDrainEnergy () {
    	lightSource.enabled = true;
    	while (turnedOn && EnergyPerBattery>0) {
       	EnergyPerBattery -= drainSpeed*Time.deltaTime;
       		yield;
    	}
    lightSource.enabled = false;
    	
}

function OnGUI(){
    GUI.Box (Rect (Screen.width - 100,Screen.height - 50,100,50), EnergyPerBattery.ToString());
    
}

static function AlterEnergy (amount : int){
	
}

Here is my PickUpTorchScript

var batteryPower : int = 10;

var hit : RaycastHit;
var mesh : GameObject;
var Range : float = 1;
var LookingAt = false;
var Destroyed = false;



function Update (){


var fwd = transform.TransformDirection (Vector3.forward);	
	var hit : RaycastHit;
		if(Physics.Raycast (transform.position, fwd, hit, Range)){
		Debug.DrawRay(transform.position, fwd * Range, Color.red);
			if( hit.collider.gameObject.tag == "Torch"){
				LookingAt = true;
					if(Input.GetKeyDown(KeyCode.E)){
						Destroy(mesh);
							Destroyed = true;
							LookingAt = false;			
			}
			else if( hit.collider.gameObject.tag == null){
				LookingAt = false;
			}				
		}
	}
	if(Destroyed == true){
		FlashLight.BatteriesLeft += 1;
		FlashLight.hastorch = true;
	}
	

}
function OnGUI(){
	if(LookingAt == true){
		GUILayout.BeginArea (Rect((Screen.width/2)-50, (Screen.height/2) , 100, 100));
		GUILayout.Label ("E To Interact");
		GUILayout.EndArea ();		
	 }	 
}

This is your problem:

function TurnOnAndDrainEnergy () {
        lightSource.enabled = true;
        while (turnedOn && EnergyPerBattery>0) {
        EnergyPerBattery -= drainSpeed*Time.deltaTime;
            yield;
        }
    lightSource.enabled = false;
 
}

change it to:

function TurnOnAndDrainEnergy () {
        while (turnedOn && EnergyPerBattery>0) {
            EnergyPerBattery -= drainSpeed*Time.deltaTime;
            lightSource.enabled = true;
            yield;
        }
        if (EnergyPerBattery <= 0) {
           lightSource.enabled = false;
           turnedOn = false;
        }
 
}