/**
 *  Verify AP namespace
 *  
 */
if (typeof AP != 'object'){
    var AP = {};
}

AP.playlist = function(PL){
    
    PL = PL || {};

    PL.item = function(p,my){
        
        my = my || {};
        p = p || {};
        
        my.data = {
            index       : p.index,
            id          : p.id,
            title       : p.title,
            client      : p.client,
            url_o       : p.url_o,
            height_o    : p.height_o,
            width_o     : p.width_o,
            url_sq      : p.url_sq,
            height_sq   : p.height_sq,
            width_sq    : p.width_sq,
            url_t       : p.url_t,
            height_t    : p.height_t,
            width_t     : p.width_t
        };
        
        return {
            setImage : function(code,url,height,width){
                var uProp = 'url_'+code;
                var hProp = 'height_'+code;
                var wProp = 'width_'+code;
                my.data[uProp] = url;
                my.data[hProp] = +height;
                my.data[wProp] = +width;
            },
            getImage : function(code){
                var uProp = 'url_'+code;
                var hProp = 'height_'+code;
                var wProp = 'width_'+code;
                return {
                    url : my.data[uProp],
                    height : my.data[hProp],
                    width : my.data[wProp]
                };
            },
            add : function(name,value){
                if (my.data.hasOwnProperty(name)){
                    my.data[name].push(value);
                }
            },
            set : function(name,value){
                if (my.data.hasOwnProperty(name)){
                    my.data[name] = value;
                }
            },
            get : function(name){
                if (my.data.hasOwnProperty(name)){
                    return my.data[name];
                }
            },
            getAttributes : function(){
                return my.data;
            }
        };
    };
    
    PL.processItems = function(feed){
    
        var items = [];
        var total = feed.length;
        var incr = 0;
        
        for (key in feed) {
            var feedItem = feed[key];
            var thumbSize = aFrame.getScaledDimensions(feedItem.width,feedItem.height,180,180);
            var newItem = PL.item({
                index       : incr,
                id          : incr,
                title       : feedItem.title,
                client      : feedItem.client,
                url_sq      : feedItem.thumbnail.url,
                height_sq   : 75,
                width_sq    : 75,
                url_t       : feedItem.thumbnail.url,
                height_t    : thumbSize.height,
                width_t     : thumbSize.width,
                url_o       : feedItem.url,
                height_o    : feedItem.height,
                width_o     : feedItem.width
            });
            incr++;
            items.push(newItem);
        }
        
        return items;
    };

    /*
     * CONSTRUCTOR METHOD
     */
    return function(p,my){
        
        my = my || {};
        p = p || {};
        my.events = p.events || {};

        my.items = PL.processItems(p.items);
        my.itemCount = my.items.length;
        my.initialIndex = p.index || 0;
        my.currentIndex = -1;    
        
        my.handleSelectByIndex = function(e){
            
            if (e.index >= my.itemCount || my.currentIndex === e.index){
                return;
            }
            
            my.currentIndex = e.index;
            
            my.events.fire('playlist:itemSelected',my.items[e.index]);
            
        };
        
        my.handleSelectPrevious = function(){

            var prevIndex = my.currentIndex - 1;
            
            if (prevIndex < 0){
                prevIndex = my.itemCount - 1;
            }
            
            my.events.fire('selectByIndex',{
                index : prevIndex
            });
            
        };
        
        my.handleSelectNext = function(){

            var nextIndex = my.currentIndex + 1;
            
            if (nextIndex >= my.itemCount){
                nextIndex = 0;
            }
            
            my.events.fire('selectByIndex',{
                index : nextIndex
            });
        };
        
        my.events.on('selectPrevious',my.handleSelectPrevious);
        
        my.events.on('selectNext',my.handleSelectNext);
        
        my.events.on('selectByIndex',my.handleSelectByIndex);
        
        my.handleKeyDown = function(e){

            var code = e.keyCode;
            
            switch (code) {
                case 39:
                    my.events.fire('selectNext');
                    break;
                case 37:
                    my.events.fire('selectPrevious');
                    break; 
                case 32:
                    my.events.fire('spacebarPress');
                    break;
            }
        };
        
        aFrame.addListener('keydown',document,my.handleKeyDown);
        
        my.events.fire('playlist:dataAvailable',my.items);

        return {
        
            destroy : function(){
                my.items = [];
                my.itemCount = 0;
                aFrame.removeListener('keydown',document,my.handleKeyDown);
            },
        
            getItems : function(){
                return my.items
            }
        };
    };

}();

