function validateDl(form,ajax)  
{
    var that = this;
    that.form = form;
    that.formEl = null;
    that.elements ={};
    that.id = null;
    that.type = null;
    that.min = null;
    that.max = null;
    that.error = 0;
    that.value = '';
    that.fileValue = '';
    that.ajax = (ajax !== 'undefined' && ajax == 'ajax')?1:0;
    
    this.submitOnEnter = function(e) 
    {
        e = e || window.event;
        if(e && e.keyCode == 13) that.checkForm();
    };                

    this.checkForm = function()
    {
        if(!dl$(that.form)) return;
        this.error = 0;
        var i = 0;
        while(i < that.elements.length)
        {
            var localErr = 0;
            that.id = that.elements[i].id;
            that.type = that.elements[i].type;
            that.min = parseInt(that.elements[i].min);
            that.max = parseInt(that.elements[i].max);
            that.value = dl$(that.id).value;
            if(that.id.toLowerCase() == that.value.toLowerCase()) that.value = '';
            that.formLen = parseInt(that.value.length);
            
            switch(that.type)
            {
                case 'email':
                    localErr = that.checkEmail();
                break;

                case 'number':
                    localErr = that.checkNumber("0123456789.");
                break;
    
                case 'numberPhone':
                    localErr = that.checkPhone();
                break;
    
                case 'password':
                    localErr = that.checkPassword();        
                break;

                case 'boolean':
                    localErr = that.bool();        
                break;
                
                case 'notNull':
                    localErr = that.notNull();
                break;

                case 'all':
                    localErr = that.checkAll();        
                break;
                
                case 'checkbox':
                    localErr = that.checkbox();        
                break;
                
                case 'file':
                    localErr = that.checkFile();
                break;
            }
            if (localErr)
            {
                if(that.error == 0) that.error = 1;
                if (dl$('validErrorMain')) 
                {
                    dl$('validErrorMain').className = 'validErrorShown';
                    dl$('validErrorMain').style.display = 'block';
                }
                if (dl$(that.id+'Err')) dl$(that.id+'Err').className = dl$(that.id+'Err').className + ' validErrorShown';
                if (dl$(that.id)) dl$(that.id).className =  dl$(that.id).className.replace(/ errInput/,'') + ' errInput'; 
            }
            else
            {
                if (dl$(that.id+'Err')) dl$(that.id+'Err').className = dl$(that.id+'Err').className.replace(/ validErrorShown/,'');
                if (dl$(that.id)) dl$(that.id).className = dl$(that.id).className.replace(/ errInput/,'');
            }
            i++;        
        }
        
        if(that.error == 0)
        {
            if (dl$('validErrorMain')) dl$('validErrorMain').style.display = 'none';
            if(that.ajax==0)
            {
                dl$(that.form).submit();
            }
            else
            {
                return 1;
            }    
        }
        else
        {
            return 0;
        }
    };

  
    this.checkbox = function()
    {
        if(!dl$(this.form).elements[this.name].checked) return 1;
    };
        
    this.notNull = function()
    {
        if(this.value == 0 || this.value == '') return 1;
    };
    
    this.bool = function()
    {
        var varBool = false;
        if(this.value == true || this.value == 1)
        {
            varBool = true;
        }
        else
        {
           return 1;
        }
        return 0;
    };
    
    this.checkPassword = function()
    {
        if(((that.formLen >= this.min) && (that.formLen <= this.max) && (this.max > 0) && (this.min <= this.max)) || ((that.formLen >= this.min) &&  (this.max == 0)))
        {
            that.formEl = dl$(that.form);
            if(that.value != that.formEl.elements['password2'].value)
            {
                return 1;
            }
        }
        else
        {
            return 1;
        }
        return 0;
    };
            
    this.checkEmail = function()
    {
        var boolEmail = true;
        var str = new String();
        str = this.value;
        var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i ;
        boolEmail = re.test(str);
        if((that.formLen >= this.min) && (that.formLen <= this.max) && (this.max > 0) && (this.min <= this.max))
        {
            if(boolEmail == false)
            {
                return 1; 
            }
        }
        else if((that.formLen >= this.min) &&  (this.max == 0))
        {
            if(boolEmail == false)
            {
                return 1; 
            }
        }
        else
        {
            return 1; 
        }
        return 0;
    };
    
    this.checkPhone = function()
    {
        var boolEmail = true;
        var str = new String();
        str = this.value;
        var re = /^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/;
        boolEmail = re.test(str);
        if((that.formLen >= this.min) && (that.formLen <= this.max) && (this.max > 0) && (this.min <= this.max))
        {
            if(boolEmail == false)
            {
                return 1; 
            }
        }
        else if((that.formLen >= this.min) &&  (this.max == 0))
        {
            if(boolEmail == false)
            {
                return 1; 
            }
        }
        else
        {
            return 1; 
        }
        return 0;
    };
    
    this.checkAll = function()
    {
        if((that.formLen >= this.min) && (that.formLen <= this.max) && (this.max > 0) && (this.min <= this.max))
        {
            return 0;
        }
        else if((that.formLen >= this.min) &&  (this.max == 0))
        {
            return 0;
        }
        else
        {
            return 1;
        }
        return 0;
    };   
    
    this.checkFile = function()
    {
        that.formEl = dl$(that.form);
        if(that.formEl.elements[dl$(that.id).name].value!='')
        {
            return 0;
        }
        else
        {
            return 1;
        }
    };   
    
    this.checkNumber = function(validChars)
    {
       var isNumber = true;
       var sChar;
       var sText = this.value;
       var err = 0;
        if((that.formLen >= this.min) && (that.formLen <= this.max) && (this.max > 0) && (this.min <= this.max))
        {
            for (i = 0; i < sText.length && isNumber == true; i++) 
            { 
                sChar = sText.charAt(i);
                if (validChars.indexOf(sChar) == -1)
                {
                    isNumber = false;
                    err = 1;
                }
                if(err) break;
            }
        }
        else if((that.formLen >= this.min) &&  (this.max == 0))
        {
            for (i = 0; i < sText.length && isNumber == true; i++) 
            { 
                sChar = sText.charAt(i); 
                if (validChars.indexOf(sChar) == -1) 
                {
                    isNumber = false;
                    err = 1;
                }
                if(err) break;
            }
        }
        else
        {
            return 1;
        }
        if(err) return 1;
        return 0;
    };
    
    this.addToCheck = function(params)
    {                                  
        that.elements = (typeof(params.length) != 'undefined')?params:arguments;
    };
};

validateDl.prototype = dl;
validateDl.prototype.constructor = validateDl;
