/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

var opacityHandler = new function()
{
	this.getOpacityType = function()
	{
		if (typeof(document.body.style.opacity) == 'string')
		{
			instance.opacityType = 'opacity';
		}
		else if (typeof(document.body.style.MozOpacity) == 'string')
		{
			instance.opacityType = 'MozOpacity';
		}
		else if (typeof(document.body.style.KhtmlOpacity) == 'string')
		{
			instance.opacityType = 'KhtmlOpacity';
		}
		else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1] >= 5.5 )
		{
			instance.opacityType =  'filter';
		}
	}
	this.setOpacity = function(element, opacity)
	{
		if (opacity < 0)
		{
			opacity = 0;
		}
		if (this.opacityType == "filter")
		{
			try
			{
				element.filters.item('DXImageTransform.Microsoft.alpha').opacity = opacity*100;
			}
			catch(error)
			{
				element.style.filter += "progid:DXImageTransform.Microsoft.Alpha(style=0, opacity="+ Math.round(opacity*100) +", FinishOpacity="+ Math.round(opacity*100) +")";
			}
		}
		else
		{
			element.style[this.opacityType] = opacity;
		}
	}
	this.getOpacity = function(element)
	{
		if (element.filters)
		{
			try 
			{
				opacity = element.filters.item("DXImageTransform.Microsoft.Alpha").opacity / 100;
			}
			catch(error)
			{
				opacity = 1;
			}
		}
		else if (window.getComputedStyle)
		{
			opacity = document.defaultView.getComputedStyle(element, null).getPropertyValue(this.opacityType);
		}
		return parseFloat(opacity);
	}

	var instance = this;
	this.opacityType = false;
	addHandler(window, "load", this.getOpacityType);
}
/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

function getEventTarget(event) 
{
	var eventElement = null;
	if (event.target)
	{
		eventElement = event.target;
	}
	else if (event.srcElement)
	{
		eventElement = event.srcElement;
	}
	return eventElement;
}
function addHandler(object, event, handler) 
{
	if (object.addEventListener)
	{
		if (event == 'mousewheel') 
		{
			object.addEventListener('DOMMouseScroll', handler, false);
		}
		object.addEventListener(event, handler, false);
	} 
	else if (object.attachEvent) 
	{
		object.attachEvent('on' + event, handler);
	}
}

function removeHandler(object, event, handler) 
{
	if (object.removeEventListener) 
	{
		if (event == 'mousewheel') 
		{
			object.removeEventListener('DOMMouseScroll', handler, false);
		}
		object.removeEventListener(event, handler, false);
	}
	else if (object.detachEvent) 
	{
		object.detachEvent('on' + event, handler);
	}
}
function cancelBubbling(event)
{
	event.cancelBubble = true;
	if (event.stopPropagation) 
	{
		event.stopPropagation();
	}
}

/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

function artWebMouseTracker()
{
	this.init = function()
	{
		addHandler(document, 'mousemove', this.captureMouseCoordinates);
	}
	this.captureMouseCoordinates = function(event)
	{
		var mouseX = 0;
		var mouseY = 0;
		var IE = document.all?true:false;
		if (!IE)
		{
			mouseX = event.pageX;
			mouseY = event.pageY;
		}
		else
		{
			mouseX = window.event.clientX + document.documentElement.scrollLeft;
			mouseY = window.event.clientY + document.documentElement.scrollTop;
		}
		
		if (mouseX < 0)
		{
			mouseX = 0;
		}
		if (mouseY < 0)
		{
			mouseY = 0;
		}
		
		thisObj.mouseX = mouseX;
		thisObj.mouseY = mouseY;
	}
	this.checkMouseOver = function(domElement)
	{
		var currentMouseX = this.mouseX;
		var currentMouseY = this.mouseY;
		
		var elementCoordinates = this.getElementCoordinates(domElement);
		
		var elementX = elementCoordinates[0];
		var elementY = elementCoordinates[1];
		
		var elementWidth = domElement.offsetWidth;
		var elementHeight = domElement.offsetHeight;
		
		var check = false;
		if (currentMouseX > elementX && currentMouseX < elementX + elementWidth)
		{
			if (currentMouseY > elementY && currentMouseY < elementY + elementHeight)
			{
				check = true;
			}
		}
		
		return check;
	}
	this.getDelta = function(event)
	{
		var delta = 0;
		if (event.wheelDelta) 
		{
			delta = event.wheelDelta/120;
		} 
		else if (event.detail) 
		{ 
			delta = -event.detail/3;
		}
		return delta;
	}
	this.getElementCoordinates = function(domElement) 
	{
		var curleft = curtop = 0;
		if (domElement.offsetParent)
		{
			var curleft = domElement.offsetLeft;
			var curtop = domElement.offsetTop;
			while (domElement = domElement.offsetParent) 
			{
				curleft += domElement.offsetLeft - domElement.scrollLeft;
				curtop += domElement.offsetTop - domElement.scrollTop;
			}
		}
		return [curleft,curtop];
	}

	
	var thisObj = this;
	this.mouseX = 0;
	this.mouseY = 0;
	
	this.init();
}

/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

function artWebScrollBar(scrollContent, scrollBar, scrollUp, scrollDown)
{
	this.checkScrollVisibility = function()
	{
		var scrollVisible = false;
		if (this.scrollContent.offsetHeight < this.scrollContent.scrollHeight)
		{
			scrollVisible = true;
		}
		return scrollVisible;
	}
	this.showScrollBar = function()
	{
		this.scrollContent.style.overflow = 'hidden';
		var scrollBar = this.getScrollBar();
		instance.calculateScrollBarSliderTop();
		scrollBar.style.display = 'block';
	}
	this.getScrollBar = function()
	{
		if (!this.scrollBarElement)
		{
			this.scrollBarElement = this.createScrollBar();
			this.calculateScrollBarDimensions();
		}
		return this.scrollBarElement;
	}
	this.getScrollBarDown = function()
	{
		if (!this.scrollBarDownElement)
		{
			this.scrollBarDownElement = this.createScrollBarDown();
		}
		return this.scrollBarDownElement;
	}
	this.getScrollBarUp = function()
	{
		if (!this.scrollBarUpElement)
		{
			this.scrollBarUpElement = this.createScrollBarUp();
		}
		return this.scrollBarUpElement;
	}
	this.getScrollBarTrack = function()
	{
		if (!this.scrollBarTrackElement)
		{
			this.scrollBarTrackElement = this.createScrollBarTrack();
		}
		return this.scrollBarTrackElement;
	}
	this.getScrollBarSlider = function()
	{
		if (!this.scrollBarSliderElement)
		{
			this.scrollBarSliderElement = this.createScrollBarSlider();
		}
		return this.scrollBarSliderElement;
	}
	this.createScrollBar = function()
	{
		var scrollBarElement = document.createElement('div');
		scrollBarElement.className = 'artWebScrollBar';
		
		var scrollUp = this.getScrollBarUp();
		var scrollTrack = this.getScrollBarTrack();
		var scrollDown = this.getScrollBarDown();
		
		scrollBarElement.appendChild(scrollUp);
		scrollBarElement.appendChild(scrollTrack);
		scrollBarElement.appendChild(scrollDown);
		
		this.scrollContent.parentNode.appendChild(scrollBarElement);
		return scrollBarElement;
	}
	this.recalculateScrollBar = function()
	{
		instance.calculateScrollBarDimensions();
		instance.calculateScrollBarSliderTop();
	}
	this.calculateScrollBarSliderTop = function()
	{
		instance.scroll(1, 0);
	}
	this.calculateScrollBarDimensions = function()
	{
		var scrollBarElement = instance.scrollBarElement;
		scrollBarElement.style.left = (instance.scrollContent.offsetLeft + instance.scrollContent.offsetWidth - scrollBarElement.offsetWidth) + 'px';
		scrollBarElement.style.height = instance.scrollContent.offsetHeight + 'px';
		scrollBarElement.style.top = instance.scrollContent.offsetTop + 'px';
	}
	this.createScrollBarUp = function()
	{
		var scrollBarUpElement = document.createElement('div');
		scrollBarUpElement.className = 'artWebScrollBarUp';
		return scrollBarUpElement;
	}
	this.createScrollBarDown = function()
	{
		var scrollBarDownElement = document.createElement('div');
		scrollBarDownElement.className = 'artWebScrollBarDown';
		return scrollBarDownElement;
	}
	this.createScrollBarTrack = function()
	{
		var scrollBarTrackElement = document.createElement('div');
		scrollBarTrackElement.className = 'artWebScrollBarTrack';
		
		var scrollBarSliderElement = this.getScrollBarSlider();
		scrollBarTrackElement.appendChild(scrollBarSliderElement);
		
		return scrollBarTrackElement;
	}
	this.createScrollBarSlider = function()
	{
		var scrollBarSliderElement = document.createElement('div');
		scrollBarSliderElement.className = 'artWebScrollBarSlider';
		
		return scrollBarSliderElement;
	}
	this.init = function()
	{
		if (!window.mouseTracker)
		{
			window.mouseTracker = new artWebMouseTracker();
		}

		if (this.checkScrollVisibility())
		{
			this.showScrollBar();
			addHandler(document, 'mousedown', this.checkScrollBarDrag);
			addHandler(document, 'mousewheel', this.catchMouseWheel);
			addHandler(window, 'resize', this.recalculateScrollBar);
		}
	}
	
	this.catchMouseWheel = function(event)
	{
		if (window.mouseTracker.checkMouseOver(instance.scrollContent))
		{
			var delta = window.mouseTracker.getDelta(event);
			if (delta > 0)
			{
				instance.scrollPage(-1, delta/20);
			}
			else if (delta < 0)
			{
				instance.scrollPage(1, delta/-20);
			}
		}
	}
	this.checkScrollBarDrag = function()
	{
		if (window.mouseTracker.checkMouseOver(instance.getScrollBarSlider()))
		{
			instance.startDrag();
		}
		else if (window.mouseTracker.checkMouseOver(instance.getScrollBarTrack()))
		{
			instance.trackClick();
		}
		else if (window.mouseTracker.checkMouseOver(instance.getScrollBarUp()))
		{
			instance.scrollLine(-1);
		}
		else if (window.mouseTracker.checkMouseOver(instance.getScrollBarDown()))
		{
			instance.scrollLine(1);
		}
	}
	this.trackClick = function()
	{
		var sliderTop = this.scrollBarSliderElement.offsetTop;
		var clickY = window.mouseTracker.mouseY;
		var trackerY = window.mouseTracker.getElementCoordinates(this.scrollBarTrackElement)[1];
		var clickTop = clickY - trackerY;
		
		var direction = 1;
		if (clickTop <= sliderTop)
		{
			direction = -1;
		}
		this.scrollPage(direction);
	}
	this.scrollPage = function(direction)
	{
		this.scroll(direction, 1);
	}
	this.scroll = function(direction, percentage)
	{
		var sliderHeight = this.scrollBarSliderElement.offsetHeight;
		var trackHeight = this.scrollBarTrackElement.offsetHeight;
		var scrollHeight = this.scrollContent.scrollHeight;
		var scrollTop = this.scrollContent.scrollTop;
		var viewHeight = this.scrollContent.offsetHeight;
		var newY = (scrollTop + viewHeight*direction*percentage)/(scrollHeight - viewHeight)*(trackHeight - sliderHeight);
		
		newY = this.validateNewY(newY);
		
		this.scrollBarSliderElement.style.top = newY + 'px';
		this.synchronizeScrolls();
	}
	this.scrollLine = function(direction)
	{
		this.scrollPage(direction, 0.2);
	}
	this.startDrag = function()
	{
		this.disableDocumentSelection();
		
		this.sliderStartY = this.scrollBarSliderElement.offsetTop;
		this.mouseStartY = window.mouseTracker.mouseY;
		addHandler(document, 'mouseup', this.endDrag);
		addHandler(document, 'mousemove', this.dragSlider);
	}
	this.disableDocumentSelection = function()
	{
		addHandler(document.documentElement, 'selectstart', this.selectionDisableHelper);
		document.documentElement.style.userSelect = 'none';
		document.documentElement.style.MozUserSelect = 'none';
	}
	this.enableDocumentSelection = function()
	{
		removeHandler(document.documentElement, 'selectstart', this.selectionDisableHelper);
		document.documentElement.style.userSelect = 'text';
		document.documentElement.style.MozUserSelect = 'text';
	}
	this.selectionDisableHelper = function()
	{
		return false;
	}
	this.dragSlider = function()
	{
		var mouseCurrentY = window.mouseTracker.mouseY;
		var newY = (instance.sliderStartY + mouseCurrentY - instance.mouseStartY);
		newY = instance.validateNewY(newY);
		instance.scrollBarSliderElement.style.top = newY + 'px';
		instance.synchronizeScrolls();
	}
	this.validateNewY = function(newY)
	{
		if (newY < 0) 
		{
			newY = 0;
		}
		else if (newY > this.scrollBarTrackElement.offsetHeight - this.scrollBarSliderElement.offsetHeight)
		{
			newY = this.scrollBarTrackElement.offsetHeight - this.scrollBarSliderElement.offsetHeight;
		}
		return newY;
	}
	this.endDrag = function()
	{
		removeHandler(document, 'mousemove', instance.dragSlider);
		instance.enableDocumentSelection();
	}
	this.synchronizeScrolls = function()
	{
		var sliderTop = this.scrollBarSliderElement.offsetTop;
		var sliderHeight = this.scrollBarSliderElement.offsetHeight;
		var trackHeight = this.scrollBarTrackElement.offsetHeight;
		var scrollHeight = this.scrollContent.scrollHeight;
		var viewHeight = this.scrollContent.offsetHeight;
		
		var newScrollPosition = 0;
		
		newScrollPosition = (sliderTop/(trackHeight - sliderHeight)) * (scrollHeight - viewHeight);
		this.scrollContent.scrollTop = newScrollPosition;
		
	}
	var instance = this;
	this.scrollContent = scrollContent;
	this.scrollBarElement = false;
	this.scrollBarDownElement = false;
	this.scrollBarUpElement = false;
	this.scrollBarTrackElement = false;
	this.scrollBarSliderElement = false;
	this.sliderStartY = 0;
	this.init();
}
function attachArtWebScrollBar(element)
{
	element.scrollBar = new artWebScrollBar(element);
}

/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/
var artWebDarkLayer = new function()
{
	this.showLayer = function(onclickFunction, callback)
	{
		opacityHandler.setOpacity(this.domElement, 0);
		this.domElement.style.display = 'block';
		
		var parameters = {end:this.fullOpacity, step:this.step};
		
		if (callback)
		{
			artWebEffectsManager.startEffect('opacity', this.domElement, parameters, callback);
		}
		else
		{
			artWebEffectsManager.startEffect('opacity', this.domElement, parameters);
		}
		
		if (!onclickFunction)
		{
			var onclickFunction = this.hideLayer;
		}
		addHandler(this.domElement, "click", onclickFunction);
	}
	this.hideLayer = function()
	{
		var parameters = {end:0, step: instance.step};
		var callback = instance.hideLayerStyle;
		artWebEffectsManager.startEffect('opacity', instance.domElement, parameters, callback);
	}
	this.hideLayerStyle = function()
	{
		instance.domElement.style.display = 'none';
	}
	this.init = function()
	{
		if (instance.domElement == null)
		{
			var viewPortWidth = document.documentElement.scrollWidth;
			var viewPortHeight = document.documentElement.scrollHeight;
			var domElement = document.createElement('div');
			domElement.style.backgroundColor = instance.backgroundColor;
			domElement.style.position = 'absolute';
			domElement.style.top = '0';
			domElement.style.left = '0';
			domElement.style.width = viewPortWidth + 'px';
			domElement.style.height = viewPortHeight + 'px';
			domElement.style.zIndex = '999';
			domElement.style.display = 'none';
			instance.domElement = domElement;
			document.body.appendChild(domElement);
		}
	}
	
	var instance = this;
	this.domElement = null;
	this.fullOpacity = 0.9;
	this.step = 0.1;
	this.backgroundColor = '#000000';
	addHandler(window, "load", this.init);
}

/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

function artWebGallery(imagesUrlList)
{
	this.registerImagesUrls = function()
	{
		for (var index in instance.incomingImageUrls)
		{
			if (document.getElementById(index))
			{
				imageElement = document.getElementById(index);
				addHandler(imageElement, "click", instance.showClickedImage);
				instance.imagesUrlList[index] = instance.incomingImageUrls[index];
			}
		}
		instance.createLeftSide();
		instance.createRightSide();
		instance.createPreviousButton();
		instance.createNextButton();
		instance.createCloseButton();
	}
	this.createLeftSide = function()
	{
		var leftSide = document.createElement('div');
		leftSide.className = 'artWebGalleryLeftSide';
		addHandler(leftSide, "click", this.showPreviousImage);
		addHandler(leftSide, "mouseover", this.showPreviousButton);
		addHandler(leftSide, "mouseout", this.hidePreviousButton);
		document.body.appendChild(leftSide);
		this.leftSide = leftSide;
	}
	this.createPreviousButton = function()
	{
		var previousButton = document.createElement('div');
		previousButton.className = 'artWebGalleryPrevious';
		this.leftSide.appendChild(previousButton);
		this.previousButtonElement = previousButton;
	}
	this.createRightSide = function()
	{
		var rightSide = document.createElement('div');
		rightSide.className = 'artWebGalleryRightSide';
		addHandler(rightSide, "click", this.showNextImage);
		addHandler(rightSide, "mouseover", this.showNextButton);
		addHandler(rightSide, "mouseout", this.hideNextButton);
		document.body.appendChild(rightSide);
		this.rightSide = rightSide;
	}
	this.createNextButton = function()
	{	
		var nextButton = document.createElement('div');
		nextButton.className = 'artWebGalleryNext';
		this.rightSide.appendChild(nextButton);
		this.nextButtonElement = nextButton;
	}
	this.createCloseButton = function()
	{	
		var closeButton = document.createElement('div');
		closeButton.className = 'artWebGalleryClose';
		addHandler(closeButton, "click", this.hideGallery);
		document.body.appendChild(closeButton);
		this.closeButtonElement = closeButton;
	}
	this.showClickedImage = function(event)
	{
		var clickedImage = getEventTarget(event);
		instance.currentImageId = clickedImage.id;
		instance.showGallery();
	}
	this.showGallery = function(event)
	{
		instance.status = 'visible';
		artWebDarkLayer.showLayer(instance.hideGallery, instance.checkCurrentImage);
		instance.closeButtonElement.style.display = 'block';
	}
	this.showNextImage = function(event)
	{
		cancelBubbling(event);
		instance.hideCurrentImage();
		
		instance.currentImageId = instance.nextImageId;
		instance.checkCurrentImage();
	}
	this.showPreviousImage = function(event)
	{
		cancelBubbling(event);
		instance.hideCurrentImage();
		
		instance.currentImageId = instance.previousImageId;
		instance.checkCurrentImage();
	}
	this.checkCurrentImage = function()
	{
		var currentImageId = instance.currentImageId;
		if (!instance.imagesElementsList[currentImageId])
		{
			document.documentElement.style.cursor = 'wait';
			var fullImageUrl = instance.imagesUrlList[currentImageId];
			var newImage = document.createElement('img');
			newImage.src = fullImageUrl;
			newImage.style.position = 'absolute';
			newImage.style.zIndex = '1000';
			opacityHandler.setOpacity(newImage, 0);
			document.body.appendChild(newImage);

			instance.imagesElementsList[currentImageId] = newImage;
		}
		else
		{
			opacityHandler.setOpacity(instance.imagesElementsList[currentImageId], 0);
			instance.imagesElementsList[currentImageId].style.display = 'block';
		}
		
		if (!instance.imagesElementsList[currentImageId].complete)
		{
			instance.preloadTimeoutID = setTimeout(function(){instance.checkCurrentImage()}, 100);
		}
		else
		{
			document.documentElement.style.cursor = 'auto';
			instance.renderCurrentImage();
		}
	}
	this.renderCurrentImage = function()
	{
		var imageElement = this.imagesElementsList[this.currentImageId];
		
		var imageWidth = imageElement.offsetWidth;
		var imageHeight = imageElement.offsetHeight;
		var aspectRatio = imageWidth/imageHeight;
		
		if (window.pageYOffset)
		{
			var viewPortLeft = window.pageXOffset;
			var viewPortTop = window.pageYOffset;
		}
		else
		{
			var viewPortLeft = document.documentElement.scrollLeft;
			var viewPortTop = document.documentElement.scrollTop;
		}
		
		var viewPortWidth = document.documentElement.offsetWidth;
		var viewPortHeight = document.documentElement.offsetHeight;
		
		var resizedWidth = imageWidth;
		var resizedHeight = imageHeight;
		if (resizedWidth > viewPortWidth * this.imageProportion)
		{
			resizedWidth = viewPortWidth * this.imageProportion;
			resizedHeight = resizedWidth/aspectRatio;
		}
		if (resizedHeight > viewPortHeight * this.imageProportion)
		{
			resizedHeight = viewPortHeight * this.imageProportion;
			resizedWidth = resizedHeight*aspectRatio;
		}
		var positionLeft = viewPortLeft + (viewPortWidth - resizedWidth) / 2;
		var positionTop = viewPortTop + (viewPortHeight - resizedHeight) / 2;
		
		imageElement.style.width = resizedWidth + 'px';
		imageElement.style.height = resizedHeight + 'px';
		imageElement.style.top = positionTop + 'px';
		imageElement.style.left = positionLeft + 'px';
		imageElement.style.opacity = '0';
		
		this.checkButtons();
		
		var parameters = {end:1, step: instance.opacityStep};
		artWebEffectsManager.startEffect('opacity', imageElement, parameters);
	}
	this.checkButtons = function()
	{
		var previousElement = null;
		var nextElement = null;
		var currentElement = null;
		var currentImageId = this.currentImageId;
		
		for (var index in this.imagesUrlList)
		{
			if (currentImageId == index)
			{
				currentElement = index;
			}
			else if(nextElement == null && currentElement != null)
			{
				nextElement = index;
			}
			
			if (currentElement == null)
			{
				previousElement = index;
			}
		}
		var imageElement = this.imagesElementsList[currentImageId];
		var imageElementLeft = imageElement.offsetLeft;
		var imageElementTop = imageElement.offsetTop;
		var imageElementWidth = imageElement.offsetWidth;
		var imageElementHeight = imageElement.offsetHeight;
		
		var leftSide = this.leftSide;
		var rightSide = this.rightSide;
		var previousButtonElement = this.previousButtonElement;
		var nextButtonElement = this.nextButtonElement;
		var closeButtonElement = this.closeButtonElement;
		
		if (previousElement != null)
		{
			this.previousImageId = previousElement;
			
			leftSide.style.left = imageElementLeft + 'px';
			leftSide.style.top = imageElementTop + 'px';
			leftSide.style.width = (imageElementWidth/2) + 'px';
			leftSide.style.height = imageElementHeight + 'px';
			leftSide.style.display = 'block';
			
			previousButtonElement.style.top = ((leftSide.offsetHeight - previousButtonElement.offsetHeight)/2) + 'px';
		}
		else
		{
			leftSide.style.display = 'none';
		}

		if (nextElement != null)
		{
			this.nextImageId = nextElement;
			
			rightSide.style.left = (imageElementLeft + imageElementWidth/2) + 'px';
			rightSide.style.top = imageElementTop + 'px';
			rightSide.style.width = (imageElementWidth/2) + 'px';
			rightSide.style.height = imageElementHeight + 'px';
			rightSide.style.display = 'block';
			nextButtonElement.style.top = ((rightSide.offsetHeight - nextButtonElement.offsetHeight)/2) + 'px';
		}
		else
		{
			rightSide.style.display = 'none';
		}
		
		closeButtonElement.style.top = (imageElementTop - 17) + 'px';
		closeButtonElement.style.left = (imageElementLeft + imageElementWidth - closeButtonElement.offsetWidth + 16) + 'px';
	}
	this.showPreviousButton = function()
	{
		instance.previousButtonElement.style.visibility = 'visible';
	}
	this.hidePreviousButton = function()
	{
		instance.previousButtonElement.style.visibility = 'hidden';
	}
	this.showNextButton = function()
	{
		instance.nextButtonElement.style.visibility = 'visible';
	}
	this.hideNextButton = function()
	{
		instance.nextButtonElement.style.visibility = 'hidden';
	}
	this.hideGallery = function()
	{
		instance.status = 'hidden';
		
		instance.hideCurrentImage();
		
		instance.leftSide.style.display = 'none';
		instance.rightSide.style.display = 'none';
		instance.closeButtonElement.style.display = 'none';
	}
	this.hideCurrentImage = function()
	{
		var imageElement = instance.imagesElementsList[instance.currentImageId];
		var parameters = {end:0, step: instance.opacityStep};
		artWebEffectsManager.startEffect('opacity', imageElement, parameters, function(){instance.afterFadeOut(imageElement)});
	}
	this.afterFadeOut = function(imageElement)
	{
		imageElement.style.display = 'none';
		if (instance.status == 'hidden')
		{
			artWebDarkLayer.hideLayer();
		}
	}
	var instance = this;
	this.incomingImageUrls = new Array();
	this.imagesUrlList = new Array();
	this.imagesElementsList = new Array();
	this.currentImageId = null;
	this.preloadTimeoutID = null;
	this.imageProportion = 0.8;
	this.opacityStep = 0.07;
	this.previousButtonElement = null;
	this.nextButtonElement = null;
	this.nextImageId = null;
	this.previousImageId = null;
	this.status = 'hidden';
	
	if (imagesUrlList)
	{
		this.incomingImageUrls = imagesUrlList;
		addHandler(window, "load", this.registerImagesUrls);
	}
}

/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

var artWebEffectsManager = new function()
{
	this.startEffect = function(effectName, element, parameters, callback)
	{
		var effectObject = null;
		if (effectObject = this.getEffectObject(effectName))
		{
			effectObject.element = element;
			this.registerEffectOnElement(effectName, element);
			this.clearTimeOuts(element.artWebEffects[effectName]);
			
			this.setEffectParameters(effectObject, parameters);
			this.assignTimeouts(effectObject, callback);
		}
	}
	this.assignTimeouts = function(effectObject, callback)
	{
		var framesCount = effectObject.calculateFramesCount();
		var timeOutDelay = this.timeOutDelay;
		var timeoutsArray = new Array();
		for (frame = 0; frame < framesCount; frame++)
		{
			var currentDelay = frame * timeOutDelay;
			
			timeoutsArray[frame] = setTimeout(
			function(effectObject, frame)
			{
				return function(){effectObject.renderFrame(frame);};
			}(effectObject, frame), currentDelay);
		}
		
		if (callback)
		{
			callBackDelay = framesCount * timeOutDelay;
			timeoutsArray[framesCount] = setTimeout(callback, callBackDelay);
		}
		
		effectObject.element.artWebEffects[effectObject.effectName] = timeoutsArray;
	}
	this.setEffectParameters = function(effectObject, parameters)
	{
		effectObject.parameters = new Array();
		if (effectObject.defaults)
		{
			effectObject.parameters = effectObject.defaults;
		}
		for (var index in parameters)
		{
			effectObject.parameters[index] = parameters[index];
		}
	}
	this.registerEffectOnElement = function(effectName, element)
	{
		if (!element.artWebEffects)
		{
			element.artWebEffects = new Array();
		}
		
		if (!element.artWebEffects[effectName])
		{
			element.artWebEffects[effectName] = new Array();
		}
	}
	this.clearTimeOuts = function(timeOutsList)
	{
		for (var index in timeOutsList)
		{
			clearTimeout(timeOutsList[index]);
		}
	}
	this.getEffectObject = function(effectName)
	{
		var newEffect = false;
		try
		{
			newEffect = eval('new artWebEffect_'+effectName);
			newEffect.effectName = effectName;
		}
		catch(error)
		{
			//~ alert('Effect load error');
		}
		return newEffect;
	}

	this.timeOutDelay = 20;
}

/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

function artWebEffect_opacity()
{
	this.renderFrame = function(frame)
	{
		var direction = 1;
		var startOpacity = this.startOpacity;
		var endOpacity = this.parameters.end;
		var opacityStep = this.parameters.step;
		if (startOpacity > endOpacity)
		{
			direction = -1;
		}
		var currentOpacity = (startOpacity + opacityStep * frame * direction);
		opacityHandler.setOpacity(this.element, currentOpacity);
	}
	this.calculateFramesCount = function()
	{
		var direction = 1;
		var startOpacity = opacityHandler.getOpacity(this.element);
		this.startOpacity = startOpacity;
		var endOpacity = this.parameters.end;
		var opacityStep = this.parameters.step;
		var framesCount = 0;
		
		if (startOpacity > endOpacity)
		{
			direction = -1;
		}
		var opacityChange = (endOpacity - startOpacity)*direction;
		
		framesCount = Math.ceil(opacityChange / opacityStep) + 1;
		return framesCount;
	}
	
	var instance = this;
	this.opacityType = false;
	this.defaults = {end: 0, step: 0.01};
}

function resizeLine()
{
	lineObject = document.getElementById('left_vertical');
	bodyObject = document.getElementById('body');
	lineCoordinates = findPos(lineObject);
	newHeight = bodyObject.offsetHeight - lineCoordinates[1];
	lineObject.style.height = newHeight+'px';
}
function doOnload()
{
	resizeLine();
	cockroach_startMove();
}
function findPos(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		//~ alert(obj.tagName+'#'+obj.id+' left:'+obj.offsetLeft+' sum:'+curleft);
		while (obj = obj.offsetParent) 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			//~ alert(obj.tagName+'#'+obj.id+' left:'+obj.offsetLeft+' sum:'+curleft);
		}
	}
	return [curleft,curtop];
}
function showForm(id)
{	
	var objParentID = document.getElementById('parentID');
	var objFormBlock = document.getElementById('commentsFormBlock');
	var objCommentBlock = document.getElementById(id);
	
	if (objFormBlock && objParentID)
	{
		if (objFormBlock.style.display == "block")
		{
		}
		else
		{
			objFormBlock.style.display = "block";
		}
		
		objFormBlock.style.top = objCommentBlock.offsetTop + objCommentBlock.offsetHeight + 'px';
		
		objFormBlock.style.opacity = "0";
		opacity('commentsFormBlock',0,100,200);
		
		objParentID.value = id;
	}
}


function opacity(id, opacStart, opacEnd, millisec) 
{
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) 
{
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}


function submitForm()
{
	var nameObj = document.getElementById('name');
	var textObj = document.getElementById('text');
	var parentIDObj = document.getElementById('parentID');
	
	nameObj.name = 'comment_name';
	textObj.name = 'comment_text';
	parentIDObj.name = 'comment_parentID';
	
	document.commentsForm.submit();
}

var cockroachSpeed = 9; //pixels
var cockroachTimer = 45; //seconds
var cockroachFrames = 0;
var cockroachState = 1;
var cockroachMoving = 0;
var cockroachX = 0;
var cockroachY = 0;

function cockroach_startMove()
{
	setTimeout("cockroach_startMove()", 1000);
	if (cockroachMoving != 1)
	{
		chance = Math.floor(Math.random()*30);
		//~ document.getElementById('debug').innerHTML = chance;
		if (chance == 10)
		{
			//~ alert('qwe');
			direction = Math.floor(Math.random()*4);
			if (document.getElementById('cockroach'))
			{
				cockroachObject = document.getElementById('cockroach');
				
				bodyWidth = document.getElementById('body').offsetWidth;
				bodyHeight = document.getElementById('body').offsetHeight;
				//to bottom
				if (direction==0)
				{
					cockroachWidth = 60;
					cockroachHeight = 89;
					cockroachObject.style.width = cockroachWidth + 'px';
					cockroachObject.style.height = cockroachHeight + 'px';
					
					cockroachX = Math.floor(Math.random()*bodyWidth);
					cockroachY = 0 - cockroachHeight;
					
					cockroachObject.style.left = cockroachX + 'px';
					cockroachObject.style.top = cockroachY + 'px';
					
					cockroachMoving = 1;
					cockroachObject.style.display = 'block';
					setTimeout("cockroach_moveToBottom()", cockroachTimer);
				}
				//to left
				if (direction==1)
				{
					cockroachWidth = 89;
					cockroachHeight = 60;
					cockroachObject.style.width = cockroachWidth + 'px';
					cockroachObject.style.height = cockroachHeight + 'px';
					
					cockroachX = bodyWidth;
					cockroachY = Math.floor(Math.random()*bodyHeight);
					
					cockroachObject.style.left = cockroachX + 'px';
					cockroachObject.style.top = cockroachY + 'px';
					
					cockroachMoving = 1;
					cockroachObject.style.display = 'block';
					setTimeout("cockroach_moveToLeft()", cockroachTimer);
				}
				//to top
				if (direction==2)
				{
					cockroachWidth = 60;
					cockroachHeight = 89;
					cockroachObject.style.width = cockroachWidth + 'px';
					cockroachObject.style.height = cockroachHeight + 'px';
					
					cockroachX = Math.floor(Math.random()*bodyWidth);
					//~ cockroachY = 0 - cockroachHeight;
					cockroachY = bodyHeight;
					
					cockroachObject.style.left = cockroachX + 'px';
					cockroachObject.style.top = cockroachY + 'px';
					
					cockroachMoving = 1;
					cockroachObject.style.display = 'block';
					setTimeout("cockroach_moveToTop()", cockroachTimer);
				}
				//to right
				if (direction==3)
				{
					cockroachWidth = 89;
					cockroachHeight = 60;
					cockroachObject.style.width = cockroachWidth + 'px';
					cockroachObject.style.height = cockroachHeight + 'px';
					
					cockroachX = 0 - cockroachWidth;
					cockroachY = Math.floor(Math.random()*bodyHeight);
					
					cockroachObject.style.left = cockroachX + 'px';
					cockroachObject.style.top = cockroachY + 'px';
					
					cockroachMoving = 1;
					cockroachObject.style.display = 'block';
					setTimeout("cockroach_moveToRight()", cockroachTimer);
				}
			}
		}
	}
}

function cockroach_moveToLeft()
{
	cockroachX = cockroachObject.offsetLeft;
	if (cockroachX > (cockroachWidth * (-1)))
	{
		if (cockroachState == 1)
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachleft1.png')";
			cockroachState = 2;
		}
		else
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachleft2.png')";
			cockroachState = 1;
		}
		
		cockroachObject.style.left = (cockroachX - cockroachSpeed) + 'px';
		setTimeout("cockroach_moveToLeft()", cockroachTimer);
	}
	else
	{
		cockroachMoving = 0;
		cockroachObject.style.display = 'none';
	}
}

function cockroach_moveToBottom()
{
	cockroachY = cockroachObject.offsetTop;
	if (cockroachY < bodyHeight)
	{
		if (cockroachState == 1)
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachbottom1.png')";
			cockroachState = 2;
		}
		else
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachbottom2.png')";
			cockroachState = 1;
		}
		
		cockroachObject.style.top = (cockroachY + cockroachSpeed) + 'px';
		setTimeout("cockroach_moveToBottom()", cockroachTimer);
	}
	else
	{
		cockroachMoving = 0;
		cockroachObject.style.display = 'none';
	}
}
function cockroach_moveToTop()
{
	cockroachY = cockroachObject.offsetTop;
	if (cockroachY > 0 - cockroachHeight)
	{
		if (cockroachState == 1)
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachtop1.png')";
			cockroachState = 2;
		}
		else
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachtop2.png')";
			cockroachState = 1;
		}
		
		cockroachObject.style.top = (cockroachY - cockroachSpeed) + 'px';
		setTimeout("cockroach_moveToTop()", cockroachTimer);
	}
	else
	{
		cockroachMoving = 0;
		cockroachObject.style.display = 'none';
	}
}
function cockroach_moveToRight()
{
	cockroachX = cockroachObject.offsetLeft;
	if (cockroachX < bodyWidth)
	{
		if (cockroachState == 1)
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachright1.png')";
			cockroachState = 2;
		}
		else
		{
			cockroachObject.style.backgroundImage = "url('images/cockroachright2.png')";
			cockroachState = 1;
		}
		
		cockroachObject.style.left = (cockroachX + cockroachSpeed) + 'px';
		setTimeout("cockroach_moveToRight()", cockroachTimer);
	}
	else
	{
		cockroachMoving = 0;
		cockroachObject.style.display = 'none';
	}
}
function trackClick(productName, productCategory)
{
	if (pageTracker)
	{
		pageTracker._trackEvent('Banner', 'Click', productName+productCategory);
	}
}