if(Df){
}else{
	var Df = {}
}
Df.Slider = function(ele){
	
	var ele = this.ele = $(ele);
	
	var paraObj = this.paraObj = {
		mask: document.getElementsByClassName('mask',ele)[0],
		maskHeight: false,
		maskWidth: false,
		slider: document.getElementsByClassName('slider',ele)[0],
		sliderHeight: false,
		sliderWidth: false,
		arrowM: document.getElementsByClassName('arrowMDisable',ele)[0],
		arrowP: document.getElementsByClassName('arrowPDisable',ele)[0],
		event: 'click',
		stopEvent: false,
		iterateBy: false,
		animate: false,
		direction: 'hor' //('hor'|'vert')
	}
	
	var move = null;
	
	var dir = false;
	
	var left = {
		attribute: 'left',
		offset: 'offsetWidth',
		maskDem: 'maskWidth',
		sliderDem: 'sliderWidth',
		coord: 'X'
	}
	
	var top = {
		attribute: 'top',
		offset: 'offsetHeight',
		maskDem: 'maskHeight',
		sliderDem: 'sliderHeight',
		coord: 'Y'
	}
	
	this.set = function(para){
		
		if(para){
			paraObj = Object.extend(paraObj,para)
		}
		
		if(paraObj.direction == 'hor'){
			move = new DarthJS.MoveX(paraObj.slider)
			dir = left
		}else if(paraObj.direction == 'vert'){
			move = new DarthJS.MoveY(paraObj.slider)
			dir = top
		}
		
		move.paraObj.onComplete = enableLogic
		
		if(paraObj.animate){
			move.paraObj = Object.extend(move.paraObj,paraObj.animate)
		}
		
		if(!paraObj.maskWidth){
			paraObj.maskWidth = parseInt(paraObj.mask.offsetWidth);
		}
		if(!paraObj.maskHeight){
			paraObj.maskHeight = parseInt(paraObj.mask.offsetHeight);
		}
		
		if(!paraObj.sliderWidth){
			paraObj.sliderWidth = parseInt(paraObj.slider.offsetWidth);
		}
		if(!paraObj.sliderHeight){
			paraObj.sliderHeight = parseInt(paraObj.slider.offsetHeight);
		}
		
		if(paraObj.iterateBy){
			if(paraObj.iterateBy.constructor == String){
				paraObj.iterateBy = parseInt(paraObj.slider.getElementsByTagName(paraObj.iterateBy)[0][dir.offset])
			}
		}
		
		if(paraObj[dir.sliderDem] > paraObj[dir.maskDem]){
			enableMinus()
			enablePlus()
			disableActions()
			enableLogic()
			
			if(paraObj.stopEvent){
				paraObj.arrowM['on'+paraObj.stopEvent] =  move.stop
				paraObj.arrowP['on'+paraObj.stopEvent] =  move.stop
			}
		}
	}
	
	function plus(){
		var px = 0;
		if(paraObj.iterateBy){
			px = -1*(parseInt(paraObj.slider.getStyle(dir.attribute))) + paraObj.iterateBy
			if(px > paraObj[dir.sliderDem] - paraObj[dir.maskDem]){
				px = paraObj[dir.sliderDem] - paraObj[dir.maskDem]
			}
		}else{
			px = paraObj[dir.sliderDem] - paraObj[dir.maskDem]
		}
		
		if(px || px == 0){
			if(!paraObj.stopEvent){
				disableActions()
			}
			move.paraObj[dir.coord] = -1*(px)
			move.set()
		}
	}
	
	function minus(){
		var px = 0;
		if(paraObj.iterateBy){
			px = parseInt(paraObj.slider.getStyle(dir.attribute)) + paraObj.iterateBy
			if(px > 0){
				px = 0
			}
		}
		
		if(px || px == 0){
			if(!paraObj.stopEvent){
				disableActions()
			}
			move.paraObj[dir.coord] = px
			move.set()
		}
	}
	
	function enableLogic(){
		if(paraObj.stopEvent){
			disableActions()
		}
		
		
		var pos = parseInt(paraObj.slider.getStyle(dir.attribute))
		if(pos < 0){
			enableMinus()
		}
		
		
		if(pos > -1*(paraObj[dir.sliderDem]-paraObj[dir.maskDem])){
			enablePlus();
		}
	}
	
	function stopMinusMove(){
		paraObj.arrowM['on'+paraObj.event] = null
	}
	
	function stopPlusMove(){
		paraObj.arrowP['on'+paraObj.event] = null
	}
	
	function startMinusMove(){
		paraObj.arrowM['on'+paraObj.event] = minus
	}
	
	function startPlusMove(){
		paraObj.arrowP['on'+paraObj.event] = plus
	}
	
	function turnOffMinusArrow(){
		paraObj.arrowM.className = "arrowMOff"
		//paraObj.arrowM.addClassName('off')
		//paraObj.arrowM.removeClassName('on')
	}
	
	function turnOffPlusArrow(){
		paraObj.arrowP.className = "arrowPOff"
		//paraObj.arrowP.addClassName('off')
		//paraObj.arrowP.removeClassName('on')
	}
	
	function turnOnMinusArrow(){
		paraObj.arrowM.className = "arrowMOn"
		//paraObj.arrowM.addClassName('on')
		//paraObj.arrowM.removeClassName('off')
		//paraObj.arrowM.removeClassName('disable')
	}
	
	function turnOnPlusArrow(){
		paraObj.arrowP.className = "arrowPOn"
		//paraObj.arrowP.addClassName('on')
		//paraObj.arrowP.removeClassName('off')
		//paraObj.arrowP.removeClassName('disable')
	}
	
	function enableMinus(){
		turnOnMinusArrow()
		startMinusMove()
	}
	
	function disableMinus(){
		turnOffMinusArrow()
		stopMinusMove()
	}
	
	function enablePlus(){
		turnOnPlusArrow()
		startPlusMove()
	}
	
	function disablePlus(){
		turnOffPlusArrow()
		stopPlusMove()
	}
	
	function disableActions(){
		disableMinus()
		disablePlus()
	}
}