Slider = function(){
	var url = null;
	
	function itemLoadCallback(carousel, state)
	{
	    if (carousel.prevFirst != null) {
	        // Remove the last visible items to keep the list small
	        for (var i = carousel.prevFirst; i <= carousel.prevLast; i++) {
	            // jCarousel takes care not to remove visible items
	            carousel.remove(i);
	        }
	    }
	    var per_page = carousel.last - carousel.first + 1;
	    var currPage = 0;
	    var f,l;
	    var cr = carousel;


	    for (var i = carousel.first; i <= carousel.last; i++) {
	        var page = Math.ceil(i / per_page);
		
	        if (currPage != page) {
	            currPage = page;
	
	            f = ((page - 1) * per_page) + 1;
	            l = f + per_page - 1;
	
	            f = f < carousel.first ? carousel.first : f;
	            l = l > carousel.last ? carousel.last : l;
	
	            if (carousel.has(f, l)) {
	                continue;
	            }
	
	            makeRequest(carousel, f, l, per_page, page);
	        }
	    }
	};

	function makeRequest(carousel, first, last, per_page, page)
	{
	    // Lock carousel until request has been made
	    carousel.lock();
	
	    jQuery.get(url,
	        {
	            'per_page': per_page,
	            'page': page
	        },
	        function(data) {
	            itemAddCallback(carousel, first, last, data, page);
	        },
			"json"
	    );
	};

	function itemAddCallback(carousel, first, last, data, page)
	{
	    // Unlock
	    carousel.unlock();
	
	    // Set size
		carousel.size(data.total);
	
		var item_list = data.list
	    var per_page = carousel.last - carousel.first + 1;
	    for (var i = first; i <= last; i++) {
	        var pos = i - 1;
	        var idx = Math.round(((pos / per_page) - Math.floor(pos / per_page)) * per_page);
	
	        carousel.add(i, getItemHTML(item_list[idx], pos));
	    }
	};
	
	function getItemHTML(item, itemidx)
	{
		if (!item){
			return '';
		}
		var durl = document.URL;
		var urls = durl.split('/');
		var mediashowyes = 0;
		if( urls[3] + urls[4] == "shotsshow") mediashowyes = 1; //checked by url for showing media 
		
	    var url = item.url
		if (mediashowyes == 1) {
			var result = '<a onclick="imageRequest(\'' + itemidx + '\')" class="handpointer"><img src="' + url + '" border="0" alt="' + item.title + '" /></a>';
		} else {
			var result = '<a href="' + item.abs_url + '" title="' + item.title + '"><img src="' + url + '" border="0" alt="' + item.title + '" /></a>';
		}
		if (item.is_video){
			result += '<p class="play"><a href="'+ item.abs_url +'" title="'+ item.title +'">Play</a></p>';
		}
		
		if (item.is_album){
			result += '<a href="'+ item.abs_url +'" class="album-container"><p class="album-title"></p><a href="'+ item.abs_url +'" class="album-link">'+ item.title +'</a>';
			result += '<p class="album-info">' + item.photo_count + ' photos</p>';
			result += '<p class="album-info">' + item.video_count + ' videos</p></a>';
		}
		
		return result;
	};
	
	return {
		init: function(the_url){
			url = the_url;		
		},
		
		callback: function(carousel, state){
			return itemLoadCallback(carousel, state);
		}
	};
};

ShowcaseSlider = function(){
	var url = null, type = null;
	
	function itemLoadCallback(carousel, state)
	{
	    if (carousel.prevFirst != null) {
	        // Remove the last visible items to keep the list small
	        for (var i = carousel.prevFirst; i <= carousel.prevLast; i++) {
	            // jCarousel takes care not to remove visible items
	            carousel.remove(i);
	        }
	    }
	
	    var per_page = carousel.last - carousel.first + 1;
	    var currPage = 0;
	    var f,l;
	    var cr = carousel;
	    for (var i = carousel.first; i <= carousel.last; i++) {
	        var page = Math.ceil(i / per_page);
	        if (currPage != page) {
	            currPage = page;
		    
	            f = ((page - 1) * per_page) + 1;
	            l = f + per_page - 1;
	
	            f = f < carousel.first ? carousel.first : f;
	            l = l > carousel.last ? carousel.last : l;
	
	            if (carousel.has(f, l)) {
	                continue;
	            }
		    makeRequest(carousel, f, l, per_page, page);
	        }
	    }
	};

	function makeRequest(carousel, first, last, per_page, page)
	{
	    // Lock carousel until request has been made
	    carousel.lock();
	    jQuery.get(url,
	        {
	            'per_page': per_page,
	            'page': page
	        },
	        function(data) {
	            itemAddCallback(carousel, first, last, data, page);
	        },
			"json"
	    );
	};

	function itemAddCallback(carousel, first, last, data, page)
	{
	    // Unlock
	    carousel.unlock();
	
	    // Set size
		carousel.size(data.total);
	
		var item_list = data.list
	    var per_page = carousel.last - carousel.first + 1;
	
	    for (var i = first; i <= last; i++) {
	        var pos = i - 1;
	        var idx = Math.round(((pos / per_page) - Math.floor(pos / per_page)) * per_page);
	        carousel.add(i, getItemHTML(item_list[idx]));
	    }
	};
	
	function getItemHTML(item)
	{
		if (!item){
			return '';
		}
		
		result = '<ul class="profile-extra-panel clearfix">\
				 	<li class="profile-extra-panel1">\
						<img src="'+ item.image +'" alt="" />\
					</li>\
			        <li id="'+type+'-box" class="profile-extra-panel2">\
						<div class="summary">\
							<h5>'+item.title+'</h5>\
							<p>'+item.description+'</p>\
						</div>\
					</li>\
				 </ul>';
		
		return result;
	};
	
	return {
		init: function(the_url, the_type){
			url = the_url;		
			type = the_type;
		},
		
		callback: function(carousel, state){
			return itemLoadCallback(carousel, state);
		}
	};
};

