﻿ var isFF = (navigator.appName == "Netscape");

//var resourcesField = BambooGetResource(obj);
 function BambooGetResource(obj)
 {
    var resources = new Object;
	var values = BambooSplit(obj[0]);
	for(var i =0;i < values.length -1; i++)
	{
		resources[values[i]] =values[i+1];
		i++;
	}
	return resources;
 }
//onblur control
function Bamboo_ValidatorValidate(arrIdvalidate) 
{
	//debugger;	
	var strs = BambooSplit(arrIdvalidate);
	for(var i=0;i<strs.length-1;i++)
	{		
		ValidatorValidate(document.getElementById(strs[i]));
	}   
}

function Bamboo_ValidatorValidateColumn(arrIdvalidate) 
{		
	//debugger;
	var strs = BambooSplit(arrIdvalidate);
	if(strs != "")
	{
	        ValidatorValidate(document.getElementById(strs[0]));	
	    if(isFF)
	    {
		    if(document.getElementById(strs[0]).isvalid.toString() == "false")
			    return;
	    }
	    else
		    if(document.getElementById(strs[0]).attributes["isvalid"].value == "false")
			    return;
	    for(var i=1;i<strs.length-1;i++)
	    {		
		    ValidatorValidate(document.getElementById(strs[i]));
	    } 
	}  
}

function Bamboo_ValidateCheckInputValue(oSrc,args)
{
	//debugger;
	var val = new Object();	
	var typecolumn = oSrc.getAttribute("TypeColumn");
	var value;
	switch(typecolumn)
	{
		case "BambooValidatedColumnText":
			val.type = 'String';
			val.controltovalidate = oSrc.attributes['Bamboo_Controltovalidate'].value;
			args.IsValid= true;
			return;			
		case "BambooValidatedColumnNumber":
			val.type = 'Currency';
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			val.controltovalidate = oSrc.attributes['Bamboo_Controltovalidate'].value;
			//value = (ValidatorGetValue(val.controltovalidate).replace(val.groupchar,"")).replace(val.decimalchar,".");
			value = ValidatorGetValue(val.controltovalidate);
			break;
		case "BambooValidatedColumnCurrency":
			val.type = 'Currency';
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			val.controltovalidate = oSrc.attributes['Bamboo_Controltovalidate'].value;
			//value = (ValidatorGetValue(val.controltovalidate).replace(val.groupchar,"")).replace(val.decimalchar,".");
			value = ValidatorGetValue(val.controltovalidate);
			break;
		case "BambooValidatedColumnDate":
			val.type = 'Date';
			val.dateorder = oSrc.getAttribute("Bamboo_Dateorder");
			val.cutoffyear = oSrc.getAttribute("Bamboo_Cutoffyear");
			val.century = oSrc.getAttribute("Bamboo_century");
			var id = oSrc.attributes['Bamboo_Controltovalidate'].value;
			val.controltovalidate = id;
			value = ValidatorGetValue(val.controltovalidate);
			if(oSrc.getAttribute("RequireField") != null && value=="")
			{
				oSrc.innerHTML = resourcesField["RequireFieldDate"];
				args.IsValid = false;
				return;
			}
			break;
	}	
	var op1;
	//debugger;
	if(isFF)
		oSrc.innerHTML = oSrc.errormessage;
	else
		oSrc.innerHTML = oSrc.attributes["errormessage"].value;
	if(val.type == "Currency")
		value = Bamboo_GetValueNumber(value,val.type,val.groupchar);
	if ((op1 = ValidatorConvert(value, val.type, val)) == null && value != "")
	{		
		if(typecolumn != "BambooValidatedColumnDate")
			oSrc.innerHTML = resourcesField["ErrorNumber"];
		else
			oSrc.innerHTML = resourcesField["ErrorDate"];
		args.IsValid = false;
		return;
	}	
}

function Bamboo_GetValueNumber(value,type,groupchar)
{
	var strValue="";
	if(type == "Currency")
	{		
		for(var i=0;i<value.length;i++)
		{
			if(value.charAt(i) != groupchar && value.charAt(i).toString() != " ")
				strValue += value.charAt(i).toString();
		}		
	}
	return strValue;
}

function BambooSplit(s)
{
  var strresult = "";
  if (s.length==0)
	  return strresult;
  var result=new Array();
  var bk=-2;
  var re=/;#/g;
  if(s.search(re) == -1) return s;
  for (var i=0; i < s.length-1; i++)
  {
	  var c1=s.charAt(i);
	  var c2=s.charAt(i+1);
	  if (c1==';' && c2=='#')
	  {
		  result[result.length]=s.substring(bk+2, i).replace(re, "|");
		  bk=i;
	  }
  }
  result[result.length]=s.substring(bk+2);  
  return result;
}

//RegularExpression
function BBRegularExpressionValidateOperator(oSrc,args)
{
	//debugger;
	var val = new Object;	
	var arr = oSrc.attributes["BBRegularExpression"].value.split("#;#;$");
	var id;
	if(oSrc.attributes["controltovalidate"] != undefined)
		id = oSrc.attributes["controltovalidate"].value;
	else
		id = oSrc.getAttribute("BBcontrolvalidate");	
	var textBox = document.getElementById(id).value;	
	for(var i=0;i<arr.length;i++)
	{
		if(args.IsValid)
		{
			var aa = "^\\s*([-\\+])?((\\d{1,3}(\\ \\d{3})+)|\\d*)\\,?(\\d{0,12})\\s*$";
			if(arr[i] == aa)
			{
				val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
				val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
				val.digits = oSrc.getAttribute("Bamboo_digits");
				val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
				textBox = Bamboo_GetValueNumber(textBox,"Currency",val.groupchar);
				if(ValidatorConvert(textBox, "Currency", val) == null)	
					args.IsValid = false;
			}
			else
				args.IsValid = Bamboo_FormValidation_ValidateRegularExpression(textBox,arr[i]);
		}
	}	
}

//Range Validate
function Bamboo_FormValidation_ValidateRangeField(oSrc, args)
{
	//debugger;
	var val = new Object;
	val.controltovalidate = oSrc.getAttribute("Bamboo_ControlToValidate");
	val.minimumvalue = oSrc.getAttribute("Bamboo_Min");
	val.maximumvalue = oSrc.getAttribute("Bamboo_Max");
	val.type = oSrc.getAttribute("Bamboo_Type");
	switch (val.type)
	{
		case "Integer":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		case "Double":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		case "Date":
			val.dateorder = oSrc.getAttribute("Bamboo_Dateorder");
			val.cutoffyear = oSrc.getAttribute("Bamboo_Cutoffyear");
			val.century = oSrc.getAttribute("Bamboo_century");
			break;
		case "Currency":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		default:
			break;
	}
	if(val.type == "Double" || val.type == "Integer")
	{
		var value = ValidatorGetValue(val.controltovalidate);
		val.type = "Currency";
		var op1;
		if ((op1 = ValidatorConvert(value, val.type, val)) == null && value != "")
		{
			args.IsValid = false;
			return;
		}	   
	}	
	args.IsValid = Bamboo_RangeValidatorEvaluateIsValid(val);
	
	if(oSrc.getAttribute("Bamboo_MinHourMinute")!=null && oSrc.getAttribute("Bamboo_MaxHourMinute")!=null && args.IsValid)
	{	
		var value = ValidatorGetValue(val.controltovalidate);
		var min = oSrc.getAttribute("Bamboo_MinHourMinute");
		var max = oSrc.getAttribute("Bamboo_MaxHourMinute");
		var idHour = oSrc.getAttribute("Bamboo_ControlToValidate") + "Hours";
		var idMinute = oSrc.getAttribute("Bamboo_ControlToValidate") + "Minutes";		
		var valueMinutes;
		if(document.getElementById(idHour)!= null && document.getElementById(idMinute)!=null)
			valueMinutes = (document.getElementById(idHour).selectedIndex*60 + document.getElementById(idMinute).selectedIndex*5);
		else 
			valueMinutes = 0;
		
		if(value == val.minimumvalue && valueMinutes < min)
		{
			args.IsValid = false;
			return;
		}
		else
			if(value == val.maximumvalue && valueMinutes > max)
			{
				args.IsValid = false;
				return;
			}		
	}
}

function Bamboo_RangeValidatorEvaluateIsValidDateTime(value,val)
{
    return (Bamboo_ValidatorCompare(value, val.minimumvalue, "GreaterThanEqual", val) &&
            Bamboo_ValidatorCompare(value, val.maximumvalue, "LessThanEqual", val));
}

function Bamboo_FormValidation_CheckNumberFormat(value,groupchar,groupsize,decimalchar)
{
	//debugger;
	value = (value.replace(groupchar,"")).replace(decimalchar,".");
	var groupSizeNum = parseInt(groupsize, 10);
	var lastGroupCharIndex = value.lastIndexOf(groupchar);
	if(lastGroupCharIndex > 0)
	{
		var zeroIndex = value.indexOf(decimalchar) - 1;
		if(zeroIndex < -1)
		{
			zeroIndex = value.length - 1;
	        }
	        if(zeroIndex - lastGroupCharIndex != groupSizeNum)
	        {
	            return false;
	        }
	}
	return true;
}

function Bamboo_RangeValidatorEvaluateIsValid(val)
{
	//debugger;
	var value = ValidatorGetValue(val.controltovalidate);
	if(val.type == "Currency")
		value = Bamboo_GetValueNumber(value,val.type,val.groupchar);
    if (ValidatorTrim(value).length == 0)
        return true;
    return (Bamboo_ValidatorCompare(value, val.minimumvalue, "GreaterThanEqual", val) &&
            Bamboo_ValidatorCompare(value, val.maximumvalue, "LessThanEqual", val));
}


//Compare Validator
function BambooGetIdControlToPare(internalName)
{	
	var str2 = 'FieldInternalName="' + internalName + '"';		
	var arr = document.getElementsByTagName('!');   
	for (var i=0;i < arr.length; i++ )        
	{           
		if (arr[i].innerHTML.indexOf(str2) > 0)           
		{           
			return arr[i].parentNode.getElementsByTagName("input")[0].id;
		}         
	}
	return null;
}
function Bamboo_FormValidation_ValidateComparedField(oSrc, args)
{
	//debugger;	
	var value="";
	var val = new Object;
	var parentNodes = oSrc.parentNode;	
	val.controltovalidate = oSrc.getAttribute(oSrc.getAttribute("id"));
	if(val.controltovalidate == null || val.controltovalidate == "")
	{
		val.controltovalidate = oSrc.getAttribute("BBCusCompareColumn");
	}
	val.controltocompare = oSrc.getAttribute("internalNameControlToPare");
	val.controlhookup = oSrc.getAttribute("internalNameControlToPare");
	val.type = oSrc.getAttribute("TypeValidator");
	val.operator = oSrc.getAttribute("OperatorValidator");			
	val.valuetocompare = oSrc.getAttribute("BambooValueToCompare");		
	if(oSrc.attributes["validateemptytext"] == undefined && ValidatorGetValue(val.controltovalidate).length == 0)
	{
		return;
	}	
	switch(val.type)
	{
		case "Integer":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		case "Double":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		case "Date":
			val.dateorder = oSrc.getAttribute("Bamboo_Dateorder");
			val.cutoffyear = oSrc.getAttribute("Bamboo_Cutoffyear");
			val.century = oSrc.getAttribute("Bamboo_century");
			break;
		case "Currency":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		default:
			break;
	}
	if(val.type == "Double" || val.type == "Integer")
	{
		var value = ValidatorGetValue(val.controltovalidate);
		val.type = "Currency";
		var op1;
		if ((op1 = ValidatorConvert(value, val.type, val)) == null && value != "")
		{
			args.IsValid = false;
			return;
		}	   
	}
	args.IsValid = Bamboo_CompareValidatorEvaluateIsValid(val);
	//debugger;
	if(oSrc.getAttribute("BambooCompareDateTime")!=null )
	{	
		var valdate = new Object();		
		var value = ValidatorGetValue(val.controltovalidate);
		valdate.type = "Double";
		valdate.operator = val.operator;	
		valdate.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
		valdate.groupchar = oSrc.getAttribute("Bamboo_groupchar");
		valdate.digits = oSrc.getAttribute("Bamboo_digits");
		valdate.groupsize = oSrc.getAttribute("Bamboo_groupsize");
		var valueMinutes;
		if(document.getElementById(val.controltovalidate).parentElement.parentElement.getElementsByTagName('select').length >1)
		{
			var idHour = val.controltovalidate + "Hours";
			var idMinute = val.controltovalidate + "Minutes";
			valueMinutes = (document.getElementById(idHour).selectedIndex*60 + document.getElementById(idMinute).selectedIndex*5) + "";
		}
		else
			valueMinutes = 0 + "";
		if(val.valuetocompare == null)
		{
			var valuecontroltopare = document.getElementById(val.controltocompare).value;
			if(value == valuecontroltopare)
			{
				if(document.getElementById(val.controltocompare).parentElement.parentElement.getElementsByTagName('select').length >1)
				{
					var idHour = val.controltocompare + "Hours";
					var idMinute = val.controltocompare + "Minutes";
					valdate.valuetocompare = (document.getElementById(idHour).selectedIndex*60 + document.getElementById(idMinute).selectedIndex*5) + "";
				}
				else
					valdate.valuetocompare = 0 + "";
				args.IsValid = Bamboo_ValidatorCompare(valueMinutes, valdate.valuetocompare, valdate.operator, valdate);
			}
		}
		else
		{
			if(value == val.valuetocompare)
			{
				valdate.valuetocompare = oSrc.getAttribute("BambooValueTime");
				args.IsValid = Bamboo_ValidatorCompare(valueMinutes, valdate.valuetocompare, valdate.operator, valdate);
			}
		}		
	}	
}

function Bamboo_CompareValidatorEvaluateIsValid(val) 
{
	//debugger;
    //var value = ValidatorGetValue(val.controltovalidate);
    var value = Bamboo_ValidatorGetValue(val.controltovalidate);
    if (ValidatorTrim(value).length == 0)
        return false;
    var compareTo = "";
    if(val.valuetocompare == null)
    {
	compareTo = Bamboo_ValidatorGetValue(val.controltocompare);
    }
    else
	compareTo = val.valuetocompare;
    if(compareTo.length == 0)
	return false;
    var operator = "Equal";
    operator = val.operator;
    if(val.type == "Currency")
    {
	compareTo = Bamboo_GetValueNumber(compareTo,val.type,val.groupchar).replace(".",val.decimalchar);
	value = Bamboo_GetValueNumber(value,val.type,val.groupchar);
	}
    return Bamboo_ValidatorCompare(value, compareTo, operator, val);
}

function Bamboo_ValidatorGetValue(id) 
{
//debugger;
    var control;    
    control = document.getElementById(id);
    if(control!= null)
    {
	if(control.tagName == "SELECT" && control.type == "select-one")
		return control[control.selectedIndex].text;
	else
		 if (typeof(control.value) == "string")
			return control.value;	
    return ValidatorGetValueRecursive(control);
    }
}

function trim(str)
{
    if(!str || typeof str != 'string')
        return null;

    return str.replace(/^[\s]+/,'').replace(/[\s]+$/,'').replace(/[\s]{2,}/,' ');
}

function endWith(s1,s2)  
{  
	if(s1.length<s2.length)  
		return   false;  
	if(s1==s2)  
		return   true;  
	if(s1.substring(s1.length-s2.length)==s2)  
	  return   true;  
}

function Bamboo_ValidatorCompare(operand1, operand2, operator, val) {
	//debugger;
	var dataType = val.type;
	var op1, op2;
	if ((op1 = ValidatorConvert(operand1, dataType, val)) == null)
	return false;
	if (operator == "DataTypeCheck")
	return true;
	if ((op2 = ValidatorConvert(operand2, dataType, val)) == null)
	return true;
	if(dataType == "String")
	{
		op1 = trim(op1).toUpperCase();
		op2 = trim(op2).toUpperCase();
		index = op1.indexOf(op2);
		indexendwith = op1.length - op2.length;
	}    
	switch (operator) 
	{
		case "Contain":
			if(index != -1)
				return true;
			else
				return false;
		case "BeginWith":
			if(index == 0)
				return true;
			else
				return false;
		case "EndWith":
			return endWith(op1,op2);
			// if(index == indexendwith)
				// return true;
			// else
				// return false;
		case "NotEqual":
			return (op1 != op2);
	        case "GreaterThan":
			return (op1 > op2);
	        case "GreaterThanEqual":
			return (op1 >= op2);
	        case "LessThan":
			return (op1 < op2);
	        case "LessThanEqual":
			return (op1 <= op2);
	        default:
			return (op1 == op2);
	}
}

// Validator field lookup
function Bamboo_FormValidation_ValidateRequiredLookupField(oSrc, args)
{
	//debugger;
	var parentNodes = oSrc.parentNode;
	if(oSrc.getAttribute("Require") == "True")
	{
		if(args.Value.length == 0)
		{
			args.IsValid = false;
			return;
		}
	}
	else
	{
		if(parentNodes.getElementsByTagName("select").length == 1 && (parentNodes.getElementsByTagName("input").length == 0 || parentNodes.getElementsByTagName("input").length == 1))
		{
			if(document.getElementById (parentNodes.getElementsByTagName("select")[0].id).selectedIndex <= 0)
			{
				args.IsValid = false;
				return;
			}
		}
		else
			if(parentNodes.getElementsByTagName("select").length == 2 && parentNodes.getElementsByTagName("input").length == 3)
			{
				if(document.getElementById (parentNodes.getElementsByTagName("select")[1].id).length <= 0)
				{
					args.IsValid = false;
					return;
				}
			}
			else			
				if(document.getElementById (parentNodes.getElementsByTagName("input")[0].id).value == null || document.getElementById (parentNodes.getElementsByTagName("input")[0].id).value == "")
				{
					args.IsValid = false;
					return;
				}
	}			
}

// Validator field DateTime
function Bamboo_FormValidation_ValidateRequiredDateTimeField(oSrc, args)
{
	//debugger;
	var id = oSrc.getAttribute("controltovalidate");
	var value = document.getElementById(id).value;
	if(value.length <1)
	{
	    args.IsValid = false;
			return;
	}
}

function Bamboo_FormValidation_ValidateRequiredNoteField(oSrc, args)
{
	//debugger;
	//var controlToValidate = oSrc.getAttribute("BS_ControlToValidateClientId");
	var parentNodes = oSrc.parentNode;
	var id = parentNodes.getElementsByTagName("textarea")[0].id;
	var docEditor = RTE_GetEditorDocument(id);
	if (null != docEditor) 
	{
		if (ValidatorTrim(docEditor.body.innerText) == "" &&
		null == docEditor.body.innerHTML.match(/<IMG .*src=.*>/) &&
		null == docEditor.body.innerHTML.match(/<A .*<\/A>/)) 
		{
			args.IsValid = false;
			return;
		}
	}
	else 
	{
		var textBox = document.getElementById(id);
		if (textBox != null && typeof(textBox.value) == "string") 
		{
			args.IsValid = Bamboo_FormValidation_ValidateRequire(textBox.value);
			return;
		}
	}
}

function Bamboo_FormValidation_ValidateRequiredField(oSrc, args)
{
	//debugger;
	var val = new Object;
	val.controltovalidate = oSrc.getAttribute("controltovalidateId");
	val.initialvalue = "";
	args.IsValid = RequiredFieldValidatorEvaluateIsValid(val);
}

function Bamboo_FormValidation_ValidateRequire(value)
{
//debugger;
	return (ValidatorTrim(value) != "");
}


function Bamboo_FormValidation_ValidateRegularExpression(value, exprission)
{
	//debugger;
	if (ValidatorTrim(value).length == 0) 
	{
		return true;
	}
	var rx = new RegExp(exprission);
	var matches = rx.exec(value);
	return (matches != null && value == matches[0]);
}

function Bamboo_FormValidation_ValidateRegularExpressionNoteField(oSrc, args)
{
	//debugger;
	var parentNodes = oSrc.parentNode;
	var controlToValidate = parentNodes.getElementsByTagName("textarea")[0].id;	
	var validationexpression = oSrc.getAttribute("Bamboo_FormValidation_ValidateRegularExpressionNoteField");
	var docEditor = RTE_GetEditorDocument(controlToValidate);
	
	if (null != docEditor) 
	{
		args.IsValid = Bamboo_FormValidation_ValidateRegularExpression(docEditor.body.innerText, validationexpression)
		                && null == docEditor.body.innerHTML.match(/<IMG .*src=.*>/)
		                && null == docEditor.body.innerHTML.match(/<A .*<\/A>/)
		                && null == docEditor.body.innerHTML.match(/<TABLE .*>/);
	}
	else 
	{
		var textBox = document.getElementById(controlToValidate);
		if (textBox != null && typeof(textBox.value) == "string") 
		{
			args.IsValid = Bamboo_FormValidation_ValidateRegularExpression(textBox.value, validationexpression);
			return;
		}
	}
}

function Bamboo_FormValidation_ValidateRequiredUrlField(oSrc, args)
{
	//debugger;
	var parentNodes = oSrc.parentNode;
	var controlToValidate = parentNodes.getElementsByTagName("input")[0].id;	
	var textBox = document.getElementById(controlToValidate);
	if (textBox != null && typeof(textBox.value) == "string") 
	{
		args.IsValid = (ValidatorTrim(textBox.value) != "" && ValidatorTrim(textBox.value) != "http://");
	}
}

function Bamboo_ValidateInputNumber(oSrc, args)
{
	//debugger;
	var val = new Object;		
	val.controltovalidate = oSrc.attributes['controltovalidate'].value;	
	val.controltocompare = null;
	val.controlhookup = null;	
	val.type = oSrc.getAttribute("TypeInput");
	val.operator = null;		
	val.valuetocompare = null;
	switch(val.type)
	{
		case "Integer":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		case "Double":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		case "Date":
			val.dateorder = oSrc.getAttribute("Bamboo_Dateorder");
			val.cutoffyear = oSrc.getAttribute("Bamboo_Cutoffyear");
			val.century = oSrc.getAttribute("Bamboo_century");
			break;
		case "Currency":
			val.decimalchar = oSrc.getAttribute("Bamboo_DecimalChar");
			val.groupchar = oSrc.getAttribute("Bamboo_groupchar");
			val.digits = oSrc.getAttribute("Bamboo_digits");
			val.groupsize = oSrc.getAttribute("Bamboo_groupsize");
			break;
		default:
			break;
	}
	var value;
	if(val.type == "Double" || val.type == "Integer")
	{
	    value = ValidatorGetValue(val.controltovalidate);
	    if(!Bamboo_CheckNumberFormat(value,val.groupchar,val.groupsize,val.decimalchar))
	    {
	        args.IsValid = false;
	        return;
	    }
	    val.type = "Currency";
	}
	var op1;
	var dataType = val.type;
	if ((op1 = ValidatorConvert(value, dataType, val)) == null && value.length > 0)
	{		
		args.IsValid = false;
	}
}
function Bamboo_CheckNumberFormat(value,groupchar,groupsize,decimalchar)
{
	var groupSizeNum = parseInt(groupsize, 10);
	var lastGroupCharIndex = value.lastIndexOf(groupchar);
	if(lastGroupCharIndex > 0)
	{
	    var zeroIndex = value.indexOf(decimalchar) - 1;
		if(zeroIndex < -1)
		{
		       zeroIndex = value.length - 1;
		}
	        if(zeroIndex - lastGroupCharIndex != groupSizeNum)
	        {
	            return false;
	        }
	}
	return true;	
}