function ValidatorGetValue(id) {
    var control;
    control = document.getElementById(id);
		
	if (control != null)
	{
		if (control.type != null)
		{
			switch(control.type.toLowerCase())
			{
				case "text":
				case "password":
				   if (control.value != null)
				   {
						return control.value;
	    			}
				break;
				
				case "checkbox":
					if (control.checked != null)
					{
							return (control.checked) ? "1" : "0";
					}
				break;
				
				default:
					if (control.value != null)
					{
						return control.value;
					}
			}
		}
		else
		if (control.value != null)
		{
			return control.value;
		}
	}   
	else
	   return "";   
}

function RequiredFieldValidatorValidate(InitialValue, CntValue) {
	return ( InitialValue != CntValue );
}


function RegularExpressionValidatorValidate(ValidationExpression, CntValue) 
{
	var rx = new RegExp(ValidationExpression);
	
    var matches = rx.exec(CntValue);
    
    return (matches != null && CntValue == matches[0]);
}	

function ValidatorTrim(s) {
    var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    return (m == null) ? "" : m[1];
}

function ConvertInteger(CntValue)
{
		exp = /^\s*[-\+]?\d+\s*$/;
        if (CntValue.match(exp) == null) 
            return null;
                
        num = parseInt(CntValue, 10);
        return (isNaN(num) ? null : num );	
}

function ValidatorConvertInteger(CntValue)
{
	return ( ConvertInteger(CntValue) == null ? false : true );
}


function ValidatorConvertDate(CntValue)
{
	return ( ConvertDate(CntValue) == null ? false : true );
}

function trimLeftZeroes(pNumStr)
{
	var s_pos=0;
	var s_len=pNumStr.length;
	while((s_pos<s_len)&&(pNumStr.charAt(s_pos)=='0'))
		s_pos=s_pos+1;
	if(s_pos==s_len) 
		pNumStr='0';
	else if(s_pos!=0)
		pNumStr=pNumStr.substr(s_pos);
	return pNumStr;
}

function checkDayCount(m,d,y)
{
	if((d<1)||(m<1)||(y<1))	return false;
	if((m>12)||(d>31)) return false;
	switch(m)
	{
		case 1:case 3:case 5:case 7:
		case 8:case 10:case 12:
		if(d>31)
		return false;
		break;
		case 4:case 6:case 9:case 11:
		if(d>30)
		return false;
		break;
		case 2:
		if(((y%4==0)&&(y%100!=0))||(y%400==0))
		{if(d>29)return false;}
		else
		{if(d>28)return false;}			 
		break;
		default:return false;			 
	}
	return true;
}

function ConvertDate1(data)
{
	error = 0;
	if(data.match(/^(\s)*$/)) return data;
	else if((data.charAt(2)!="/" && data.charAt(5)!="/") || data.length!=8)
		error = 1;
	else if(isNaN(data.charAt(0))||isNaN(data.charAt(1))||isNaN(data.charAt(3))||isNaN(data.charAt(4))||isNaN(data.charAt(6))||isNaN(data.charAt(7)))
		error = 1;
	else
	{
		day = eval(data.charAt(3)+data.charAt(4));
		day = trimLeftZeroes(day);
		day = parseInt(day);
		mnth = eval(data.charAt(0)+data.charAt(1));
		mnth = trimLeftZeroes(mnth);
		mnth = parseInt(mnth);
		yr = eval("20"+data.charAt(6)+data.charAt(7));
		yr = trimLeftZeroes(yr);
		yr = parseInt(yr);

		if(!checkDayCount(mnth, day, yr)) error=2;
		
		valueNumber = yr * 400 + mnth * 40 + day;
		//alert(valueNumber);
	}
	return ((error == 0) ? valueNumber : null );
}

function ValidatorConvertTime(CntValue) {
  return /^(((\s)*((([0]?[0-9])|([1][0-2]))(:[0-5][0-9])(\s)+(AM|PM))|((([0]?[0-9])|([1][0-9])|([2][0-3]))(:[0-5][0-9]))(\s)*)|((\s)*))$/.test(CntValue) }

function ConvertDouble(DecimalChar, CntValue)
{
		
		exp = new RegExp("^\\s*([-\\+])?(\\d*)?(\\" + DecimalChar + "(\\d*))?\\s*$");
        m = CntValue.match(exp);
        if (m == null)
            return null;
        
        var i;    
        for (i = 0; i < m.length; i++ )
        {
			if (m[i] == null)
				m[i] = "";
        }
         
       cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + (m[4].length>0 ? m[4] : "0");
                                       
        num = parseFloat(cleanInput);
        return (isNaN(num) ? null : num );            
}

function ValidatorConvertDouble(DecimalChar, CntValue)
{
	return ( ConvertDouble( ValidatorTrim(DecimalChar), CntValue) == null ? false : true );
}

function ValidatorConvertCurrency(DecimalChar, CntValue)
{
		exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + DecimalChar + "(\\d+))?\\s*$");
        m = CntValue.match(exp);
        if (m == null)
            return false;
        
        var i;    
        for (i = 0; i < m.length; i++ )
        {
			if (m[i] == null)
				m[i] = "";
        }
         
                    
        cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
                                
        num = parseFloat(cleanInput);
        
        if (m[4] == null)
			dec = true;
		else
			dec = (m[4].length <= 2);
        
        return (!isNaN(num) && dec ? true : false);            
}


function Convert(Value, DataType)
{
	switch (DataType.toLowerCase())
	{
		case "integer" :
			return ConvertInteger(Value);
		
		case "double" :
			return ConvertDouble(".", Value);	
		
		case "string" :
			return Value;
			
		case "date" :
			return ConvertDate(Value);	
		
		default	:
			return null;
	}
}

function ConvertDate(CntValue)
{
	day = "";
	month = "";
	year = "";
	
	//we split input string by separator /
	tokens = CntValue.split("/");
	
	//we accept only string with 3 parts
	if (tokens.length != 3)
		return null;
		
	//we assume mdy format by now
	month = tokens[0];
	day = tokens[1];
	year = tokens[2];
	
	//we check if tokens are integer numbers
	month = ConvertInteger(month);
	if (month == null)
		return null;
		
	day = ConvertInteger(day);
	if (day == null)
		return null;	
	
	year = ConvertInteger(year);
	if (year == null)
		return null;	
		
	if ((year >= 0 )	&& (year < 30))
		year += 2000;
		
	if(!checkDayCount(month, day, year))
		return null;
	
	valNumber = year * 400 + month * 40 + day; 
		
	return valNumber; 
		
} 

function CompareValidatorValidate(Operand2, Operator, DataType, Operand1)
{
	var op1, op2;
	
	if ((op1 = Convert(Operand1, DataType)) == null)
        return false;
    
    if ((op2 = Convert(Operand2, DataType)) == null)
        return false;
        
    switch (Operator.toLowerCase()) {
        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);            
    }          
}

function RangeValidatorValidate(MinimumValue, MaximumValue, DataType, CntValue)
{
	return ( CompareValidatorValidate(MinimumValue, "GreaterThanEqual", DataType, CntValue) && CompareValidatorValidate(MaximumValue, "LessThanEqual", DataType, CntValue) )
}

function isFF3()
{
    return navigator.userAgent.indexOf("Firefox/3")!=-1;
}
