//Function to validate numeric control value

function IsNumeric(sText)
{
	var ValidChars = "0123456789";
	var IsNumber=true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++)
	{
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1)
		{ IsNumber = false; }
	}
	return IsNumber;
}

var SortFieldBuilder = Class.create({

	initialize: function(instanceVarName, containerId, IOFieldId, fieldList) {
		this.container = $(containerId);
		this.availableFieldList = fieldList;
		this.IOField = $(IOFieldId);
		this.IOField.hide();
		this.instanceVarName = instanceVarName;
		this._buildInitialFields();
	},

	addSortField: function(fieldValue, orderType) {
		if (!fieldValue) {
			var fieldValue = '';
		}
		if (!orderType) {
			var orderType = 'Ascending';
		}
		var itemCode = '';
		var separator = '';
		fieldSelectorCode = this._buildSelectElement('FieldList', fieldValue, this.availableFieldList);
		orderSelectorCode = this._buildSelectElement('FieldOrderType', orderType, ['Ascending', 'Descending']);
		if (this.container.getElementsByClassName('SortField').length > 0) {
			separator += '<div class="SortFieldSeparator">AND THEN</div>';
		}
		itemCode += '<div class="SortField">' + separator + 'Sort By ' + fieldSelectorCode +', '+ orderSelectorCode + ' [<a href="#" onclick="$(this).up().remove(); ' + this.instanceVarName + '.generateResultString(); return false;" class="SFRemove">Remove</a>]</div>';
		this.container.insert(itemCode);
		this.generateResultString();
	},

	generateResultString: function() {
		var selectFields = this.container.select('select');
		var renderedFields = new Array();
		for (var i = 0; i < selectFields.length; i = i + 2)
		{
			var fieldName = $(selectFields[i]).getValue();
			var fieldOrderType = '';
			if ($(selectFields[i+1]).getValue() == 'Descending')
			{
				fieldName = '-' + fieldName;
			}
			renderedFields.push(fieldName);
		}
		var fieldsStr = renderedFields.join(',');
		this.IOField.value = fieldsStr;
	},

	_buildInitialFields: function() {
		var orderValue = this.IOField.value;
		var fields = orderValue.split(",");
		for (var i = 0; i < fields.length; i++)
		{
			var fieldName = '';
			var fieldOrderType = 'Ascending';

			currentFieldName = fields[i];
			if (currentFieldName.charAt(0) == '-') {
				fieldName = currentFieldName.substring(1);
				fieldOrderType = 'Descending';
			}
			else
			{
				fieldName = currentFieldName;
			}
			this.addSortField(fieldName, fieldOrderType);
		}
	},

	_buildSelectElement: function(elementClass, selectedValue, optionList) {
		var selectCode = '<select class="' + elementClass + '" onchange="' + this.instanceVarName + '.generateResultString()">';
		for (var i = 0; i < optionList.length; i++)
		{
			var isSelected = "";
			if (selectedValue == optionList[i])
			{
				isSelected = ' selected="selected"';
			}
			selectCode += '<option value="' + optionList[i] + '"'+isSelected+'>' + optionList[i] + '</option>';
		}
		selectCode += '</select>';
		return selectCode;
	}

});
