// Side navigation
function sidenav ( item ) {
   displayitem = document.getElementById ( item );
   if ( displayitem.style.display == 'none' ) {
      displayitem.style.display = 'block';
   }

   else {
      displayitem.style.display = 'none';
   }
}

// Open new windows
function externallinks () {
   if ( document.getElementsByTagName ) {
      var links = document.getElementsByTagName ( 'a' );
      for (var i = 0; i < links.length; i++ ) {
         var link = links[i];
         if ( ( link.getAttribute ( 'href' ) ) && ( link.getAttribute ( 'rel' ) == 'external' ) ) {
            link.target = '_blank';
         }
      }
   }
}

function swap ( section, type, path ) {
   if ( document.images ) {
      var buttonimage = new Image();
      if ( type == 'over' ) {
         buttonimage.src = path + 'images/topnav/hover' + section + '.gif';
      }

      else {
         buttonimage.src = path + 'images/topnav/' + section + '.gif';
      }

      navitem = document.getElementById ( section );
      navitem.src = buttonimage.src;
   }
}

//make all select boxes invisible and inaccessible
function hideSelectBoxes(){
   var selects = document.getElementsByTagName("select");
   for ( i = 0; i != selects.length; i++ ) {
      selects[i].disabled = true;
      selects[i].style.visibility = "hidden";
   }
}

//make all select boxes visible and accessible
function showSelectBoxes(){
   var selects = document.getElementsByTagName("select");
   for (i = 0; i != selects.length; i++) {
      selects[i].disabled = false;
      selects[i].style.visibility = "visible";
   }
}

//height of overlay
function overlayHeight(){
   var header_banner_height = 140;
   var pageSizeAry = getPageSize ();
   return ( pageSizeAry[1] - header_banner_height );
}

// Image gallery
function hidepic () {
   document.getElementById ( 'viewerwrapper' ).style.display = 'none';
   document.getElementById ( 'viewernav' ).style.display = 'none';

   //makes select boxes visible
   showSelectBoxes();
}

function gallery ( image_loc , image_suffix) {
   var fullimage = document.getElementById ( 'fullimage' );
   var viewernav = document.getElementById ( 'viewernav' );
   var viewercontent = document.getElementById ( 'viewercontent' );
   var viewerinnerwrapper = document.getElementById( 'viewerinnerwrapper' );
   var viewerwrapper = document.getElementById ( 'viewerwrapper' );
   var vieweriewrapper = document.getElementById ( 'vieweriewrapper' );
   var image_content_padding = 15;
   
   hidepic ();

   if ( !image_suffix )
      image_loc = image_loc + '.jpg';
   if ( image_suffix == 'blank' )
      image_loc = image_loc;
   if ( image_suffix == 'gif' )
      image_loc = image_loc + '.gif';

   viewerwrapper.style.height = overlayHeight() + 'px';
   viewerwrapper.style.display = 'block';
   viewercontent.style.display = 'block';
   viewerinnerwrapper.style.display = 'none';
   viewernav.style.display = 'none';
   
   preloadimage = new Image();

   preloadimage.onload = function () {

      fullimage.src = image_loc;
      // A small pause between the image loading and displaying is required with IE,
      // this prevents the previous image displaying for a short burst causing flicker.
	  // code taken from lightbox
      if ( navigator.appVersion.indexOf ( "MSIE" ) != -1 ) {
         pause ( 500 );
      } 

      viewernav.style.display = 'block';
      viewerinnerwrapper.style.display = 'block';
      
      setObjectPosition ( viewercontent, viewercontent.offsetHeight ); //viewercontent.style.height
      setObjectPosition ( vieweriewrapper, viewercontent.offsetHeight );

	  viewercontent.style.width = (fullimage.width + image_content_padding) + 'px';
   }
   
   preloadimage.src = image_loc;

   //hide select boxes
   hideSelectBoxes();
}

//read array to determine next and prev button for gallery
function gallery_index ( gallery_ary, index ) {
   var next = document.getElementById ( 'photogallery_next' );
   var prev = document.getElementById ( 'photogallery_prev' );
   next.style.display = 'block';
   prev.style.display = 'block';
   if ( gallery_ary[index+1] ) {
      next.onclick = function () {
         gallery ( gallery_ary[index+1] );
         gallery_index ( gallery_ary, index + 1 );
      };
   } else {
      next.style.display = 'none';
   }
   if ( gallery_ary[index-1] ) {
      prev.onclick = function (){
         gallery ( gallery_ary[index - 1] );
         gallery_index ( gallery_ary, index-1 );
      };
   } else {
      prev.style.display = 'none';
   }
}

function hideVideo () {
   document.getElementById ( 'moviecontent' ).innerHTML = '';
   document.getElementById ( 'moviewrapper' ).style.display = 'none';

   // make select boxes visible
   showSelectBoxes();
}

function ipix ( file ) {
   video ( file );
}

function video ( file , width, height ) {
   var moviewrapper = document.getElementById ( 'moviewrapper' );
   var moviecontent = document.getElementById('moviecontent');
   var movieiewrapper = document.getElementById ( 'movieiewrapper' );
   var dynamic_positioning = true;
   var video_content_padding = 15;
   var always_position;

   if(!width)
      width = 324;

   if(!height)
      height = 257;

   // make select boxes hidden
   hideSelectBoxes();
   
   if ( file.indexOf ('.asx') != -1 || file.indexOf ('.wmv') != -1) {
      //media player
      moviecontent.innerHTML = '<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" id="mediaplayer" width="'+width+'" height="'+height+'"><param name="url" value="'+file+'" /><param name="src" value="'+file+'" /><param name="showcontrols" value="true" /><param name="autostart" value="true" /><!--[if !IE]>--><object style="z-index: 100;" type="video/x-ms-wmv" data="'+file+'" width="'+width+'" height="'+height+'"><param name="src" value="'+file+'" /><param name="autostart" value="true" /><param name="controller" value="true" /><param name="showcontrols" value="true" /></object><!--<![endif]--></object>';
	  if ( navigator.appVersion.indexOf ( "MSIE" ) == -1 ){//Any browser other than IE
	      moviecontent.style.backgroundImage = "url('')";//disable loading image because it steals focus from mplayer in firefox
		  always_position = 'relative';//player loses focus when scrolling if position is set to absolute in firefox
	  }
   } else if ( file.indexOf ( '.ram' ) != -1 ) {
      //real media
      moviecontent.innerHTML = '<object id="video" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" name="video"><param name="SRC" value="'+file+'" /><param name="CONTROLS" value="Imagewindow" /><param name="AUTOSTART" value="TRUE" /><param name="NOLABELS" value="TRUE" /><param name="RESET" value="TRUE" /><param name="CONSOLE" value="video" /><param NAME="src" VALUE="'+file+'"><embed src="'+file+'" type="audio/x-pn-realaudio-plugin"  align="top" controls="ImageWindow" autostart="TRUE" console="video" nolabels="TRUE" name="video" reset="TRUE" nojava="true" bgcolor="#000000"></embed></object><br /><object id="controls" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ><param name="controls" value="ControlPanel" /><param name="nologo" value="true" /><param name="console" value="video" /><param name="autostart" value="true" /><param name="src" value="'+file+'" /><embed src="'+file+'" type="audio/x-pn-realaudio-plugin" width="320" height="26" autostart="true" controls="ControlPanel" console="video"></embed></object>';
      moviecontent.style.backgroundImage = "url('')"; //disable loading image
   } else if ( file.indexOf ( '.swf' ) != -1 ) {
      //flash
      moviecontent.innerHTML = '<object type="application/x-shockwave-flash" width="'+width+'" height="'+height+'" align="middle" '+(navigator.appVersion.indexOf("MSIE")!=-1?'':'data="'+file+'"')+'><param name="movie" value="'+file+'" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param name="FlashVars" value="playerMode=embedded" /></object>';
   } else if ( file.indexOf ( '.ipx' ) != -1 ) {
	  //set positioning first since ipix are all the same height
	  setObjectPosition ( moviecontent, 320, always_position );
      setObjectPosition ( movieiewrapper, 320, always_position );
	  //ipix, embed from http://www.ipix.com/faq_plugin.html
	  width = 320;
	  height = 240;
      moviecontent.innerHTML = '<object id="IpixX1" width="'+width+'" height="'+height+'" classid="CLSID:11260943-421B-11D0-8EAC-0000C07D88CF" codebase="http://www.ipix.com/download/ipixx.cab#version=6,2,0,5"><!-- For MSIE 3+ --><param name="IPXFILENAME" value="'+file+'"><!-- For Netscape 3+ --><embed src="'+file+'" border=0 width="'+width+'" height="'+height+'" palette="foreground" type="application/x-ipix" pluginsPage="http://www.ipix.com/cgi-bin/download.cgi"></embed></object>';
	  dynamic_positioning = false;// if extra code is loaded, ipix will not get loaded, skip positioning
   }
   
   moviecontent.innerHTML = moviecontent.innerHTML + '<p><a href="javascript:hideVideo()">close window</a></p>';
   moviecontent.style.width = (parseInt(width) + video_content_padding) + 'px';
   moviewrapper.style.height = overlayHeight() + 'px';
   moviewrapper.style.display = 'block';
   
   if(dynamic_positioning){
	  setObjectPosition ( moviecontent, moviecontent.offsetHeight, always_position );
      setObjectPosition ( movieiewrapper, moviecontent.offsetHeight, always_position );
   }
}

function play_video(obj){
   var movie_attrib = obj.value.split(',');
   video(movie_attrib[0],movie_attrib[1],movie_attrib[2]);
   obj.selectedIndex = 0;
}

//calc width of media
function pbCalcWidth ( str ) {
   var width = '320';
   switch ( str ) {
      case 'low':
         width = '160';
      break;
      case 'high':
         width = '320';
      break;
      case 'low.asx':
		 if ( navigator.appVersion.indexOf ( "MSIE" ) != -1 )
            width = '214';
	     else
			width = '160';
      break;
      case 'high.asx':
         width = '320';
      break;
   }
   return width;
}

//calc height of media
function pbCalcHeight ( str ) {
   var height = '240';
   switch ( str ) {
      case 'low':
         height = '120';
      break;
      case 'high':
         height = '240';
      break;
      case 'low.asx':
		 if ( navigator.appVersion.indexOf ( "MSIE" ) != -1 )
            height = '150';
		 else
			height = '112';
      break;
      case 'high.asx':
         height = '240';
      break;
   }
   return height;
}

function hideText () {
   document.getElementById ( 'noticewrapper' ).style.display = 'none';
   
   // make select boxes visible
   showSelectBoxes();
}

function text_overlay ( title, content ) {
   var noticewrapper = document.getElementById ( 'noticewrapper' );
   var noticeiewrapper = document.getElementById ( 'noticeiewrapper' );
   var noticeinnerwrapper = document.getElementById ( 'noticeinnerwrapper' );
   var noticetitle = document.getElementById ( 'noticetitle' );
   var noticeinnercontent = document.getElementById ( 'noticeinnercontent' );
   var noticecontent = document.getElementById ( 'noticecontent' );

   noticetitle.innerHTML = title;
   noticeinnercontent.innerHTML = content;
   noticewrapper.style.height = overlayHeight() + 'px';
   noticewrapper.style.display = 'block';
   setObjectPosition( noticeinnerwrapper, noticecontent.offsetHeight );
   setObjectPosition( noticeiewrapper, noticecontent.offsetHeight );
}

function print_notice ( obj ) {
   text_overlay ( text_title[obj.value], text_content[obj.value] );
   document.getElementById ( 'noticeclose' ).innerHTML = '<p>( <a href="javascript:;" onclick="hideText();resetSelection (\''+obj.id+'\');">close window</a> )</p>';
   
   // make select boxes hidden
   hideSelectBoxes();
}

function resetSelection ( obj_id ) {
   var obj = document.getElementById ( obj_id );
   if ( !obj ) {
      return ;
   }
   obj.selectedIndex = 0;
}

// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
//
function pause ( numberMillis ) {
   var now = new Date ();
   var exitTime = now.getTime () + numberMillis;
   while (true) {
      now = new Date ();
      if ( now.getTime () > exitTime )
         return;
   }
}

// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize () {
   var xScroll, yScroll;
   if ( window.innerHeight && window.scrollMaxY ) {	
      xScroll = document.body.scrollWidth;
      yScroll = window.innerHeight + window.scrollMaxY;
   } else if ( document.body.scrollHeight > document.body.offsetHeight ) { // all but Explorer Mac
      xScroll = document.body.scrollWidth;
      yScroll = document.body.scrollHeight;
   } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
      xScroll = document.body.offsetWidth;
      yScroll = document.body.offsetHeight;
   }

   var windowWidth, windowHeight;
   if ( self.innerHeight ) {	// all except Explorer
      windowWidth = self.innerWidth;
      windowHeight = self.innerHeight;
   } else if ( document.documentElement && document.documentElement.clientHeight ) { // Explorer 6 Strict Mode
      windowWidth = document.documentElement.clientWidth;
      windowHeight = document.documentElement.clientHeight;
   } else if ( document.body ) { // other Explorers
      windowWidth = document.body.clientWidth;
      windowHeight = document.body.clientHeight;
   }

   // for small pages with total height less then height of the viewport
   if ( yScroll < windowHeight ) {
      pageHeight = windowHeight;
   } else { 
      pageHeight = yScroll;
   }

   // for small pages with total width less then width of the viewport
   if ( xScroll < windowWidth ) {
      pageWidth = windowWidth;
   } else {
      pageWidth = xScroll;
   }

   arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
   return arrayPageSize;
}

//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScrollHeight(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	return yScroll;
}


//sets overlay content position to relative or absolute depending on window and page height
function setObjectPosition ( obj , content_height, always_position ) {
   var headerwrapper_height = document.getElementById('headerwrapper').offsetHeight;
   var arrayPageSize = getPageSize();
   var frame_top_spacing = 10;
   var top_spacing = headerwrapper_height + frame_top_spacing;
   var window_height = arrayPageSize[3];
   var page_height = arrayPageSize[1];
   var page_scroll_height = getPageScrollHeight();
   var relative_top_position;
   var position;

   if ( !content_height )
      content_height = 0;

   //if content does not fit in window
   if ( ( content_height + top_spacing ) > window_height || always_position=='relative') {
      obj.style.top = frame_top_spacing + 'px';
      position = 'relative';//fix content to page
	  //if it's an outer wrapper
	  if(obj.id.indexOf('iewrapper') != -1){
		relative_top_position = 0;

		//position content to the top of window
		if(page_scroll_height >= headerwrapper_height){
			relative_top_position = page_scroll_height-headerwrapper_height;
		}

		//adjust content position so it does not increase the page height
		if((page_scroll_height + content_height) > page_height){
			relative_top_position = window_height - content_height + relative_top_position-35;
		}
		
		//don't block header
		if((content_height+headerwrapper_height) <= (page_scroll_height+window_height)){
			obj.style.marginTop = relative_top_position + 'px';
		}
	  }
   } else {
      //fix content to window
      if ( navigator.appVersion.indexOf ( "MSIE 7" ) != -1 ) {
         if ( obj.id == 'viewercontent' || obj.id == 'moviecontent' || obj.id == 'noticeinnerwrapper' ) {
            obj.style.top = frame_top_spacing + 'px'
            position = 'relative';
         } else {
            position = 'fixed';
            obj.style.top = '165px';
         }
      } else if ( navigator.appVersion.indexOf ( "MSIE" ) != -1 ) {
         if ( obj.id == 'viewercontent' || obj.id == 'moviecontent' || obj.id == 'noticeinnerwrapper' ) {
            obj.style.top = frame_top_spacing + 'px';
            position = 'relative';
         } else {
			//revert positioning to relative and reset all positioning values before setting to absolute positioning
			obj.style.marginTop = '';
			obj.style.top = frame_top_spacing + 'px';
            position = 'relative';
			obj.style.top = '';
            position = 'absolute';
         }
      } else {
         position = 'fixed';
         obj.style.top = '165px';
      }
   }
   obj.style.position = position;
}
