context = {};
function log(msg) {
    console.log(msg);
    if (window.console && console.firebug) {
        console.log(error);
    } else {
        alert(error);
    }
}
$$f = function(selector) {
    return $$(selector).first();
}

Element.addMethods({
    popId: function(element) {
        var id = element.readAttribute('id');
        if (id.indexOf('-') != -1) {
            return id.split('-').pop();
        }
        return '';
    },
    delegate: function(element, eventType, filterSelector, handler) {
        element.observe(eventType, function(event) {
            var filtered = event.findElement(filterSelector);
            if (filtered) {
                handler(event);
            }
        });
    }
});

Ajax.Responders.register({
    onException: function(o, e) {
        log(e);
    }
});

function getErrorContainer() {
    var container = $$f('div.errors');
    if (!container) {
        container = new Element('div', { className: 'errors' });
        var form = $$f('.model-edit form');
        form.insert({ top: container});
    }
    return container;
}

function clearErrors(form) {
    var errorList = form.down('div.errors');
    if (errorList) {
        errorList.innerHTML = '';
    }
}

function displayErrors(errors) {
    $H(errors).each(function(pair) {
        var field          = pair.key;
        var error          = pair.value;
        var errorContainer = getErrorContainer();
        var element        = $$f('[name=' + field + ']');
        var errorElement   = new Element('p', { className: 'error' });
        var caption        = $('caption-' + field).innerHTML;

        errorElement.innerHTML = new Template(error).evaluate({ fieldname: caption });
        errorContainer.insert(errorElement);
        if (element) {
            element.setStyle({border: '1px solid red'});
        } else {
            log('No element found');
        }
    });
}

function displaySuccess() {
    var container = getErrorContainer();
    var success   = new Element('p', { className: 'success' });

    container.innerHTML = 'Sikeres mentés';
    container.insert(success);
}

document.observe('dom:loaded', function() {

    var form = $$f('.model-edit form');
    if (form && form.select('input[type=file]').length == 0) {
        form.observe('submit', function(e) {
            var form = e.findElement();
            e.stop();
            clearErrors(form);
            if ('editors' in tinymce) {
                tinymce.editors.each(function(e) {
                    e.save();
                });
            }
            var formData = form.serialize({ hash: true, submit: false });
            new Ajax.Request(form.action, {
                method: 'POST',
                onSuccess: function(o) {
                    var hash   = $H(o.responseJSON);
                    var errors = hash.get('errors');
                    if (Object.isArray(errors) && errors.length == 0) {
                        var module = form.popId();
                        window.location = '/' + module + '/list';
                    } else {
                        displayErrors(errors);
                    }
                },
                parameters: formData
            });
        });
    }

    var grid = $$f('.datagrid');
    if (grid) {
        grid.delegate('click', 'a.delete', function(e) {
            e.stop();
            var really = confirm('Tényleg törölni szeretnéd ezt az elemet?');
            if (really) {
                var target  = e.findElement();
                var modelId = e.findElement('tr').popId();
                var module  = e.findElement('table').popId();
                new Ajax.Request('/' + module + '/delete', {
                    method: 'POST',
                    parameters: {
                        id: modelId
                    },
                    onSuccess: function(o) {
                        window.location.reload();
                    }
                });
            }
        });
    }

    if (window.location.pathname.match('/menu\/edit')) {
        new Ajax.Request('/menu/listAvailableModules', {
            method: 'GET',
            onSuccess: function(o) {
                var json    = $H(o.responseJSON);
                var modules = json.get('modules');
                if ($H(modules).size() > 0) {
                    context.modules = modules;
                    var option = new Element('option', { value: 0 });
                    option.innerHTML = '---';
                    $('module-select').insert(option);
                    $H(modules).each(function(pair) {
                        var option = new Element('option', { value: pair.key });
                        option.innerHTML = pair.value.caption;
                        $('module-select').insert(option);
                    });

                }
            }
        });

        $('module-select').observe('change', function(e) {
            var newValue = $F('module-select');
            var layouts  = $H(context.modules).get(newValue).layouts;
            $H(layouts).each(function(layout) {
                var elem = new Element('option', { value: layout.key });
                elem.innerHTML = layout.value.caption;
                $('layout-select').insert(elem);
            });
        });

        $('layout-select').observe('change', function(e) {
            $('item-select').innerHTML = '';
            var module = $F('module-select');
            var layoutId = $F(e.findElement());
            var items = $H(context.modules[module].layouts).get(layoutId).items;
            $H(items).each(function(pair) {
                var elem = new Element('option', { value: pair.key });
                elem.innerHTML = pair.value;
                $('item-select').insert(elem);
            });
        });
    }

    var flashContainer = $('frontpage-flash');
    if (flashContainer) {
        var flashvars = {};
        var siteUrl = context.urls.site;
        flashvars.ct0 = '/szolgaltatasok';
        flashvars.ct1 = '/referenciak';
        flashvars.ct2 = '/szolgaltatasok/letesitmenygazdalkodas';
        var params = {};
        params.loop = "true";
        params.scale = "noscale";
        params.wmode = "window";
        var attributes = {};
        swfobject.embedSWF("/flash/eurest_main2.swf"+"?rnd="+Math.random(), "frontpage-flash", 956, 297, "10.0.0", false, flashvars, params, attributes);
    }

});

