/**
 * Pager Class
 *
 * @extends nl.code.util.Observable
 * @abstract
 */
Core.createNamespace('nl.code.pager');
nl.code.pager.Pager = new Class({
    Extends: nl.code.util.Observable,

    /**
     * Constructor
     *
     * @param base_url string, the base url of this project
     */
    initialize: function(base_url) {
        this.parent(['update_element', 'update_page']);

        this.page_object_arr = [];
        this.site_object_arr = [];

        this.template = $(document.body).get('id');
        this.id = this.template;

        // store the base url
        nl.code.pager.Uri.setBaseUrl(base_url);
    },

    /**
     * @param JSON
     * @param string
     * @return void
     */
    setContent: function(data, text) {
        try {
            this.template = data.template;
            this.id = data.id;

            $(document.body).set('id', data.template);

            // delete the page objects
            for (var i = 0; i < this.page_object_arr.length; i++) {
                delete this.page_object_arr[i];
            }

            // insert the received html
            for (html_id in data.content) {
                var element = $(html_id);

                // guard: if the element does not exist skip
                if (! element) {
                    continue;
                }

                element.empty();
                element.set('html', data.content[html_id]);

                this.scanContent(element);
                this.fireEvent('update_element', {html_id: html_id});
            }

            // guard: check if the argument is an array
            if ($type(data.scripts) == 'array') {
                for (var i = 0; i < data.scripts.length; i++) {
                    eval(data.scripts[i]);
                }
            }

            this.fireEvent('update_page', {uri: nl.code.pager.Uri.getHash()});
        } catch (e) {
            //alert('An error occured');
        }
    },


    /**
     * @param Element, the element to update
     */
    scanContent: function(root) {
    }
});