<!--//
        var bShowTests = true;
        var oResults = {
                "browser": {
                        "userAgent": navigator.userAgent,
                        "appName": navigator.appName,
                        "appVersion": navigator.appVersion,
                        "appCodeName": navigator.appCodeName
                },
                "string": [],
                "date": [],
                "number": []
        };
        
        function writeOutput(v){
                document.write(v + "<br />");
        }
        
        function updateResults(m, v, e){
                if( m.value != e ){
                        var i = oResults[m.type].length;
                        oResults[m.type][i] = {
                                "supplied": v,
                                "value": m.value,
                                "expected": e,
                                "error": m.error.join("|"),
                                "mask": m.mask
                        };
                }
        }
        
        function postResults(){
                if( oResults.string.length + oResults.date.length + oResults.number.length == 0 ) return alert("No errors to report!");
                // form object
                var oForm = document.frmReport;
                // create serializer object
                var oSerializer = new WddxSerializer();
                // serialize WDDX packet
                oForm.wddx.value = oSerializer.serialize(oResults);
                oForm.submit();
        }

        function stringTest(v, m, e){
                if( !bShowTests ) return false;
                var oMask = new Mask(m);
                
                writeOutput("<b>mask:</b> "  + m);
                writeOutput("<b>string:</b> " + v);
                var n = oMask.format(v);
                if( e != n ) document.write("<font color=red>");
                writeOutput("<b>result:</b> " + n);
                writeOutput("<b>expected:</b> " + e);
                if( e != n ) document.write("</font>");
                writeOutput("<b>error:</b> " + ((oMask.error.length == 0) ? "n/a" : oMask.error.join("<br>")));
                writeOutput("");
                updateResults(oMask, v, e);
        }

        function numberTest(v, m, e){
                if( !bShowTests ) return false;
                var oMask = new Mask(m, "number");

                writeOutput("<b>mask:</b> "  + m);
                writeOutput("<b>string:</b> " + v);
                var n = oMask.format(v);
                if( e != n ) document.write("<font color=red>");
                writeOutput("<b>result:</b> " + n);
                writeOutput("<b>expected:</b> " + e);
                if( e != n ) document.write("</font>");
                writeOutput("<b>error:</b> " + ((oMask.error.length == 0) ? "n/a" : oMask.error.join("<br>")));
                writeOutput("");
                updateResults(oMask, v, e);
        }

        function dateTest(v, m, e){
                if( !bShowTests ) return false;
                var oMask = new Mask(m, "date");

                writeOutput("<b>mask:</b> "  + m);
                writeOutput("<b>string:</b> " + v);
                var n = oMask.format(v);
                if( e != n ) document.write("<font color=red>");
                writeOutput("<b>result:</b> " + n);
                writeOutput("<b>expected:</b> " + e);
                if( e != n ) document.write("</font>");
                writeOutput("<b>error:</b> " + ((oMask.error.length == 0) ? "n/a" : oMask.error.join("<br>")));
                writeOutput("");
                updateResults(oMask, v, e);
        }

        function init(){
                document.ContactFBR.reset();

                oStringMask = new Mask("(###) ###-####");
                oStringMask.attach(document.ContactFBR.phone);


        }
        //-->

