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;
    }   
