contract Adminable is Ownable {
	address public admin;
	event AdminDesignated(address indexed previousAdmin, address indexed newAdmin);

  /**
    * @dev Throws if called the non admin.
    */
	modifier onlyAdmin() {
		require(msg.sender == admin);
		_;
	}

  /**
    * @dev Throws if called the non owner and non admin.
    */
  modifier onlyOwnerOrAdmin() {
		require(msg.sender == owner || msg.sender == admin);
		_;
	}

  /**
    * @dev Designate new admin for the address
    * @param _address address The address you want to be a new admin
    */
	function designateAdmin(address _address) public onlyOwner {
		require(_address != address(0) && _address != owner);
		emit AdminDesignated(admin, _address);
		admin = _address;
	}
}
/**
 * @title Adminable
 * @dev The Adminable contract has the simple protection logic, and provides admin based access control
 */
function designateAdmin(address _address) public onlyOwner {
	require(_address != address(0) && _address != owner);
	emit AdminDesignated(admin, _address);
	admin = _address;
}

/**
 * @dev Designate new admin for the address
 * @param _address address The address you want to be a new admin
 */