/////////////////////////////////////////////////////
//	NToolsStaticClass object
//
function NToolsStaticClass()
{
	//	Operations
	NToolsStaticClass.prototype.indexOf = function(array, element)
	{
		for(var i = 0; i < array.length; i++)
		{
			if(array[i] == element)
			{
				return i;
			}
		}
		return -1;
	}

	NToolsStaticClass.prototype.ParseArgumentsString = function(argumentsString)
	{
		var argumentsArray = new Array();
		var variables = argumentsString.split(",");
		for(var i = 0; i < variables.length; i++)
		{
			var variable = variables[i];
			var tokens = variable.split("=");
			if(tokens.length < 2)
				break;
			
			var name = this.TrimString(new String(tokens[0]), new Array(" ", "\""));
			var val = this.TrimString(new String(tokens[1]), new Array(" ", "\""));
			argumentsArray[name] = val;
		}
		return argumentsArray;
	}
	
	NToolsStaticClass.prototype.TrimString = function(str, trimCaractersArray)
	{
		return this.TrimStartOfString(this.TrimEndOfString(str, trimCaractersArray), trimCaractersArray);
	}

	NToolsStaticClass.prototype.TrimStartOfString = function(str, trimCaractersArray)
	{
		var i;
		for(i = 0; i < str.length; i++)
		{
			var stringChar = str.charAt(i);
			var trimMatchFlag = false;
			for(var j = 0; j < trimCaractersArray.length; j++)
			{
				var trimChar = trimCaractersArray[j];
				if(trimChar == stringChar)
				{
					trimMatchFlag = true;
					break;
				}
			}
			if(!trimMatchFlag)
				break;
		}
		
		return str.slice(i);
	}

	NToolsStaticClass.prototype.TrimEndOfString = function(str, trimCaractersArray)
	{
		var i = str.length - 1;
		for(; i >= 0; i--)
		{
			var stringChar = str.charAt(i);
			var trimMatchFlag = false;
			for(var j = 0; j < trimCaractersArray.length; j++)
			{
				var trimChar = trimCaractersArray[j];
				if(trimChar == stringChar)
				{
					trimMatchFlag = true;
					break;
				}
			}
			if(!trimMatchFlag)
				break;
		}

		return str.slice(0, i + 1);
	}

	NToolsStaticClass.prototype.GetEndOfStringTrim = function(str, trimCaractersArray)
	{
		var i = str.length - 1;
		for(; i >= 0; i--)
		{
			var stringChar = str.charAt(i);
			var trimMatchFlag = false;
			for(var j = 0; j < trimCaractersArray.length; j++)
			{
				var trimChar = trimCaractersArray[j];
				if(trimChar == stringChar)
				{
					trimMatchFlag = true;
					break;
				}
			}
			if(!trimMatchFlag)
				break;
		}

		return str.slice(i + 1);
	}

	NToolsStaticClass.prototype.ReplaceString = function(str, searchString, replaceString)
	{
		var lastMatch = 0;
		while(lastMatch != -1)
		{
			lastMatch = str.indexOf(searchString, lastMatch);
			if(lastMatch == -1)
				break;
			str = str.slice(0, lastMatch) + replaceString + str.slice(lastMatch + searchString.length);
			lastMatch += replaceString.length;
		}
		return str;
	}
	
	NToolsStaticClass.prototype.RecalculateWithSimpleNewLine = function(str, offset)
	{
		var precalcOffset = offset;
		var c = 0;
		for(var i = 0; i < offset; i++)
		{
			var c = str.charAt(i);
			if(c == '\n')
				precalcOffset ++;
			if(c == '\r')
				offset ++;
		}
		
		return precalcOffset;
	}
	
	NToolsStaticClass.prototype.ReverceRecalculateWithSimpleNewLine = function(str, offset)
	{
		var precalcOffset = offset;
		var c = 0;
		for(var i = 0; i < offset; i++)
		{
			var c = str.charAt(i);
			if(c == '\n')
				precalcOffset --;
		}
		
		return precalcOffset;
	}
	
	NToolsStaticClass.prototype.GetEtpTagSelection = function(str, selectedIndex)
	{
		var selection = new Object();
		selection.Start = -1;
		selection.End = str.indexOf(")", selectedIndex);
		if(selection.End == -1)
			return null;
		var nextDollar = str.indexOf("$", selectedIndex);
		if(nextDollar != -1 && nextDollar < selection.End)
			return null;
		
		for(var i = selectedIndex; i >= 0; i--)
		{
			if(str.charAt(i) == ")")
				break;
				
			if(str.charAt(i) == "$")
			{
				selection.Start = i + 1;
				break;
			}
		}
		if(selection.Start == -1)
			return null;

		selection.Start--;
		selection.End += 1;
		
		return selection;
	}
	
	NToolsStaticClass.prototype.SetQueryStringVar = function(queryString, varName, varValue)
	{
		var foundAt = queryString.indexOf("&" + varName + "=");
		if(foundAt == -1)
			return queryString + "&" + varName + "=" + varValue;
		var endAt = queryString.indexOf("&", foundAt + 1);
		var resultQueryString = queryString.slice(0, foundAt) + "&" + varName + "=" + varValue + queryString.slice(endAt);
		alert(resultQueryString);
		return resultQueryString;
	}

}
//	Static Instance
var NTools = new NToolsStaticClass();
