﻿/*

@requires: YAHOO

*/

DrillSpot.validation = { };

var v = DrillSpot.validation;


// Validator - abstract validator class all validators must inherit from
v.Validator = function(element,message) 
{
    this.element = element; 
    this.message = message;
};
v.Validator.prototype = 
{
    validate : function() { alert('Not Implemented!'); }  
};


v.ValidatorGroup = function(validators)
{
    this.validators = (validators) ? validators : [];
};
v.ValidatorGroup.prototype = 
{
    add : function(v) 
    { 
        this.validators.push(v); 
    },
    
    validate : function()
    {
        var vc = this.validators;
        var errors = [];
        
        for (var i = 0; i < vc.length; i++)
            if (!vc[i].validate())
                errors.push(vc[i]);
                
        errors.toString = function()
        {
            var msg = '';
            for (var i = 0; i < this.length; i++)
                msg += this[i].message + '\n';
            return msg;
        };
                
        return (errors.length > 0) ? errors : null;
    }
};




// MinLengthValidator - validates an element to have a certain length
v.MinLengthValidator = function(element,msg,minLen)
{
    v.MinLengthValidator.superclass.constructor.call(this,element,msg);
    
    this.minLength = minLen;    
};
YAHOO.lang.extend(v.MinLengthValidator, v.Validator); 

v.MinLengthValidator.prototype = 
{
    validate : function()
    {
        if (!this.element) return false;
        if (!this.minLength && this.minLength != 0) return false;
                
        return this.element.value.length > this.minLength;
    }  
};




// RangeValidator - element value must be within range
v.RangeValidator = function(element,msg,from,to)
{
    v.RangeValidator.superclass.constructor.call(this,element,msg);
    
    this.from = from;
    this.to = to;
};
YAHOO.lang.extend(v.RangeValidator, v.Validator); 

v.RangeValidator.prototype = 
{
    validate : function()
    {
        if (!this.element) return false;
        
        var value = parseInt(this.element.value);
        return value >= this.from && value <= this.to;
    }  
};