var PAGE_NAVIGATOR_PARAM_PAGE = "%PAGEDROPDOWN%";    // DEPRECATED - Use PAGE_NAVIGATOR_TAG_DROPDOWN
var PAGE_NAVIGATOR_PARAM_PAGE_COUNT = "%PAGECOUNT%"; // DEPRECATED - Use PAGE_NAVIGATOR_TAG_COUNT

var PAGE_NAVIGATOR_TAG_LINKS = "%PAGELINKS%";		// List of links to each page number.
var PAGE_NAVIGATOR_TAG_DROPDOWN = "%PAGEDROPDOWN%"; // A drop-down list containing each of the page numbers.
var PAGE_NAVIGATOR_TAG_CURRENT = "%CURRENTPAGE%";	// Current Page number.
var PAGE_NAVIGATOR_TAG_COUNT = "%PAGECOUNT%";		// Number of pages.
var PAGE_NAVIGATOR_TAG_FIRST = "%FIRSTPAGE%";		// Link to the first page.
var PAGE_NAVIGATOR_TAG_LAST = "%LASTPAGE%";			// Link to the last page.
var PAGE_NAVIGATOR_TAG_PREV = "%PREVPAGE%";			// Link to the Previous page.
var PAGE_NAVIGATOR_TAG_NEXT = "%NEXTPAGE%";			// Link to the next page.
var PAGE_NAVIGATOR_TAG_NEXT_10 = "%NEXT10%";		// Link to the next 10th page.
var PAGE_NAVIGATOR_TAG_PREV_10 = "%PREV10%";		// Link to the previous 10th page.

var PAGE_NAVIGATOR_TEMPLATE_FULL_LINKS =
      PAGE_NAVIGATOR_TAG_FIRST + 
      PAGE_NAVIGATOR_TAG_PREV + 
      PAGE_NAVIGATOR_TAG_PREV_10 + 
      PAGE_NAVIGATOR_TAG_LINKS + 
      PAGE_NAVIGATOR_TAG_NEXT_10 + 
      PAGE_NAVIGATOR_TAG_NEXT + 
      PAGE_NAVIGATOR_TAG_LAST;

var PAGE_NAVIGATOR_TEMPLATE_FULL_DROPDOWN =
      PAGE_NAVIGATOR_TAG_FIRST + 
      PAGE_NAVIGATOR_TAG_PREV + 
      "&nbsp;Page&nbsp;" + PAGE_NAVIGATOR_TAG_DROPDOWN +
      "&nbsp;of&nbsp;" + PAGE_NAVIGATOR_TAG_COUNT + 
      "&nbsp;" + PAGE_NAVIGATOR_TAG_NEXT + 
      PAGE_NAVIGATOR_TAG_LAST;

////////////////////////////////////////
function PageNavigator ( PageCount, CurrentPage, LinkURL, GroupSize, CSSClass, FirstLabel, LastLabel, PrevLabel, NextLabel, NextGroupLabel, PrevGroupLabel, Template )
{
  switch (arguments.length) {
    case 0: document.writeln('<span style="color:red">ERROR: Missing required parameter in call to \'PageNavigator\': [ PageCount, CurrentPage, LinkURL ].</span>'); return;
    case 1: document.writeln('<span style="color:red">ERROR: Missing required parameter in call to \'PageNavigator\': [ CurrentPage, LinkURL ].</span>'); return;
    case 2: document.writeln('<span style="color:red">ERROR: Missing required parameter in call to \'PageNavigator\': [ LinkURL ].</span>'); return;
	case 3: GroupSize  = 0;
    case 4: CSSClass   = "";
	case 5: FirstLabel = "First";
	case 6: LastLabel  = "Last";
	case 7: PrevLabel  = "Prev";
	case 8: NextLabel  = "Next";
	case 9: NextGroupLabel = "Next " + GroupSize;
	case 10: PrevGroupLabel = "Prev " + GroupSize;
	case 11: Template = PAGE_NAVIGATOR_TEMPLATE_FULL_LINKS;
  }
  var html = PageNavigator_Render ( PageCount, CurrentPage, LinkURL, GroupSize, CSSClass, FirstLabel, LastLabel, PrevLabel, NextLabel, NextGroupLabel, PrevGroupLabel, Template );
  document.writeln(html);
}

////////////////////////////////////////
function PageNavigator_Render ( PageCount, CurrentPage, LinkURL, GroupSize, CSSClass, FirstLabel, LastLabel, PrevLabel, NextLabel, NextGroupLabel, PrevGroupLabel, Template )
{
  switch (arguments.length) {
    case 0: document.writeln('<span style="color:red">ERROR: Missing required parameter in call to \'PageNavigator\': [ PageCount, CurrentPage, LinkURL ].</span>'); return;
    case 1: document.writeln('<span style="color:red">ERROR: Missing required parameter in call to \'PageNavigator\': [ CurrentPage, LinkURL ].</span>'); return;
    case 2: document.writeln('<span style="color:red">ERROR: Missing required parameter in call to \'PageNavigator\': [ LinkURL ].</span>'); return;
	case 3: GroupSize  = 0;
    case 4: CSSClass   = "";
	case 5: FirstLabel = "First";
	case 6: LastLabel  = "Last";
	case 7: PrevLabel  = "Prev";
	case 8: NextLabel  = "Next";
	case 9: NextGroupLabel = "Next " + GroupSize;
	case 10: PrevGroupLabel = "Prev " + GroupSize;
	case 11: Template = PAGE_NAVIGATOR_TEMPLATE_FULL_LINKS;
  }
  
  var CSSClass_LinkButton = "";
  var CSSClass_DisabledButton = "";
  var CSSClass_PageLink = "";
  var CSSClass_PageList = "";
  var CSSClass_CurrentPage = "";
  if (CSSClass != "")
  {
    CSSClass_LinkButton     = CSSClass + "_linkbutton";
    CSSClass_DisabledButton = CSSClass + "_disabledbutton";
    CSSClass_PageLink       = CSSClass + "_pagelink";
    CSSClass_PageList       = CSSClass + "_pagelist";
    CSSClass_CurrentPage    = CSSClass + "_currentpage";  
  }
  
  var startPage = 1;
  var endPage = PageCount;
  var HalfGroupSize = 0;
  if (GroupSize > 0 && GroupSize < PageCount)
  {
    HalfGroupSize = Math.floor(GroupSize / 2);
    if (CurrentPage > HalfGroupSize) startPage = CurrentPage - HalfGroupSize;
	endPage = (startPage + GroupSize) - 1;
	if (endPage > PageCount)
	{
	  startPage -= (endPage - PageCount);
	  endPage = PageCount;
	}
  }
  
  var str = ""
  var html = '<div class="' + CSSClass + '">' + Template + '</div>'
	
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_FIRST) >= 0)
  {
	if (CurrentPage != 1)  str = '<a class="' + CSSClass_LinkButton + '" href="' + PageNavigator_BuildURL ( LinkURL, 1 ) + '">' + FirstLabel + '</a>';
	else str = '<span class="' + CSSClass_DisabledButton + '">' + FirstLabel + '</span>';
	html = html.replace(/%FIRSTPAGE%/g, str);
  }

  if (Template.indexOf(PAGE_NAVIGATOR_TAG_LAST) >= 0)
  {
	if (CurrentPage != PageCount) str = '<a class="' + CSSClass_LinkButton + '" href="' + PageNavigator_BuildURL ( LinkURL, PageCount ) + '">' + LastLabel + '</a>'; 
	else str = '<span class="' + CSSClass_DisabledButton + '">' + LastLabel + '</span>';
	html = html.replace(/%LASTPAGE%/g, str);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_PREV) >= 0)
  {
	if (CurrentPage != 1) str = '<a class="' + CSSClass_LinkButton + '" href="' + PageNavigator_BuildURL ( LinkURL, (CurrentPage-1) ) + '">' + PrevLabel + '</a>';
	else str = '<span class="' + CSSClass_DisabledButton + '">' + PrevLabel + '</span>';
	html = html.replace(/%PREVPAGE%/g, str);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_NEXT) >= 0)
  {
	if (CurrentPage <  PageCount) str = '<a class="' + CSSClass_LinkButton + '" href="' + PageNavigator_BuildURL ( LinkURL, (CurrentPage+1) ) + '">' + NextLabel + '</a>'; 
	else str = '<span class="' + CSSClass_DisabledButton + '">' + NextLabel + '</span>';
	html = html.replace(/%NEXTPAGE%/g, str);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_PREV_10) >= 0)
  {
	if (CurrentPage > GroupSize) str = '<a class="' + CSSClass_LinkButton + '" href="' + PageNavigator_BuildURL ( LinkURL, (CurrentPage - GroupSize) ) + '">' + PrevGroupLabel + '</a>'; 
	else str = "";
	html = html.replace(/%PREV10%/g, str);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_NEXT_10) >= 0)
  {
	if (CurrentPage < PageCount - GroupSize) str = '<a class="' + CSSClass_LinkButton + '" href="' + PageNavigator_BuildURL ( LinkURL, (CurrentPage + GroupSize) ) + '">' + NextGroupLabel + '</a>'; 
	else str = "";
	html = html.replace(/%NEXT10%/g, str);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_LINKS) >= 0)
  {
	str = "";
	for (var p = startPage; p <= endPage; p ++)	{
	  if (p != CurrentPage) str += '<a class="' + CSSClass_PageLink + '" href="' + PageNavigator_BuildURL ( LinkURL, p ) + '">' + p + '</a>';
	  else str += '<span class="' + CSSClass_CurrentPage + '">' + p + '</span>';
	}
	html = html.replace(/%PAGELINKS%/g, str);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_DROPDOWN) >= 0)
  {
	str = '<select class="' + CSSClass_PageList + '" onChange="PageNavigator_GotoPage(\'' + LinkURL + '\',this);">';
	for (var p = 1; p <= PageCount; p ++) str += '<option value="' + p + '"' + ((p==CurrentPage)? ' selected' : '') + '>' + p + '</option>';
	str += '</select>';
	html = html.replace(/%PAGEDROPDOWN%/g, str);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_CURRENT) >= 0)
  {
	html = html.replace(/%CURRENTPAGE%/g, CurrentPage);
  }
	  
  if (Template.indexOf(PAGE_NAVIGATOR_TAG_COUNT) >= 0)
  {
	html = html.replace(/%PAGECOUNT%/g, PageCount);
  }

  return html;
}

////////////////////////////////////////
function PageNavigator_BuildURL ( URL, PageNumber )
{
  if (URL.indexOf(PAGE_NAVIGATOR_PARAM_PAGE) >= 0) return URL.replace(PAGE_NAVIGATOR_PARAM_PAGE, PageNumber);
  return URL + PageNumber;
}

////////////////////////////////////////
function PageNavigator_GotoPage ( LinkURL, PageList )
{
  var pageNumber = PageList.options[PageList.selectedIndex].value;
  location.href = PageNavigator_BuildURL (LinkURL, pageNumber);
}

////////////////////////////////////////

// DEPRECATED - Call PageNavigator with PAGE_NAVIGATOR_TEMPLATE_FULL_DROPDOWN
function PageNavigator_XYDD ( PageCount, CurrentPage, LinkURL, CSSClass, FirstLabel, LastLabel, PrevLabel, NextLabel, ListLabel )
{
  var Template = PAGE_NAVIGATOR_TAG_FIRST + PAGE_NAVIGATOR_TAG_PREV + ListLabel + PAGE_NAVIGATOR_TAG_NEXT + PAGE_NAVIGATOR_TAG_LAST;
  PageNavigator ( PageCount, CurrentPage, LinkURL, 0, CSSClass, FirstLabel, LastLabel, PrevLabel, NextLabel, "", "", Template )
  return;	
}

