var Util = {
    validateAndSubmit: function(id) { //- v0.5
        var frm = $(id) || $(document.forms[id]);
        if(!frm) return;

        if(frm.nodeName != 'FORM') {
            frm = frm.up('form');
        }
        if(!frm) return;

        var isValid = true;
        var requiredFields = frm.select('input.required, select.required, textarea.required');
        requiredFields.each(function(el) {
            var id = el.identify();
            var msg = $$('#'+id+'-invalid, .'+id+'-invalid');
            if(msg.length) {
                if(!el.getValue()) {
                    el.addClassName('invalid');
                    isValid = false;
                    msg.invoke('show');
                }else{
                    el.removeClassName('invalid');
                    msg.each(function(e) {
                        if(e.id != "code-invalid") {
                            e.hide();
                        }
                    })
                }
            }
        });

        var emailFields = frm.select('input[name*=email]');
        emailFields.each(function(el) {
            var id = el.identify();
            var msg = $$('#'+id+'-invalid, .'+id+'-invalid');
            if(msg.length) {
                if(!/^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/i.test(el.getValue())) {
                    el.addClassName('invalid');
                    isValid = false;
                    msg.invoke('show');
                }
                else{
                    el.removeClassName('invalid');
                    msg.invoke('hide');
                }
            }
        });

        if($('code-invalid')) {
            if(!$('code-invalid').down("img").src.match(/^.*correct\..*$/)) {
                isValid = false;
            }
        }

        if(isValid){
            $$('.invalid-msg').invoke('hide');
//            alert('before request');
            frm.request({
                onComplete: function(t) {
//                    alert('onComplete');
                    var msg = $('confirmation-msg');
                    if(msg) {
                        if(msg.offsetParent != frm.offsetParent) {
                            frm.offsetParent.appendChild(msg);
                        }
                        var heightAdjust = 14;
                        msg.setStyle({
                            position: 'absolute',
                            zIndex: '1000',
                            top: (frm.offsetTop+heightAdjust) + 'px',
                            left: (frm.offsetLeft-1) + 'px', //-minus 1 for ie
                            width: frm.offsetWidth + 'px',
                            height: (frm.offsetHeight-heightAdjust) + 'px',
                            backgroundColor: '#ffffff'
                        });
                        //                        msg.setOpacity(0.7);
                        msg.appear();
                    }
                }
            });
        }
        else {
            $$('.invalid-msg').invoke('appear');
        }
    }
}
