
ripl.globalDefaults.RiplFeaturedListOptions = 
ripl.coreObjects.RiplFeaturedList = function(displayOptions,childParameters,eventOptions)
{
    this._rawItems = [];
    this._availableItems = [];
    this._currentIndex = -1;
    
    this.displayOptions = ripl.coreObjects.OptionBuilder(ripl.coreObjects.clone(ripl.globalDefaults.ContentListOptions),displayOptions);
this.displayOptions.targetstyle="features_default";
this.displayOptions.displaytypeselector=false;

    this.childParameters = ripl.coreObjects.OptionBuilder({
            chain:ripl.enums.contentChains.NOT_LOGGED,
            showfollow:false,
            referer:-1
        },childParameters);
    this.eventOptions =  ripl.coreObjects.OptionBuilder({
            onclick:null,
            onmouseover:null,
            onmouseout:null
        },eventOptions);         
    this.event = new ripl.events.eventManagerBase(this);    
}

ripl.coreObjects.extend(ripl.coreObjects._riplCollection.prototype, ripl.coreObjects.RiplFeaturedList.prototype);

ripl.coreObjects.RiplFeaturedList.prototype._filterList= function()
{
    this._availableItems = this._rawItems;
    this._sort();
};

ripl.coreObjects.RiplFeaturedList.prototype.addItem = function(inFeaturedItem)
{
    this.dirty = true;
    this._rawItems.push(inFeaturedItem);
}

ripl.coreObjects.RiplFeaturedList.prototype.hideAll = function()
{
    for (var i = 0; i < this._rawItems.length; i++)
    {
        if (this._rawItems[i].domObj)
        {
            this._rawItems[i].domObj.hide();
        }
    }
}




ripl.coreObjects.RiplFeaturedList.fromJson = function(inObject,displayOptions,childParameters,eventOptions)
{
    var pFeaturedList = new ripl.coreObjects.RiplFeaturedList(displayOptions,childParameters,eventOptions);
    var pUsers = new ripl.coreObjects.UserList({},pFeaturedList.childParameters);
    pUsers.addObjects(inObject['users']);
    
    var pContent = new ripl.coreObjects.ContentList({},pFeaturedList.childParameters);
    pContent.addObjects(inObject['content']);
    
    for (var i = 0; i < inObject['features'].length; i++)
    {
        var pFeature = ripl.coreObjects.RiplFeaturedItem.createFromObject(inObject['features'][i]);
        pFeature.parent = pFeaturedList;
        if (pFeature.relevant_type == 'user')
        {
            pFeature.relevant_object = pUsers.getItemById(pFeature.relevant_id);
        }
        else if (pFeature.relevant_type == 'contentItem')
        {
            pFeature.relevant_object = pContent.getItemById(parseInt(pFeature.relevant_id));
        }
        if (!pFeature.relevant_object) continue;
        
        var pFeatureContentArr = [];
        
        for (var j=0; j < inObject['features'][i]['associatedItems'].length; j++)
        {
            var pItem = inObject['features'][i]['associatedItems'][j];
            if (pItem['base_type']) 
            {
                var pContentItem = new ripl.coreObjects.ContentItem(pItem);
                pFeature.associatedContent.addObject(pItem);
            }
            else if (pItem['uid'])
            {
//                pFeatureUserArr.push(pUsers.getItemById(pItem['uid']));
            }
        }
        pFeature.displayOptions.renderExTarget = pFeaturedList.displayOptions.renderExTarget;
        pFeaturedList.addItem(pFeature);
    }
    return pFeaturedList;    
}


ripl.renderers.addCollectionRenderer('features_default',function (featureList) {
    if (!featureList.displayOptions.renderTarget) { return; }
    
    var pTitle, pContent, i,
        pLen = featureList._availableItems.length,    
        pageInfo, pBottomLeft, pBottomRight, pBottomBar,
        pDiv = $ripl.create('div',{
            className:'ripl_displayObject'
            });
    
    pTitle = ripl.renderers.collectionRenderers.title_helper(featureList);

    pContent = $ripl.create('div',{className:'ripl_contentcontainer'});    
    if (pLen == 0) 
    {
        pContent.add(featureList.displayOptions.noitems);
    }
    else
    {
        pageInfo = ripl.renderers.collectionRenderers.pagination_helper(featureList);
        for (i = pageInfo.start; i < pageInfo.max; i++)
        {
            var pObj = featureList._availableItems[i].relevant_object.getStandardDomObj();
            pObj.listen('mouseover',featureList._availableItems[i].setCurrent,featureList._availableItems[i]);
            pContent.add(pObj);
        }
    }
    
    pBottomBar = ripl.renderers.collectionRenderers.bottombar_helper(featureList,pLen);
    pDiv.add([pTitle, pContent, pBottomBar]);

    $ripl.update(featureList.displayOptions.renderTarget,pDiv);
});

ripl.coreObjects.RiplFeaturedItem = function(displayOptions, eventOptions)
{
    this.featureId = 0;
    
    this.relevant_id = 1;
    this.relevant_type = 'user';
    
    this.relevant_object;
    this.parent;
    
    this.category='';
    this.header='';
    this.subheader='';
    this.description='';

    this.splash='';
    
    this.associatedItems = new ripl.coreObjects.MixedList();
    
    this.associatedContent = new ripl.coreObjects.ContentList({"displaytypeselector":false,'noitems':''});
    
    this.locations = [];
    this.target;
    this.startDate;
    this.endDate;

    this.priority = 5;    
    this.domObj=null;
    this.items = new ripl.coreObjects.MixedList();

    this.displayOptions = ripl.coreObjects.OptionBuilder({
        showname:false,
        renderExTarget:'mainFeature'
        },displayOptions);
    this.eventOptions =  ripl.coreObjects.OptionBuilder({
        onclick:null,
        onmouseover:null,
        onmouseout:null
    },eventOptions);     
    
    this.event = new ripl.events.eventManagerBase(this);    
}



ripl.coreObjects.RiplFeaturedItem.createFromObject= function(inObject)
{
    var pItem = new ripl.coreObjects.RiplFeaturedItem();
    pItem.featureId = inObject['featureId'];
    pItem.relevant_id = inObject['relevant_id'];
    pItem.relevant_type = inObject['relevant_type'];
    
    pItem.priority = inObject['priority'];
    
    pItem.category = inObject['category'];
    pItem.header = inObject['header'];
    pItem.subheader = inObject['subheader'];
    pItem.description = inObject['description'];
    pItem.splash = inObject['splash'];
    pItem.startDate = new Date(inObject['startDate']);
    pItem.endDate = new Date(inObject['endDate']);
    return pItem;
}

ripl.coreObjects.extend(ripl.coreObjects._riplDisplayObject.prototype, ripl.coreObjects.RiplFeaturedItem);

ripl.coreObjects.RiplFeaturedItem.prototype.getLink = function()
{
    return this.relevant_object.getLink();
}
ripl.coreObjects.RiplFeaturedItem.prototype.setCurrent = function(object)
{
    this.parent.hideAll();
    this.renderEx();
}
ripl.coreObjects.RiplFeaturedItem.prototype.show = function()
{
    if (!this.domObj) this.renderEx();
    if (!this.domObj.visible())
    {
        this.domObj.show();
        this.event.fire('visible',true);
    }
}

ripl.coreObjects.RiplFeaturedItem.prototype.renderEx = function()
{
    var pTarget = $ripl(this.displayOptions.renderExTarget);
    if (!pTarget) { return; }

    this.associatedContent.displayOptions.renderTarget = pTarget.down('.featuredContent');
    this.associatedContent.render();
    
    if (this.domObj)
    {
        this.domObj.show();
        return;
    }
    var pSmallButton;
    var pDomObj = $ripl.create('div',{className:'featureInfo',style:'background-image:url('+this.splash+')'});
    var pAv = $ripl.create('div',{className:'featuredAvatar'});

    if (this.relevant_object)
    {
        pSmallButton = $ripl.create('input',{type:'button',className:'smallButton', value:this.relevant_object.getGenericLinkText()});
        pSmallButton.listen('click', function(){location.href=this.getLink();},this);
        pAv.add(this.relevant_object.getStandardDomObj());
    }
    pDomObj.update(pAv);

    var pFeaturedInfo = $ripl.create('div',{className:'featuredInfo'});
    var pString ='<div class="featuredType">'+this.category+'</div>';
    pString += '<div class="featuredHeader">'+this.header+'</div>';
    pString += '<div class="featuredSubheader">'+this.subheader+'</div>';
    pString += '<div class="featuredText">'+this.description+'</div>';
    pFeaturedInfo.update(pString);
    if (pSmallButton) { pFeaturedInfo.add(pSmallButton); }
    pDomObj.add(pFeaturedInfo);
    this.domObj = pDomObj;
    pTarget.add(pDomObj);
}

