/* photo slideshow */
function photoSlideshow()
{
	var enlarge = $("enlarge");
	var play = $("play_slideshow");
	var stop = $("stop_slideshow");
	var big  = $("big_photo_src");
	var photos = $("photos_list").getElementsByTagName("a");
	photoArray = new Array();
	var fakeImg = $c("img");
	fakeImg.id = "fake_img";
	addClass(fakeImg,"hidden");
	$("big_photo").appendChild(fakeImg);

	var slideShowInterval;
	var defaultPhoto = 0;
	var currentPhoto = defaultPhoto;

	play.onclick = startSlideShow;
	stop.onclick = stopAnimation;
	for ( var i = 0; i < photos.length; i++ )
	{
		var img = new Image();
		img.src = photos[i].style.backgroundImage.slice(4,-1).gsub('\"','').replace("72","386").replace("52","353").replace("&center-crop=1", "");
		var length = photoArray.length;
		photoArray[length] = img;
		// console.log("photoArray[%s]: %o", length, photoArray[length]);
		photoArray[length].desc = photos[i].title;
		photos[i].property = i;
		photos[i].onclick = changePhoto;
	}

	function startSlideShow()
	{
		if(currentPhoto == defaultPhoto)
			currentPhoto = (defaultPhoto+1)%(photos.length);
			
		addClass(play,"play_disabled");
		removeClass(stop,"stop_disabled");
		
		slideShowInterval = setInterval(function()
		{
			switchImage(currentPhoto);
			currentPhoto = (currentPhoto+1)%(photos.length);
		},3000);
		
		return false;
	}

	function changePhoto()
	{
		stopAnimation();
		currentPhoto = this.property;
		switchImage(currentPhoto);
		return false;
	}

	function stopAnimation()
	{
		currentPhoto = defaultPhoto;
		clearInterval(slideShowInterval); 
		removeClass(play,"play_disabled");
		addClass(stop,"stop_disabled");
	}

	function switchImage(no) {
		setTimeout( function() { 
			big.src = photoArray[no].src;
		}, 20); // ff bug
		fakeImg.src = big.src;
		removeClass(fakeImg,"hidden");

		var opacity = 100;
		var alpha = setInterval(function()
		{
			opacity -= 10;
			setOpacity(fakeImg,opacity);

			if( opacity <= 0 )
			{
				clearInterval(alpha);
				addClass(fakeImg,"hidden");
				setOpacity(fakeImg,100);
				$('big_desc').innerHTML = rpad( photoArray[no].desc, 30 ) ;
			}
		},40);

		// change enlarge link
		enlarge.href = enlarge.href.replace(/photo=([0-9]*)/,"photo="+(no+1));
	}

	function rpad(text,maxLength)
	{
		return (text.length <= maxLength) ? text : text.slice(0,maxLength) + '...';
	}
}

/* hover amenities */
function hoverAmenities()
{
	var ams = $("amenity_list").getElementsByTagName("span");
	for( var i = 0; i < ams.length; i++ )
		serviceAmenity(ams[i])

	function serviceAmenity(amenity)
	{
		var amenityImage = $(amenity.id + "_img");
		// create image for preload
		var img = new Image();
		img.src = amenityImage.getAttribute("alt");

		amenity.out = amenityImage.src;
		amenity.over = img.src;

		amenity.onmouseover = function() { addClass(this,"hover"); amenityImage.src = this.over; }
		amenity.onmouseout = function() { removeClass(this,"hover"); amenityImage.src = this.out; }
	}
}

/* map quest */
/* TODO: add: zoom, move functions,  */
function dynamicZoom()
{
	var buttons = $("zoom_buttons").getElementsByTagName("a");
	var length = buttons.length;
	var bufferedMaps = new Array();
	var map = $("image_map").getElementsByTagName("img")[0];
	var activeMap = 0;

	var preloader = new Image();
	preloader.src = "/images/misc/map_loading.gif";
	preloader.className = "preloader hidden";
	$("image_map").appendChild(preloader);

	// set actions	
	for( var i = 0; i < length; i++ )
	{
		if(containsClass(buttons[i],"active")) activeMap = i;
		buttons[i].property = i;
		buttons[i].onclick = replaceMap;
	}

	// zoom in/out
	var zoomIn = $c("a");
	zoomIn.href = "#";
	zoomIn.className = "zoom in";
	zoomIn.title = "Zoom In";
	zoomIn.onclick = function()
	{
		this.blur();
		if(activeMap < length - 1 ) buttons[activeMap+1].onclick();
		return false;
	}
	$("zoom_buttons").appendChild(zoomIn);

	var zoomOut = $c("a");
	zoomOut.href = "#";
	zoomOut.className = "zoom out";
	zoomOut.title = "Zoom Out";
	zoomOut.onclick = function()
	{
		this.blur();
		if(activeMap > 0) buttons[activeMap-1].onclick();
		return false;
	}
	$("zoom_buttons").appendChild(zoomOut);

	function replaceMap()
	{
		if(containsClass(this,"active")) return;
		this.blur();

		var property = this.property;
		activeMap = property;

		if(bufferedMaps[property])
		{
			map.src = bufferedMaps[property].src;
			setActive();
			return false;
		}

		removeClass(preloader,"hidden");
		var url = this.href.slice(0,-10) + "&media=dynamic";
		ajaxRequest(url, "GET", null, loadImage );
		return false;

		function loadImage(req)
		{
			var bufferedMap = new Image();
			bufferedMap.src = req.responseText;
			bufferedMaps[property] = bufferedMap;
			addClass(preloader,"hidden");
			map.src = bufferedMap.src;
			setActive();
		}

		function setActive()
		{
			for( var i = 0; i < length; i++ )
			{
				if(i == property) addClass(buttons[i],"active");
				else removeClass(buttons[i],"active");
			}
		}
	}
}

function getScrollY()
{
	return parseInt( window.pageYOffset ? window.pageYOffset :
		 ( document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) );
}

function getScrollX()
{
	return parseInt( window.pageXOffset ? window.pageXOffset :
		 ( document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) );
}

function getAbsOffsetTop(el)
{
	var top = 0;
	while( el != null ) { top += el.offsetTop; el = el.offsetParent; }
	return top;
}

function scrollVt()
{
	var first = true;
	var vt = $("vt_box");
	var vtAbsOffsetTop = getAbsOffsetTop(vt);
	var plan = $("plan");
	var globalTimeout;

	addEvent(window,"scroll",makeJump);

	function makeJump()
	{
		var scroll = getScrollY();
		clearTimeout(globalTimeout);
		if(scroll > vtAbsOffsetTop) globalTimeout = setTimeout(function(){goTo((scroll - vtAbsOffsetTop)+30);},500)
		else globalTimeout = setTimeout(function(){goTo(0);},500)
	}
	
	function goTo(newPos)
	{
		var start = vt.offsetTop - 32;
		var step = 5;
		var speed = 5;
		var dir = newPos > start ? 1 : -1

		var interval = setInterval(
		function()
		{
			if( (start + step > newPos && dir > 0) || (start - step < newPos && dir < 0)  )
			{
				clearInterval(interval);
				start = newPos;
			}
			else
				start = start + (step * dir);
			vt.style.top = start;
		},speed)
	}
}

function updateNavigator()
{
	document.write($("navigator").innerHTML);

	// modify back link
	if(typeof(apt_offset)!="undefined" && apt_offset>0)
	{
		var elements = $("apartment").getElementsByTagName("a");
		for(i=0; i<elements.length; ++i)
		{
			if(elements[i].className=='back_link')
				elements[i].href += "?_offset=" + apt_offset;
		}
	}
}
