function get_param(name){
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function initCarousel(carousel, state){
    if(state=='init')
        Unicron = carousel;
}

function resetData(){
    try{
        carousel_array = []
        Unicron.reset()
    } catch(err){
        return
    }
}

function itemAdd(carousel, first, last, data){
    for(i=0; i < data.length; i++){        
        carousel.add(i+1, data[i]);
    }
}
/**
 *  fetch the photo thumbnail urls from server for the set of categories to be added to carousel
 *  and then add those categories to the carousel in the callback function
 */
function itemLoad_makeRequest(carousel, itemsToAdd){
    if(!$.isEmptyObject(itemsToAdd)){
        $.get(
            CATEGORY_THUMBNAIL_URL,
            itemsToAdd,
            function(data){
                itemLoad_requestCallback(carousel, itemsToAdd, data);
            },
            'json'
        );
    }
}

function itemLoad_requestCallback(carousel, itemsToAdd, data){
    //Add items now after fetching the photo thumbnail urls from server
    for (var i in itemsToAdd){
        carousel_array[i-1]['photo_path'] = data[i]['photo_path']
        carousel.add(i, itemLoad_makeHTML(carousel_array[i-1]));
    }
    
    // highlight the selected category
    $('.jcarousel-item-1').attr('id','')
    if($('#'+cur_cat_slug).length > 0){
        $('#'+cur_cat_slug).parent().attr('id','current-category');
    } else {
        $('#none').parent().attr('id','current-category');
    }
    $("#carousel_loader").hide();
}

function itemLoad_makeHTML(item){
    return "<a id='"+item.category_slug+"' href='"+CATEGORY_BASE_URL+item.type+"/"+item.category_path+"/'><img src='"+item.photo_path+"' border='0' alt='"+item.category+"'>"+item.category+"</a>";
}

function itemLoad(carousel, state){
    // preload "scroll" number of items for smooth scrolling.
    var last =  carousel.last + carousel.options.scroll;
    var first = carousel.first - carousel.options.scroll;
    
    var itemsToAdd = {}
    for(var i= first; i <= last; i++){
        if(i <= 0 || carousel.has(i) ){
            continue;
        }
        if(i >  carousel_array.length){
            break;
        }
        itemsToAdd[i] = carousel_array[i-1]['category_path'];
    }
    
    itemLoad_makeRequest(carousel, itemsToAdd);
}

function mainStoryHtml(json){
   var html = '<h4><a href="'+json.details_link+'">'+json.title+'</a></h4>';
   html += '<p class="byline">By <strong>';
   if(json.author != null && json.author_link != null)
       html += '<a href="'+json.author_link+'">'+json.author+'</a>';
   else if (json.author != null)
       html += json.author;
   else
       html += 'Anonymous';
   html += '</strong> &middot; '+json.date+'</p>';
   html += '<p>'+json.content+' <a href="'+json.details_link+'">read more</a></p>';
   return html;
   
}

function storyHtml(json){
    var html = '<div><h4><a href="'+json.details_link+'">'+json.title+'</a></h4>';
    html += '<p class="byline">By <strong>';
    if (json.author != null && json.author_link != null)
        html += '<a href="'+json.author_link+'">'+json.author+'</a>';
    else if (json.author != null)
        html += json.author;
    else
        html += 'Anonymous';
    html += '</strong> &middot; '+json.date+' - <a href="'+json.details_link+'">view details</a></p></div>';
    
    return html;
}

function mainVideo(json){
	createPlayer(json.processed_path,json.path,282,231, MEDIA_URL);
}

function thumbnailGenerate(json, container, active){
    if(json!=null){
        var thumb = document.createElement('a')
        $(thumb).addClass('thumbnail')
        if(active)
            $(thumb).addClass('active')
        $(thumb).attr('href', json.details_link)
        $(thumb).html("<img src='"+json.path+"' border='0'/>")
        $(thumb).appendTo(container)
    }else{
         var thumb = document.createElement('span')
         $(thumb).addClass('thumbnail')
         $(thumb).addClass('empty-thumbnail')
         $(thumb).appendTo(container)
    }
}

function browseHtml(json){
    return "<div class='browse-thumbnail'><a href='"+json.details_link+"'><img src='"+json.medium_path+"' border='0'/></a><p><strong><a href='"+json.details_link+"' class='galleries'>"+json.title+"</a></strong><br/><span>"+json.date+"</span></p></div>";
}

function thumbnailHtml(json){
    return "<a class='thumbnail' href='"+json.details_link+"'><img src='"+json.path+"' border='0'/></a>";
}

function mainpicHtml(json){
    return "<div id='photo-main-overlay'></div><img src='"+json.main_path+"' border='0'/>";
}

function nextHtml(url){
    return "<div class='browse-thumbnail' id='browse-next'><a href='"+url+"'>Go to Next Page</a></div>"
}

mediaBrowser = function(config) {

    this.counter = config.page;
    this.current = '';
    this.id_list = [];
    this.total = '';
    this.num_thumbnails = 15; //page_size is "6" for non-logged in users so that wont work here.
    var self = this;
    this.query_string = "?";
    
    this.next_item = function(){
        if(self.current != (page_size-1)){
            url = $('#next-main-media').attr('href');
            if(self.id_list[self.current+1] == undefined){
                self.id_list[self.current+1] = 0
            }
            url = url.replace("\/1\/","\/"+self.id_list[self.current+1]+"\/");
            if (self.id_list[self.current+1] == 0) {
                $('#next-main-media').attr('href', "#");
                $('#next-main-media').attr('class', "");
            } else {
                $('#next-main-media').attr('href', url);
            }
        } else {
            var page = config.page + 1;
            url = location.href.split('/?');
            url = url[0].split(/\/\d+$|\/[np]$/);
            cat_string = get_param('cat');
            if (config.page == self.total) {
                $('#next-main-media').attr('href', "#");
                $('#next-main-media').attr('class', "");
            } else {
                $('#next-main-media').attr('href', url[0]+'/n/?page='+page+'&cat='+cat_string);
            }
        }
    }
    
    this.prev_item = function(){
        if(self.current > 0 ) {
            url = $('#prev-main-media').attr('href');
            url = url.replace("\/1\/","\/"+self.id_list[self.current-1]+"\/");
            $('#prev-main-media').attr('href', url);
        } else {
            if (config.page != 1){
                var page = config.page - 1;
            } else {
                var page = config.page;
            }
            url = location.href.split('/?');
            url = url[0].split(/\/\d+$|\/[np]$/);
            cat_string = get_param('cat');
            $('#prev-main-media').attr('href', url[0]+'/p/?page='+page+'&cat='+cat_string);
        }
    }
    
    this.load = function(){
        var thumb_output = '';
        if(config.query_string)
            self.query_string += "&"+config.query_string;
         if(config.browse)
              self.query_string += "&browse=true";
        self.counter = this.counter;
        $.getJSON(config.url + this.counter +"/"+self.query_string,
            function(data){
                var loader = $(config.media+'wrap').siblings()[0];
                $('.browse-media-next').hide();
                $('.browse-media-prev').hide();
                if(!data.items.length) {
                    $(config.media+'wrap').hide();
                    $(config.media+'main').hide();
                    $(config.media+'nomedia').fadeIn();
                }
                else {
                    $('.paginator').show();
                    $('#crumbtrails-footer').show();
                    $('.browse-media-next').show();
                    $('.browse-media-prev').show();
                    $('.browse-media-next-inactive').show();
                    $('.browse-media-prev-inactive').show();
                    $(config.media+'wrap').show();
                    $(config.media+'main').show();
                    $(config.media+'nomedia').hide();
                    if($(config.media+'main')){
                        $(config.media+'main').html(config.mainhtml(data.items[0]));
                    }
                    $(config.media+'thumbs').html('');
                    self.total = parseInt(data.total_pages.replace(",", ""));
                    $.each(data.items, function(i,item){
                        if(cur_media == '')
                            thumb_output += config.html(item);
                        else
                            config.html(item, config.media+'thumbs', (cur_media == item.mid));
                    });
                    if(config.browse == true && self.counter != self.total){
                        thumb_output += nextHtml(config.next_url  + self.query_string + "&page=" + (self.counter+1))
                    }
                    if(cur_media ==''){
                        $(config.media+'thumbs').html(thumb_output);
                    } else {
                        //dummy thumbnails for empty slots
                        for(var i=data.items.length; i < self.num_thumbnails; i++){
                           config.html(null, config.media+'thumbs');
                        }
                        thumbnails = $('a.thumbnail');
                        for(i=0; i<thumbnails.length; i++){
                            id = $(thumbnails[i]).attr("href").match('\/\\d+\/')
                            if (id != null) {
                                id = id[0]
                                id = id.split('/')
                                self.id_list[i] = id[1];
                                if(id[1] == cur_media){
                                    self.current = i;
                                }
                            }
                        }
                        self.next_item();
                        self.prev_item();
                    }
                }
                $(loader).hide();
                if (self.counter == 1){
                    $(config.media+'wrap .prev-media').hide();
                } else {
                    $(config.media+'wrap .prev-media').show();
                }
                
                if (self.counter == self.total){
                    $(config.media+'wrap .next-media').hide();
                } else {
                    $(config.media+'wrap .next-media').show();
                }
            });
        
    }  

    this.next = function(){
        var loader = $(config.media+'wrap').siblings()[0];
        $(loader).show();
        this.counter++;
        this.load();
    }  
    this.previous = function(){
        var loader = $(config.media+'wrap').siblings()[0];
        $(loader).show();
        this.counter--;
        if(this.counter == 0)
            this.counter = 1;
        this.load();
    }
    this.reset = function(){
        this.counter = 1;
    }
}

