// ************************************************************************ 
// Slide
// a class for slide show navigation
// ************************************************************************

function Slide(nSlideWidth, nSlideHeight, sInstanceName, sNavImagePath, aOptions){
	/*
	aOptions[0] = stretch images to fit window (true/false)
	aOptions[1] = pin bottom navigation (true/false)
	*/
	this.constructor.nObjectCount++;
	this.constructor.aInstances.push(sInstanceName);
	// ************************************************************************ 
	// PRIVATE VARIABLES AND FUNCTIONS 
	// ONLY PRIVELEGED METHODS MAY VIEW/EDIT/INVOKE 
	// ************************************************************************
	var nSlideNavHeight = 40;
	var nSlideNavIntervalMove = -1;
	var bSlideNavUp = false;
	var nSlideNavIntervalFrequency = 30;
	var nSlideNavPixelInc = 6;
	var nSlideNavCurrentPos = nSlideHeight;
	var nSlideNavOffset = nSlideHeight - nSlideNavHeight;
	
	var bSlideLeft = false;
	var nSlideIntervalMove = -1;
	var nSlideIntervalFrequency = 30;
	var nSlidePixelInc = 30;
	var oCurrentSlideDiv = '';
	var oNextSlideDiv = '';
	var nSlideShowAspectRatio = nSlideWidth / nSlideHeight;
	
	var nCurrentObject = this.constructor.nObjectCount;//the actual instance name of this object
	var nCurrentSlide = 0;
	var aImages = new Array();

	function initSlideNav(bUp){
		var sFunction = moveSlideNav;//setInterval loses scope if the function isnt moved into here
		bSlideNavUp = bUp;
		if(nSlideNavIntervalMove == -1){
			nSlideNavIntervalMove = setInterval(sFunction, nSlideNavIntervalFrequency);
		}
	}
	
	function moveSlideNav(){
		if(bSlideNavUp){
			if(nSlideNavCurrentPos > nSlideNavOffset + nSlideNavPixelInc){
				nSlideNavCurrentPos = nSlideNavCurrentPos - nSlideNavPixelInc;
				document.getElementById('slideNavBar' + nCurrentObject).style.top = nSlideNavCurrentPos + 'px';
			}else{
				document.getElementById('slideNavBar' + nCurrentObject).style.top = nSlideNavOffset + 'px';
				clearInterval(nSlideNavIntervalMove);
				nSlideNavIntervalMove = -1;
			}
		}else{
			if(nSlideNavCurrentPos < nSlideHeight - nSlideNavPixelInc){
				nSlideNavCurrentPos = nSlideNavCurrentPos + nSlideNavPixelInc;
				document.getElementById('slideNavBar' + nCurrentObject).style.top = nSlideNavCurrentPos + 'px';
			}else{
				document.getElementById('slideNavBar' + nCurrentObject).style.top = nSlideHeight + 'px';
				clearInterval(nSlideNavIntervalMove);
				nSlideNavIntervalMove = -1;
			}
			
		}
	}
	
	function initSlideMove(bLeft){
		var sFunction = moveSlide;//setInterval loses scope if the function isnt moved into here

		if(nSlideIntervalMove == -1){
			//don't allow the user to switch slide direction while in a slide
			bSlideLeft = bLeft;
			if(oCurrentSlideDiv == ''){
				oCurrentSlideDiv = document.getElementById('slideContainerMain' + nCurrentObject);
				oNextSlideDiv = document.getElementById('slideContainerSecondary' + nCurrentObject);
			}
			
			oCurrentSlideDiv.style.left = '0px'
			if(!bSlideLeft){
				oNextSlideDiv.style.left = nSlideWidth + 'px';
				if(nCurrentSlide != (aImages.length - 1)){
					nCurrentSlide++;
				}else{
					nCurrentSlide = 0;
				}
			}else{
				oNextSlideDiv.style.left = -nSlideWidth + 'px';
				
				if(nCurrentSlide != 0){
					nCurrentSlide--;
				}else{
					nCurrentSlide = aImages.length - 1;
				}
			}
			
			//set the next image
			if(oNextSlideDiv == document.getElementById('slideContainerMain' + nCurrentObject)){
				setSlideImage('slideImageMain' + nCurrentObject);
			}else{
				setSlideImage('slideImageSecondary' + nCurrentObject);
			}
			
			//set title for next slide
			document.getElementById('slideNavBarText' + nCurrentObject).innerHTML = aImages[nCurrentSlide][1];
			
			nSlideIntervalMove = setInterval(sFunction, nSlideIntervalFrequency);
		}
	}
	
	function moveSlide(){
		var nCurrentDistance = parseInt(oCurrentSlideDiv.style.left.substring(0, oCurrentSlideDiv.style.left.length - 2));
		var oTemp = "";
		
		if(!bSlideLeft){
			if(nCurrentDistance > (-nSlideWidth + nSlidePixelInc)){
				nCurrentDistance = nCurrentDistance - nSlidePixelInc;
				oCurrentSlideDiv.style.left = nCurrentDistance + 'px';
				oNextSlideDiv.style.left = nCurrentDistance + nSlideWidth + 'px';
			}else{
				oCurrentSlideDiv.style.left = -nSlideWidth + 'px';
				oNextSlideDiv.style.left = '0px';
				oTemp = oCurrentSlideDiv;
				oCurrentSlideDiv = oNextSlideDiv;
				oNextSlideDiv = oTemp;
				clearInterval(nSlideIntervalMove);
				nSlideIntervalMove = -1;
			}		
		}else{
			if(nCurrentDistance < (nSlideWidth - nSlidePixelInc)){
				nCurrentDistance = nCurrentDistance + nSlidePixelInc;
				oCurrentSlideDiv.style.left = nCurrentDistance + 'px';
				oNextSlideDiv.style.left = ((-nSlideWidth) + nCurrentDistance) + 'px';
			}else{
				oCurrentSlideDiv.style.left = nSlideWidth + 'px';
				oNextSlideDiv.style.left = '0px';
				oTemp = oCurrentSlideDiv;
				oCurrentSlideDiv = oNextSlideDiv;
				oNextSlideDiv = oTemp;
				clearInterval(nSlideIntervalMove);
				nSlideIntervalMove = -1;
			}
		}
	}
	
	function setSlideImage(sContainer){
		var nCurrentSlideAspectRatio =  aImages[nCurrentSlide][0].width / aImages[nCurrentSlide][0].height;
		
		document.getElementById(sContainer).src = aImages[nCurrentSlide][0].src;
		
		if(!aOptions[0]){
			if(nSlideShowAspectRatio > nCurrentSlideAspectRatio){
				document.getElementById(sContainer).style.height = nSlideHeight + 'px';
				document.getElementById(sContainer).style.width = 'auto';
			}else{
				//wide
				document.getElementById(sContainer).style.width = nSlideWidth + 'px';
				document.getElementById(sContainer).style.height = 'auto';
			}
		}
	}
	
	// ************************************************************************ 
	// PRIVILEGED METHODS 
	// MAY BE INVOKED PUBLICLY AND MAY ACCESS PRIVATE ITEMS 
	// ************************************************************************ 
	this.moveNavUp = function(){
		if(!aOptions[1]){
			initSlideNav(true);
		}
	}
	
	this.moveNavDown = function(){
		if(!aOptions[1]){
			initSlideNav(false);
		}
	}
	
	this.moveSlideLeft = function(){
		initSlideMove(true);
		
	}
	
	this.moveSlideRight = function(){
		initSlideMove(false);
	}
	
	this.initSlide = function(){
		setSlideImage('slideImageMain' + nCurrentObject);
		if(aOptions[1]){
			document.getElementById('slideNavBar' + nCurrentObject).style.top = nSlideNavOffset + 'px';
		}
	}
	
	this.addSlide = function(sPath, sText){
		var nIdx = aImages.length;
		
		aImages[nIdx] = new Array();
		aImages[nIdx][0] = new Image();
		aImages[nIdx][0].src = sPath;
		aImages[nIdx][1] = sText;
	}

	this.getWidth = function(){return nSlideWidth};
	this.getHeight = function(){return nSlideHeight};
	this.getInstanceName = function(){return sInstanceName};
	this.getNavBarHeight = function(){return nSlideNavHeight};
	this.getCurrentSlide = function(){return aImages[nCurrentSlide][0].src};
	this.getCurrentSlideText = function(){return aImages[nCurrentSlide][1]};
	this.getNavImagePath = function(){return sNavImagePath};
}

// ************************************************************************ 
// PUBLIC METHODS -- ANYONE MAY READ/WRITE 
// ************************************************************************ 
Slide.prototype.displayShow = function(){
	if(Slide.nObjectCount == 1){
		document.write(	'<style>' +
					   	'.slideContainer{position: relative;overflow:hidden;background-color: #141816;}' +
						'.slideNavBar{position: absolute;width: 100%;overflow:hidden;}' +
						'.slideNavBG{background-color: #3F4A46;}' + 
						'.slideNavFont{color: #FFFFFF;}' +
						'</style>');
	}
	document.write(	'<table cellpadding="0" cellspacing="0"><tr><td><div id="slideContainer' + Slide.nObjectCount + '" style="width:' + this.getWidth() + 'px;height:' + this.getHeight() + 'px;" class="slideContainer" onMouseOver="' + this.getInstanceName() + '.moveNavUp()" onMouseOut="' + this.getInstanceName() + '.moveNavDown()">' +
						//'<div style="z-index: 3; position: absolute; background: url(\'tranparent.gif\') repeat; width:' + this.getWidth() + 'px;height:' + this.getHeight() + 'px;"></div>' +
						'<div id="slideNavBar' + Slide.nObjectCount + '" class="slideNavBar" style="z-index: 2; height:' + this.getNavBarHeight() + 'px;top:' + this.getHeight() + 'px">' +
							'<div class="slideNavBG" style="position:absolute;filter:alpha(opacity=60);opacity:0.6;height:' + this.getNavBarHeight() + 'px;width:100%;"></div>' + 
							'<table width="100%" height="' + this.getNavBarHeight() + '" cellpadding="0" cellspacing="0" style="position: absolute"><tr>' + 
							'<td width="' + this.getNavBarHeight() + '" align="center" style="cursor:pointer;" onclick="' + this.getInstanceName() + '.moveSlideLeft()"><div><img src="' + this.getNavImagePath() + '/prev_24.png" border="0"></div></td>' +
							'<td width="' + parseInt(this.getWidth() - (this.getNavBarHeight() * 2)) + '" align="center"><div id="slideNavBarText' + Slide.nObjectCount + '" style="font-weight: bold" class="slideNavFont">' + this.getCurrentSlideText() + '</div></td>' + 
							'<td width="' + this.getNavBarHeight() + '" align="center" style="cursor:pointer;" onclick="' + this.getInstanceName() + '.moveSlideRight()"><div><img src="' + this.getNavImagePath() + '/next_24.png" border="0"></div></td>' +
							'</tr></table>' +
							//'<div style="position: absolute; padding: 7px; cursor: pointer; width:' + this.getNavBarHeight() + 'px;height:' + this.getNavBarHeight() + 'px;" onclick="' + this.getInstanceName() + '.moveSlideLeft()"><img src="images/prev_24.png" border="0"></div>' + 
							//'<div style="position: absolute; left:' + (this.getWidth() - 40)+ 'px;padding: 7px; cursor: pointer; width:' + this.getNavBarHeight() + 'px;height:' + this.getNavBarHeight() + 'px;" onclick="' + this.getInstanceName() + '.moveSlideRight()"><img src="images/next_24.png" border="0"></div>' + 
						'</div>' +
						'<div id="slideContainerMain' + Slide.nObjectCount + '" style="position:absolute;z-index: 1; width:' + this.getWidth() + 'px;height:' + this.getHeight() + 'px;">' +
							'<table cellpadding="0" cellspacing="0" style="width:100%;height:100%"><tr><td align="center"><img id="slideImageMain' + Slide.nObjectCount + '" border="0" style="z-index: 0" src="' + this.getCurrentSlide() + '" width="' + this.getWidth() + '" height="' + this.getHeight() + '"/></td></tr></table>' +
						'</div>' +
						'<div id="slideContainerSecondary' + Slide.nObjectCount + '" style="position:absolute;left:' + this.getWidth() + 'px;z-index: 1; width:' + this.getWidth() + 'px;height:' + this.getHeight() + 'px;">' +
							'<table cellpadding="0" cellspacing="0" style="width:100%;height:100%"><tr><td align="center"><img id="slideImageSecondary' + Slide.nObjectCount + '" border="0" style="z-index: 0" src="' + this.getCurrentSlide() + '" width="' + this.getWidth() + '" height="' + this.getHeight() + '"/></td></tr></table>' +
						'</div>' +
					'</div></td></tr></table>' + 
					'<script>' + this.getInstanceName() + '.initSlide()</script>');	
} 


// ************************************************************************ 
// STATIC PROPERTIES -- ANYONE MAY READ/WRITE 
// ************************************************************************ 
Slide.nObjectCount = 0;
Slide.aInstances = new Array();

