function buy() withinPeriod public payable returns (bool){
        if (isPresale()) {
          require(msg.value >= presaleMinValue);
        }else{
          require(msg.value > 0);
        }
        if (weiOwed[msg.sender]>0) {
          weiFreeze(msg.sender, msg.value);
        } else if (msg.value>weiLimit && !users[msg.sender]) {
          weiFreeze(msg.sender, msg.value.sub(weiLimit));
          weiTransfer(msg.sender, weiLimit);
        } else {
          weiTransfer(msg.sender, msg.value);
        }
        return true;
    }