var swc_pageIsValid = true;
var swc_validators = null;
var swc_validatorLabels = null;
var swc_pageBlock = false;

function swc_ValidatorOnSubmit(e)
{	
	var result = !swc_pageBlock;
	
	swc_pageBlock = false;
	swc_pageIsValid = false;
	
	return result;
}

function swc_UpdateAllValidatorMessages()
{
    swc_ResetValidatorLabelDisplay();
    
    if ( swc_validators != null )
    {    
        for(var i = 0; i < swc_validators.length; i++ )
        {
            var validator = swc_validators[i];
            
            if ( validator != null )
            {
                if ( validator.isValid == false )
                {
                    validator.UpdateMessage();
                }
            }
        }
    }
}

function swc_ValidateValidators(validationGroup)
{    
    if ( swc_validators != null )
    {
	    for (var i = 0; i < swc_validators.length; i++) 
	    {
		    var validator = swc_validators[i];
    										
		    if ( validator != null )
		    {
		        if ( validator.validationGroup == validationGroup )
		        {
			        validator.Validate();
			        if ( validator.isValid == false )
			        {
				        swc_pageIsValid = false;
			        }
			    }
		    }
	    }
    	
	    swc_pageBlock = !swc_pageIsValid;
	}
}

function swc_UpdateDisplay(control, show)
{
    var v1 = document.getElementById(control);
    
    if ( v1 != null )
    {
    	if ( show == true )
    	{
	    	v1.style.display = "block";
    	}
	    else
    	{
	    	v1.style.display = "none";
    	}
	}
}

function swc_UpdateValidatorLabelDisplay()
{
    if ( swc_validators != null )
    {
	    for (var i = 0; i < swc_validators.length; i++) 
	    {
		    var validator = swc_validators[i];
		    if ( validator != null )
		    {
			    if ( validator.isValid == false )
			    {
				    swc_UpdateDisplay(validator.label.clientID, true);
			    }					
		    }
	    }
	}
}

function swc_ResetValidatorLabelDisplay()
{
    if ( swc_validators != null )
    {
        for (var i = 0; i < swc_validators.length; i++) 
        {
	        var validator = swc_validators[i];
	        if ( validator != null )
	        {
		        validator.label.Clear();
        				
		        swc_UpdateDisplay(validator.label.clientID, false);
	        }
        }
	}
}

function swc_ValidateClientPage(validationGroup)
{
	swc_pageBlock = false;
	swc_pageIsValid = true;

    if ( swc_validators != null )
    {
	    swc_ResetValidatorLabelDisplay();	
	    swc_ValidateValidators(validationGroup);
	    swc_UpdateAllValidatorMessages();
	    swc_UpdateValidatorLabelDisplay();
	}
	
	return swc_pageIsValid;
}

function swc_ValidateOnTextChange(control)
{
    swc_pageIsValid = true;
        
    if ( swc_validators != null )
    {
    	var validator = swc_validators[control];
	
    	if ( validator != null )
	    {    
		    swc_pageIsValid = validator.Validate();
		
        	if ( validator.isValid == false )
	        {
	            swc_UpdateValidatorLabelDisplay();
    	    }		
	    }
					
        swc_UpdateAllValidatorMessages();
    }
    
	swc_pageBlock = !swc_pageIsValid;			
}

function swc_ResetCssClass(control)
{
    if ( swc_validators != null )
    {
	    var validator = swc_validators[control];
    	
	    if ( validator != null )
	    {
            validator.UpdateCssClass();
	    }
	}
}	

function swc_SetCssClass(control, css)
{
    control.className = css;
}


function swc_ValidateOnBlur(control)
{
	swc_ValidateOnTextChange(control);
}

function swc_ValidateEnterKeyPressed()
{
    var key = event.keyCode;
    if ( key == 13 ) 
    { 
        event.returnValue=false; 
    }
}

function swc_ValidatorConvert(op, dataType, val) {
    function swc_GetFullYear(year) {
        return (year + parseInt(val.century)) - ((year < val.cutoffyear) ? 0 : 100);
    }
    var num, cleanInput, m, exp;
    if (dataType == "Integer") {
        exp = /^\s*[-\+]?\d+\s*$/;
        if (op.match(exp) == null) 
            return null;
        num = parseInt(op, 10);
        return (isNaN(num) ? null : num);
    }
    else if(dataType == "Double") {
        exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + val.decimalchar + "(\\d+))?\\s*$");
        m = op.match(exp);
        if (m == null)
            return null;
        cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
        num = parseFloat(cleanInput);
        return (isNaN(num) ? null : num);            
    } 
    else if (dataType == "Currency") {
        exp = new RegExp("^\\s*([-\\+])?(((\\d+)\\" + val.groupchar + ")*)(\\d+)"
                        + ((val.digits > 0) ? "(\\" + val.decimalchar + "(\\d{1," + val.digits + "}))?" : "")
                        + "\\s*$");
        m = op.match(exp);
        if (m == null)
            return null;
        var intermed = m[2] + m[5] ;
        cleanInput = m[1] + intermed.replace(new RegExp("(\\" + val.groupchar + ")", "g"), "") + ((val.digits > 0) ? "." + m[7] : 0);
        num = parseFloat(cleanInput);
        return (isNaN(num) ? null : num);            
    }
    else if (dataType == "Date") {
        var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\s*$");
        m = op.match(yearFirstExp);
        var day, month, year;
        if (m != null && (m[2].length == 4 || val.dateorder == "ymd")) {
            day = m[6];
            month = m[5];
            year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10))
        }
        else {
            if (val.dateorder == "ymd"){
                return null;		
            }						
            var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$");
            m = op.match(yearLastExp);
            if (m == null) {
                return null;
            }
            if (val.dateorder == "mdy") {
                day = m[3];
                month = m[1];
            }
            else {
                day = m[1];
                month = m[3];
            }
            year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10))
        }
        month -= 1;
        var date = new Date(year, month, day);
        return (typeof(date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
    }
    else {
        return op.toString();
    }
}
