import mx.events.EventDispatcher
   
class templateBook.mvctemplate.ScrollComponents extends MovieClip { 
	var __rectangleHeightNull:Boolean                    //if no change heigt scroll
	var __pressBackground:Boolean                        //if press background
	var __colorablePosition:Boolean                      //color position scroll
	var __drag:Number                                    //drag scroll
	var __last:Number                                    //last number
	var __first:Number                                   //first number
	var rectangle:MovieClip                              //rectangle 
	var arrowUp:MovieClip                                //arrow up
	var arrowDown:MovieClip                              //arrow down
	var __speedScroll:Number=1                           //speed scroll
	var mcBackground:MovieClip                           //background scroll
	var __proportion:Number=0.5                          //proportion ( scroll to background scroll )
	var __colorBackground                                //color background
	var __colorScrollOut                                 //color for scroll - mouse out
	var __colorScrollOver                                //color for scroll - mouse over
	var rectangleProgress:MovieClip                      //rectangle progress
    var dispatchEvent:Function                           //dispatch event
	var addEventListener:Function                        //add listener
    var __position:String="V"                            //position  ( V OR H )             
	var __arrowVisible:Boolean                           //arrow visible ( true or false )
	var __width:Number=15                                //width 
	var __height:Number=180                              //height 
	var __scrollPosition:Number                          //scroll position 
	var __colorArrowBackground                           //color arrow background
	var __colorArrow                                     //color arrow
	var offsetArrow:Number                               //offset arrow
	public var __spaceArea:Number = 0                    //space area
	
	
//////////////////////////////////////////////////////////////////////////////////////////////////

	function ScrollComponents(){
		EventDispatcher.initialize(this)
		scrollVisible=true
	}
	
	
///////////////////////////////////////////////////////////////////////////////////////////////

public function set spaceArea(value_) {
	__spaceArea = value_
	addAreaScroll()
}

///////////////////////////////////////////////////////////////////////////////////////////////

public function get spaceArea() {
	return __spaceArea
}
	
////////////////color arrow/////////////////////////////////////////////////////////////////////////////

function set colorArrow(color_) {
	__colorArrow = color_	
	NewColor.setColor(arrowDown.arrow,__colorArrow)
	NewColor.setColor(arrowUp.arrow,__colorArrow)
}
	
/////////////////////////////////////////////////////////////////////////////////////////////	
	
function get colorArrow() {
	return __colorArrow
}

//////////////////color arrow background///////////////////////////////////////////////////////////////////////////

function set colorArrowBackground(color_) {
	__colorArrowBackground = color_	
	NewColor.setColor(arrowDown.background,colorArrowBackground)
	NewColor.setColor(arrowUp.background,colorArrowBackground)
}
	
/////////////////////////////////////////////////////////////////////////////////////////////	
	
function get colorArrowBackground() {
	return __colorArrowBackground
}

/////////////////////////////////////////////////////////////////////////////////////////////

function set speedScroll(value_:Number) {
	__speedScroll=value_	
}

/////////////////////////////////////////////////////////////////////////////////////////////

function get speedScroll() {
	return __speedScroll	
}
	
/////////////////////////////////////////////////////////////////////////////////////////////

function set position(position_:String) {
		__position = position_
		if (__position == "V") {
			this._rotation=0
		}else if(__position=="H") {
			this._rotation=-90
		}
}
	
//////////////////////////////////////////////////////////////////////////////////////////////	
	
function ini() {
	    this.rectangle.onPress=Delegate2.create(this,onPressButton)
		this.rectangle.onRelease =  Delegate2.create(this, onReleaseButton)
		this.rectangle.onReleaseOutside = Delegate2.create(this, onReleaseButtonOutside)
		this.rectangle.onRollOver = Delegate2.create(this, this.onRollOverScroll)
		this.rectangle.onRollOut=Delegate2.create(this,this.onRollOutScroll)
		this.rectangle.useHandCursor=true
		////////
		this.arrowDown.onPress=Delegate2.create(this,onPressArrow,"down")
		this.arrowDown.onRelease = this.arrowDown.onReleaseOutside = Delegate2.create(this, onReleaseArrow)
		this.arrowDown.onRollOver = Delegate2.create(this,onRollOverArrow)
		this.arrowDown.onRollOut=Delegate2.create(this,this.onRollOutArrow)
		///
		this.arrowUp.onPress=Delegate2.create(this,onPressArrow,"up")
		this.arrowUp.onRelease = this.arrowUp.onReleaseOutside = Delegate2.create(this, onReleaseArrow)
		this.arrowUp.onRollOver = Delegate2.create(this,onRollOverArrow)
		this.arrowUp.onRollOut=Delegate2.create(this,this.onRollOutArrow)
		///////////////////////////
		if(__pressBackground==true){
		this.mcBackground.onPress=Delegate2.create(this,this.onPressBackground)
		this.mcBackground.onRelease=Delegate2.create(this,this.onReleaseBackgrouond)
		this.mcBackground.onReleaseOutside=Delegate2.create(this,this.onReleaseBackgrouond)
		this.mcBackground.useHandCursor=false
		}
}

/////////////////////////////////////////////////////////////////////////////////////////////

function onRollOverArrow() {
	this.dispatchEvent({target:this,type:"onRollOverArrow"})
}

/////////////////////////////////////////////////////////////////////////////////////////////

function onRollOutArrow() {
	this.dispatchEvent({target:this,type:"onRollOutArrow"})
}

/////////////////////////////////////////////////////////////////////////////////////////////

function onRollOverScroll() {
	if(__colorScrollOver){
		NewColor.setColor(this.rectangle.rectangle2, __colorScrollOver)
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////

function onRollOutScroll() {
	if(__colorScrollOut){
	NewColor.setColor(this.rectangle.rectangle2, __colorScrollOut)
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////

function set colorBackground(value_) {
	 __colorBackground = value_
	NewColor.setColor(this.mcBackground,__colorBackground)
}

//////////////////////////////////////////////////////////////////////////////////////////////

function get colorBackground() {
	 return __colorBackground
}

//////////////////////////////////////////////////////////////////////////////////////////////

function set colorScrollOut(value_) {
	 __colorScrollOut = value_
	 NewColor.setColor(this.rectangle.rectangle2,__colorScrollOut)
}

//////////////////////////////////////////////////////////////////////////////////////////////

function get colorScrollOut() {
	 return __colorScrollOut 
}

//////////////////////////////////////////////////////////////////////////////////////////////

function set colorScrollOver(value_) {
	 __colorScrollOver = value_
}

//////////////////////////////////////////////////////////////////////////////////////////////

function get colorScrollOver() {
	 return __colorScrollOver
}

//////////////////////////////////////////////////////////////////////////////////////////////
	
function set pressBackground(boolean_:Boolean){
	__pressBackground=boolean_
	ini()
}

//////////////////////////////////////////////////////////////////////////////////////////////
	
function set colorablePosition(boolean_:Boolean){
	__colorablePosition=boolean_
	ini()
}

/////////////////////////////////////////////////////////////////////////////////////////////

function set scrollVisible(value_:Boolean) {
	if (value_) {
		this.rectangle._visible = true
		rectangleHeightNull=false
	}else {
		this.rectangle._visible = false
		rectangleHeightNull=true
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////
	
function set rectangleHeightNull(boolean_:Boolean){
	__rectangleHeightNull=boolean_
	ini()
	if(__rectangleHeightNull==true){
       this.rectangle._visible = false
	   colorablePosition=true
	}else {
		this.rectangle._visible = true
		colorablePosition=false
	}
}

/////////////////////////////////////////////////////////////////////////
	
function onReleaseBackgrouond(){
	onReleaseButton()
}

//////////////////////////////////////////////////////////////////////////////////////////////////

function onPressBackground() {
    	this.onRollOverScroll()
		onPressButton()
		rectangle._y = _ymouse - this.scrollHeight / 2
		if (rectangle._y < 0) {
			rectangle._y=0
		}
		if ( (rectangle._y + this.scrollHeight) > __drag) {
			rectangle._y=__drag-scrollHeight
		}
		refresh()
	}
	
///////////////////////////////////////////////////////////////////////////////////////////////////////	

function onLoad(){
	
	this.rectangle.swapDepths(1150)
	this.rectangleProgress.swapDepths(1000)
	this.rectangleProgress._height=rectangle._y
	
	if(__colorablePosition==false){
		this.rectangleProgress._visible=false
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////

	function set firstLast(t:Array){
		firstValue=Number(t[0])
		lastValue=Number(t[1])
		proportion=Number(t[2])
	}
	
//////////////////////////////////////////////////////////////////////////////////////////////////	

    function set firstValue(first_:Number) {
		__first = first_
		proportion=__proportion
	}

//////////////////////////////////////////////////////////////////////////////////////////////////
	
	 function set lastValue(last_:Number) {
		__last = last_
		proportion=__proportion
	}
	
//////////////////////////////////////////////////////////////////////////////////////////////////

      function set proportion(f){
		__proportion=(f>1) ? 1 : f
		scrollHeight=__drag*__proportion
		size()
	}

//////////////////////////////////////////////////////////////////////////////////////////////////

      function set height(war:Number) {
		__height=war
		size()
		
	}
	
//////////////////////////////////////////////////////////////////////////////////////////////////

function addAreaScroll() {
	       var rectangleArea:MovieClip = rectangle.rectangle2.duplicateMovieClip("mcRectangleArea", 4)
		   rectangleArea._alpha=0
		   rectangleArea._width += spaceArea*2
		   rectangleArea._x=-spaceArea
}
	
//////////////////////////////////////////////////////////////////////////////////////////////////

       function set width(value_) {
		   __width = value_	
		   var spaceArea:Number=7
		   ////scroll width
		   //rectangle.rectangle2._width = __width
		   addAreaScroll()
		    ////background width
		   mcBackground.mcBackground2._width = __width
		   var rectangleArea:MovieClip =  this.mcBackground.mcBackground2.duplicateMovieClip("mcmcBackgroundArea2",this.getNextHighestDepth())
		   rectangleArea._alpha=0
		   rectangleArea._width += spaceArea*2
		   rectangleArea._x=-spaceArea
		   		   
		   /////colorable
		   rectangleProgress._width = __width
		   
		   ////arrow
		   arrowDown._width = __width
		   arrowUp._width = __width
		   arrowDown._x=arrowDown._width
		   
	   }

//////////////////////////////////////////////////////////////////////////////////////////////////

      function set y(war:Number){
		this._y=war+arrowUp._height
		size()
	}

//////////////////////////////////////////////////////////////////////////////////////////////////

	 function set x(war:Number){
		this._x=war
		 size()
	}

/////////////////////////////////////////////////////////////////////////////////////////////////

	function get scrollHeight(){  ////
		return (__rectangleHeightNull==true) ? 0 : rectangle._height
	}

//////////////////////////////////////////////////////////////////////////////////////////////////

	function set scrollHeight(value){
		//rectangle._height=value
	}

//////////////////////////////////////////////////////////////////////////////////////////////////

	function size(){
		__drag=__height-(arrowDown._height+arrowUp._height)
		this.rectangle._y = 0
		arrowDown._y = __drag + arrowDown._height
		arrowDown._x=arrowDown._width
		arrowUp._y=-arrowUp._height
		__first=(__first==undefined) ? 0 : __first
		mcBackground._height=__drag
	}


//////////////////////////////////////////////////////////////////////////////////////////////////

	function setScroll(war:Number){
		if(war>1){war=1}
		this.rectangle._y=war*(__drag-scrollHeight)
		refresh()
	}

//////////////////////////////////////////////////////////////////////////////////////////////////

	function setScrollPosition(wartosc){
		var p=Math.min(__first,__last)
		var k=Math.max(__first,__last)
        wartosc = Math.max(p, Math.min(k, wartosc))
		__scrollPosition=( (wartosc-__first) * (__drag-scrollHeight) ) / (__last-__first)
	    rectangle._y=__scrollPosition
		this.rectangleProgress._height=rectangle._y
	    refresh()
	}
	
//////////////////////////////////////////////////////////////////////////////////////////////////

	function getScrollPosition(){
	return __first+( this.rectangle._y / (__drag-scrollHeight) )*(__last-__first)  //__scrollPosition
	}

//////////////////////////////////////////////////////////////////////////////////////////////////

	function refresh(button_:String):Void {    
		
	      var wartosc=getScrollPosition()
		  dispatchEvent({target:this,type:"onChangeScroll"})
				
		if( button_=="down"){  //button down//
				var kon = this.rectangle._y + this.scrollHeight  //
				if(kon+speedScroll>__drag) {this.rectangle._y=(__drag-this.scrollHeight)}
				else{this.rectangle._y+=speedScroll}
			}
		else if(  button_=="up" ){ ///button up
				if(rectangle._y-speedScroll<=0){rectangle._y=0}
				else{rectangle._y-=speedScroll}
			}
			
		this.rectangleProgress._height=rectangle._y

	}

//////////////////////////////////////////////////////////////////////////////////////////////////

function onPressButton(button_:String):Void{   
  this.rectangle.startDrag(false, 0, 0, 0, Math.ceil(__drag - scrollHeight))
  this.onEnterFrame=Delegate2.create(this,refresh)
  dispatchEvent({target:this,type:"onPressScroll"})
}

//////////////////////////////////////////////////////////////////////////////////////////////////

function onPressArrow(button_:String) {
	var time=getTimer()
	if (button_ == "up") {
		this.setScrollPosition(getScrollPosition() + offsetArrow)
	}else {
		this.setScrollPosition(getScrollPosition()-offsetArrow)
	}
	this.onEnterFrame = function() {
		if (getTimer() - time > 500) {
			this.refresh(button_)
		}
		
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////

function onReleaseArrow(){
		delete this.onEnterFrame
}

/////////////////////////onRelease/////////////////////////////////////////////////////////////////////////

	function onReleaseButton(){
		this.rectangle.stopDrag()
		delete this.onEnterFrame
		dispatchEvent({target:this,type:"onReleaseScroll"})
	}
	  
////////////////////////////////////////////////////////////////////////////////////////////////////

	function onReleaseButtonOutside(){
	    onReleaseButton()
		this.onRollOutScroll()
      }


//////////////////////////////////////////////////////////////////////////////////////////////////

    function set arrowVisible(value_:Boolean) {
		__arrowVisible = value_		
		arrowDown._visible = __arrowVisible
		arrowUp._visible = __arrowVisible
		
	}
	
//////////////////////////////////////////////////////////////////////////////////////////////////

  function get arrowVisible() {
		return __arrowVisible
  }

 //////////////////////////////////////////////////////////////////////////////////////////////////


}