function trim(str)
{
   if (str)
       return str.replace(/^\s+|\s+$/g, '') ;
   else return '';
}

function NB_Validator (Form, ErrorMsg, Arr)
{
    OK = true;
    for (var i = 0; i < Arr.length; i++)
    {               
        try
        {
            Added = false;
            switch (Arr[i][0])
            {
                case 'require' : 
                    for (var j = 2; j < Arr[i].length; j++)
                    {
                        if (trim(eval("document." + Form + "." + Arr[i][j] + ".type")) == "checkbox")
                        {   
                            if (eval("document." + Form + "." + Arr[i][j] + ".checked") == false)
                            { 
                                OK = false;
                                if (!Added)
                                {
                                    ErrorMsg += "\n    - " + Arr[i][1];
                                    Added = true;
                                }
                            }
                        }
                        else if (eval("document." + Form + "." + Arr[i][j] + ".length") > 0)
                        {                                    
                            if (trim(eval("document." + Form + "." + Arr[i][j] + "[0].type")) == "radio")
                            {          
                                var rElmVal = '';
                                var rElm = eval("document." + Form + "." + Arr[i][j]);
                                for (var rI=0; rI < rElm.length; rI++)
                                   if (rElm[rI].checked)
                                      rElmVal = rElm[rI].value;
                                if (rElmVal == '')
                                {
                                    OK = false;
                                    if (!Added)
                                    {
                                        ErrorMsg += "\n    - " + Arr[i][1];
                                        Added = true;
                                    }
                                }  
                            }
                        }
                        else if (trim(eval("document." + Form + "." + Arr[i][j] + ".value")) == "")
                        {         
                            OK = false;
                            if (!Added)
                            {
                                ErrorMsg += "\n    - " + Arr[i][1];
                                Added = true;
                            }
                        }
                    }
                    break;
                case 'compare' :
                    if (trim(eval("document." + Form + "." + Arr[i][2] + ".value")) !== trim(eval("document." + Form + "." + Arr[i][3] + ".value")))
                    {
                        ErrorMsg += "\n    - " + Arr[i][1];
                        Added = true;         
                        OK = false;                      
                    }
                    break;
                case 'regexp' :
                    var MyReg = new RegExp(Arr[i][2])
                    if (!MyReg.test(trim(eval("document." + Form + "." + Arr[i][3] + ".value"))))
                    {
                        ErrorMsg += "\n    - " + Arr[i][1];
                        OK = false;   
                    }
                    break;    
            }
        }
        catch (err)
        { 
        }
    }
    
    if (!OK)
        alert(ErrorMsg);
    
    return OK;
}   
