//===========================================================
// ClientSideNavGoToPage
// page is one-based index
//===========================================================
function ClientSideNavGoToPage( page ) {
	try {
		if (page < 1) page = 1; 
		SetCurrentSlidePage( page );
		ProcessClientSideNavEvent( "updateindex" );
		ProcessClientSideNavEvent( "goto", gRecordsPerPage*(page-1) );
		}
	catch (error) {
		alert( "ClientSideNavGoToPage: " + error.description  );
		}
	}


//===========================================================
// GetCurrentSlidePageInfo
// Page is one-based index
//===========================================================
function GetCurrentSlidePageInfo( ) {
	var pageInfo = { Page:1, Total:0, NavType:"" }
	try {
		GetSlidesPageNavControl().each( function() {
			switch (this.tagName) {
				case "SELECT":
					if (!pageInfo.NavType) pageInfo.NavType = "Select"
					pageInfo.Page = this.selectedIndex + 1;
					pageInfo.Total = this.options.length;
					break;
				case "A":
					if (!pageInfo.NavType) pageInfo.NavType = "Links" 
					if (pageInfo.NavType == "Links") pageInfo.Total += 1;
					if (this.className.indexOf("selected") > -1) pageInfo.Page = Number($(this).text()); 
					break;
				}
			} )
		}
	catch (error) {
		alert( "GetCurrentSlidePageInfo: " + error.description  );
		}
	return pageInfo;
	}


//-----------------------------------------------------------
// SetCurrentSlidePage
// page is one-based index
//-----------------------------------------------------------
function SetCurrentSlidePage( page ) {
	try {
		GetSlidesPageNavControl().each( function() {
			switch (this.tagName) {
				case "SELECT":
					this.selectedIndex = page - 1;
					break;
				case "A":
					$(this).removeClass( "selected" );
					if ( Number($(this).text()) == page)  $(this).addClass( "selected" );
					break;
				}
			} )
		}
	catch (error) {
		alert( "SetCurrentSlidePage: " + error.description  );
		}
	}


//-----------------------------------------------------------
// GetSlidesPageNavControl
//-----------------------------------------------------------
function GetSlidesPageNavControl( ) {
	try {
		return $("select[name='navPage'],A.pageNavLink");
		}
	catch (error) {
		alert( "GetSlidesPageNavControl: " + error.description  );
		}
	}




//-----------------------------------------------------------
// GoToSlidePage
// Page is one-based index
//-----------------------------------------------------------
function GoToSlidePage( direction ) {
	try {
		var pageInfo = GetCurrentSlidePageInfo();
		if (direction == -1 && pageInfo.Page == 1) return;
		if (direction == 1 && pageInfo.Page == pageInfo.Total) return;
		pageInfo.Page = pageInfo.Page + direction;
		SetCurrentSlidePage( pageInfo.Page )
		ProcessClientSideNavEvent( "updateindex" );
		ProcessClientSideNavEvent( "goto", gRecordsPerPage*(pageInfo.Page - 1) );
		}
	catch (error) {
		alert( "GoToSlidePage: " + error.description  );
		}
	}


//===========================================================
// ProcessClientSideNavEvent
//===========================================================
function ProcessClientSideNavEvent( event, goToSlide, noCycle ) {
	try {
		switch (event) {
			case "goto":
				if (!noCycle) { 
					for (var item=0; item<gSlideShowIDs.length; item++) {
						$("#" + gSlideShowIDs[item]).cycle( goToSlide );
						}
					}
				else {
					// This gets indirectly called via Cycle_Before so only call if noCycle
					SetCurrentSlidePage(  parseInt(goToSlide/gRecordsPerPage) + 1 );
					}
				$("*[id^='Slide_']").removeClass( "selected" );
				$("*[id='Slide_" + goToSlide + "']").addClass( "selected" );
				break;
			case "previous":
				GoToSlidePage( -1 );
				break;
			case "next":
				GoToSlidePage( 1 );
				break;
			case "updateindex":
				var pageInfo = GetCurrentSlidePageInfo();
				var startIndex = gRecordsPerPage*(pageInfo.Page-1);
				var endIndex = startIndex + gRecordsPerPage;
				// Shows current index page items
				$("*[id^='Slide_']").each( function() {
					var slideNumber = Number(this.id.match( /Slide_([0-9]+)/g ) ? RegExp.$1 : "0");
					$(this).css( "display", (slideNumber >= startIndex & slideNumber < endIndex) ? "" : "none" );
					} );
				// Hide Next if on last page
				$("A.pageNav:odd").css( "display", pageInfo.Page == pageInfo.Total ? "none" : "");
				// Hide previous if on first page
				$("A.pageNav:even").css( "display", pageInfo.Page == 1 ? "none" : "");
				break;
			default:
				document.body.onbeforeunload = "";
				GoToPage = ClientSideNavGoToPage;
				$("A.pageNav").each( function() {
					this.href = "javascript:void(ProcessClientSideNavEvent(\"" + (this.innerHTML.match(/previous/i) ? "previous" : "next") + "\"))";
					} );
				$("A.pageNavLink").each( function() {
					if (this.href.match(/navPage=([0-9]+)/)) this.href = "javascript:void(ClientSideNavGoToPage(\"" + RegExp.$1 + "\"))";
					} );
				Cycle_Before = function (currentElement, nextElement, cycleOptions) { 
					var slideNumber = Number(nextElement.id.match( /_([0-9]+)$/ ) ? RegExp.$1 : "0");
					var slidePage = Math.floor(slideNumber/gRecordsPerPage)+1;
					//window.status = "Slide " + slideNumber
					ProcessClientSideNavEvent( "goto", slideNumber, true );
					};
				// 02SEP2009 RFM - Sets correct page of thumbnails to display after slide change
				Cycle_After = function  (currentElement, nextElement, cycleOptions) { 
					ProcessClientSideNavEvent( "updateindex" );
					}
				ProcessClientSideNavEvent( "updateindex" );
				break;
			}
		}
	catch (error) {
		alert( "ProcessClientSideNavEvent: " + error.description  );
		}
	}



