   function validate(form)
    {
        for(var i=0;i<form.elements.length;i++)
        {
            if(form.elements[i].myClassName == 'constrained' && typeof(form.elements[i].missingMessage) != 'undefined'
               && !fieldPresent(form.elements[i]))
            {
                alert(form.elements[i].missingMessage);
                form.elements[i].focus();
                return false;
            }
        }

         for(var i=0;i<form.elements.length;i++)
        {
            if(form.elements[i].myClassName == 'constrained' && typeof(form.elements[i].errorMessage) != 'undefined' &&
              !isValid(form.elements[i]))
            {
                alert(form.elements[i].errorMessage);
                form.elements[i].focus();
                return false;
            }
        }

        for(var i=0;i<form.elements.length;i++)
        {
            if(form.elements[i].myClassName == 'constrained')
                form.elements[i].value = trim(form.elements[i].value);
        }

        return true;
    }

  function fieldPresent(element)
    {
        return element.value !== "" && element.value.match(/^\s+$/) === null;
    }

    function isValidPhoneNumber(str)
    {
        return str.match(/^\s*\d\s*\d\s*\d\s*\d\s*\d\s*\d\s*\d\s*\d\s*\d\s*\d\s*$/) !== null ||
               str.match(/^\s*\d\s*\d\s*\d\s*-\s*\d\s*\d\s*\d\s*-\s*\d\s*\d\s*\d\s*\d\s*$/) !== null;
    }

    function isLeapYear(year)
    {
        if(year % 100 != 0)
            return year % 4 == 0;
        else
            return year % 400 == 0;
    }

    function isValidEmail(str)
    {
        return str.match(/^.+@.+\..+$/) !== null;
    }

    function isValidZipCode(str)
    {
        return str.match(/^\d{5}$/) !== null;
    }

    function isIntStr(str)
    {
        return str.match(/^\d+$/) !== null;
    }

    function trim(str)
    {
        var trimmedStr = str.replace(/^\s+/,"");

        return trimmedStr.replace(/\s+$/,"");
    }
