var BaseControl = Class.create({
    name:null,
    view:null,
    selector:null,
    events:null,

    initialize: function(element)
    {
        if (element) this.loadview(element);
        this.events = new Array();
    },

    loadview: function(element)
    {
        this.view = $(element);
        this.name = this.view.id;
        this.view.control = this;
    },

    observe: function(eventName, callback)
    {
        if (!this.events[eventName])
            this.events[eventName] = new Array();
        this.events[eventName].push(callback);
    },

    stopObserving: function()
    {
        this.events = new Array();
    },

    fire: function(eventName, memo)
    {       
        if (this.events[eventName])
            this.events[eventName].each(function(callback){
                callback(memo);
            });
    },

    down: function(selector)
    {
        return this.view.down(selector);
    },

    update: function(value)
    {
        return this.view.update(value);
    },

    serialize: function()
    {               
        var elements = null;
        
        // :BUG: hoannd001 IE does not know this.view.find function
        // Solution: use select function in that case
        if (typeof $(this.view).find == 'undefined')
            var elements = $(this.view).select('input', 'select', 'textarea');
        else
            var elements = $(this.view).find('input', 'select', 'textarea');
            
            var a="";
            for (i = 0; i < elements.length; i ++)
            {
                a += elements[i].name + "=" + elements[i].getValue() + "_";
            }                       
            
        return Form.serializeElements(elements);
    },
    
    find: function()
    {
        return Selector.findChildElements(this.view, $A(arguments));
    },

    findOne: function()
    {
        return Selector.findChildElements(this.view, $A(arguments)).first();
    }
});