/*
 * slidebar.js
 * 
 * @author: Alexander Myadzel <aem@teletype.ru>
 * @modified: 13/04/2009 13:10
 *
 */

var Slidebar = {

	oContainer: {},
	aImages: [],
	
	iCurrent: 1,
	iCurrentImageWidth: 0,
	
	bSlideOff: false,
	
	iPartWidth: 0,
	iSlidebarWidth: 0,
	iDocumentWidth: 0,
	
	iMsTimeout: 10,
	
	iStep: 20,
	iStartDelta: 0.22,
	iDeltaMultiplier: 1.5,
	
	oZMask: null,
	oSWFPleer: null,
	oSWFPleerBox: null,
	oSWFPleerCloser: null,
	oSWFPlaceholder: null,

	init: function(oContainer)
	{
		Slidebar.oContainer = oContainer;
		Slidebar.aImages = oContainer.getElementsByTagName('DIV');
		Slidebar.iSlidebarWidth = Slidebar.getSlidebarWidth();
		
		Slidebar.oZMask = $$('z-mask');
		Slidebar.oSWFPleer = $$('swf-pleer');
		Slidebar.oSWFPleerBox = $$('swf-pleer-box');
		Slidebar.oSWFPleerCloser = $$('swf-pleer-closer');
		Slidebar.oSWFPlaceholder = $$('swf-placeholder');
		
		addEvent(Slidebar.oSWFPleerCloser, 'click', Slidebar.closeSWFPleer);
		addEvent(document, 'keydown', Slidebar.listenEscape);
		
		Slidebar.trackSizes();
	},
		
	getSlidebarWidth: function()
	{
		var iSlidebarWidth = 0;
		for (var i = 0, l = Slidebar.aImages.length; i < l; i++) {
			iSlidebarWidth += Slidebar.aImages[i].clientWidth;
		}
		return iSlidebarWidth;
	},

	setOnOff: function()
	{
		Slidebar.bSlideOff = Slidebar.iSlidebarWidth <= Slidebar.iDocumentWidth ? true: false;
	},
	
	listenEscape: function(oEvent)
	{
		var oEvent = getEvent(oEvent);
		var iKeyCode = getEventKeyCode(oEvent);
		if (iKeyCode == 27) {
			stopEvent(oEvent); 
			Slidebar.closeSWFPleer();
		}
	},
	
	showSWFPleer: function(oEvent)
	{
		var oEvent = getEvent(oEvent);
		var oEventElement = getEventElement(oEvent);
		
		var iPosSWFToShow = oEventElement.parentNode.id.replace(/[^\d]+/g, '');

		if ($$('movie-' + iPosSWFToShow) && iPosSWFToShow == Slidebar.iCurrent) {
			
			Slidebar.oSWFPleerBox.style.width = oEventElement.id.replace(/[^\d]+/g, '') + 'px';
			
			Slidebar.oZMask.className = 'block';
			Slidebar.oSWFPleer.className = 'block';
			
			var oMovie = $$('movie-' + iPosSWFToShow);
			var sMovieHTML = oMovie.innerHTML;
			
			Slidebar.oSWFPlaceholder.innerHTML = sMovieHTML;
		}
	},
	
	closeSWFPleer: function(oEvent)
	{
		try	{
			var oEvent = getEvent(oEvent);
			stopEvent(oEvent);
		} catch (oException) {}
		
		Slidebar.oSWFPlaceholder.innerHTML = '';
		Slidebar.oZMask.className = 'none';
		Slidebar.oSWFPleer.className = 'none';
	},

	trackSizes: function()
	{
		Slidebar.iDocumentWidth = getDocumentWidth();
		Slidebar.setOnOff();
		
		Slidebar.iCurrentImageWidth = Slidebar.aImages[(Slidebar.iCurrent - 1)].offsetWidth;
		
		if (!Slidebar.bSlideOff) {
			Slidebar.iPartWidth = Math.ceil((Slidebar.iDocumentWidth - Slidebar.iCurrentImageWidth) / (Slidebar.aImages.length - 1));
		} else {
			Slidebar.iPartWidth = Slidebar.iCurrentImageWidth;
		}
	},
		
	redraw: function(oEvent)
	{
		var oEvent = getEvent(oEvent);
		var oEventElement = getEventElement(oEvent);
		
		if (oEventElement.tagName != 'DIV') {
			oEventElement = oEventElement.parentNode;
		}

		removeEvent($$('slide-' + Slidebar.iCurrent), 'click', Slidebar.redraw);

		Slidebar.iCurrent = oEventElement.id.replace(/[^\d]+/g, '');
		addEvent($$('slide-' + Slidebar.iCurrent), 'click', Slidebar.redraw);

		Slidebar.draw();
	},
		
	trackAndDraw: function()
	{
		Slidebar.trackSizes();
		Slidebar.draw();
	}, 
		
	slide: function(oImage, iFrom, iTo, bLeft, iDelta)
	{
		var iFrom = iFrom > 0 ? parseFloat(iFrom) : 0;
		var iTo = iTo > 0 ? parseFloat(iTo) : 0;
		
		var iStep =  iDelta * Slidebar.iStep;
		var iDelta = iDelta * Slidebar.iDeltaMultiplier;

		if (!bLeft) {
			if (iFrom + iStep < iTo) {
				var iFrom = iFrom + iStep;
				oImage.style.marginLeft = iFrom  + 'px';
				setTimeout(function() {Slidebar.slide.call(this, oImage, iFrom, iTo, bLeft, iDelta);}, Slidebar.iMsTimeout);
			} else {
				oImage.style.marginLeft = iTo + 'px';
			}
		} else {
			if (iTo < iFrom - iStep) {
				var iFrom = iFrom - iStep;
				oImage.style.marginLeft = iFrom + 'px';
				setTimeout(function() {Slidebar.slide.call(this, oImage, iFrom, iTo, bLeft, iDelta);}, Slidebar.iMsTimeout);
			} else {
				oImage.style.marginLeft = iTo + 'px';
			}
		}
	},
		
	slideImage: function(oImage, iFrom, iTo)
	{
		var bLeft = iFrom > iTo ? true : false;
		setTimeout(function() {Slidebar.slide.call(this, oImage, iFrom, iTo, bLeft, Slidebar.iStartDelta);}, Slidebar.iMsTimeout);
	},
		
	overOut: function(oEvent)
	{
		var oEvent = getEvent(oEvent);
		var oEventElement = getEventElement(oEvent);
		
		if (oEventElement.tagName != 'DIV') {
			oEventElement = oEventElement.parentNode;
		}
		
		var sTest = oEventElement.className;
		
		if (/enabled/.test(sTest) && oEvent.type == 'mouseover') {
			oEventElement.className = sTest.replace(/hover/ig, '') + ' hover';
		}
		
		if (/enabled/.test(sTest) && oEvent.type == 'mouseout') {
			oEventElement.className = sTest.replace(/hover/ig, '');
		}
		
	},
		
	draw: function()
	{
		var bSetIndexes = !arguments.callee.done ? true : false;
		var iLeftPosition = 0;
		
		for (var i = 0, l = Slidebar.aImages.length; i < l; i++) {
			var oTempImage = Slidebar.aImages[i];

			if (bSetIndexes) {
				oTempImage.setAttribute('id', 'slide-' + (i + 1));
			}
			
			addEvent(oTempImage, 'mouseover', Slidebar.overOut);
			addEvent(oTempImage, 'mouseout', Slidebar.overOut);

			var iFrom = oTempImage.style.marginLeft.replace(/[^\d]+/g, '');
			var iTo = iLeftPosition;
			
			var oINSClicker = oTempImage.getElementsByTagName('INS')[0];
			if (oINSClicker) {
				addEvent(oINSClicker, 'click', Slidebar.showSWFPleer);
			}
			
			Slidebar.slideImage(oTempImage, iFrom, iTo);

			if (Slidebar.bSlideOff) {
				oTempImage.className = 'disabled';
				removeEvent(oTempImage, 'click', Slidebar.redraw);	
				iLeftPosition += Slidebar.iCurrentImageWidth;
			} else if (Slidebar.iCurrent != (i + 1)) {
				if (!Slidebar.bSlideOff) {
					oTempImage.className = 'enabled';
					addEvent(oTempImage, 'click', Slidebar.redraw);
				}
				iLeftPosition += Slidebar.iPartWidth;
			} else {
				oTempImage.className = 'disabled';
				removeEvent(oTempImage, 'click', Slidebar.redraw);
				iLeftPosition += Slidebar.iCurrentImageWidth;
			}
		}

		arguments.callee.done = 1;
	}
};
