/*
 *         developed by Matteo Bicocchi on JQuery
 *         © 2002-2009 Open Lab srl, Matteo Bicocchi
 *			    www.open-lab.com - info@open-lab.com
 *       	version 1.0
 *       	tested on: 	Explorer and FireFox for PC
 *                  		FireFox and Safari for Mac Os X
 *                  		FireFox for Linux
 *         GPL (GPL-LICENSE.txt) licenses.
 */

(function($){
  jQuery.fn.mbGallery = function(NewOptions)
  {
    return this.each(function() {
      var galleryId = !this.id ? Math.floor(Math.random() * 100): this.id;
      var gallery = this;
      $(this).removeAttr("id");

      this.options = {
        galleryWidth: 300,
        galleryHeight: 300,
        galleryMaxWidth: 0,
        galleryColor: "white",
        galleryFrameBorder: 30,
        galleryFrameColor: "white",

        startFrom: 0,
        headerOpacity: 0.5,
        thumbsBorder: 5,
        thumbHeight: 30,
        thumbStripColor: "black",
        thumbStripPos: "right",
        thumbStripWidth:250,
        thumbSelectColor: "black",
        thumbOverColor: "#cccccc",
        imageSelector: ".imgFull",
		imgMapSelector: ".imgMap",
        thumbnailSelector: ".imgThumb",
        descSelector: ".imgDesc",
        descriptionWidth:300,

        labelColor: "yellow",
        labelColorDisactive: "white",
        labelTextColor: "black",
        labelTextSize: "9px",
        labelHeight: 25,
        iconFolder: "elements/black",
        fadeTime: 300,
        autoSlide: true,
        slideTimer: 100,
        autoSize: true,
        startTimer:0

      };

	  var musicstarting=0;
	  
      var closeThumbStrip,actualImg,actualThumb,thumbUnsel,thumbOver,thumbs,full,imgDesc,imgMap;

      $.extend(this.options, NewOptions);
      var opt= this.options;

      opt.thumbsBorder = opt.thumbsBorder + "px solid";
      var thumbSel = {
        thumbSel:
        {
          border: opt.thumbsBorder, borderColor: opt.thumbSelectColor
        },
        thumbUnsel:
        {
          border: opt.thumbsBorder, borderColor: opt.thumbStripColor
        },
        thumbOver:
        {
          border: opt.thumbsBorder, borderColor: opt.thumbOverColor
        }
      };
      $.extend(opt, thumbSel);
      if(opt.slideTimer < 2000)
        opt.slideTimer = 2000;

      thumbUnsel = opt.thumbUnsel;
      thumbOver = opt.thumbOver;
      $(this).hide();

      // GETTING THE ELEMENTS FOR THE GALLERY FROM THE PAGE
      thumbs = $(this).find(opt.thumbnailSelector);
      full = $(this).find(opt.imageSelector);
	  imgMap = $(this).find(opt.imgMapSelector);
      imgDesc = $(this).find(opt.descSelector);
      $(this).empty();

      if(opt.startFrom == "random")
        opt.startFrom = Math.floor(Math.random() * full.length);

      function preloadImg(i) {
        $(thumbloading).find("img").attr("src", ""+opt.iconFolder+"/loader.gif");
        var IMG_URL = $(full [i]).attr("src");
        var IMGOBJ = new Image();
        IMGOBJ.onload = function()
        {
          $(thumbloading).find("img").attr("src", ""+opt.iconFolder+"/loaded.gif");
          changePhoto(i);
        };
        IMGOBJ.onerror = function()
        {
          alert("can't load " + IMG_URL);
        };
        IMGOBJ.src = IMG_URL;
      }

      var thumbPos = "";
      function setThumbPos(w) {
        var pos=0;
        switch(opt.thumbStripPos)
                {
          case "left":
            pos= 0;
            break;
          case "center":
            pos=((w / 2) -(opt.thumbStripWidth / 2));
            break;
          case "right":
            pos=(w - opt.thumbStripWidth);
            break;
          default:
            pos= 0;
            break;
        }
        return pos;
      };

      thumbPos = setThumbPos(opt.galleryWidth);

      $(this).parent().append("<table id='"+galleryId+"' class='mbGallery' cellpadding='0' cellspacing='0' height='"+opt.galleryHeight+"'><tr><td id ='gallery_"+galleryId+"'></td></tr></table>");
      var myGallery= $(this).parent().find('.mbGallery');
      var galleryContainer= $(this).parent().find('#gallery_'+galleryId);
      $(galleryContainer).css(
      {
        border: opt.galleryFrameBorder + "px solid " + opt.galleryFrameColor,
        background: opt.galleryColor
      });
      $(galleryContainer).append(this);

      // CREATE THE GALLERY STRUCTURE FOR FULLSIZE IMAGES
      $(this).append("<div class='FullImg'></div>");
      var fullImageArea = $(this).find(" .FullImg");

      // CREATE THE GALLERY STRUCTURE FOR THUMBS IMAGES
      var headerH = opt.labelHeight > 0 ? opt.labelHeight: opt.galleryFrameBorder;

      // thumbnail container
      $(galleryContainer).prepend("<div class='thumbBox'></div>");
      var thumbBox = "#newtollbargalery";

      //thumbnail navigator
      $(thumbBox).append("<div class='header'>" +
                          "<table cellpadding='0' cellspacing='0'><tr>" +
                          "<td class='thumbWinBtn pointer'  width='10'> </td>" +

                          "<td class='slideShow pointer'  width='10'> </td>" +
                          "<td class='prev pointer'  width='10'> </td>" +
                          "<td class='next pointer'  width='10'> </td>" +
                          "<td class='indexLabel' nowrap width='10'> </td>" +
						  
						  "<td nowrap width='10'> </td>" +

                          "</tr></table>" +
                          "</div>");
      var header = $(thumbBox).find(".header");

      var thumbWinBtn = $(header).find(".thumbWinBtn");
      $(thumbWinBtn).append("<img src='"+opt.iconFolder+"/thumb.gif' class='thumbIco' style='position:relative;'>");

      var slideShow = $(header).find(".slideShow");
      $(slideShow).append("<img src='"+opt.iconFolder+"/play.gif' class='slideIco' style='position:relative;'>");

      var thumbloading = $(header).find(".loader");
      $(thumbloading).append("<img src='"+opt.iconFolder+"/loaded.gif' style='position:relative;'>");

      var spacer = $(header).find(".spacer");
      $(spacer).append("<img src='"+opt.iconFolder+"/separator.gif' style='position:relative;'>");

      var next = $(header).find(".next");
      $(next).append("<img src='"+opt.iconFolder+"/next.gif' style='position:relative;'>");

      var prev = $(header).find(".prev");
      $(prev).append("<img src='"+opt.iconFolder+"/prev.gif' style='position:relative;'>");

      var close = $(header).find(".close");
      $(close).append("<img src='"+opt.iconFolder+"/close.gif' alt='close' style='position:relative;'>");

      var indexLabel = $(thumbBox).find(" .indexLabel").html("<span style='position:relative;'>"+(opt.startFrom + 1) + ".<b>" + full.length + "</b></span>");

      //Thumbnails
      $(thumbBox).append("<div class='ThumbImg' style=\"display: none;\"></div>");
      var thumbImages = $(thumbBox).find(" .ThumbImg");
      $(thumbImages).prepend($(thumbs));



      $(this).css(
      {
        width: opt.galleryWidth,
        height: opt.galleryHeight,
        overflow: "hidden"
      });

      $(thumbs).css(
      {
        width: opt.thumbHeight,
        padding:"0px",
        border:"1px solid "+opt.labelColor,
        cursor:"pointer"
      });

      $(thumbBox).css(
      {
        textAlign:"left",
        //zindex:1000,
        marginTop:"-" + headerH + "px",
        //position:"relative",
        width:opt.thumbStripWidth + "px",
        marginLeft:thumbPos + "px"
		//z-index:10000
      });

      $(thumbImages).css(
      {
        opacity:opt.headerOpacity,
        backgroundColor:opt.thumbStripColor,
        border:"5px solid "+ opt.labelColor,
		position:"absolute",
		right: (getClientWidth()-960)/2,
		width: 650,
		height: 307,
		overflow: "auto",
		top:161
      });

      $(header).css(
      {
        opacity:opt.headerOpacity,
        textAlign:"left",
        color:opt.labelTextColor,
        padding:"0px",
        border:"0px",
        height:headerH
      });

      $(header).find("td").css(
      {
        background:opt.labelColorDisactive,
        padding:"2px",
        paddingRight:"10px",
        height:headerH,
        color:opt.labelTextColor
      });

      $(".pointer").css(
      {
        cursor:"pointer"
      });

      jQuery.fn.extend(
      {
        getW:function() {
          var ow = $(this).width();
          if(opt.galleryMaxWidth > 0 && ow > opt.galleryMaxWidth) {
            $(this).attr("width", opt.galleryMaxWidth);
            ow = opt.galleryMaxWidth;
          }
          return ow;
        }
      });
      function changePhoto(i) {
                          $("#descriptionBox2").fadeTo(opt.fadeTime, 0);
                          //$("#imgMapBox2").fadeTo(opt.fadeTime, 0);
        $(fullImageArea).fadeTo(opt.fadeTime, 0, function() {
          //replacing the image
          $(this).html(full [i]);
		                    $("#descriptionBox2").html(imgDesc[i]);
		                    //$("#imgMapBox2").html(imgMap[i]);

          //showing the new image
          setTimeout(function() {
            $(fullImageArea).fadeTo(opt.fadeTime, 1);
                              $("#descriptionBox2").fadeTo(opt.fadeTime, .8);
                              //$("#imgMapBox2").fadeTo(opt.fadeTime, .8);
          }, opt.fadeTime);
          // if autosize option resize the image frame
          if(opt.autoSize) {
            //if a maxWith is set resize the image width
            var w = $(full [i]).getW();
            //resize frame
            $(gallery).animate(
            {
              height: full [i].offsetHeight,
              width: w
            }, opt.fadeTime);
            //if the thumbstrip has no width set the width according ti the frame width
            if(opt.thumbStripWidth == opt.galleryWidth) {
              $(thumbBox).animate(
              {
                width: full[i].offsetWidth
              },opt.fadeTime);
            } else {
              // if the thumbstrip has a width reposition it according to the image width
              var l = setThumbPos($(full[i]).width());
              $(thumbBox).animate(
              {
                marginLeft: l
              }, opt.fadeTime);
            }
          }
        });
        //redefine the indexLabeles
        $(actualThumb).css(thumbUnsel);
        actualImg = full[i];
        actualThumb = thumbs[i];
        $(actualThumb).css(opt.thumbSel);
        $(indexLabel).html("<span style='position:relative;'>"+(i +1)+ ".<b>" + full.length + "</b></span>");
      }
      thumbs.each(function(i) {
        $(this).click(function() {
          x = i;
          stopShow();
          preloadImg(i);
          setTimeout(function(){$(thumbImages).hide(500);},500);
        });
      });
      $(this).show();

      // EVENTS
      var hideTumb, thumbOpen, headerMO;
      $(thumbWinBtn).click(function() {
        if( !thumbOpen) {
          $(thumbImages).show(500);
          thumbOpen = true;
        } else {
          $(thumbImages).hide(500);
          thumbOpen = false;
        }
        stopShow();
      });
      $(fullImageArea).click(function() {
        stopShow();
      });
      $(fullImageArea).bind("dblclick",function() {
/* 	            if (musicstarting==0) {$("#hereismusic").html('<object type="application/x-shockwave-flash" data="/wkernel/flash/player_mp3_maxi/player_mp3_maxi.swf" width="26" height="20"><param name="movie" value="/wkernel/flash/player_mp3_maxi/player_mp3_maxi.swf" /><param name="bgcolor" value="#000000" /><param name="FlashVars" value="mp3=/ru/osxmusic/name/842071533_s_1o/rand/1995716490/8420715331.mp3&width=26&loop=1&autoplay=1&showslider=0&showloading=never&loadingcolor=000000&bgcolor=000000&bgcolor1=222222&bgcolor2=222222&slidercolor1=000000&slidercolor2=000000&sliderovercolor=000000&buttoncolor=727272&buttonovercolor=eeee82&textcolor=000000" /></object>');musicstarting=1;} */
        startShow();
      });
      $(thumbBox).mouseover(function() {
        clearTimeout(hideTumb);
        clearTimeout(headerMO);
        $(header).find("td").css({opacity:opt.headerOpacity, background: opt.labelColor});
        clearTimeout(closeThumbStrip);
      });

      $(thumbBox).mouseout(function() {
        headerMO=setTimeout(function(){
          $(header).find("td").css({opacity:opt.headerOpacity, background: opt.labelColor});
        },100);
        hideTumb = setTimeout(function() {
          $(thumbImages).hide(500);
          thumbOpen = false;
        }, 1000);
      });
      $(thumbs).mouseover(function() {
        if(this != actualThumb) {
          $(this).css(thumbOver);
        }
      });
      $(thumbs).mouseout(function() {
        if(this != actualThumb) {
          $(this).css(thumbUnsel);
        }
      });
      $(slideShow).click(function() {
        startSlide = ! startSlide;
        if(startSlide) {
/*           if (musicstarting==0) {$("#hereismusic").html('<object type="application/x-shockwave-flash" data="/wkernel/flash/player_mp3_maxi/player_mp3_maxi.swf" width="26" height="20"><param name="movie" value="/wkernel/flash/player_mp3_maxi/player_mp3_maxi.swf" /><param name="bgcolor" value="#000000" /><param name="FlashVars" value="mp3=/ru/osxmusic/name/842071533_s_1o/rand/1995716490/8420715331.mp3&width=26&loop=1&autoplay=1&showslider=0&showloading=never&loadingcolor=000000&bgcolor=000000&bgcolor1=222222&bgcolor2=222222&slidercolor1=000000&slidercolor2=000000&sliderovercolor=000000&buttoncolor=727272&buttonovercolor=eeee82&textcolor=000000" /></object>');musicstarting=1;} */
		  startShow();
        } else
          stopShow();
      });
      var goOn;
      $(next).click( function() {
        stopShow();
        clearTimeout(goOn);
        x += 1;
        goOn = setTimeout(function() {
          if(x >= full.length) x = 0;
          preloadImg(x);
        }, 200);
      });
      $(prev).click( function() {
        stopShow();
        clearTimeout(goOn);
        x -= 1;
        goOn = setTimeout(function() {
          if(x < 0) x = full.length - 1;
          preloadImg(x);
        }, 200);
      });
      $(close).click( function() {
        myGallery.fadeOut("slow");
      });


      actualImg = full [opt.startFrom];
      $(thumbs).css(thumbUnsel);
      actualThumb = thumbs [opt.startFrom];
      $(actualThumb).css(thumbSel);
      closeThumbStrip = setTimeout(function() {
        $(thumbImages).hide(500);
      }, 2000);
      var slideShowTimer, x = opt.startFrom, startSlide = opt.autoSlide, startShow = function() {
        $(slideShow).find("img").attr("src", opt.iconFolder+"/stop.gif");
        if(x == full.length)
          x = 0;
        preloadImg(x);
        slideShowTimer = setTimeout(startShow, opt.slideTimer);
        x ++;
      };
      function stopShow() {
        clearTimeout(slideShowTimer);
        $(slideShow).find("img").attr("src", opt.iconFolder+"/play.gif");
        startSlide = false;
      }
      if(startSlide) {
        setTimeout(startShow, opt.startTimer);
      } else {
        setTimeout(function() {
          preloadImg(opt.startFrom);
        }, opt.startTimer);
      }
    });
  };
})(jQuery);