//Requires Event;Style;YUI.Animation;YUI.Dom

function ImageGallery(thumbnailContainer,imageContainer,imagePath,biggerBox,dependant){
  var thumbContainer = Dom.get(thumbnailContainer);
  var imgContainer = Dom.get(imageContainer);
  var placeHolder = imgContainer.getElementsByTagName("img")[0];
  var thumbs = thumbContainer.getElementsByTagName('img');
  var images = [];
  var caption = Dom.get('gallCaption');
  var previous = 0;
  var selected = 0;
  var moving = false;
  var controlElement = dependant;
  
  var loadingGraphic = document.createElement("img");
  if(biggerBox){loadingGraphic.setAttribute('src','/images/loadingBig.gif');}
  else{loadingGraphic.setAttribute('src','/images/loading.gif');}
  Style.set(loadingGraphic,'zIndex','30');
  Style.set(loadingGraphic,'position','absolute');
  Style.set(loadingGraphic,'top','0px');
  Style.set(loadingGraphic,'left','0px');
  YAHOO.util.Dom.setStyle(loadingGraphic,'opacity','0');
  var fadeInLoadingGraphic = new YAHOO.util.Anim(loadingGraphic, {opacity: {to: 0.99}}, 1.1, YAHOO.util.Easing['easeNone']);
  fadeInLoadingGraphic.onComplete.subscribe(function() { Style.set(images[previous].image,'zIndex',30);YAHOO.util.Dom.setStyle(images[previous].image,'opacity','0');Style.set(loadingGraphic,'zIndex','35');moving = false;if(images[current].isLoaded) {imageLoaded(current); moving=true;}});
  imgContainer.appendChild(loadingGraphic);
  
  var imagesLeft = thumbs.length;
  var imagesLeftStatusWidth = 263;
  var imagesLeftStatus = document.createElement('li').appendChild(document.createTextNode("Loading images...")).parentNode;
  Style.set(imagesLeftStatus,'borderWidth','0px');
  Style.set(imagesLeftStatus,'width','263px');
  Style.set(imagesLeftStatus,'height','1.4em');
  Style.set(imagesLeftStatus,'color','#000000');
  //Style.set(imagesLeftStatus,'position','relative');
  //Style.set(imagesLeftStatus,'top','-1.3em');
  Style.set(imagesLeftStatus,'position','absolute');
  Style.set(imagesLeftStatus,'bottom','0px');
  Style.set(imagesLeftStatus,'left','0px');
  Style.set(imagesLeftStatus,'paddingLeft','3px');
  Style.set(imagesLeftStatus,'backgroundColor','#FFFFFF');
  Style.set(imagesLeftStatus,'fontSize','0.8em');
  Style.set(imagesLeftStatus,'visibility','hidden');
  YAHOO.util.Dom.setStyle(imagesLeftStatus,'opacity','0.4');
  thumbContainer.appendChild(imagesLeftStatus);
  Event.add(thumbContainer,'mouseover',function(){Style.set(imagesLeftStatus,'visibility','visible');});
  Event.add(thumbContainer,'mouseout',function(){Style.set(imagesLeftStatus,'visibility','hidden');});
  
	for(i = 0;i < thumbs.length;i++)
	{
	  var thisImage = new createGalleryImage(thumbs[i].src, imagePath, thumbs[i].getAttribute('alt'),i);
	  thisImage.applyControls(i)
	  thisImage.insertImage();
	}
	
	function createGalleryImage(thumbSrc, folder, altTxt,ind)
	{
      images.push(this);
	  this.isLoaded = false;
	  this.index = ind;
	  this.image = document.createElement("img");
	  var imgSrc = thumbSrc.replace(folder,'/');
	  if(imgSrc == placeHolder.src)
	  {
	    this.image = placeHolder;
        selected = ind;
        previous = ind % thumbs.length;
		this.isLoaded = true;
        imagesLeft--;
	  }
	  else
	  {
	    Event.add(this.image,"load", function () {imageLoaded(ind);imagesLeft--;if(!imagesLeft) Style.set(imagesLeftStatus,'display','none');});
		//if(isLTEIE7) imgSrc = imgSrc + '?' + Math.floor(Math.random()*11)
        this.image.setAttribute('src',imgSrc);//.replace('.png','.JPG')
        this.image.setAttribute('alt',altTxt);
	    Style.set(this.image,'zIndex','30');
	    Style.set(this.image,'position','absolute');
	    Style.set(this.image,'top','0px');
	    Style.set(this.image,'left','0px');
        YAHOO.util.Dom.setStyle(this.image,'opacity','0');
        YAHOO.util.Dom.setStyle(thumbs[ind],'opacity','0.6');
        //alert(YAHOO.util.Dom.getStyle(this.image,'opacity'));
	  }
      this.fadeIn = new YAHOO.util.Anim(this.image, {opacity: {to: 1}}, 1.1, YAHOO.util.Easing['easeIn']);
      this.fadeIn.onComplete.subscribe(function() { if(YAHOO.util.Dom.getStyle(loadingGraphic,'opacity') > '0'){YAHOO.util.Dom.setStyle(loadingGraphic,'opacity','0');}moveTo(previous,30);YAHOO.util.Dom.setStyle(images[previous].image,'opacity','0');moveTo(ind,40);moving = false;});
	  
	  function imageLoaded(ind)
      {
        if(ind == selected)
        {
          moveTo(ind,50);
          images[ind].fadeIn.animate();
        }
        images[ind].isLoaded = true;
		updateBar();
      }
	  this.applyControls = function(i)
	  {
	    
	    Event.add(thumbs[i],"click", function (e) {images[i].image.blur();if (!e) {var e = window.event;}Event.cancelBubble(e);if(i!=selected && !moving) {if(controlElement && controlElement.isOpen()){swapImages(i);updateThumb();controlElement.fadeOut();}else{moving=true;selectImage(i);updateThumb();}caption.innerHTML = thumbs[i].getAttribute('alt');}return false;});
	    Event.add(thumbs[i].parentNode,"keydown", function (e) {if (!e) {var e = window.event;}if(e.keyCode/13 != 1){return;}Event.cancelBubble(e);if(i!=selected && !moving) {moving = true;selectImage(i);updateThumb();caption.innerHTML = thumbs[i].getAttribute('alt');}});
		Event.add(thumbs[i],"mouseover", function () {if(i!=selected) YAHOO.util.Dom.setStyle(thumbs[i],'opacity','1');});
		Event.add(thumbs[i],"mouseout", function () {if(i!=selected) YAHOO.util.Dom.setStyle(thumbs[i],'opacity','0.6');});
		Style.set(thumbs[i],'cursor','pointer');
	  };
	  this.insertImage = function()
	  {
		if(!this.isLoaded) imgContainer.appendChild(this.image);
	  };
      this.changeImage = function(arg)
      {
        selectImage(arg);
      };
      
      function updateThumb()
      {
        YAHOO.util.Dom.setStyle(thumbs[previous],'opacity','0.6');
        YAHOO.util.Dom.setStyle(thumbs[selected],'opacity','1');
      }
      
      function selectImage(i)
      {
		previous = selected;
        if(images[i].isLoaded)
        {
          moveTo(i,50);
          images[i].fadeIn.animate();
        }
        else
        {
          //moveTo(i,50);
          //images[i].fadeIn.animate();
          Style.set(loadingGraphic,'zIndex','50');
          //alert('fadein');
          fadeInLoadingGraphic.animate();
        }
        selected = i;
      }
      
      function moveTo(imageIndex,zindex)
      {
        Style.set(images[imageIndex].image,'zIndex',zindex);
      }
      
      function swapImages(newImg)
      {
        previous = selected;
        moveTo(previous,30);
        moveTo(newImg,40);
        YAHOO.util.Dom.setStyle(images[newImg].image,'opacity','1');
        YAHOO.util.Dom.setStyle(images[previous].image,'opacity','0');
        selected = newImg;
      }
	  
	  
      return this;
	}
    
    this.getImage = function(ind) {
      return images[ind];
    }
	function updateBar()
	{
	  imagesLeftStatusWidth -= 17;
	  Style.set(imagesLeftStatus,'width',(imagesLeftStatusWidth+'px'));
	}
}
/*
/Usage
*/

