/**
 *	slider.js	v1.0
 * 	Coded by Shivprasad ajgaonkar
 
	Rules: name the CSS class of the Sliding object as: slider
	Default sliding direction is Top to bottom. In case you want to change the direction, add another class: slideDir1 or slideDir2 or slideDir3 or slideDir4
	where	1: Top -> bottom
			2: Left -> Right
			3: Bottom -> Top
			4: Right -> Left	 
 */
function initSlide(){

	var sliderDivs = document.myGetElementsByClassName('slider');
	var sliderBtn = document.myGetElementsByClassName('sliderBtn');
	for(var i=0; i<sliderDivs.length; i++) {
		var sliderId = 'slider' + i;
		var slideObj = new slider();
		sliderDivs[i].id = sliderId;
		slideObj.sliderId = sliderId;
		if (sliderDivs[i].className.indexOf("slideDir")>=0) {
			var slideDir = sliderDivs[i].className.substr(sliderDivs[i].className.indexOf("slideDir"), 9);
			slideObj.moveDirection = parseInt(slideDir.replace('slideDir',''),10);
		}
		slideObj.makeSlideReady();
		sliderDivs[i].onmouseover = function(e){
			this.orgObj.slide();
		}
		sliderDivs[i].onmouseout = function(e){
			this.orgObj.closeSlide();
		}	
		if(sliderBtn[i]) {
			sliderBtn[i].sliderObj = slideObj;
			sliderBtn[i].onmouseover = function(e){
				this.sliderObj.slide();
			}
			sliderBtn[i].onmouseout = function(e){
				this.sliderObj.closeSlide();
			}
		}
	}
}
function slider(){
	this.sliderId = 'slider';
	this.stopPosition = 0;
	this.slideSpeed = 10;
	this.slideSpeedStart = 5;
	this.slideSpeedEnd = 1;
	this.slideBy = 4;
	this.slideVariableSpeed = false;
	this.moveDirection = 1;		//1: move up->down | 2: left->right | 3: down->up |  4: right->left
	this.slideMarginTop = 0;
	this.slideMarginLeft = 0;
	this.sliderWidth = 0;
	this.sliderHeight = 0;
	this.ready = false;
	this.makeSlideReady = makeSlideReady;
	this.moveUp = moveUp;
	this.moveRight = moveRight;
	this.moveDown = moveDown;
	this.moveLeft = moveLeft;
	this.moveBack = moveBack;
	this.slide = slide;
	this.closeSlide = closeSlide;
	this.slideStatus = false;
	this.getSlideByX = getSlideByX;
	this.getSlideByY = getSlideByY;
	this.gotoFunc = gotoFunc;
	this.gotoFuncClose = '';
	this.gotoFuncOpen = '';
	this.t = 0;
	this.slideCount = 0;
	this.gotoFunction = '';
	this.divHtObj = '';
}
function gotoFunc(){
	if(this.gotoFunction) {
		eval(this.gotoFunction + '(this)');
	}
}
function makeSlideReady(){
	var slidingObj = document.getElementById(this.sliderId);
	slidingObj.orgObj = this;
	var containerObj = slidingObj.parentNode;
	containerObj.style.visibility = 'hidden';
	this.sliderWidth = slidingObj.offsetWidth;
	this.sliderHeight = slidingObj.offsetHeight;
	containerObj.style.width = this.sliderWidth + 'px';
	containerObj.style.height = this.sliderHeight + 'px';
	containerObj.style.overflow = 'hidden';
		
	switch(this.moveDirection) {
		case 1:
			slidingObj.style.marginTop = '-' + this.sliderHeight + 'px';
			this.slideMarginTop = parseInt(slidingObj.style.marginTop, 10);
			this.slideMarginLeft = 0;
		break;
		
		case 2:
			slidingObj.style.marginLeft = '-' + this.sliderWidth + 'px';
			this.slideMarginTop = 0;
			this.slideMarginLeft = parseInt(slidingObj.style.marginLeft, 10);
		break;
		
		case 3:
			slidingObj.style.marginTop = this.sliderHeight + 'px';
			this.slideMarginTop = parseInt(slidingObj.style.marginTop, 10);
			this.slideMarginLeft = 0;
		break;	
		
		case 4:
			slidingObj.style.marginLeft = this.sliderWidth + 'px';
			this.slideMarginTop = 0;
			this.slideMarginLeft = parseInt(slidingObj.style.marginLeft, 10);
		break;	
		
		default:
			slidingObj.style.marginTop = '-' + this.sliderHeight + 'px';
			this.slideMarginTop = parseInt(slidingObj.style.marginTop, 10);
			this.slideMarginLeft = 0;
		break;
	}
	this.ready = true;
}
function slide(){
	if(!this.ready){
		return false;
	}
	var slidingObj = document.getElementById(this.sliderId);
	var containerObj = slidingObj.parentNode;
	containerObj.style.visibility = 'visible';
	this.slideStatus = true;
	
	switch(this.moveDirection) {
		case 1:
			this.moveDown(this.sliderId);
		break;
		
		case 2:
			this.moveRight(this.sliderId);
		break;
		
		case 3:
			this.moveUp(this.sliderId);
		break;	
		
		case 4:
			this.moveLeft(this.sliderId);
		break;	
		
		default:
			this.moveDown(this.sliderId);
		break;
	}
}
function closeSlide(){
	if(!this.ready){
		return false;
	}
	this.moveBack(this.sliderId);
}
function getSlideByX(){
	var slidingObj = document.getElementById(this.sliderId);	
	var currentMarginLeft = parseInt(slidingObj.style.marginLeft, 10);
	var totalBlocks = this.slideSpeedStart - this.slideSpeedEnd + 1;
	var blockSize =  Math.ceil(this.sliderWidth / totalBlocks);
	var currentBlock = Math.ceil(Math.abs(this.slideMarginLeft) / blockSize);
	currentBlock = (currentBlock) ? currentBlock : 1;
	var slideByVar = currentBlock + this.slideSpeedEnd - 1;
	return slideByVar;
}
function getSlideByY(){
	var slidingObj = document.getElementById(this.sliderId);
	var currentMarginTop = parseInt(slidingObj.style.marginTop, 10);
	var totalBlocks = this.slideSpeedStart - this.slideSpeedEnd + 1;
	var blockSize =  Math.ceil(this.sliderHeight / totalBlocks);
	var currentBlock = Math.ceil(Math.abs(this.slideMarginTop) / blockSize);
	currentBlock = (currentBlock) ? currentBlock : 1;
	var slideByVar = currentBlock + this.slideSpeedEnd - 1;
	return slideByVar;
}
function moveBack(sliderId){
	var slidingObj = document.getElementById(sliderId);
	slidingObj.orgObj.slideStatus = true;
	var currentMarginTop = parseInt(slidingObj.style.marginTop, 10);
	var currentMarginLeft = parseInt(slidingObj.style.marginLeft, 10);
	
	switch(slidingObj.orgObj.moveDirection) {
		case 1:
			var expectedMarginTop = 0 - slidingObj.orgObj.sliderHeight;
			if(slidingObj.orgObj.slideMarginTop > expectedMarginTop) {
				var slideByVar = slidingObj.orgObj.slideBy;
				if(slidingObj.orgObj.slideVariableSpeed){
					var slideByVar = slidingObj.orgObj.getSlideByY();
				}
				slidingObj.orgObj.slideMarginTop = currentMarginTop - slideByVar;
				slidingObj.style.marginTop = slidingObj.orgObj.slideMarginTop + 'px';
				clearTimeout(slidingObj.orgObj.t);
				slidingObj.orgObj.t = setTimeout("moveBack('"+sliderId+"')", slidingObj.orgObj.slideSpeed);
			}else{
				slidingObj.orgObj.slideStatus = false;
			}
		break;
		
		case 2:
			var expectedMarginLeft = 0 - slidingObj.orgObj.sliderWidth;
			if(slidingObj.orgObj.slideMarginLeft > expectedMarginLeft) {
				var slideByVar = slidingObj.orgObj.slideBy;
				if(slidingObj.orgObj.slideVariableSpeed){
					var slideByVar = slidingObj.orgObj.getSlideByX();
				}
				slidingObj.orgObj.slideMarginLeft = currentMarginLeft - slideByVar;
				slidingObj.style.marginLeft = slidingObj.orgObj.slideMarginLeft + 'px';
				clearTimeout(slidingObj.orgObj.t);
				slidingObj.orgObj.t = setTimeout("moveBack('"+sliderId+"')", slidingObj.orgObj.slideSpeed);
			}else{
				slidingObj.orgObj.slideStatus = false;
			}
		break;
		
		case 3:
			var expectedMarginTop = slidingObj.orgObj.sliderHeight;
			if(slidingObj.orgObj.slideMarginTop < expectedMarginTop) {
				var slideByVar = slidingObj.orgObj.slideBy;
				if(slidingObj.orgObj.slideVariableSpeed){
					var slideByVar = slidingObj.orgObj.getSlideByY();
				}
				slidingObj.orgObj.slideMarginTop = currentMarginTop + slideByVar;
				slidingObj.style.marginTop = slidingObj.orgObj.slideMarginTop + 'px';
				clearTimeout(slidingObj.orgObj.t);
				slidingObj.orgObj.t = setTimeout("moveBack('"+sliderId+"')", slidingObj.orgObj.slideSpeed);
			}else{
				slidingObj.orgObj.slideStatus = false;
			}
		break;	
		
		case 4:
			var expectedMarginLeft = slidingObj.orgObj.sliderWidth;
			if(slidingObj.orgObj.slideMarginLeft < expectedMarginLeft) {
				var slideByVar = slidingObj.orgObj.slideBy;
				if(slidingObj.orgObj.slideVariableSpeed){
					var slideByVar = slidingObj.orgObj.getSlideByX();
				}
				slidingObj.orgObj.slideMarginLeft = currentMarginLeft + slideByVar;
				slidingObj.style.marginLeft = slidingObj.orgObj.slideMarginLeft + 'px';
				clearTimeout(slidingObj.orgObj.t);
				slidingObj.orgObj.t = setTimeout("moveBack('"+sliderId+"')", slidingObj.orgObj.slideSpeed);
			}else{
				slidingObj.orgObj.slideStatus = false;
			}
		break;	
		
		default:
			var expectedMarginTop = 0 - slidingObj.orgObj.sliderHeight;
			if(slidingObj.orgObj.slideMarginTop > expectedMarginTop) {
				var slideByVar = slidingObj.orgObj.slideBy;
				if(slidingObj.orgObj.slideVariableSpeed){
					var totalBlocks = slidingObj.orgObj.slideSpeedStart - slidingObj.orgObj.slideSpeedEnd + 1;
					var blockSize =  Math.ceil(slidingObj.orgObj.sliderHeight / totalBlocks);
					var currentBlock = Math.ceil(Math.abs(slidingObj.orgObj.slideMarginTop) / blockSize);
					currentBlock = (currentBlock) ? currentBlock : 1;
					var slideByVar = currentBlock + slidingObj.orgObj.slideSpeedEnd - 1;
				}
				slidingObj.orgObj.slideMarginTop = currentMarginTop - slideByVar;
				slidingObj.style.marginTop = slidingObj.orgObj.slideMarginTop + 'px';
				clearTimeout(slidingObj.orgObj.t);
				slidingObj.orgObj.t = setTimeout("moveBack('"+sliderId+"')", slidingObj.orgObj.slideSpeed);
			}else{
				slidingObj.orgObj.slideStatus = false;
			}
		break;
	}
	if (slidingObj.orgObj.slideStatus === false) {
		var containerObj = slidingObj.parentNode;
		containerObj.style.visibility = 'hidden';
		if (slidingObj.orgObj.gotoFuncClose) {
			slidingObj.orgObj.gotoFuncClose(slidingObj.orgObj);
		}
	}
}
function moveDown(sliderId){
	var slidingObj = document.getElementById(sliderId);
	if(slidingObj.orgObj.slideMarginTop < slidingObj.orgObj.stopPosition) {
		var slidingSpeed = slidingObj.orgObj.slideSpeed;
		var slideByVar = slidingObj.orgObj.slideBy;
		if(slidingObj.orgObj.slideVariableSpeed){
			var slideByVar = slidingObj.orgObj.getSlideByY();
		}
		slidingObj.orgObj.slideMarginTop += slideByVar;
		slidingObj.style.marginTop = slidingObj.orgObj.slideMarginTop + 'px';
		clearTimeout(slidingObj.orgObj.t);
		slidingObj.orgObj.t = setTimeout("moveDown('"+sliderId+"')", slidingSpeed);
	}else{
		if(slidingObj.orgObj.slideMarginTop > slidingObj.orgObj.stopPosition){
			slidingObj.style.marginTop = slidingObj.orgObj.stopPosition + 'px';
		}
		slidingObj.orgObj.slideStatus = false;
	}
}
function moveRight(sliderId){
	var slidingObj = document.getElementById(sliderId);
	if(slidingObj.orgObj.slideMarginLeft < slidingObj.orgObj.stopPosition) {
		var slidingSpeed = slidingObj.orgObj.slideSpeed;
		var slideByVar = slidingObj.orgObj.slideBy;
		if(slidingObj.orgObj.slideVariableSpeed){
			var slideByVar = slidingObj.orgObj.getSlideByX();
		}
		slidingObj.orgObj.slideMarginLeft += slideByVar;
		slidingObj.style.marginLeft = slidingObj.orgObj.slideMarginLeft + 'px';
		clearTimeout(slidingObj.orgObj.t);
		slidingObj.orgObj.t = setTimeout("moveRight('"+sliderId+"')", slidingSpeed);
	}else{
		if(slidingObj.orgObj.slideMarginLeft > slidingObj.orgObj.stopPosition){
			slidingObj.style.marginLeft = slidingObj.orgObj.stopPosition + 'px';
		}
		slidingObj.orgObj.slideStatus = false;
		slidingObj.slideCount = (slidingObj.slideCount >= 0) ? (slidingObj.slideCount - 1) : 0;
		slidingObj.orgObj.slideCount = slidingObj.slideCount;
		slidingObj.orgObj.gotoFunc();
	}
}
function moveUp(sliderId){
	var slidingObj = document.getElementById(sliderId);
	if(slidingObj.orgObj.slideMarginTop > slidingObj.orgObj.stopPosition) {
		var slidingSpeed = slidingObj.orgObj.slideSpeed;
		var slideByVar = slidingObj.orgObj.slideBy;
		if(slidingObj.orgObj.slideVariableSpeed){
			var slideByVar = slidingObj.orgObj.getSlideByY();
		}
		slidingObj.orgObj.slideMarginTop = slidingObj.orgObj.slideMarginTop - slideByVar;
		slidingObj.style.marginTop = slidingObj.orgObj.slideMarginTop + 'px';
		clearTimeout(slidingObj.orgObj.t);
		slidingObj.orgObj.t = setTimeout("moveUp('"+sliderId+"')", slidingSpeed);
	}else{
		if(slidingObj.orgObj.slideMarginTop < slidingObj.orgObj.stopPosition){
			slidingObj.style.marginLeft = slidingObj.orgObj.stopPosition + 'px';
		}
		slidingObj.orgObj.slideStatus = false;
	}
}
function moveLeft(sliderId){
	var slidingObj = document.getElementById(sliderId);
	if(slidingObj.orgObj.slideMarginLeft > slidingObj.orgObj.stopPosition) {
		var slidingSpeed = slidingObj.orgObj.slideSpeed;
		var slideByVar = slidingObj.orgObj.slideBy;
		if(slidingObj.orgObj.slideVariableSpeed){
			var slideByVar = slidingObj.orgObj.getSlideByX();
		}
		slidingObj.orgObj.slideMarginLeft = slidingObj.orgObj.slideMarginLeft - slideByVar;
		slidingObj.style.marginLeft = slidingObj.orgObj.slideMarginLeft + 'px';
		clearTimeout(slidingObj.orgObj.t);
		slidingObj.orgObj.t = setTimeout("moveLeft('"+sliderId+"')", slidingSpeed);
	}else{
		if(slidingObj.orgObj.slideMarginLeft < slidingObj.orgObj.stopPosition){
			slidingObj.style.marginLeft = slidingObj.orgObj.stopPosition + 'px';
		}
		slidingObj.orgObj.slideStatus = false;
		slidingObj.slideCount = (slidingObj.slideCount >= 0) ? (slidingObj.slideCount + 1) : 1;
		slidingObj.orgObj.slideCount = slidingObj.slideCount;
		slidingObj.orgObj.gotoFunc();
	}
}
var oldOnload = window.onload;
window.onload = function () { if(oldOnload) oldOnload(); initSlide(); }
