//----------------------------------------
// NAME OF SCRIPT:  ELECTRIC SLIDE v1.2   |
// AUTHOR        :  Carolyn Brown Ray     |
// CREATED	 :  October 25, 2005      |
// LAST MODIFIED :  November 2, 2005      |
// FILENAME      :  initSlideShow.js      |
//--------------------------------------------------------------------
// DESCRIPTION:
// Multi-category slideshow allows each image its own caption, url link, 
// alt text. Can be placed horizontally or vertically according to 
// configuration. Images can be changed manually or set to change 
// automatically according to number of seconds elapsed.
//
// CONFIGURATION OPTIONS:
// caption: font family, size & color:  setFontStyle()
// each category:  initSlideShow.setSize(imageWidth, imageHeight, 
//		                      captionWidth, captionHeight)
// each image:  image src, href link, alt text, caption text,  
//		slideShowItems.new Slide()
// orientation:  setHorizontal(boolean)
// order: setCaptionFirst(boolean)
// # spacing between image & caption: initSlideShow.setSpacing
//--------------------------------------------------------------------
// SUMMARY:
// Images are divided into categories. Each category is placed 
// column-wise, from left to right, OR by row, up to down.
// Images are loaded at a random point in each category.
// When a user mouses over an image, the image's caption is displayed.
// On mouse-out, the caption disappears
// When a user clicks the image, the user is taken to the specific URL
// for that image.
// When the user clicks "Change Image" such that that switchImage()
// function is called, the next image for each category is displayed.
// Slideshow can be configured so that images change automatically.
// The appropriate captions and URL links are also available.
// --------------------------------------------------------------------

//----------------------------------------
//SLIDE CATEGORY ARRAY:
//MAINTENANCE:  modify/add category names here
//----------------------------------------
  var categoryArray = new Array (
				  "student"
				 ,"campus"
				 ,"culture"
			        );

//----------------------------------------
//GLOBAL VARIABLES
//----------------------------------------
  var startDelay=0;
  var captionPrefix="<strong>Photo Summary:  </strong>";
  var ptr;
  var position="";
  var cmd;  //used to dynamically create js src code below:
  var cmd1;  //used to dynamically create js src code below:
  var src, alt, name, href, caption;
  var width=100;
  var height=100;
  var categoryPtr=0;
  var imageWidth=165;
  var captionWidth=width;
  var captionHeight=65;
  var captionFontStyle;
  var captionFirst=false;
  var topMargin=1;
  var spacing=1;
  var captionClass="";
  var horizontal=true;
  var slideStarted=false;
  var sampleSize=0;
  var captionLeft=0;
  var captionTop=0;
  var bottomMargin=1;
  var slideShowIntroVisible=false;

  
  function setStartDelay(s) {
      startDelay=s;
  }
  function getStartDelay(s) {
      return startDelay * 1000;
  }
  function setSampleSize(s) {
      sampleSize=s;
  }
  function setSlideShowIntroVisible(s) {
      slideShowIntroVisible=s;
  }
 
  function setTopMargin(br) {
       topMargin=br;
  }
  function setBottomMargin(br) {
       bottomMargin=br;
  }

  function setSpacing(br) {
       spacing=br;
  }
  function setCaptionFirst(cf) {
    captionFirst=cf;
  }
  function setSlideAuto(seconds) {


	if (slideStarted) {
	   if (seconds > 0 ) {
	   window.setTimeout("setSlideAuto(" + seconds + ")", seconds * 1000);
	   switchImage();
        }
	
	}else {
  	   slideStarted=true;
        if (seconds > 0 ) {
	   window.setTimeout("setSlideAuto(" + seconds + ")",  0);
	   switchImage();
        }
	  
   }
	
  }//setSlideAuto

  function setCaptionPrefix(cp) {
	captionPrefix=cp;
  }
  function setClass(c){
    captionClass=c;
  }
  function setHorizontal(h){
    horizontal=h;
  }
  function setSize(category, iW, iH,  cW, cH) {
     categoryArray[categoryPtr++]=category;
     eval(category + "imageWidth = " + iW + ";"); 
     eval(category + "imageHeight = " +  iH + ";"); 
     eval(category + "captionWidth = " + cW + ";"); 
     eval(category + "captionHeight = " + cH + ";"); 
  }
    function setCaptionLocation(cL, cT) {
		captionLeft=cL;
		captionTop=cT;
	}

  function setFontStyle(ff, s, c) {
     captionFontStyle="font-family:  " + ff + "; font-size:" + s + 
                  "; color:" + c + ";";
  }

  for (ptr=0; ptr<categoryArray.length; ptr++) {

          cmd="var " + categoryArray[ptr] + "Size = 0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "imageWidth = 0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "imageHeight = 0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "captionWidth = 0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "captionHeight = 0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "Counter = 0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "Ptr = 0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "Array = new Array();";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "Random=0;";
          eval(cmd);
          cmd="var " + categoryArray[ptr] + "Name=\"" +
               categoryArray[ptr] + "\";";
          eval(cmd);

  }


 
//----------------------------------------
// SET RANDOM START POINTER FOR EACH SLIDE ARRAY     
//----------------------------------------
//Get array size then use random function
   function setRandomSlideStart() {
      for (ptr=0; ptr<categoryArray.length; ptr++) {
          cmd=categoryArray[ptr] + "Random =Math.round(Math.random() * eval(categoryArray[ptr] + \"Array.length - 1\") );";
		  eval(cmd);

//HARD-CODE RANDOM START here for testing
//campusRandom=29;
          cmd=categoryArray[ptr] + "Ptr = eval(categoryArray[ptr] + \"Random\");";
          eval(cmd);
	      
       }

    }

   function getNextSlide() {
      for (ptr=0; ptr<categoryArray.length; ptr++) {

          name=eval(categoryArray[ptr] + "Name");

		  
          cmd=categoryArray[ptr] + "Ptr" + "=" + eval(categoryArray[ptr] + "Ptr") + " + 1";
	  eval(cmd);
	  var next=getPtrRestart(name, eval(categoryArray[ptr] + "Ptr"), eval(categoryArray[ptr] + "Array.length" ));
		  
          cmd=categoryArray[ptr] + "Ptr=next;";
	  eval(cmd);
          imagePtr[ptr]=next;

          alt=eval(categoryArray[ptr] + 
            "Array[" + eval(categoryArray[ptr] + "Ptr") + "].alt");
          src=eval(categoryArray[ptr] + 
            "Array[" + eval(categoryArray[ptr] + "Ptr") + "].src");
          cmd= "window.document." + name + ".src=\"" + src + "\";"; 
          cmd1= "window.document." + name + ".alt=\"" + alt + "\";"; 
          if (document.all) {
		cmd = "window.document.all." + name + ".src=\"" + src + "\";";
		cmd1 = "window.document.all." + name + ".alt=\"" + alt + "\";";
          }
	  eval(cmd);
	  eval(cmd1);

          href=eval(categoryArray[ptr] + 
            "Array[" + eval(categoryArray[ptr] + "Ptr") + "].href");
          cmd= "window.document.links['link" + name + "'].href=\"" + href + "\";";
          if (document.all) {
		cmd = "window.document.all.link" + name + ".href=\"" + href + "\";";
          }
	  eval(cmd);
	 
	  checkCaption(name);	  
      }

   }


//---------------------------------------------
// Display initial images on page load
//---------------------------------------------
   function displayInitialImages() {
     for (var tm=0; tm<topMargin; tm++) {
	document.write('<br>');
     }
     document.write ('<center><table width=100%>');
     if (captionFirst) {
        if (horizontal) {
	  document.write('<tr><td width=100% align=center colspan=' +
			categoryArray.length +
		        ' ><center><div align=center>');
          for (ptr=0; ptr<categoryArray.length; ptr++) {
	    getSlideData(categoryArray[ptr]);
	    placeCaptions(name);
          }
	  document.write('</div></center></td></tr>');
	  for (var sp=0; sp<spacing; sp++) {
		document.write('<tr>');
		document.write('<td colspan=' +
		              categoryArray.length  +
                               ' height=1>&nbsp;</td>');
		document.write('<tr>');
	  }
	  document.write ('<tr>');
          for (ptr=0; ptr<categoryArray.length; ptr++) {
	    document.write('<td>');
	    getSlideData(categoryArray[ptr]);
            placeImage(name, alt, src, href); 
	    document.write('</td>');
          }
	  document.write ('</tr>');

        }else {
	  document.write('<tr><td rowspan=' +
			categoryArray.length +
		        ' >');
          for (ptr=0; ptr<categoryArray.length; ptr++) {
	    getSlideData(categoryArray[ptr]);
	    placeCaptions(name);
          }
	  document.write('</td><td>');
	  document.write('<table>');
          for (ptr=0; ptr<categoryArray.length; ptr++) {
            document.write('<tr><td>');
	    getSlideData(categoryArray[ptr]);
            placeImage(name, alt, src, href); 
            document.write('</td><tr>');
          }
	  document.write('</table>');
	  document.write('</td></tr>');
	
        }
     }else {
        if (horizontal) {
	  document.write('<tr><td align=center colspan=' +
			categoryArray.length +
		        ' ><center>');
          for (ptr=0; ptr<categoryArray.length; ptr++) {
	    getSlideData(categoryArray[ptr]);
	    placeCaptions(name);
          }
	  document.write('</center></td></tr>');
	  document.write ('<tr>');
	  for (var sp=0; sp<spacing; sp++) {
		document.write('<tr>');
		document.write('<td height=24>&nbsp;</td>');
		document.write('<tr>');
	  }
          for (ptr=0; ptr<categoryArray.length; ptr++) {
	    document.write('<td>');
	    getSlideData(categoryArray[ptr]);
            placeImage(name, alt, src, href); 
	    document.write('</td>');
          }
	  document.write ('</tr>');

        }else {
	  document.write('<tr><td rowspan=' +
			categoryArray.length +
		        ' >');
          for (ptr=0; ptr<categoryArray.length; ptr++) {
	    getSlideData(categoryArray[ptr]);
	    placeCaptions(name);
          }
	  document.write('</td><td>');
	  document.write('<table>');
          for (ptr=0; ptr<categoryArray.length; ptr++) {
            document.write('<tr><td>');
	    getSlideData(categoryArray[ptr]);
            placeImage(name, alt, src, href); 
            document.write('</td><tr>');
          }
	  document.write('</table>');
	  document.write('</td></tr>');
	
        }
     }
     document.write('</table></center>');
     for (tm=0; tm<bottomMargin; tm++) {
	document.write('<br>');
     }

   }//end displayInitialImages


//----------------------------------------
// getSlideData() initialize image and caption variables
// from slide arrays using category Array
//----------------------------------------
   function getSlideData(categoryArray)  { 
          name=eval(categoryArray + "Name");
          src=eval(categoryArray +
            "Array[" + eval(categoryArray + "Ptr") + "].src");
          alt=eval(categoryArray +
            "Array[" + eval(categoryArray + "Ptr") + "].alt");
          href=eval(categoryArray +
            "Array[" + eval(categoryArray + "Ptr") + "].href");
        }
//----------------------------------------------------------------
//  placeCaptions():  Place captions for image category on screen
//  captions are hidden initially
//----------------------------------------------------------------
    function placeCaptions(name){

        var captionArrayLength=eval(name + "CaptionArray.length");
        for (var capCount=0; capCount < captionArrayLength; capCount++) {
        caption= captionPrefix + eval(name + "CaptionArray[" + capCount + "];");	
        if (document.all) {
		if (capCount == eval(name + "Random")) {
	document.write('<div align="center" id="caption' + name +  capCount +  '"' + 
                         ' class="' + captionClass +  '"'  +
                         ' style="visibility: hidden; ' +
                        ' position:absolute;');
                       if (screen.width > 1000) {
                       document.write(' left:' +  screen.width/4  + 'px;'); 
		       }else{
                       document.write(' left:' +  screen.width/5 * 2  + 'px;'); 
			}

                         //' top:' +  captionTop + 'px;'  +
                         document.write(' z-index:' +  capCount + ';'  );
                       //' width: ' + eval(name + "captionWidth") +
                       if (screen.width > 1000) {
			  document.write (' width: ' + screen.width/3 * 2 );
		       }else{
			  document.write (' width: ' + screen.width/2 );
                       }
	                 document.write('px;' +
                         ' height: ' + eval(name + "captionHeight") + 'px; ' + 
                          captionFontStyle +
		         '">' + caption +
                         ' </div>');
						 }
						
		} else {
	document.write('<div align="center" id="caption' + name +  capCount +  '"' + 
                         ' class="' + captionClass +  '"' + 
                        ' style="' +
			' position:absolute; ' +
                         ' visibility: hidden; ' +
                         ' left:' +  screen.width/3  + 'px;'  +
                        // ' top:' +  captionTop + 'px;'  +
                         ' z-index: ' + capCount + 
                         //'; width: ' + eval(name + "captionWidth") +
	                 ';' +
                         ' height: ' + eval(name + "captionHeight") + 'px; ' + 
                          captionFontStyle +
		         '">' + caption +
                         ' </div>');
		}
      }
    }//end placeCaptions



//-----------------------------------------------
//  placeImage():  Place images on screen
//-----------------------------------------------

     function placeImage(name, alt, src, href) {

	document.write('<div id="loc' + name + '" ' +
                         ' style="position:relative;' +
                         '">');
         document.write(' <a name="link' + name + '" id="link' + 
             name + '" href="' +
             href + '" alt="' + alt + '"><img width="' + 
	     eval(name + "imageWidth") +  
             '" height="' + eval(name + "imageHeight") +
             '" border="0' +
             '" src="'+ src +
             '" alt="' + alt + 
             '" name="' + name + 
             '" id="' + name  +
             '" hspace="2" vspace="1"' +
	     '  onMouseOver="showCaption(this.name)"' +
	     '  onMouseOut= "hideCaption(this.name)"' +
             '></a>');
         document.write('</div>');

     }//end placeImage

 //----------------

  function hideCaption(n) {
  
       var lastRoll="caption" + n + parseInt(eval(n + "Ptr") - 1);
       if (eval(n + "Ptr") == 0 ) {
             lastRoll="caption" + n + parseInt(eval(n + "Array.length" ) -1 ); 
       }else
       if (eval (n + "Ptr") == eval(n + "Random"))   {
         if (eval(n + "Ptr") == (eval(n + "Array.length") - 1)  ) {
	 var last=getLastImagePtr(n);
	 lastRoll="caption" + n + last;
         }else{
          lastRoll="caption" + n + parseInt(eval(n + "Ptr") + sampleSize -1);
         }
       }
       var thisRoll="caption" + n + eval(n + "Ptr");
	   if (document.all) {
    	lastRoll="caption" + n + eval(n + "Random");
		thisRoll="caption" + n + eval(n + "Random");
        document.all[lastRoll].style.visibility = 'hidden';
        document.all[thisRoll].style.visibility = 'hidden';
		
              }else if (document.getElementById && document.getElementById(thisRoll) != null) {
         document.getElementById(lastRoll).style.visibility='hidden';
         document.getElementById(thisRoll).style.visibility='hidden';
		    	lastRoll="caption" + n + eval(n + "Random");
		thisRoll="caption" + n + (eval(n + "Random") + 1);
		         document.getElementById(lastRoll).style.visibility='hidden';
         if (document.getElementById(thisRoll) ) {
             document.getElementById(thisRoll).style.visibility='hidden';
           }

     }
     else if (document.layers) {
      document.layers[lastRoll].visibility = 'hidden';
      document.layers[thisRoll].visibility = 'hidden';
	  		    	lastRoll="caption" + n + (eval(n + "Random") + 1);
		thisRoll="caption" + n + eval(n + "Random");
		      document.layers[lastRoll].visibility = 'hidden';
      document.layers[thisRoll].visibility = 'hidden';


     }
	
  }

  function hideSlideShowIntro() {

      if (document.all) {
	
        document.all["slideShowIntro"].style.visibility = 'hidden';
	  }else 
         if (document.getElementById && 
             document.getElementById("slideShowIntro") != null){
               document.getElementById("slideShowIntro").style.visibility='hidden';
         }
         else if (document.layers) {
            document.layers["slideShowIntro"].visibility = 'hidden';
        }
	setSlideShowIntroVisible(false);

  }
  function showCaption(n) {
       if (slideShowIntroVisible) {
	hideSlideShowIntro();
       }
       var thisRoll="caption" + n + eval(n +  "Ptr");
     
	  if (document.all) {
	thisRoll="caption" + n + eval(n + "Random");
    caption= eval(n + "CaptionArray[" + eval(n +  "Ptr") + "];");

eval("document.all." + thisRoll + ".innerHTML=captionPrefix + caption;");
        document.all[thisRoll].style.visibility = 'visible';
        document.all[thisRoll].style.display = 'block';
	  
	  }else if (document.getElementById && document.getElementById(thisRoll) ){
         document.getElementById(thisRoll).style.visibility='visible';
		 document.getElementById(thisRoll).style.display='block';
    }
    else if (document.layers) {
      document.layers[thisRoll].visibility = 'visible';
        }

}   
 function getLastImagePtr(n) { 
	 var ptrStart=eval(n + "Random");
	 var poolArraySize=eval(n + "Array.length");
         var available = poolArraySize - ptrStart; //avail img to array end
         var wrapAround = sampleSize - available;  //avail img from array start
         return wrapAround  -1;		 // last img in sample
 }
 function checkCaption(n) {
      var lastRoll="caption" + n + parseInt(eval(n + "Ptr") - 1);
       var thisRoll="caption" + n + eval(n +  "Ptr");
       if (eval(n + "Ptr") == 0 ) {
             lastRoll="caption" + n + parseInt(eval(n + "Array.length" ) -1 ); 
       }else
       if (eval (n + "Ptr") == eval(n + "Random"))   {
         if (eval(n + "Ptr") == (eval(n + "Array.length") - 1)  ) {
	 var last=getLastImagePtr(n);
	 lastRoll="caption" + n + last;
         }else{
          lastRoll="caption" + n + parseInt(eval(n + "Ptr") + sampleSize -1);
         }
       }
       var thisRoll="caption" + n + eval(n + "Ptr");
	    if (document.all) {
			thisRoll="caption" + n + eval(n + "Random");
			lastRoll=thisRoll;
   			caption= eval(n + "CaptionArray[" + eval(n +  "Ptr") + "];");
            if (document.all[lastRoll].style.visibility != "hidden") {

				eval("document.all." + thisRoll + ".innerHTML=captionPrefix + caption;");
			}

       }else if (document.getElementById && document.getElementById(thisRoll)) {
	 
	     if (document.getElementById(lastRoll).style.visibility != "hidden") {
		     document.getElementById(lastRoll).style.visibility='hidden';
		     document.getElementById(thisRoll).style.visibility='visible';

		 }
    } else if (document.layers) {
	
          if (document.layers[lastRoll].visibility != "hidden") {
		  document.layers[lastRoll].visibility='hidden';
 		  document.layers[thisRoll].visibility='visible';
		 }
	 }

} 

function switchImage() {
window.setTimeout('getNextSlide()', 1000);
return;
}


function placeRemainingCaptions(){
   for (ptr=0; ptr<categoryArray.length; ptr++) {
        getSlideData(name + categoryArray[ptr]);
        var captionArrayLength=eval(name + "CaptionArray.length");
        for (var capCount=0; capCount < captionArrayLength; capCount++) {
        caption= eval(name + "CaptionArray[" + capCount + "];");	
        
		if (capCount != eval(name + "Random")) {
		document.write('<div  id="caption' + name +  capCount +  '"' + 
                         ' class="' + captionClass +  '"'  +
                         ' style="visibility: hidden; ' +
                        //' position:absolute;' +
				//		' left:' + captionLeft + 'px;' +
				//		' top:' + captionTop + 'px;' +
						' z-index:' + capCount + ';' +
                        ' width: ' + eval(name + "captionWidth") +
	                 'px;' +
                         ' height: ' + eval(name + "captionHeight") + 'px; ' + 
                          captionFontStyle +
		         '">' + caption +
                         ' </div>');
		 }
	  }
	 }
  }//placeRemainingCaptions
  
  function getPtrRestart(arrayName, sPtr, poolArraySize) {
  var ptrStart=eval(arrayName + "Random");

  if (ptrStart == (poolArraySize - 1)) {
   var available = poolArraySize - ptrStart; //avail img to array end
   var wrapAround = sampleSize - available;  //avail img from array start
   var sampleLimit = wrapAround  -1;		 // last img in sample
   
   if (sPtr == poolArraySize){
   		return 0;
   }
   if (sPtr > sampleLimit && sPtr <  poolArraySize  ) {
   		return ptrStart;
   }
   return sPtr;

  }
  	if (sPtr >= poolArraySize) {
  	//if (sPtr >= eval(arrayName + "Array.length") ) {
 		return 0;
	}
	if ((ptrStart) == (sPtr - sampleSize) ) {
		return ptrStart;
	}
	return sPtr;
  }
      
