/**
 * @author jmurray
 */
var formValidator = Class.create({
    form: null,
    response: null,
    errCount: 0,
    validated: false,
	skipVerify:false,
    
    initialize: function(form){
        this.form = $(form);
        this.form.observe('submit', this.doValidation.bindAsEventListener(this));
    },
    
	skipValidation:function()
	{
		this.skipVerify=true;
	},
	
	doValidation: function(event){
        this.errCount = 0;
        if (this.validated === true) {
            return true;
        }
        Event.stop(event);
        this.form.select('.validationErr').each(function(elm){
            elm.remove();
        });
        this.form.request({
            parameters: {
                formValidator: this.form.id,
				skipVerify:this.skipVerify
            },
            onCreate: this.startValidate.bindAsEventListener(this),
            onComplete: this.processResults.bindAsEventListener(this)
        });
        this.form.disable();
    },
    
    processResults: function(transport){
        var result = transport.responseText.evalJSON();
        this.form.enable();
        if (result.length > 0) {
            var waiters = $$('.wait');
            if (waiters.length > 0) {
                waiters.each(function(elm){
                    elm.hide();
                });
            }
            result.each(function(elmData){
                if (elmData.err) {
                    this.errCount++;
                    var err = Builder.node('div', {
                        className: 'validationErr'
                    });
                    err.update(elmData.msg);
                    err.observe('click', function(event){
                        var elm = Event.element(event);
                        elm.fade({
                            duration: 0.5
                        });
                    });
                    this.form.select('#' + elmData.name)[0].parentNode.appendChild(err);
                }
            }.bindAsEventListener(this));
        }
        if (this.errCount === 0) {
            this.validated = true;
        }
		this.form.enable();
        if (this.validated === true) {
            this.form.submit();
        }
    },
    
    startValidate: function(){
        var waiters = $$('.wait');
        if (waiters.length > 0) {
            waiters.each(function(elm){
                elm.show();
            });
        }
    }
});
