// JavaScript Document
// Aria5 Scrollbar
var dragInterval=10;
var dragTimeoutId=0;
var arrowInterval=10;
var arrowTimeOutId=0;
var currentTarget='';
var currentDir='';
var currentSw=0;
var currentDragHandle;
var tempX=0;
var tempY=0;
var IE=false;
var allowScrollWheel=true;
var isScrollwheel=false;
var maintainedScrollPositionH=0;
var currentProductOffsetInProductTableau=0;
//window.onload=onloadFunction;



/*
function onloadFunction() {
	document.addEventListener('mousemove', getMouseXY, true);
	
	currentTarget='someContainer';
	currentDir='toEnd';
	currentSw=1;
	currentDragHandle='scroll01DragHandle';
	positionDragHandle();

	currentTarget='someOtherContainer';
	currentDir='toEnd';
	currentSw=1;
	currentDragHandle='scroll02DragHandle';
	positionDragHandle();

}
*/
function scrArrowAuto() {
	if (!currentTarget) { return false; } else {
		var obj = document.getElementById(currentTarget);
		if (obj != null) {
			if (obj.className == 'bubbleContent') {
				allowScrollWheel=true;	
			} else {
				allowScrollWheel=false;	
			}
		}
		if (isScrollwheel) {
			isScrollwheel=false;
			if (allowScrollWheel) {
				scrArrow(currentTarget,currentDir,currentSw,currentDragHandle);
			} else {
				isScrollwheel=false;
			}
		} else {
			scrArrow(currentTarget,currentDir,currentSw,currentDragHandle);
		}
	}
}
function scrArrow(target,dir,sw,dragHandleId) {
//	trace('target: '+target+', dir: '+dir+', sw: '+sw+', drag: '+dragHandleId);
	
	if (sw==1 && target) {
		currentTarget=target;
		var obj = document.getElementById(currentTarget);
		if (obj != null) {
			var classNameString = obj.className;
			var classArray = classNameString.split(' ');
			classNameString = classArray[0];
			if (classNameString != 'bubbleContent') {
				dir='';	
			} else {
				
			}
		} 
		currentDir=dir;
		currentSw=sw;
		currentDragHandle=dragHandleId;
		switch(dir) {
			case "toStart":
				if (getScrollPosition(target)>0) {
					setScrollPosition(target,getScrollPosition(target)-20);
					if (!isScrollwheel) {
						arrowTimeOutId=window.setTimeout('scrArrowAuto()',arrowInterval);
					}
				} else {
					window.clearTimeout(arrowTimeOutId);
				}
			break;
			case "toEnd":
				if (getScrollPosition(target)<getScrollHeight(target)) {
					setScrollPosition(target,getScrollPosition(target)+20);
					if (!isScrollwheel) {
						arrowTimeOutId=window.setTimeout('scrArrowAuto()',arrowInterval);
					}
				} else {
					window.clearTimeout(arrowTimeOutId);
				}
			break;
			case "toPrompt":
			// from conducta
				setScrollHPosition(target,getScrollHPosition(target)+10);
				var obj=document.getElementById(currentDragHandle);
				if (obj != null) {
					obj.style.display="block";
				}
			break;
		}
	} else {
		// clearTimeout
		window.clearTimeout(arrowTimeOutId);
	}
	
}
function scrArrowHAuto() {
	if (isScrollwheel) {
		if (allowScrollWheel) {
			scrArrowH(currentTarget,currentDir,currentSw,currentDragHandle);
		} else {
			isScrollwheel=false;
		}
	} else {
		scrArrowH(currentTarget,currentDir,currentSw,currentDragHandle);
	}
}
function scrArrowH(target,dir,sw,dragHandleId) {
	if (sw==1) {
		currentTarget=target;
		currentDir=dir;
		currentSw=sw;
		currentDragHandle=dragHandleId;
		switch(dir) {
			case "toStart":
				if (getScrollHPosition(target)>0) {
					setScrollHPosition(target,getScrollHPosition(target)-10);
					arrowTimeOutId=window.setTimeout('scrArrowHAuto()',arrowInterval);
				} else {
					window.clearTimeout(arrowTimeOutId);
				}
			break;
			case "toEnd":
				if (getScrollHPosition(target)<getScrollWidth(target)) {
					setScrollHPosition(target,getScrollHPosition(target)+10);
					arrowTimeOutId=window.setTimeout('scrArrowHAuto()',arrowInterval);
				} else {
					window.clearTimeout(arrowTimeOutId);
				}
			break;
			case "toPrompt":
				setScrollHPosition(target,getScrollHPosition(target)+10);
				var obj=document.getElementById(currentDragHandle);
				if (obj != null) {
					obj.style.display="block";
				}
			break;
		}
	} else {
		// clearTimeout
		window.clearTimeout(arrowTimeOutId);
	}
}
function scrDragAuto() {
	scrDrag(currentTarget,1,currentDragHandle);
}
function scrDrag(target,startStop,handleId) {
	currentDragHandle=handleId;
	currentTarget=target;
	
	if (startStop==1) {
		var obj=document.getElementById(currentTarget);
		if (obj!=null) {
			if (obj.className == 'bubbleContent') {
				
				
				var bubbleObj = document.getElementById(currentTarget+'Div');
				if (bubbleObj !=null) {
				
					
					var targetYoffset = bubbleObj.offsetTop; 
					
					
					
					var yProgress = tempY-(targetYoffset);
//					trace(yProgress);
					var newScrollPosition = yProgress-40;
//					var newScrollPosition = Math.floor(yProgress * ( ( getScrollHeight(currentTarget) - getDivNumericHeight(currentTarget) ) / getDivNumericHeight(currentTarget)  ) );
					
//					trace('f: '+( getScrollHeight(currentTarget) - getDivNumericHeight(currentTarget) ) / getDivNumericHeight(currentTarget));
//					var str = 'yProgress: '+yProgress+', currentTarget: '+currentTarget+', scr h: '+getScrollHeight(currentTarget) + ', div h: '+getDivNumericHeight(currentTarget);
//					trace(str);
					
//trace(newScrollPosition);
				//	newScrollPosition = newScrollPosition*1.4;
					if (!isNaN(newScrollPosition)) {
//						trace(newScrollPosition);
						setScrollPosition(currentTarget,newScrollPosition);
						dragTimeoutId=window.setTimeout('scrDragAuto()',dragInterval);
					}
				}
			}
		}
	} else {
		window.clearTimeout(dragTimeoutId);
	}
}
function scrDragHAuto() {
	scrDragH(currentTarget,1,currentDragHandle);
}
function scrDragH(target,startStop,handleId) {
	currentDragHandle=handleId;
	currentTarget=target;
	
	if (startStop==1) {
		var obj=document.getElementById(currentTarget);
		if (obj!=null) {
			/*
			
			*****************  Dependant on Window Size added to container left as margin-left:auto
			
			*/
			var targetXoffset = 230+containerLeftSpace; //obj.offsetLeft;
			var xProgress = tempX-(targetXoffset+0);
			var newScrollPosition= Math.floor(xProgress * ( ( getScrollWidth(currentTarget) - getDivNumericWidth(currentTarget)) / getDivNumericWidth(currentTarget)  ) );
			newScrollPosition = newScrollPosition*1.2;
			if (!isNaN(newScrollPosition)) {
				setScrollHPosition(currentTarget,newScrollPosition);
				dragTimeoutId=window.setTimeout('scrDragHAuto()',dragInterval);
			}
		}
	} else {
		window.clearTimeout(dragTimeoutId);
	}
}
function positionDragHandle() {
	var obj=document.getElementById(currentDragHandle);
	if (obj != null) {
		var targetDivHeight = getDivNumericHeight(currentTarget);
		var propo = targetDivHeight  /  getScrollHeight(currentTarget);
//		trace(propo);
		var dragHandleHeight = parseInt(propo*targetDivHeight);
		
		dragHandleHeight -= 50;
		obj.style.height=String(dragHandleHeight+'px');
//		trace(dragHandleHeight);
//trace (getScrollPosition(currentTarget) / (getScrollHeight(currentTarget)-targetDivHeight)) ;
		var offset = (getScrollPosition(currentTarget) / (getScrollHeight(currentTarget)-targetDivHeight)) * (targetDivHeight - dragHandleHeight);
//		offset = offset*0.4;
	
	
		if (!isNaN(offset)) {
		//offset+=40;
			obj.style.top = String(offset+'px');
		}
	} else {
//		trace('not positionDragHandle: '+currentDragHandle);
	}
}
function setDragHandleHeight(target,handle) {
	//trace('set drag handle height: '+handle);
	var scrollRef=0;
	var obj=document.getElementById(handle);
	if (obj != null) {
		var targetDivHeight = getDivNumericHeight(target);
		var propo = targetDivHeight  /  getScrollHeight(target);
		if (propo >0.9) {
			// hide the scrollbar
			var scrollbar = document.getElementById('scroll'+scrollRef);
		}
//		trace(propo);
		
		var dragHandleHeight = parseInt(propo*targetDivHeight);
		dragHandleHeight -= 60;
		if (isNaN(dragHandleHeight)) { 
			dragHandleHeight=1; 
	//		trace('targetDivHeight: '+targetDivHeight); 
		}
		
		obj.style.height=String(dragHandleHeight+'px');
//		trace('dragHandleHeight: '+dragHandleHeight);
		var offset = (getScrollPosition(target) / getScrollHeight(target)) * targetDivHeight;
		if (isNaN(offset)) { offset=0; }
	//	offset = offset*0.85;
		offset+=40;
//		trace( String(offset+'px'));
		obj.style.top = String(offset+'px');
	} else {
//		trace('not : setDragHandleHeight: '+handle);
	}
}
function positionDragHHandle() {
	var obj=document.getElementById(currentDragHandle);
	if (obj != null) {
		var targetDivWidth = getDivNumericWidth(currentTarget);
		var lngth = targetDivWidth  /  getScrollWidth(currentTarget);
		lngth = parseInt(lngth*targetDivWidth);
		obj.style.width=String(lngth+'px');
		var offset = (getScrollHPosition(currentTarget) / getScrollWidth(currentTarget)) * targetDivWidth;
		offset = offset*0.85;
	//	alert("offset: "+offset);
		if (offset == 0) {
			//var obj2=document.getElementById('productScrollSleeve');
			offset = ( maintainedScrollPositionH / getScrollWidth(currentTarget) ) * getDivNumericWidth('hScroll01') * 0.85;
//			var str = ":: "+maintainedScrollPositionH+" / "+getScrollWidth(currentTarget)+" * "+getDivNumericWidth('hScroll01')+" = "+parseInt(offset);
//			populate('mainIllustration',str);
		} else {
			offset+=20;
			//maintainedScrollPositionH=offset;
		}
		if (offset) {
			obj.style.left = String(parseInt(offset)+'px');
//			populate("head01",obj.style.left);
		}
	}
}
function positionDragHHandleDelayed() {
	//alert("positionDragHHandleDelayed");
	window.setTimeout('positionDragHHandle()',1000);
	//populate('feature01','position drag handle delayed');
}
function setScrollPosition(target,val) {
	var obj=document.getElementById(target);
	if (obj != null) {
		obj.scrollTop=val;
		positionDragHandle();
	}
}	
function setScrollHPosition(target,val) {
	//trace('targ: '+target+' val: '+val);
	var obj=document.getElementById(target);
	if (obj != null) {
		if (val==0) {
			val = maintainedScrollPositionH;
			/*
			
			if currentProductOffsetInProductTableau (set by dataOutputController)
			is outside the current scrollLeft plus scrollWidth
			then scroll to it less half the width
			
			*/
			var pos=currentProductOffsetInProductTableau;
//			populate('errorReport','val: '+val+', pos: '+pos);
			if (pos<val+100 || pos>val+600) {
				
				if (pos>val+500) {
					
					val=pos-300;
//					var str='1 val: '+val+', pos: '+pos;
//					populate('errorReport',str);
					maintainedScrollPositionH=val;
				} else {
					
					val=pos-300;
//					var str='2 val: '+val+', pos: '+pos;
//					populate('errorReport',str);
				}
			}
			obj.scrollLeft=val-1;
		} else {
			obj.scrollLeft=val;
			maintainedScrollPositionH=val;
		}
		positionDragHHandle();
	}
}	
function getScrollPosition(target) {
	var val=0;
	var obj=document.getElementById(target);
	if (obj != null) {
		val=obj.scrollTop;
		maintainedScrollPositionH=val;
	}
	return val;
}
function getScrollHPosition(target) {
	var val=0;
	var obj=document.getElementById(target);
	if (obj != null) {
		val=obj.scrollLeft;
	}
	return val;
}
function getScrollHeight(target) {
	var val=0;
	var obj=document.getElementById(target);
	if (obj != null) {
		val=obj.scrollHeight;
	}
	return val;
}
function getScrollWidth(target) {
	var val=0;
	var obj=document.getElementById(target);
	if (obj != null) {
		val=obj.scrollWidth;
	}
	return val;
}
function getDivNumericHeight(target) {
	var val=0;
	var obj=document.getElementById(target);
	if (obj != null) {
//		var str = obj.style.height;
//		val = parseInt(str.substr(0,str.length-2));
		val = obj.offsetHeight;
	}
	return val;
}
function getDivNumericWidth(target) {
	var val=0;
	var obj=document.getElementById(target);
	if (obj != null) {
		val = obj.offsetWidth;
	}
	return val;
}

/////////////////////////
/* scrollwheel stuff from
http://adomas.org/javascript-mouse-wheel/plain.html
 */

function handle(delta) {
	//trace(delta);
	if (allowScrollWheel) {
		isScrollwheel=true;
		if (delta < 0) {
			scrArrow(currentTarget,'toEnd',1,currentDragHandle);
		} else {
			scrArrow(currentTarget,'toStart',1,currentDragHandle);
		}
		isScrollwheel=false;
	}
}

function wheel(event){
	//trace(event.type); // allowScrollWheel=false;
	var delta = 0;
	if (!event) event = window.event;
	if (event.wheelDelta) {
		delta = event.wheelDelta/120; 
		if (window.opera) delta = -delta;
	} else if (event.detail) {
		delta = -event.detail/3;
	}
	if (delta)
		handle(delta);
        if (event.preventDefault)
                event.preventDefault();
        event.returnValue = false;
}
 /**/
/////////////////////////
/*
http://blog.paranoidferret.com/index.php/2007/10/31/javascript-tutorial-the-scroll-wheel/

function hookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)
  {
    if(eventName == 'mousewheel')
    {
      element.addEventListener('DOMMouseScroll',
        callback, false); 
    }
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
    element.attachEvent("on" + eventName, callback);
}

function unhookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.removeEventListener)
  {
    if(eventName == 'mousewheel')
    {
      element.removeEventListener('DOMMouseScroll',
        callback, false); 
    }
    element.removeEventListener(eventName, callback, false);
  }
  else if(element.detachEvent)
    element.detachEvent("on" + eventName, callback);
}

function MouseWheel(e)
{
  e = e ? e : window.event;
  var wheelData = e.detail ? e.detail : e.wheelData;
  //do something
}

function MouseWheel(e)
{
  e = e ? e : window.event;
  var wheelData = e.detail ? e.detail * -1 : e.wheelDelta / 40;
  //do something
}

function cancelEvent(e)
{
  e = e ? e : window.event;
  if(e.stopPropagation)
    e.stopPropagation();
  if(e.preventDefault)
    e.preventDefault();
  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
}

function MouseWheel(e)
{
  e = e ? e : window.event;
  var wheelData = e.detail ? e.detail * -1 : e.wheelDelta / 40;
  //do something
  return cancelEvent(e);
}

function printInfo(e)
{
  e = e ? e : window.event;
  var raw = e.detail ? e.detail : e.wheelDelta;
  var normal = e.detail ? e.detail * -1 : e.wheelDelta / 40;
  document.getElementById('scrollContent').innerHTML =
    "<br/>&nbsp;Raw Value: " + raw +
    "<br/>&nbsp;Normalized Value: " + normal;
  cancelEvent(e);
}

hookEvent('scrollContent', 'mousewheel', printInfo);
*/
