var Slideshow = function(jSource) {
	var imagesList;
	var curImage = false;
	var nextImageIndex;
	var currentImageIndex;
	var hTimer;
	var isInit = false;
	var changeStartTime = null;
	var isEffect = true;
	var jImagesSource;
	var jCurrentSmall;

	var jImages = $(".j_menu_cont > .j_images > img");

	this.updateImagesList = function(jSource) {
		jImagesSource = jSource;
		var jImages = $("div", jSource);
		imagesList = [];
		var re = /img_id_(\d+)/;
		for(var i=0; i<jImages.length; i++) {
			imagesList.push({
				src:	$("b",jImages[i]).html(),
				big:	$("u",jImages[i]).html(),
				id:		jImages[i].id.match(re)[1],
				item_id:jImages[i].className
			});
		}		
		isEffect = true;
		if(isInit) {
			getNextImage();
		}
	}

	this.destroy = function() {
		clearTimeout(hTimer);
		isEffect = false;
		jImages.animate({opacity: 0},500,"swing",showMenu).attr('src','/images/blank.gif');
		$(".j_menu_cont > .portfel").unbind("click",openPopup);
	}

	function openPopup() {
		if(changeStartTime === null) 
			var img = imagesList[currentImageIndex];
		else {
			var t = new Date();
			var dt = t.getTime() - changeStartTime;
			var img = imagesList[dt > 500 ? nextImageIndex : currentImageIndex];
		}
		if(img === undefined)
			img = imagesList[0];
		$(".j_portfel_main_img").attr("src",img.big);
		$(".portfel-okno").show();
		//мелкие картинки
		var jCont =  $(".j_portf_sm_cont").html("");
		var jImages = jImages = $("."+img.item_id, jImagesSource);
		if(jImages.length > 1) { 
			for(var i=0; i<jImages.length; i++) {
				var domTd  = document.createElement("td");
				var domA   = document.createElement("a");
				domA.href = "#";
				domTd.appendChild(domA);
				var domImg = document.createElement("img");
				domImg.src = $("i",jImages[i]).html();
				domImg.width = 128;
				domImg.height = 96;
				domImg.objBig = $("u",jImages[i]).html();
				domImg.onclick = onClickSmall;
				if(jImages[i].id == "img_id_"+img.id) {
					jCurrentSmall = $(domImg).css({cursor: "default",opacity: 1});
				}
				domA.appendChild(domImg);
				domA.appendChild(document.createElement("span"));
				domA.onfocus = function(){this.blur();};
				jCont.append(domTd);
			}
		}
		return false;
	}

	function onClickSmall() {
		if(jCurrentSmall && this == jCurrentSmall[0])
			return false;
		jCurrentSmall.css("cursor", "pointer").animate({"opacity": .6},300,"swing");
		jCurrentSmall = $(this).css("cursor", "default").animate({"opacity": 1},300,"swing");
		$(".j_portfel_main_img").attr("src",this.objBig);
		return false;
	}

	$(".j_portfel_main_img").click(function(){
		$(".j_portfel_main_img").attr("src","images/blank.gif");
		$(".portfel-okno").hide();
		return false;
	});

	function showMenu() {
		$(".j_menu_cont > .menu").show();
		if(!$.browser.msie)
			$(".j_menu_cont > .menu").animate({opacity: 1},500,"swing");
		$(".j_menu_cont > .portfel").hide();
	}

	function getNextImage() {
		currentImageIndex = nextImageIndex;
		var count = imagesList.length;
		if(count == 1 && curImage == imagesList[0].id) 
			return false;
		do{
			nextImageIndex = Math.floor(Math.random()*count);
		}while (imagesList[nextImageIndex].id === curImage);

		curImage = imagesList[nextImageIndex].id;
		return nextImageIndex;
	}

	function initSlides() {
		jImages.css("opacity", 0);
		$(".j_menu_cont > .j_images").show();
		var imgN = getNextImage();
		currentImageIndex = nextImageIndex;
		jImages[1].src = imagesList[imgN].src;
		isInit = false;
		if($.browser.msie)
			realInitSlides();
		else
			$(".j_menu_cont > .menu").animate({opacity: 0},500,"swing",realInitSlides);
	}

	function realInitSlides() {
		if(isInit) return;
		isInit = true;

		$(".j_menu_cont > .menu").hide();
		$(jImages[1]).animate({opacity: 1},1000,"swing", onEffectComplte);
		hTimer = setInterval(onTimer, 3000);
	}

	function onTimer() {
		if(isEffect) {
			var t = new Date();
			changeStartTime = t.getTime();
			$(jImages[1]).animate({opacity: 1},1000,"swing", onEffectComplte);
		}
	}

	function onEffectComplte() {
		changeStartTime = null;
	
		jImages[0].src = jImages[1].src;
		if(isInit) {
			$(jImages[0]).css("opacity",1);
			isInit = false;
		}
		$(jImages[1]).css("opacity",0);
		var imgN = getNextImage();
		isEffect = imgN !== false;
		if(isEffect)
			jImages[1].src = imagesList[imgN].src;
	}

	this.updateImagesList(jSource);
	initSlides();
	$(".j_menu_cont > .j_images").bind("click",openPopup);
}



var slideshowInstance = null;
