// JavaScript Document\

var qt = String.fromCharCode(34);
var preview = true;
var thumbs = false;
var curThumb = 0;
var thumbIssue;
var curPath = 0;
var curPathDate = "0000";
var paths = new Array(8);
var mouseX = 0;
var mouseY = 0;
var IE = document.all ? true : false;
var mouseControl = true;

var strokeActive = false;
var strokeTimer = null;
var strokeThresh = 10;
var checkX = true;
var checkY = true;

var sLog = '';

function init()  {
  if (!IE)
    document.captureEvents(Event.MOUSEMOVE);
  document.onmousemove = checkStroke;
}

function checkStroke(evt)  {
  sLog += 'checkStroke\r\n';
  if (strokeTimer != null)  {
    clearInterval(strokeTimer);
    strokeTimer = null;
  }
  getMouseXY(evt);
  if (!strokeActive)  {
    strokeActive = true;
    strokeStartX = mouseX;
    strokeStartY = mouseY;
	sLog += 'checkStroke: mouseX = ' + mouseX + '\r\n';
  }
  strokeTimer = setInterval('strokeTimeout()', 200)    
}    


function strokeTimeout(evt)  {
  var lengthX = 0;
  var lengthY = 0;

  sLog += 'strokeTimeout\r\n';
  clearInterval(strokeTimer);
  strokeTimer = null;
  strokeActive = false;
  //getMouseXY(evt);
  //sLog += 'strokeTimeout: mouseX = ' + mouseX + ', strokeStartX = ' + strokeStartX + '\r\n';
  //alert(sLog);
  lengthX = mouseX - strokeStartX;
  lengthY = mouseY - strokeStartY;
//  alert(lengthX);
  if (checkY)  {
    if (Math.abs(lengthY) >= strokeThresh)  {
      if (lengthY > 0)
         window.status = 'down';
      else  
         window.status = 'up';
      return;
    }
  }
  if (checkX)  {
    if (Math.abs(lengthX) >= strokeThresh)  {
      if (lengthX > 0)
         window.status = 'right';
      else  
         window.status = 'left';
    }
  }
}


function getMouseXY(evt)  {
  if (mouseControl)  {
    if (IE) {
      mouseX = event.clientX + document.body.scrollLeft;
      mouseY = event.clientY + document.body.scrollTop;
    }
    else {
      mouseX = evt.pageX;
      mouseY = evt.pageY;
    }
    if (mouseX < 0){mouseX = 0};
    if (mouseY < 0){mouseY = 0};

  }
  return true;
}

function setCurPage()  {
    var pageStr = curPage();
    var pages=paths[curPath];
    var i=0;
	
    curThumb = 0;
    if (curPath==8)  {
      if (curPathDate != "0000")  {
        for (i = 0; i < dates.length; i++)  {
	      if (dates[i] == curPathDate)  {
		    curThumb = i;
		    break;
		  }
		}
	  }
      
    }
    for (j = i; j < pages.length; j++)  {
	  if (pages[j] >= pageStr)  {
		curThumb = j;
		break;
      }
	}
}

function curPage()  {
    var url;
    var pos;
    var dot;
    var pageStr = '';
    var pages=paths[curPath];

    curThumb = 0;
    url = window.location.href;
    pos = url.indexOf('TMA-');
    if (pos != -1)  {
      dot = url.indexOf('.html');
      return url.substr(pos+9,dot-pos-9);
    }
}

function overBack()  {
	changeImage('backPanel', 'url(../../_Images/Arrow-L-L.jpg)')
}

function leftBack()  {
	
	changeImage('backPanel', 'url(../../_Images/Arrow-L-D.jpg)')
}

function overNext()  {
	changeImage('fwdPanel', 'url(../../_Images/Arrow-R-L.jpg)')
}

function leftNext()  {
	changeImage('fwdPanel', 'url(../../_Images/Arrow-R-D.jpg)')
}

function overButton(btnName, lnkName)  {
	changeImage(btnName, 'url(../../_Images/Button-Small-Over.jpg)');
	document.getElementById(lnkName).style.color = '#00094E';
}

function leftButton(btnName, lnkName)  {
	changeImage(btnName, 'url(../../_Images/Button-Small.jpg)')
	document.getElementById(lnkName).style.color = '#FFF';
}


var pathsOpen = false;
var pagesOpen = false;
var pathsTimer = 0;
var pagesTimer = 0;

function overPaths()  {
	clearTimeout(pathsTimer);
	pathsOpen = true;
}
function overPathsButton(issue)  {
	clearTimeout(pathsTimer);
	pathsOpen = true;
	changeImage('pathButton', 'url(../../_Images/Button-Small-Over.jpg)');
	document.getElementById('pathText').style.color = '#00094E';
	showPaths(issue);
}
function leftPaths()  {
	pathsOpen = false;
	pathsTimer = setTimeout( 'pathsClose()', 1000);
}
function leftPathsButton()  {
	changeImage('pathButton', 'url(../../_Images/Button-Small.jpg)')
	document.getElementById('pathText').style.color = '#FFF';
	pathsOpen = false;
	pathsTimer = setTimeout( 'pathsClose()', 1000);
}
function pathsClose()  {
    if (!pathsOpen) hideDiv('pathWrapper');
}

function overPages()  {
	clearTimeout(pagesTimer);
	pagesOpen = true;
}
function overPagesButton(issue)  {
	clearTimeout(pagesTimer);
	pagesOpen = true;
	changeImage('pageButton', 'url(../../_Images/Button-Small-Over.jpg)');
	document.getElementById('pageText').style.color = '#00094E';
    showThumbs(issue);
}
function leftPages()  {
	pagesOpen = false;
	pagesTimer = setTimeout( 'pagesClose()', 1000);
}
function leftPagesButton()  {
	pagesOpen = false;
	changeImage('pageButton', 'url(../../_Images/Button-Small.jpg)')
	document.getElementById('pageText').style.color = '#FFF';
	pagesTimer = setTimeout( 'pagesClose()', 1000);
}
function pagesClose()  {
    if (!pagesOpen) {
		thumbs = false;
		hideDiv('thumbWrapper');
	}
}



function overPreview(btnName)  {
	changeImage(btnName, 'url(../../_Images/Button-Tiny-Over.jpg)');
	document.getElementById(btnName).style.color = '#00094E';
}

function leftPreview(btnName)  {
	changeImage(btnName, 'url(../../_Images/Button-Tiny.jpg)');
    showPreviewMode();
}

function overSearch()  {
	changeImage('searchButton', 'url(../../_Images/Search-Button-Over.jpg)');
	document.getElementById('searchButton').style.color = '#00094E';
}

function leftSearch()  {
	changeImage('searchButton', 'url(../../_Images/Search-Button.jpg)');
	document.getElementById('searchButton').style.color = '#FFF';
}

function getSelText()  {
    var txt = '';

    if (window.getSelection)    {
        txt = window.getSelection();
    }
    if (document.getSelection)    {
        txt = document.getSelection();
    }
    if (document.selection)    {
        txt = document.selection.createRange().text;
	}
	return txt;
}

function stuffSearchBox()  {
  var text = getSelText();
  if (text.length > 0) document.searchForm.target.value = text;
}


function showPreviewMode()  {
	if (preview)  {
	  	document.getElementById('previewOn').style.color = '#FFF';
	  	document.getElementById('previewOff').style.color = '#888';
	}
    else  {
	  	document.getElementById('previewOn').style.color = '#888';
		document.getElementById('previewOff').style.color = '#FFF';
	}

}

function highlightPaths(activePath)  {
  for (path='0'; path<=maxPath; path++)  {
    if (path==curPath)  {
      document.getElementById('path' + path).style.borderTopColor = '#00094E';
      document.getElementById('path' + path).style.borderBottomColor = '#00094E';
      document.getElementById('path' + path).style.background = '#00094E';
      document.getElementById('plink' + path).style.color = '#6BB6DD';
	}
	else if (path==activePath)  {
      document.getElementById('path' + path).style.borderTopColor = '#6BB6DD';
      document.getElementById('path' + path).style.borderBottomColor = '#6BB6DD';
      document.getElementById('path' + path).style.background = '#FFF';
      document.getElementById('plink' + path).style.color = '#00094E';
	}
	else  {
      document.getElementById('path' + path).style.borderTopColor = '#00094E';
      document.getElementById('path' + path).style.borderBottomColor = '#00094E';
      document.getElementById('path' + path).style.background = '#00094E';
      document.getElementById('plink' + path).style.color = '#FFF';
	}

  }
}

function setPath(newPath)  {
    var pages=paths[newPath];

    pathsOn = false;
    curPath = newPath;
    setCurPage();
    hideDiv('pathWrapper');
    showThumbBox();
    showThumb( pages[curThumb]);
	appendOptions();
}

function showPaths(issue)  {
    var edge;
    var top;
    var height;
	
	thumbIssue = issue;
    if (!pagesOpen) hideDiv('thumbWrapper');
	showDiv('pathWrapper');
	edge = findEdge(document.getElementById('pageButton')) -110;
    height = parseInt(getStyle(document.getElementById('pathWrapper'), 'height'));
	// trim last option for now
	//top = findTop(document.getElementById('pageButton'))-192;
	top = findTop(document.getElementById('pageButton'))-height-13;
	document.getElementById('pathWrapper').style.left = edge + 'px';
	document.getElementById('pathWrapper').style.top = top + 'px';
	highlightPaths(curPath);
}

function showThumbs(issue)  {
    var pages=paths[curPath];
    
    if (!pathsOpen) hideDiv('pathWrapper');
	thumbIssue = issue;
	showThumbBox();
	setCurPage();
	showThumb( pages[curThumb]);
}

function showThumbBox()  {
    var edge;
    var top;
	
    thumbs = true;
	showDiv('thumbWrapper');
	edge = findEdge(document.getElementById('pageButton')) -110;
	top = findTop(document.getElementById('pageButton'))-162;
	document.getElementById('thumbWrapper').style.left = edge + 'px';
	document.getElementById('thumbWrapper').style.top = top + 'px';
    if (curPath==8)  
      showDateBox();
}

function showThumb(pageNum)  {
    changeImage('thumbHolder', 'url(_thumbs/TMA-' + thumbIssue + '-' + pageNum + '.jpg)');
    if (curPath==8)  {
	  curPathDate = dates[curThumb];	
      changeText("dateHolder", months[parseInt(dates[curThumb].substr(0,2),10)-1] + " " + parseInt(dates[curThumb].substr(2,2),10));
	}
	
}

function showDateBox()  {
    var edge;
    var top;

    thumbs = true;
	showDiv('dateWrapper');
	edge = findEdge(document.getElementById('pageButton')) -110;
	top = findTop(document.getElementById('pageButton'))-182;
	document.getElementById('dateWrapper').style.left = edge + 'px';
	document.getElementById('dateWrapper').style.top = top + 'px';
}

function prevDate()  {
    var pages=paths[curPath];

    if (curPathDate == dates[0])  {
	  curPathDate = dates[dates.length-1];
      curThumb = dates.length-1;
	}
	else  {
      for (i = curThumb; i >0; i--)  {
        if (dates[i] != curPathDate)  {
		    curPathDate = dates[i];
		    curThumb = i;
		    break;
	    }
	  }
	}
    showThumb( pages[curThumb]);
}

function nextDate()  {
    var pages=paths[curPath];

    if (curPathDate == dates[dates.length-1])  {
	  curPathDate = dates[0];
      curThumb = 0;
	}
    else  {
      for (i = curThumb; i < dates.length; i++)  {
        if (dates[i] != curPathDate)  {
		    curPathDate = dates[i];
			curThumb = i;
		    break;
	    }
	  }
	}
    showThumb( pages[curThumb]);
}

function gotoThumb()  {
   var pageNum;
   var newRef;
   var pages=paths[curPath];
   
   pageNum = pages[curThumb];
   newRef = 'TMA-' + thumbIssue + '-' + pageNum + '.html?';
   if ( preview) 
     newRef += 'Y' 
   else 
	 newRef += 'N';
   newRef += curPath.toString() + curPathDate;
   location.href = newRef;
}


function setPvText(indexID, title, author, text)  {
    var edge;
    var top;
    var height;

    edge = findEdge(document.getElementById('leftIndex')) + 190;
    height = parseInt(getStyle(document.getElementById('item' + indexID), 'height'));
    top = findTop(document.getElementById('item' + indexID)) - 40 + height;
	if (top > 440) top = 440;
    document.getElementById('pvWrapper').style.left = edge + 'px';
    document.getElementById('pvWrapper').style.top = top + 'px';
    document.getElementById('pvTitle').innerHTML = title;
    document.getElementById('pvAuthor').innerHTML = author;
    document.getElementById('pvBody').innerHTML = text;
}

function hidePreview(idNum)  {
	hideDiv('pvWrapper');
	document.getElementById('item' + idNum).style.background = '#00094E';
	document.getElementById('link' + idNum).style.color = '#FFF';
	document.getElementById('item' + idNum).style.borderTopColor = '#00094E';
	document.getElementById('item' + idNum).style.borderBottomColor = '#00094E';
}

function findEdge(obj) {
	var curleft = 0;

    if (obj.offsetParent) {
      do {
		curleft += obj.offsetLeft;
      } while (obj = obj.offsetParent);
	}
    return curleft;
}

function findTop(obj) {
	var curTop = 0;

    if (obj.offsetParent) {
      do {
		curTop += obj.offsetTop;
      } while (obj = obj.offsetParent);
	}
    return curTop;
}

/** This is high-level function.
 * It must react to delta being more/less than zero.
 */
function changeThumb(delta)  {
   var pages=paths[curPath];
   
   curThumb = curThumb + delta;
   if (curThumb < 0) curThumb = pages.length - 1;
   if (curThumb > pages.length - 1) curThumb = 0;
   showThumb( pages[curThumb]);
}


function handle(delta) {
	if (thumbs)  {
      if (delta < 0)
        changeThumb(1);
      else
        changeThumb(-1);
	}
	else  {
      if (delta < 0)
        location.href=document.getElementById("nextPage");
      else
        location.href=document.getElementById("prevPage");
    }
}

/** Event handler for mouse wheel event. */
function wheel(event){
	var delta = 0;
	if (!event) /* For IE. */
			event = window.event;
	if (event.wheelDelta) { /* IE/Opera. */
			delta = event.wheelDelta/120;
			/** In Opera 9, delta differs in sign as compared to IE.
			 */
			if (window.opera)
					delta = -delta;
	} else if (event.detail) { /** Mozilla case. */
			/** In Mozilla, sign of delta is different than in IE.
			 * Also, delta is multiple of 3.
			 */
			delta = -event.detail/3;
	}
	/** If delta is nonzero, handle it.
	 * Delta is now positive if wheel was scrolled up, negative if wheel was scrolled down.
	 */
	if (delta)
			handle(delta);
	/** Prevent default actions caused by mouse wheel.
	 * That might be ugly, but we handle scrolls somehow
	 * anyway, so don't bother here..
	 */
	if (event.preventDefault)
			event.preventDefault();
	event.returnValue = false;
}

function handleArrowKeys(evt) {
    evt = (evt) ? evt : ((window.event) ? event : null);
    if (evt) {
        switch (evt.keyCode) {
            case 37:
            case 38:
              location.href=document.getElementById("prevPage");
                break;    
            case 39:
            case 40:
              location.href=document.getElementById("nextPage");
                break;    
            case 33:
			    window.scroll(0,0);
                break;    
            case 34:
			    window.scroll(0,400);
                break;    

            case 27:
			  if (pathsOn)  {
				pathsOn = false;
				hideDiv('pathWrapper');
			  }
			  if (thumbs)  {
				thumbs = false;
				hideDiv('thumbWrapper');
                hideDiv('dateWrapper');
			  }
			
				
         }
    }
}

function hookArrowKeys()  {
    document.onkeyup = handleArrowKeys;
}

function hookWheel()  {
    if (window.addEventListener)
      /** DOMMouseScroll is for mozilla. */
      window.addEventListener('DOMMouseScroll', wheel, false);
    /** IE/Opera. */
    window.onmousewheel = document.onmousewheel = wheel;
}

function setPreview(mode)  {
    preview = mode;
	showPreviewMode();
	appendOptions();
}


function appendOptions()  {
    var opts = '';
   
    if (preview) 
      opts = 'Y' 
    else 
      opts = 'N';
	opts += curPath.toString() + curPathDate;
	//alert(opts);
    for (i=0; i < document.links.length; i++)   {
      if (document.links[i].href.indexOf('TMA-') != -1)
	    updateLink(document.links[i].id, opts);
    }
}

function updateLink(linkID, opts)  {
    var pageNum = '';
    var url;
    var pos;
    var dot;
    var newUrl;
   
    if (linkID == '') return;   // All *should* have ID's, but some don't...
	url = document.getElementById(linkID).href;
    pos = url.indexOf('TMA-');
    if (pos != -1)  {
      dot = url.indexOf('.html');
      pageNum = url.substr(pos+4,dot-pos-4);
	  newUrl = 'TMA-' + pageNum + '.html' + '?' + opts;
      document.getElementById(linkID).href = newUrl;
    }
}
// Option 1 - Preview On (Y/N)
// Option 1 - Path number
function extractOptions()  {
    var pos;
    var url;
	var opts;
	
    // set defaults
    preview = false;
	curPath = 0;
	
	// get options from url
    url = window.location.href;
    pos = url.indexOf('?');

    // find and install any options passed
    if (pos != -1 && url.length > pos+1)  {
	  opts = url.substr(pos+1,url.length-pos-1);
	  if (opts.length > 0)  {
	    if (opts.substr(0,1) == 'Y') preview = true;
        if (opts.length > 1)  {
	      curPath = parseInt(opts.substr(1,1))
          if (opts.length > 5)  {
			curPathDate = opts.substr(2,4);
          }
        }
	  }
	}
    // take effects of options
    showPreviewMode();
	
    // update prev & next links
    appendOptions();

		
}


