TL;DR; This code simply defines the start and end of the ICO using block number, but it extends various other sources to implement the Token, etc. Modifying it won't cause any issues.
I think you're starting in the wrong place. Firstly, you can add any code to any contract without implicating its existing functionality. I know it's a little premature, but I plan to do 2 tutorials in the next day or so on the ERC20 and ERC223 standards which is what a token should be designed around. This will be posted on https://www.youtube.com/channel/UCaWes1eWQ9TbzA695gl_PtA
ERC20
contract ERC20 {
function totalSupply() constant returns (uint totalSupply);
function balanceOf(address _owner) constant returns (uint balance);
function transfer(address _to, uint _value) returns (bool success);
function transferFrom(address _from, address _to, uint _value) returns (bool success);
function approve(address _spender, uint _value) returns (bool success);
function allowance(address _owner, address _spender) constant returns (uint remaining);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
ERC223
contract ERC223 {
uint public totalSupply;
function balanceOf(address who) constant returns (uint);
function name() constant returns (string _name);
function symbol() constant returns (string _symbol);
function decimals() constant returns (uint8 _decimals);
function totalSupply() constant returns (uint256 _supply);
function transfer(address to, uint value) returns (bool ok);
function transfer(address to, uint value, bytes data) returns (bool ok);
function transfer(address to, uint value, bytes data, string custom_fallback) returns (bool ok);
event Transfer(address indexed from, address indexed to, uint value, bytes indexed data);
}
After you have your contract for your token you then want to think about the ICO. With the ICO you should define start and end points. In the example above this is based off the blocks which is why you have:
require(startingBlock > block.number && startingBlock < endsAt);
and
require(endingBlock > block.number && endingBlock > startsAt);
This contract is inheriting from a contract called "Crowdsale" which is where most of your implementation looks like it's coming from. The full source code for this can be found on https://etherscan.io/address/0xb9aac097f4dadcd6f06761eb470346415ef28d5a#code This token is based around ERC20 standard and has quite a bit of an inheritance tree.