var open = function(){
    $$('form').addEvent('submit',nextStep);
    clearFields();
}

var clearFields = function(){
    $$('.clearclick').addEvent('click',function(){
        this.set('rel',this.get('value'))
            .set('value','');
        this.removeEvents('click');
    })
}

var nextStep = function(e){
    this.removeEvent('submit',nextStep);
    var page_to_open = this.get('action');
    var data = generateData(this) + 'ajax=true';
    new Request.JSON({
        'url':page_to_open,
        'onComplete':RequestFinished
    }).send(data);
    e.stop();
}

var generateData = function(form){
    var qs = '';
    form.getElements('input,textarea,select').each(function(e){
        qs += e.get('name') + '=' + e.get('value') + '&';
    });
    return qs;
}

var RequestFinished = function(j,t){
    if (j.errors == ''){ // ok
        var errors = $('errors-wrapper');
        if (errors){
            errors.set('tween',{duration:300,onComplete:function(){errors.set('html','')}})
                .tween('opacity',[1,0]);
        }
        $('main-content').set('html',j.success);
        clearFields();
        var marker = $('marker');
        var next_step = getStep()+1;
        if (next_step < 7){
            var complete_class = '#progress .s'+ next_step.toString();
            var morph = new Fx.Morph($('complete'),{duration:400})
                .addEvent('complete',markerFinishedSliding)
                .start(complete_class);
        } else {
            window.location = '/done/';
        }
    } else { // errors
        var errors = $('errors-wrapper');
        if (!errors){
            var errors = new Element('div',{'id':'errors-wrapper'}).setStyle('opacity','0');
            errors.inject($('progress'),'after')
        }
        errors.set('html',j.errors)
            .set('tween',{duration:300})
            .tween('opacity',[0,1]);
        $$('form').addEvent('submit',nextStep);
    }
}

var getStep = function(e){
    return ($('complete').get('class').match(/[0-9]+$/) * 1);
}

var markerFinishedSliding = function(){
    this.element.set('class','s' + (getStep()+1).toString());
    $$('form').addEvent('submit',nextStep); 
}

window.addEvent('domready',open);
