function addevent(obj, type, fn){
    if(obj.addEventListener) obj.addEventListener(type, fn, false);
    else if(obj.attachEvent){
        obj['e'+type+fn]=fn;
        obj[type+fn]=function(){
            obj['e'+type+fn](window.event);
        };
        obj.attachEvent('on'+type, obj[type+fn]);
    }
}

function requiredFields(formId)
{
    var errorMsg='';
    var fields = cssQuery('#' + formId + ' .required');

    for (var i=0; i<fields.length; i++)
    {
        if (fields[i].tagName.toLowerCase() == 'input')
        {
            // check email syntax
            if (fields[i].className.match('isEmail') == 'isEmail' && fields[i].value != '')
            {
                var filter = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi;
            	if (!fields[i].value.match(filter))
            	{
            	    errorMsg += "The email you entered is invalid\n";
                    fields[i].className += ' invalid';
            	}
            	else
            	{
            	    fields[i].className += fields[i].className.replace(' invalid','');
            	}
            }
            // type = text, checkbox
            else if (fields[i].value == '')
            {
                errorMsg += fields[i].title + "\n";
                if(/invalid/.test(fields[i].className))
                {
                    fields[i].className = fields[i].className.replace(new RegExp(' invalid\\b'),'');
                }
                fields[i].className += ' invalid';
            }
            else
            {
                fields[i].className += fields[i].className.replace(' invalid','');
            }
        }
        else if (fields[i].tagName.toLowerCase() == 'textarea')
        {
            if (fields[i].value == '')
            {
                errorMsg += fields[i].title + "\n";
                if(/invalid/.test(fields[i].className))
                {
                    fields[i].className = fields[i].className.replace(new RegExp(' invalid\\b'),'');
                }
                fields[i].className += ' invalid';
                //fields[i].className += ' invalid';
            }
            else
            {
                fields[i].className += fields[i].className.replace(' invalid','');
            }
        }
        else if (fields[i].tagName.toLowerCase() == 'select')
        {
            if (fields[i].options.selectedIndex.value == '')
            {
                errorMsg += fields[i].title + "\n";
                fields[i].className += ' invalid';
            }
            else
            {
                fields[i].className += fields[i].className.replace(' invalid','');
            }
        }
    }

    if (errorMsg)
    {
        alert(errorMsg);
        return false;
    }
    else
    {
        return true;
    }
}

function validateForm()
{
    var forms = cssQuery('form');
    for (var i=0; i<forms.length; i++)
    {
        forms[i].onsubmit = function()
        {
            return requiredFields(this.id);
        }
    }
}
function init()
{
    validateForm(); // validates forms
}
addevent(window, 'load', init, false);