/*
PARAMETERS :
controlToValidate   = Client ID of the control that will be validated.
errorMessage        = Message that will be shown when validation fails.
validationGroup     = Validation group. Can be null.
operator            = String representation of the operation for comparing the control with a value.
                      Valid operators are "=" , ">" , ">=" , "<" , "<=" , "!="
valueToCompare      = The value that will be compared with controls' value.
minValue            = Minimum value for range validation
maxValue            = Maximum value for range validation

Functions are;

function validate(validationGroup)
function removeValidator(controlToValidate)
function addRequiredValidator(controlToValidate, errorMessage, validationGroup)
function addRegexValidator(controlToValidate, regEx, errorMessage, validationGroup)
function addEmailValidator(controlToValidate, errorMessage, validationGroup)
function addIntegerValidator(controlToValidate, errorMessage, validationGroup)
function addDoubleValidator(controlToValidate, errorMessage, validationGroup)
function addStringValidator(controlToValidate, errorMessage, validationGroup)
function addIntegerCompareValidator(controlToValidate, operator, valueToCompare, errorMessage, validationGroup)
function addStringCompareValidator(controlToValidate, operator, valueToCompare, errorMessage, validationGroup)
function addDoubleCompareValidator(controlToValidate, operator, valueToCompare, errorMessage, validationGroup)
function addDateCompareValidator(controlToValidate, operator, valueToCompare, errorMessage, validationGroup)
function addIntegerRangeValidator(controlToValidate, minValue, maxValue, errorMessage, validationGroup)
function addDoubleRangeValidator(controlToValidate, minValue, maxValue, errorMessage, validationGroup)
function addDateRangeValidator(controlToValidate, minValue, maxValue, errorMessage, validationGroup)
function addValidationSummary(validationGroup)
*/

function validate(validationGroup)
{
    if(validationGroup == null)
        return Page_ClientValidate();
    else
        return Page_ClientValidate(validationGroup);
}

function removeValidator(controlToValidate)
{
	var newPageValidators = new Array();
	var j = 0;
	for(i=0; i<Page_Validators.length; i++)
		if(Page_Validators[i].controltovalidate != controlToValidate)
	    {
	        newPageValidators[j] = Page_Validators[i];
	        j++;
	    }
    Page_Validators = newPageValidators;
}

function addRequiredValidator(controlToValidate, errorMessage, validationGroup)
{
	var exists = false;
	for(i=0; i<Page_Validators.length; i++)
		if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "rfv"))
			exists = true;
	if(!exists)
	{
		var validationObject = new Object();
		validationObject.validatorType = "rfv";
		validationObject.controltovalidate = controlToValidate;
		validationObject.errormessage = errorMessage;
		if(validationGroup != null)
		    validationObject.validationGroup = validationGroup;
		validationObject.isvalid = true;
		validationObject.focusOnError = "t";
		validationObject.initialvalue = "";
		validationObject.evaluationfunction = RequiredFieldValidatorEvaluateIsValid;
		validationObject.style = new Array();
		validationObject.style[0] = "color";
		validationObject.style[1] = "visibility";
		Page_Validators[Page_Validators.length] = validationObject;
	}
}

function addRegexValidator(controlToValidate, regEx, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "regexfv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "regexfv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.errormessage = errorMessage;
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        validationObject.validationexpression = regEx;
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = RegularExpressionValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addEmailValidator(controlToValidate, errorMessage, validationGroup)
{
    addRegexValidator(controlToValidate, "^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*.(([0-9]{1,3})|([a-zA-Z]{2,3}))$", errorMessage, validationGroup);
}

function addIntegerValidator(controlToValidate, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "iv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "iv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.errormessage = errorMessage;
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        validationObject.operator = "DataTypeCheck";
        validationObject.type = "Integer";
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = CompareValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addDoubleValidator(controlToValidate, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "dv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "dv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.errormessage = errorMessage;
        validationObject.decimalchar = ".";
        controlToValidate.value = document.getElementById(controlToValidate).value.replace(",",".");
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        validationObject.operator = "DataTypeCheck";
        validationObject.type = "Double";
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = CompareValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addStringValidator(controlToValidate, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "sv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "sv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.errormessage = errorMessage;
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        validationObject.operator = "DataTypeCheck";
        validationObject.type = "String";
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = CompareValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addIntegerCompareValidator(controlToValidate, operator, valueToCompare, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "icv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "icv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.type = "Integer";
        if(isNaN(parseInt(valueToCompare)))
            validationObject.controltocompare = valueToCompare;
        else
        {
            if(document.getElementById("icv_" + valueToCompare) == null)
            {
                var hiddenValue = document.createElement("input");
                hiddenValue.type = "hidden";
                hiddenValue.name = "icv_" + valueToCompare;
                hiddenValue.id = "icv_" + valueToCompare;
                hiddenValue.value = valueToCompare;
                document.body.appendChild(hiddenValue);
            }
            validationObject.controltocompare = "icv_" + valueToCompare;
        }
        validationObject.errormessage = errorMessage;
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        if(operator == "=")
            validationObject.operator = "Equal";
        else if(operator == ">")
            validationObject.operator = "GreaterThan";
        else if(operator == ">=")
            validationObject.operator = "GreaterThanEqual";
        else if(operator == "<")
            validationObject.operator = "LessThan";
        else if(operator == "<=")
            validationObject.operator = "LessThanEqual";
        else if(operator == "!=")
            validationObject.operator = "NotEqual";
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = CompareValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addStringCompareValidator(controlToValidate, operator, valueToCompare, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "scv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "scv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.controltocompare = valueToCompare;
        validationObject.errormessage = errorMessage;
        validationObject.type = "String";
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        if(operator == "=")
            validationObject.operator = "Equal";
        else if(operator == ">")
            validationObject.operator = "GreaterThan";
        else if(operator == ">=")
            validationObject.operator = "GreaterThanEqual";
        else if(operator == "<")
            validationObject.operator = "LessThan";
        else if(operator == "<=")
            validationObject.operator = "LessThanEqual";
        else if(operator == "!=")
            validationObject.operator = "NotEqual";
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = CompareValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addDoubleCompareValidator(controlToValidate, operator, valueToCompare, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "dcv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "dcv";
        validationObject.controltovalidate = controlToValidate;
        if(isNaN(parseFloat(valueToCompare)))
            validationObject.controltocompare = valueToCompare;
        else
        {
            if(document.getElementById("dcv_" + valueToCompare) == null)
            {
                var hiddenValue = document.createElement("input");
                hiddenValue.type = "hidden";
                hiddenValue.name = "dcv_" + valueToCompare;
                hiddenValue.id = "dcv_" + valueToCompare;
                hiddenValue.value = valueToCompare;
                document.body.appendChild(hiddenValue);
            }
            validationObject.controltocompare = "dcv_" + valueToCompare;
        }
        validationObject.errormessage = errorMessage;
        validationObject.decimalchar = ".";
        controlToValidate.value = document.getElementById(controlToValidate).value.replace(",",".");
        validationObject.type = "Double";
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        if(operator == "=")
            validationObject.operator = "Equal";
        else if(operator == ">")
            validationObject.operator = "GreaterThan";
        else if(operator == ">=")
            validationObject.operator = "GreaterThanEqual";
        else if(operator == "<")
            validationObject.operator = "LessThan";
        else if(operator == "<=")
            validationObject.operator = "LessThanEqual";
        else if(operator == "!=")
            validationObject.operator = "NotEqual";
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = CompareValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addIntegerRangeValidator(controlToValidate, minValue, maxValue, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "irv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "irv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.type = "Integer";
        validationObject.maximumvalue = maxValue;
        validationObject.minimumvalue = minValue;
        validationObject.errormessage = errorMessage;
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = RangeValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addDoubleRangeValidator(controlToValidate, minValue, maxValue, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "drv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "drv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.type = "Double";
        validationObject.decimalchar = ".";
        controlToValidate.value = document.getElementById(controlToValidate).value.replace(",",".");
        validationObject.maximumvalue = maxValue;
        validationObject.minimumvalue = minValue;
        validationObject.errormessage = errorMessage;
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = RangeValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addDateRangeValidator(controlToValidate, minValue, maxValue, errorMessage, validationGroup)
{
    var exists = false;
    for(i=0; i<Page_Validators.length; i++)
        if((Page_Validators[i].controltovalidate == controlToValidate) && (Page_Validators[i].validatorType == "drv"))
            exists = true;
    if(!exists)
    {
        var validationObject = new Object();
        validationObject.validatorType = "drv";
        validationObject.controltovalidate = controlToValidate;
        validationObject.type = "Date";
        validationObject.dateorder = "mdy";
        validationObject.maximumvalue = maxValue;
        validationObject.minimumvalue = minValue;
        validationObject.errormessage = errorMessage;
        if(validationGroup != null)
            validationObject.validationGroup = validationGroup;
        validationObject.isvalid = true;
        validationObject.focusOnError = "t";
        validationObject.initialvalue = "";
        validationObject.evaluationfunction = RangeValidatorEvaluateIsValid;
        validationObject.style = new Array();
        validationObject.style[0] = "color";
        validationObject.style[1] = "visibility";
        Page_Validators[Page_Validators.length] = validationObject;
    }
}

function addValidationSummary(validationGroup)
{
    var exists = false;
    for(i=0; i<Page_ValidationSummaries.length; i++)
        if(Page_ValidationSummaries[i].validationGroup == validationGroup)
            exists = true;
    if(!exists)
    {
        var validationSummary = new Object();
        validationSummary.contentEditable = "inherit";
        validationSummary.showmessagebox = "True";
        validationSummary.showsummary = "False";
        if(validationGroup != null)
            validationSummary.validationGroup = validationGroup;
        validationSummary.style = new Array();
        validationSummary.style[0] = "color";
        validationSummary.style[1] = "visibility";
        Page_ValidationSummaries[Page_ValidationSummaries.length] = validationSummary;
    }
}
