////////////////////////////////////////////////////////////////
//
//	strtok class
//
//	tokenizes a String object based on a String of separator characters.
//
//	Copyright (C) 2008 Michael V. Newberry. All Rights Reserved.
//
//	This copyright notice must be included in any portion of this source
//	code that is used in any form and for any purpose.
//

////////////////////////////////////////////////////////////////////////
function start()
{
	this.m_nOffset = 0;
	this.m_sToken = '';
}

///////////////////////////////////////////////////////////////////////
function init( sString )
{
	this.m_sString = sString;
	this.m_nOffset = 0;
	this.m_sToken = '';
}

///////////////////////////////////////////////////////////////////////
function next()
{
	this.m_sToken = '';

	// find beginning of token
	var begin = this.m_nOffset;
	while ( begin < this.m_sString.length )
	{
		if ( this.isDelimiter( this.m_sString.charAt(begin) ) == false )	
			break;
		begin++;
	}
	if ( begin == this.m_sString.length )
	{
		this.m_sToken = '';
		return this.m_sToken;
	}

	// look for end of token
	var end = begin;
	while ( end < this.m_sString.length )
	{
		if ( this.isDelimiter( this.m_sString.charAt(end) ) == true )
			break;
		end++;
	}

	this.m_nOffset = end;
	this.m_sToken = this.m_sString.substr( begin, end - begin );
	
	return this.m_sToken;
}

///////////////////////////////////////////////////////////////////////
function setDelimiter( sDelimiter )
{
	this.m_sDelimiter = sDelimiter;
}

///////////////////////////////////////////////////////////////////////
function isDelimiter( c )
{
	for ( var i = 0; i < this.m_sDelimiter.length; i++ )
	{
		if ( this.m_sDelimiter.charAt(i) == c )
			return true;
	}
	return false;
}

///////////////////////////////////////////////////////////////////////
function strtok( str, delimiter )
{
	this.m_sString = str;
	this.m_nOffset = 0;
	this.m_sDelimiter = delimiter;
	this.m_sToken = '';

	this.isDelimiter = isDelimiter;
	this.setDelimiter = setDelimiter;
	this.start = start;
	this.init = init;
	this.next = next;
}
