var Cookies = {
    init: function () {
        var allCookies = document.cookie.split('; ');
        for (var i=0;i<allCookies.length;i++) {
            var cookiePair = allCookies[i].split('=');
            this[cookiePair[0]] = cookiePair[1];
        }
    },
    create: function (name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
        this[name] = value;
    },
    erase: function (name) {
        this.create(name,'',-1);
        this[name] = undefined;
    }
};
Cookies.init();
var ts; // slideshow timer
var tm; // mouse hover transition timer
var td; // description timer
jQuery.fn.gallery = function(speed) {	
		var gallery = this;
        var ci = -1;
		var img = [];
		var paused = true;
		var galleryStructure = '<div id="img-gallery"><img style="display:none" /><ul></ul><div id="img-description" style="display:none"></div></div>';
		var start = function(){
			var slideNext = function(){
				ci = ci < gallery.length - 1 ? ci + 1 : 0;
				changeImage(ci, 250);
				ts = setTimeout(slideNext, speed);
			};
			var changeImage = function(n, s){
				jQuery('#img-gallery img').fadeOut(s, function(){
					jQuery('#img-gallery ul li').removeClass('over');
					jQuery('#img-gallery ul li:eq('+(n)+')').addClass('over');
					jQuery('#img-gallery img').fadeIn(s);
					jQuery('#img-gallery ul').fadeIn(s);
					jQuery('#img-gallery img')
						.attr('src', img[n].src)
						.attr('alt', img[n].alt);
					if(img[n].url != undefined){
						jQuery('#img-gallery img')
							.attr('style', 'cursor:pointer')
							.unbind('click')
							.click(function(){window.location.href = img[n].url; return false;});
					}else{
						jQuery('#img-gallery img')
							.attr('style', 'cursor:default')
							.unbind('click');
					}
					jQuery('#img-gallery #img-description').html(img[n].description);
				});
			};

			jQuery('div.mygallery').prepend(galleryStructure);

			// append list items to gallery
			jQuery(img).each(function(i){
				jQuery('#img-gallery ul').append('<li style="float:left" class="nav_'+(i + 1)+'"><a href="#'+i+'"></a></li>');
			})

			// thumbnail event handler
			jQuery('#img-gallery ul a:not(#playstop)').mouseover(function(){
				var el = this;
				tm = window.setTimeout(function(){
					paused = true;
					clearTimeout(ts);
					m = jQuery(el).attr('href').split('#');
					jQuery('#img-gallery img').stop(true, true);
					changeImage(m[1], 250);
				}, 400);
				return false;
			});
			jQuery('#img-gallery ul a:not(#playstop)').mouseout(function(){
				clearTimeout(tm);
				if (paused){
					paused = false;
					ts = setTimeout(slideNext, 1000);
				}
				return false;
			});

			// image and description handlers
			var stopSlideshow = function(){
				paused = true;
				clearTimeout(ts);
				clearTimeout(td);
				jQuery('#img-gallery #img-description').show();
			};
			var resumeSlideshow = function(){
				paused = false;
				td = setTimeout(function(){jQuery('#img-gallery #img-description').hide();}, 200);
				ts = setTimeout(slideNext, speed);
			};
			jQuery('#img-gallery img').mouseover(function(){stopSlideshow(); return false;});
			jQuery('#img-gallery img').mouseout(function(){resumeSlideshow(); return false;});
			jQuery('#img-gallery #img-description').mouseover(function(){stopSlideshow(); return false;});
			jQuery('#img-gallery #img-description').mouseout(function(){resumeSlideshow(); return false;});

            if (Cookies['hyper-gallery-auto'] == null){ Cookies.create('hyper-gallery-auto', 1, 365); }
			slideNext();
		};

		// hide and store images to img[] array
		jQuery(gallery).each(function(i){
			jQuery(this).hide();
			img[i] = {
				'src': this.src,
				'alt': this.alt,
				'description': jQuery(this).attr('longdesc'),
				'url': jQuery(this).attr('url')
			};
		})

		paused = false;
		start();
};