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 msg;
//        alert(frm.nodeName);

        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.invoke('hide');
                }
            }
        });

        var emailFields = frm.select('input[name*=email]');
        emailFields.each(function(el) {
            if(el.type != "text") { return; }
            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');
                }
            }
        });

        var captchaField = frm.select('input.captcha')[0];
        if(captchaField && Captcha) {
            msg = $$('#'+captchaField.identify()+'-invalid, .'+captchaField.identify()+'-invalid');
            if(!Captcha.isValidated()) {
                captchaField.addClassName('invalid');
                isValid = false;
                msg.invoke('show');
            }
            else{
                captchaField.removeClassName('invalid');
                //msg.invoke('hide');
            }
        }

        if(isValid){
            $$('.invalid-msg').invoke('hide');
            frm.request({
                onComplete: function(t) {
                    var msg = $('confirmation-msg');
                    if(msg) {

//                        msg.setStyle({position: 'absolute'});

//                        console.log(frm.offsetParent);
//                        console.log(msg.offsetParent);

                        if(msg.offsetParent != frm.offsetParent) {
                            $(frm.offsetParent).insert(msg);
                        }


                        var styles = {
//                            border:'1px solid red',
                            zIndex: '1000',
                            top: (frm.offsetTop) + 'px',
                            left: (frm.offsetLeft-1) + 'px', //-minus 1 for ie
                            width: frm.offsetWidth + 'px',
                            height: (frm.offsetHeight+20) + 'px'
                        };
//                        console.dir(styles);
                        msg.setStyle(styles);
    //                        msg.setOpacity(0.7);
                        msg.appear();
                    }
                }
            });
        }
        else {
            $$('.invalid-msg').invoke('appear');
        }
    }
}

var Captcha = function () {

    var validated = false;

    return {
        htmlCorrect : '<img src="/common/captcha/captcha-correct.png" style="vertical-align:-4px;width:16px;height:16px"  />',
        htmlFailed : '<img src="/common/captcha/captcha-no.png" style="vertical-align:-4px;width:16px;height:16px" />',
        init: function() {
            var els = $$('input[type=text].captcha');
            if(els.length == 1) {
                this.field = els[0];
                this.field.observe('keyup', this.onKeyUp.bindAsEventListener(this));
                this.field.writeAttribute('autocomplete', 'off');
            }
            els = $$('#'+this.field.identify()+'-invalid, .'+this.field.identify()+'-invalid');
            if(els[0]) {
                this.messageEl = els[0];
            }
        },
        onKeyUp: function(e) {
            this.check(e);
        },
        isValidated: function() {
			if(this.messageEl) {
                if(validated) {
                    this.messageEl.update(this.htmlCorrect);
                }
                else {
                    this.messageEl.update(this.htmlFailed);
                }
            }
            return validated;
        },
        check : function(e) {
            var code = this.field.value;
            if(code.length == 6) {
                new Ajax.Request(
                    '/common/captcha/captcha-check.php'
                    , {
                        method: 'post'
                        ,parameters: 'code=' + this.field.value
                        ,onSuccess: function(transport) {
                            var res = transport.responseText;
                            if(res == 'ok') {
                                if(this.messageEl) {
                                    this.messageEl.update(this.htmlCorrect);
                                }
                                validated = true;
                            }
                            else {
                                if(this.messageEl) {
                                    this.messageEl.update(this.htmlFailed);
                                }
                                validated = false;
                            }
                        }.bind(this)
                    }
                    );
            }
            else {
                validated = false;
            }
        }
    }

}();

document.observe('dom:loaded', Captcha.init.bind(Captcha));
