$(document).ready(function(){
  $("#content-slider").slider({
    animate: true,
    change: handleSliderChange,
    slide: handleSliderSlide
  });
});

function handleSliderChange(e, ui){
  var maxScroll = $("#content-scroll").attr("scrollWidth") - $("#content-scroll").width();
  $("#content-scroll").animate({scrollLeft: ui.value * (maxScroll / 100) }, 1000);
}

function handleSliderSlide(e, ui){
  var maxScroll = $("#content-scroll").attr("scrollWidth") - $("#content-scroll").width();
  $("#content-scroll").attr({scrollLeft: ui.value * (maxScroll / 100) });
}



/*
 * You need some vars like this defined for the paging to work:
 *   page_count = 3;
 *   slider_threshold = 18; // number of page links that can display before slider is needed
 *   pagination_holder_selector = 'jquery path to pagination div';
 * 
 */
function pageLinks_render(sel, click_data, hilite_page) {
	/*
	 * click_data = {
	 *   selector: 'jquery path to results div',
	 *   query_prefix: eg '?' or '&'
	 * }
	 */
	if (page_count > 1) {
		$(sel).empty();
		if (page_count <= slider_threshold) $("#content-slider").hide(); //hide slider if there's not enough pages
		for (j=1; j<=page_count; j++) {
			$(sel).append('<div class="content-item"><a href="'+click_data.query_prefix+'p='+j+'" onfocus="this.blur();">' + j + '</a></div>');
		}
		$(sel).children('.content-item').bind('click', click_data, pageLinks_onClick).children('a').click(function(evt) { evt.preventDefault() });
		pageLinks_hilitePage(sel, hilite_page)
	} else {
		$("#content-slider").hide(); //hide slider if there's not enough pages
	}
}
function pageLinks_onClick(evt) {
	var re = new RegExp(evt.data.query_prefix.escapeForRegEx() + 'p=(\\d+)');
	var page = $(evt.currentTarget).children('a').attr('href').match(re)[1];
	pagination_loadPage(evt.data.selector, evt.data.query_prefix, page);
}
function pageLinks_hilitePage(sel, page) {
	$(sel).find(".content-item.content-item-selected").removeClass('content-item-selected');
	$(sel).find(".content-item a[href$='p="+page+"']").parent('.content-item').addClass('content-item-selected');
}

function pagination_loadPage(sel, query_prefix, page) {
	load_url = page_url + query_prefix + 'p='+page;
	load_query = load_url.split('?')[1];
	$(sel).fadeTo('medium', 0, function() {
	      $.ajax({  
		  type: "GET",
		  url: load_url,  
		  cache: false,  
		  dataType: "html",
		  success: function(html, textStatus) {
		      current_page = page;
		      $(sel).empty().append(html);
		      pageLinks_hilitePage(pagination_holder_selector, page);
		      location.hash = 'p'+page;
		  },  
		  error: function (XMLHttpRequest, textStatus, errorThrown) {  
		      // do nothing: leave previously loaded comments in place
		  },
		  complete: function() {
		      $(sel).fadeTo('medium', 100);
		  }
	      });
	});
}

String.prototype.escapeForRegEx = function()
{
  var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g"); // .*+?|()[]{}\
  return this.replace(specials, "\\$&");
}

