Going through your code, I noticed that you don't have a fallback function in your contract to receive ether.
Also, your msg.value is already sent to your method, hence you don't need to check senders balance: require(sender.balance >= total_ether_to_send); .
See, what you're doing is you are trying to send 100% msg.value to owner and then send 50% of msg.value back to sender. Obviously, you cannot spend 150% of msg.value without any additional funds on your contract.
Following is an example:
function requestForToken() public payable{
address sender = msg.sender;
uint value = msg.value;
total_ether_to_send = value / 2;
require(this.balance >= total_ether_to_send);
owner.transfer(total_ether_to_send);
require(this.balance >= total_ether_to_send);
sender.transfer(total_ether_to_send);
}
function() payable {}