// JavaScript Document
// Conducta 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;
//if (window.addEventListener)
//	window.addEventListener('DOMMouseScroll', wheel, false);
//window.onmousewheel = document.onmousewheel = wheel;
/*
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 {
		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) {
	if (sw==1) {
		currentTarget=target;
		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;
		}
	} 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":
				//trace('getScrPos: '+(getScrollHPosition(target)+10));
				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) {
			var targetYoffset = obj.offsetTop;
			var yProgress = tempY-(targetYoffset+30);
			var newScrollPosition= Math.floor(yProgress * ( ( getScrollHeight(currentTarget) - getDivNumericHeight(currentTarget)) / getDivNumericHeight(currentTarget)  ) );
			newScrollPosition = newScrollPosition*1.4;
			if (!isNaN(newScrollPosition)) {
				setScrollPosition(currentTarget,newScrollPosition);
				dragTimeoutId=window.setTimeout('scrDragAuto()',dragInterval);
			}
		}
	} else {
		window.clearTimeout(dragTimeoutId);
	}
}
*/
function scrDrag(target,startStop,handleId) {
	currentDragHandle=handleId;
	currentTarget=target;
	
	if (startStop==1) {
		var obj=document.getElementById(currentTarget);
		if (obj!=null) {
			
				
				
				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 lngth=getDivNumericHeight(currentTarget)  /  getScrollHeight(currentTarget);
		lngth = parseInt(lngth*targetDivHeight);
		obj.style.height=String(lngth+'px');
		var offset = (getScrollPosition(currentTarget) / getScrollHeight(currentTarget)) * targetDivHeight;
		offset = offset*0.85;
		offset+=20;
		obj.style.top = String(offset+'px');
	}
}
*/
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) {
	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;
		obj.style.height=String(dragHandleHeight+'px');
//		trace(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=getDivNumericWidth(currentTarget)  /  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(' val: '+val+' mspH: '+maintainedScrollPositionH);
	
	var obj=document.getElementById(target);
	if (obj != null) {
		if (val==0) {
			//trace('mspH: '+maintainedScrollPositionH);
			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*80;

			obj.scrollLeft=pos-200;
			maintainedScrollPositionH=obj.scrollLeft;
		
//trace('1 scrollLeft: '+obj.scrollLeft);
		} else {
			obj.scrollLeft=val;
			maintainedScrollPositionH=val;
//trace('2 scrollLeft: '+obj.scrollLeft);
		}
//		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;
	} else {
		//trace('not found: '+target);	
	}
	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) {
	if (allowScrollwheel) {
		isScrollwheel=true;
		if (currentDragHandle != null) {
			if (delta < 0) {
				scrArrow(currentTarget,'toEnd',1,currentDragHandle);
			} else {
				scrArrow(currentTarget,'toStart',1,currentDragHandle);
			}
			currentDragHandle = null;
		}
		isScrollwheel=false;
	}
}

function wheel(event){
	if (currentDragHandle != null) {
		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);
*/