/**************************************************************************
***************************************************************************
**  NAVIGATION FUNCTIONS                                                **
***************************************************************************
**************************************************************************/
// Copyright 2007-2008 Collaborative Bike Map Project

/**********************************************************************
// Handle click of navigation button or entry of number into corresponding 
// number field (pntnum or segnum).  This displays an error message if 
// navtype = "num" and num is not valid for the specified item type.
// Inputs: rectype - SEG or PNT - Whether segment or point (these are constants from fields.js)
//         navtype - "first", "last", "prev", "next" or "num".  
//                   Indicates to go to first, last, previous or next item in list,
//                   or to numbered item in list, respectively.
//         num - If navtype = "num", this is the string in the appropriate number field,
//               which is used as the index (0-based) of the point or segment to go to.
//               Note that DISPLAYED number is 1-based so it must be converted to 0-based.
***********************************************************************/
function navigate (rectype, navtype, num) {

	// debugger;
	if (SelectedRoute != null && SelectedPoint != null && SelectedSegment != null) {

		// Clicked on point nav button or changed field
		if (rectype == PNT) {
			pntlist = SelectedRoute.pointlist;
			// numpnts = pntlist.length;
			// pntnumfield = document.getElementById ("pntnum");

			if (navtype == "next")		// Note: check whether last point below
				newpnt = SelectedPoint.next;
			else if (navtype == "prev")  // Note: check whether first point below
				newpnt = SelectedPoint.prev;
			else if (navtype == "first")
				newpnt = pntlist.firstnode;
			else if (navtype == "last")
				newpnt = pntlist.lastnode;	
			else if (navtype == "num") {    // if number entered
				if (isEmpty (num))         // number is not required, but do nothing if no number provided
					newpnt = null;				
				else if (!isNumber (num)) {   // if invalid number, display error message
					alert ("You must enter a valid number into the point number field.");
					newpnt = null;
				}                            // else check if number in range
				else if ((newpnt = pntlist.getByIndex (num-1)) == null) 
					alert ("The point number you entered is out of range.");
			}
				
			// Select new point if we have one
			if (newpnt != null)                 // if we're really going to a new point
				// Check fields we're leaving
				if (FldInfo.checkAndSaveOnNext (SIT_PNT_NAV, newpnt))      // if fields are okay
					selectPoint (newpnt, true, false);	    // update info, highlight current point	on screen
		}

		// Clicked on segment nav button or changed field
		else if (rectype == SEG) {
			seglist = SelectedRoute.seglist;

			if (navtype == "next")        // Note: check whether last seg below
				newseg = SelectedSegment.next;
			else if (navtype == "prev")   // Note: check whether first seg below
				newseg = SelectedSegment.prev;
			else if (navtype == "first")
				newseg = seglist.firstnode;
			else if (navtype == "last")
				newseg = seglist.lastnode;		
			else if (navtype == "num") {    // if number entered
				if (isEmpty (num))         // number is not required, but do nothing if no number provided
					newseg = null;				
				else if (!isNumber (num)) {   // if invalid number, display error message
					alert ("You must enter a valid number into the segment number field.");
					newseg = null;
				}                            // else check if number in range
				else if ((newseg = seglist.getByIndex (num-1)) == null) 
					alert ("The segment number you entered is out of range.");
			}
				
			if (newseg != null) {               // if we're really going to a new segment
				// Check fields we're leaving
				if (FldInfo.checkAndSaveOnNext (SIT_SEG_NAV, newseg)) {      // if fields are okay
					newpnt = newseg.firstpoint;		
					selectPoint (newpnt, true, false);     // select first point of segment, which automatically selects segment
				}
			}
		}
	}
}


