var pageLoader = {

    togglemenuFlag: false,
    history: [],
    history_now: 0,
    history_max: 0,
    currentContent: '',

    init: function(expr) {

        if(expr) {

            var o = $(expr);

            o.find('a.ajaxized, input[type=button].ajaxized').each(pageLoader.initClick);
            o.find('form.ajaxized').each(pageLoader.initSubmit);

            return o;

        } else {

            pageLoader.currentContent = $('#pageContent').html();
            pageLoader.history[0] = document.location.href;

            $('a.ajaxized').each(pageLoader.initClick);
            $('form.ajaxized').each(pageLoader.initSubmit);
            $('div.frame a.historyBack').bind({click: pageLoader.historyBack});
            $('div.frame a.historyNext').bind({click: pageLoader.historyNext});

            pageLoader.refreshHistoryButtons();
            pageLoader.refreshFullWidthFrame();
        }

        return null;
    },
    
    initContent: function() {

        $('#pageContent a.ajaxized').each(pageLoader.initClick);
        $('#pageContent form.ajaxized').each(pageLoader.initSubmit);
    },

    initClick: function(i) {

        $(this).bind({click: pageLoader.click});
    },

    initSubmit: function(i) {

        $(this).bind({submit: pageLoader.submit});
    },

    click: function(e) {

        var url = this.toString();

        if(url.indexOf('#') < 0) {

            pageLoader.history[++pageLoader.history_now] = url;
            pageLoader.history_max = pageLoader.history_now;

            pageLoader.load(url);
        }

        e.preventDefault();
    },

    submit: function(e) {
        e.preventDefault();
        var params = {};

        $(this) // FIXME
            .find("input[checked], input[type='text'], input[type='hidden'], input[type='password'], input[type='submit'], option[selected], textarea")
            //.find("input, option[selected], textarea")
            //.filter(":enabled")
            .each(function() {
                params[ this.name || this.id || this.parentNode.name || this.parentNode.id ] = this.value;
            });
        
        pageLoader.history[++pageLoader.history_now] = this.action;
        pageLoader.history_max = pageLoader.history_now;
        
        pageLoader.load(this.action, params, this.method);
        
        e.preventDefault();
    },

    beforeSend: function(xhr) {
        xhr.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT"); // I'm a pro !!!!! ;D
        //xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        //xhr.setRequestHeader("Cache-Control", "no-cache");
    },

    load: function(url, params, method) {

        if(!this.togglemenuFlag) {

            togglemenu.hide();
            this.togglemenuFlag = true;
        }
        
        var h = $('#pageContent').height();

        $('#pageContent').html($('div.assets img.ajax-loader').clone());
        $('#pageContent').height(h);
        pageLoader.refreshFullWidthFrame();

        $.ajax({
            url: url,
            type: (method ? method : 'get'),
            data: (params ? params : {}),
            //dataType: 'html',
            beforeSend: pageLoader.beforeSend,
            context: document.body,
            success: pageLoader.processResponse,
            error: pageLoader.processError
        });
    },

    processResponse: function(response, status, xhr) {

        switch(status) {

            case 'success':

                var html = $(response).find('#pageContent').html();
                
                $('#pageContent').html(html != null ? html : response);

                pageLoader.initContent();

                pageLoader.currentContent = response;
                document.title = $('div.contentTitle').html();
                
                break;

            default:
                $("#pageContent").html('Hiba történt oldaltöltés közben! (' + xhr.status + " " + xhr.statusText + ')');
                break;
        }
        
        $('#pageContent').height('auto');
        pageLoader.refreshFullWidthFrame();
        pageLoader.refreshHistoryButtons();
    },

    processError: function(xhr, status, errorThrown) {

        delete pageLoader.history[pageLoader.history_now--];
        pageLoader.history_max = pageLoader.history_now;

        pageLoader.refreshHistoryButtons();

        var o;

        switch(status) {
            case 'error':

                switch(xhr.status) {

                    case 401:

                        o = $('div.loginBox').clone();

                        o.prepend('<h3>Bejelentkezés</h3>');
                        o.modal({
                            maxWidth: 180,
                            minHeight: 80
                        });

                        pageLoader.init($('#pageContent').html(pageLoader.currentContent));

                        break;

                    case 403:

                        pageLoader.init($('div.assets div.hiba_403').clone()).modal();
                        pageLoader.init($('#pageContent').html(pageLoader.currentContent));
                        
                        break;

                    case 404:

                        pageLoader.init($('div.assets div.hiba_404').clone()).modal();
                        pageLoader.init($('#pageContent').html(pageLoader.currentContent));

                        break;

                    case 500:

                        pageLoader.init($('div.assets div.hiba_500').clone()).modal();
                        pageLoader.init($('#pageContent').html(pageLoader.currentContent));

                        break;

                    default:
                        $("#pageContent").html('Hiba történt oldaltöltés közben! (' + xhr.status + " " + xhr.statusText + ')');
                        break;
                }
                break;

            default:
                $("#pageContent").html('Hiba történt oldaltöltés közben! (' + status + ", " + xhr.status + " " + xhr.statusText + ')');
                break;
        }
        
    },
    
    historyBack: function() {
        
        if(pageLoader.history_now > 0) {

            url = pageLoader.history[--pageLoader.history_now];

            pageLoader.load(url);
        }
    },
    
    historyNext: function() {
        
        if(pageLoader.history_now < pageLoader.history_max) {

            var url = pageLoader.history[++pageLoader.history_now];

            pageLoader.load(url);
        }
    },

    refreshHistoryButtons: function() {

        if(pageLoader.history_now > 0)
            $('div.frame a.historyBack').fadeTo('slow', 1);
        else
            $('div.frame a.historyBack').fadeTo('slow', 0.4);

        if(pageLoader.history_now < pageLoader.history_max)
            $('div.frame a.historyNext').fadeTo('slow', 1);
        else
            $('div.frame a.historyNext').fadeTo('slow', 0.4);
    },

    refreshFullWidthFrame: function() {

        f = function() {
            $('div.fullWidthFrame div.content').height($('div.centerFrame div.contentWrapper').height());
        };

        f();

        setTimeout(f, 500);
    }
};

var togglemenu = {

    init: function() {

        $('div.frame div.togglemenu a.close').bind({click: togglemenu.hide});
        $('div.frame div.togglemenu_closed a.open').bind({click: togglemenu.show});
    },

    hide: function() {

        $('div.togglemenu').slideUp({duration: 1000});
        $('div.frame div.togglemenu a.close').fadeOut();

        setTimeout(function(){

                $('div.togglemenu_closed').slideDown({duration: 500});
                $('div.frame div.togglemenu_closed a.open').fadeOut({duration: 1});
                $('div.frame div.togglemenu_closed a.open').fadeIn({duration: 1500});
            },
            1000
        );
    },

    show: function() {

        $('div.togglemenu_closed').slideUp({duration: 500});
        $('div.frame div.togglemenu_closed a.open').fadeOut({duration: 150});

        setTimeout(function(){

                $('div.togglemenu').slideDown({duration: 1000});
                $('div.frame div.togglemenu a.close').fadeIn({duration: 1500});
            },
            500
        );
    }
};


var szolgaltatasokDropDown = {

    flag: false,

    init: function() {

        /*var offset = $('div.szolgaltatasokDropDown').parent().offset();

        $('div.szolgaltatasokDropDown').parent().css('position', 'relative');
        $('div.szolgaltatasokDropDown').css('position', 'absolute');
        $('div.szolgaltatasokDropDown').css('z-index', '999');
        $('div.szolgaltatasokDropDown').css('top', '100px');
        $('div.szolgaltatasokDropDown').css('left', offset.top + 'px');
        $('div.szolgaltatasokDropDown').offset({
            top: 100, //offset.top
            left: offset.left
        });*/
        $('div.szolgaltatasokDropDown').parent().bind({
            mouseover: szolgaltatasokDropDown.show,
            mouseout: szolgaltatasokDropDown.hide
        });
        $('div.szolgaltatasokDropDown').hide();
    },

    show: function() {
        
        $('div.szolgaltatasokDropDown').show();
    },

    hide: function() {

        $('div.szolgaltatasokDropDown').hide();
    }
};

textfieldValue = {

    id: '',
    value: '',

    init: function(id,val) {

        this.id = id;
        this.value = val ? val : $(id).val();

        $(id).val(val);
        $(id).bind({
            focus: this.focus,
            blur: this.blur
        })
    },

    focus: function() {

        if($(this).val() == textfieldValue.value)
            $(this).val('');
    },

    blur: function() {

        if($(this).val() == '')
            $(this).val(textfieldValue.value);
    }
}

initAnim = function() {

    swfobject.embedSWF('/swf/anim.swf', 'anim', '600', '135', '9.0.0', 'expressInstall.swf', false, {wmode:'transparent'}, false);
}

initQuickSearch = function() {

    $('div.quickSearch').find('a').click(function() {
        $('div.quickSearch').find('form').submit();
    });
}

$(document).ready(function() {

    pageLoader.init();
    szolgaltatasokDropDown.init();
    textfieldValue.init('div.quickSearch input');
    togglemenu.init();

    initQuickSearch();
    initAnim();
});

