/**
 * Обычный HTML элемент
 */
function Element_Abstract()
{
	this._parentElement = {};
	
    /**
     * Базовый DOM Node (который должен будет в себе включать все остальное наполнение нашего элемента)
     *
     * @var DOM Element
     */
    this._baseElement = {};
}

/**
 * @param DOM Element 
 */
Element_Abstract.prototype._setBaseElement = function( element )
{
    this._baseElement = element;
    
    Rup.get.id("HiddenTempDiv").appendChild(element);
    
}


/**
 * Вставляет элемент в контейнер, предварительно его очищая
 * @param
 *     String: ID существующего DOM-элемента
 *     DOM Element: вставляет в переданный элемент DOM
 *     Container_Element_Abstract: вставляет в переданный контейнер 
 */
Element_Abstract.prototype.render = function(element, doNotClear)
{
    if( typeof(element) == "string" )
    {
        var oParentElement = Rup.get.id(element);
        if (!doNotClear) oParentElement.innerHTML = '';
        oParentElement.appendChild(this._baseElement);
        this._parentElement = oParentElement;
    }
    else if( element instanceof Container_Element_Abstract )
    {
        /**
         *  безопасно удаляем все элементы, что были в контейнере до этого
         */
        if (!doNotClear) element._removeChildsSafe();
        element.appendChild( this );
    }
    else if( typeof(element) == "object" )
    {
        if (!doNotClear) element.innerHTML = '';
        element.appendChild( this._baseElement );
        this._parentElement = element;
    }
}

/**
 * @return DOM Element 
 */
Element_Abstract.prototype.dom = function()
{
    return this._baseElement;
}