function purchaseMembership(address sender, address recipient) external payable saleActive hasValue recipientIsValid(recipient) {

        if (msg.sender != address(legendsToken)) {
            throw;
        }
        
        if (!exitAddress.send(msg.value)) {
            throw;
        }

        
        recipientETH[recipient] += msg.value;
        totalETH += msg.value;

        
        uint VIP = msg.value * 12;  

        
        if (block.timestamp - start < 2 weeks) {
            VIP = (VIP * 10) / 9;   
        }

        
        recipientVIP[recipient] += VIP;
        totalVIP += VIP;

        
        if (totalVIP > limitVIP) {
            throw;
        }

        
        legendsToken.addTokens(recipient, VIP);

        
        VIPPurchase(sender, recipient, msg.value, VIP);
    }