
var  columnPos =0;
var  operatorPos =1;
var  valuePos =2;
var  controlTypePos =3;
var  combinePos =4;
var  customPos = 5;
		
function ttsearchString()
{
	this.Conditions = new List();
	
	this.Add=Add;
	this.Remove=Remove;
	this.RemoveAt=RemoveAt;
	this.GetAt=GetAt;
	this.ToString =ToString;
	this.Clear =Clear;
	this.LoadFromString =LoadFromString;
	
	function Add(column,operatorType,data,controlType, combine, custom)
	{
		var condition = new ttsearchStringCondition(column,operatorType,data,controlType,combine, custom);  
		this.Conditions.addItem(condition);
	}
	
	function LoadFromString(searchString)
	{	    
	    var columns = searchString.split(conditionSep);
		for(var i=0;i<columns.length;i++)
		{
			var clientCondition = columns[i].split('|'); 
			if(clientCondition[columnPos]!="")
			{
			    if (clientCondition.length == 4)
			    {
			        this.Add(clientCondition[columnPos],clientCondition[operatorPos],
			        clientCondition[valuePos],clientCondition[controlTypePos], 
			        null, null);
			    }
			    else if (clientCondition.length == 5)
			    {
			        this.Add(clientCondition[columnPos],clientCondition[operatorPos],
			        clientCondition[valuePos],clientCondition[controlTypePos], 
			        clientCondition[combinePos], null);	
			    }
			    else if (clientCondition.length == 6)
			    {
			        this.Add(clientCondition[columnPos],clientCondition[operatorPos],
			        clientCondition[valuePos],clientCondition[controlTypePos], 
			        clientCondition[combinePos], clientCondition[customPos]);			    
			    }
			}
		}
	}
	
	function GetAt(index)
	{
		return this.Conditions.getAtIndex(index);
	}
	
	function RemoveAt(index)
	{
		this.Conditions.removeAt(index);
	}
	
	function Remove(column)
	{
		var count = 0;
		
		while(count < this.Conditions.length)
		{
            var condition = this.Conditions.getAtIndex(count);
            if(condition.Column.toUpperCase() == column.toUpperCase())
            {
				this.Conditions.removeAt(count);
            }
            else
            {
				count++;
            }		    
		}	  
	}
	
	function Clear()
	{
		this.Conditions = new List();
	}	
	
	function ToString()
	{
		var toString ="";
		for(var i=0;i<this.Conditions.length;i++)
		{
			var condition = this.Conditions.getAtIndex(i)
			if(i >0)
				toString +=conditionSep;
			toString +=condition.Column +"|" + condition.OperatorType 
			+"|" + condition.Value +"|" + condition.ControlType +"|" +condition.ConditionCombine
			+"|" +condition.CustomAttributes;			
		}
		return toString;
	}
	
	function ttsearchStringCondition(column,
							operatorType,
							value,
							controlType,
							conditionCombine, customAttributes	)
	{
		this.Column = column;
		this.OperatorType = operatorType;
		this.Value = value;
		this.ControlType = controlType;
		this.CustomAttributes =customAttributes;
		
		if(conditionCombine !=null)
			this.ConditionCombine=conditionCombine;
		else
			this.ConditionCombine=ConditionCombine_and;
	}
}