Behaviour.register({
    
    'form.validate': function(element, params) {
        element.validator = new Validator(element);  
    },
    
    'div.formRow': function(element, params) {
        if (!element.hasClassName('noHoverEffect')) {
            var inputs = Form.getElements(element);   
            if (inputs) {
                inputs.each(function(formElement) { 
                    Event.observe(formElement, 'focus', function() {
                        element.addClassName('activeRow');
                    });
                    Event.observe(formElement, 'blur', function() {
                        element.removeClassName('activeRow');
                    });
                } );
            }
        }
    },    
    
    'input.focusOnLoad': function(element) {
        element.focus();
    },
    
    'input.back': function(element) {
        Event.observe(element, 'click', function() { 
            history.go(-1);
        } );
    },
    
    'input.clearOnFocus': function(element) {
        
        element.originalValue = element.value;
        
        Event.observe(element, 'focus', function() { 
            if (element.value != '' && element.value != element.originalValue) {
                return false;
            }
            element.value = '';
        } );
        
        Event.observe(element, 'blur', function() { 
            if (element.value == '') {
                element.value = element.originalValue;
            }
        } );
        
    },
    
    'textarea.editor': function(element, params) {
        
        if (!this.replace) {
            this.replace = new FCKReplace({
                
                onEditorcountChange: function(count) {
                    this.editorCount = count;
                    if (typeof(console) != 'undefined') {
                        console.log('Editor '+count+' geinitialiseerd.');
                    }
                }.bind(this),
                
                onCurrentLoadedChange: function(count) {
                    if (typeof(console) != 'undefined') {
                        console.log('Editor '+count+' van de '+this.editorCount+' geladen.');
                    }
                }.bind(this)
                
            });
        }
        
        this.replace.add(element, params);
    },    
    
    'input.autopost, select.autopost': function(element, params) {
        if (params.element) {
            if (params.delay) {
                params.delay *= 1000;
            } else {
                params.delay = 500;
            }
            
            var target = $(params.element);
            
            if (!params.minlength) params.minlength = 0;
            if (element.form) {
                
                if (element.tagName.toLowerCase() == 'input') {
                    var event = 'keyup';
                    Event.observe(element, 'keydown', function() { 
                        if (element.postTimer) {
                            clearTimeout(element.postTimer);
                        }
                    } );
                } else {
                    var event = 'change';
                    params.delay = 0;
                }
                
                Event.observe(element, event, function() { 
                    if (element.postTimer) clearTimeout(element.postTimer);
                    if (event == 'keyup' && element.value.length < params.minlength) {
                        return false;
                    } else {
                        element.postTimer = setTimeout(function() { 
                            if (element.originalValue && element.originalValue == element.value) {
                                return false; // default waarde niet submitten
                            }
                            new Ajax.Request(element.form.action, { 
                                method: 'post',
                                postBody: Form.serialize(element.form),
                                onLoading: function() { 
                                    if (params.loader) {
                                        var loader = new Loader({ image: params.loader });
                                		loader.node.style.position = 'absolute';
                                		loader.node.style.top = '5px';
                                		loader.node.style.right = '3px;';
                                		element.loader = loader;
                                		loader.after(element);
                                    }
                                },
                                onComplete: function(t) { 
                                    if ($(params.selectedValue) && $(params.selectedValue).innerHTML) {
                                        $(params.selectedValue).innerHTML = (event == 'change') ? element.options[element.selectedIndex].innerHTML : element.value;
                                    }
                                    target.innerHTML = t.responseText;
                                    if (element.loader) {
                                        element.loader.remove();
                                    }
                                    Behaviour.apply();
                                }
                            } );    
                        }, params.delay);
                    }
                } );
            }
        }
    },
    
    'form.file-uploader': function(element) {
        new Uploader(element, { 
            onLoading: function() {
                element.originalContent = element.innerHTML;
                element.loader = document.createElement('img');
                element.loader.src = 'backoffice/img/progress.gif';
                element.innerHTML = '';
                element.appendChild(element.loader);
            },
            onComplete: function(frame) {
                new Effect.Fade(element.loader, { 
                    duration: 0.3, 
                    afterFinish: function() { 
                        Element.remove(element.loader);
                        element.innerHTML = element.originalContent;
                    } 
                });
                
                window.location.href = window.location.href;
            }
        });        
    },
    
    'input.asset-upload': function(element) {
        Event.observe(element, 'click', function(event) { 
            event.stop();   
        } );
    },
    
    'select.change-order-status': function(element, params) {
        if (params.orderID && parseInt(params.orderID)) {
            Event.observe(element, 'change', function(event) { 
                new Ajax.Request('backoffice/orders/changeOrderStatus/' + params.orderID + '/' + element.options[element.selectedIndex].value, {
                    onLoading: function() { 
                        $('main').startWaiting();
                    },
                    onComplete: function(t) { 
                        $('main').stopWaiting();
                        window.location.reload();
                    } 
                });
                event.stop();
            });
        }
    },
        
    'select.change-order-paid': function(element, params) {
        if (params.orderID && parseInt(params.orderID)) {
            Event.observe(element, 'change', function(event) { 
                new Ajax.Request('backoffice/orders/changeOrderPaid/' + params.orderID + '/' + element.options[element.selectedIndex].value, {
                    onLoading: function() { 
                        $('main').startWaiting();
                    },
                    onComplete: function(t) { 
                        $('main').stopWaiting();
                        window.location.reload();
                    } 
                });
                event.stop();
            });
        }
    },
    
    'input[type="submit"]': function(element) {
        Event.observe(element, 'click', function(event) {
            if ( (element.form.requiresValidation()) && (!element.form.validationSuccess()) ) {
                var o = element.form.validator.options.onValidationSuccess;
                this.form.validator.options.onValidationSuccess = function() { 
                    o();
                    element.addClassName('submitted-button');
                }
            } else {
                element.addClassName('submitted-button');
            }
        });
    }

});