The error is that your contract can not receive ether because it doesn't have a fallback function. Just add this to it:
function () public payable{
}
This will allows your contract to accept ether.
Another thing is that in your send function you have:
msg.sender.transfer(msg.value);
but should be
_receiver.transfer(msg.value);
Also, is not clear what are you trying to do in your js code, are you trying to send ether to the contract, or are you trying to use the 'send' function?
In the first case (sending ether to the contract use):
web3.eth.sendTransaction({....})
In the second case (trying to use the send function in your contract), having your contract instance as 'contractInstance' you can do something like this:
var account = web3.eth.accounts[0];
var mycontract = web3.eth.contract(ABI);
var contractInstance = mycontract.at('contractaddress...')
contractInstance.send('0x...',{'value':web3.toWei(myvalue,'ether')} function(err,res){
if(err){
console.log('transaction failed')
}
})
hope this helps
Best Answer
What probably happens is that Metamask runs a static call to the contract with the same parameters, to simulate what would happen if the transaction took place. If it notices that the static call reverts, it gives you this error - because most likely the real transaction would revert as well.
So most likely there is something in the code which causes a revert with the given parameters.