/*
 * Franklin Lancaster, 2008
 *
 */

function addEventToObject(obj,evt,func) {
	var oldhandler = obj[evt];
	obj[evt] = (typeof obj[evt] != 'function') ? func : function(ev){oldhandler(ev);func(ev);};
}

function addEvent(element, ev, handler) 
	{
		var doHandler = function(e) {
			return handler(e||window.event);
		}
		if (element.addEventListener) { 
			element.addEventListener(ev, doHandler, false); 
		} else if (element.attachEvent) { 
			element.attachEvent("on" + ev, doHandler); 
		}
	}

function getObject(objectId) {
  if (document.getElementById && document.getElementById(objectId)) {
    return document.getElementById(objectId);
  } else if (document.all && document.all(objectId)) {
    return document.all(objectId);
  } else {
    return false;
  }
}

var indexLevel = 1;
  
function makeDragable(knob, el, opacity){
	
	var dragContainerOptions = {

		handle: knob, 
		
		onStart: function(){
			var fadeIn = new Fx.Morph(el, {duration:300});
			fadeIn.start(
			{
					'opacity': [opacity, opacity*0.6]
				});
			indexLevel++; 
			el.style.zIndex = indexLevel;
		}.bind(this),
		 
		onComplete: function(){
			var fadeIn = new Fx.Morph(el, {duration:300});
			fadeIn.start(
			{
					'opacity': [opacity*0.6, opacity]
				});
		
		}.bind(this)
	};
	
  	knob.style.cursor = 'move';
		
	el.makeDraggable(dragContainerOptions);
  
  }
  
function getElementPos(element){
	
	var x = element.offsetLeft;
	var y = element.offsetTop;
	var parent = element.offsetParent;
	while (parent) {
		x += parent.offsetLeft;
		y += parent.offsetTop;
		parent = parent.offsetParent;
	}
	return {
		x : x,
		y : y
	}
}

function getEventMousePos(element, e) {
	
		var scrollX = document.body.scrollLeft || document.documentElement.scrollLeft;
		var scrollY = document.body.scrollTop || document.documentElement.scrollTop;

		if (e.currentTarget) {
			var pos = getElementPos(element);
			return {
				x : e.clientX - pos.x + scrollX,
				y : e.clientY - pos.y + scrollY
			}
		}
		return {
			x : e.offsetX,
			y : e.offsetY
		}
}

function setOpacity(opacity, obj) {
	var el = obj.style;
	el.opacity = (opacity / 100);
	el.MozOpacity = (opacity / 100);
	el.KhtmlOpacity = (opacity / 100);
	el.filter = "alpha(opacity=" + opacity + ")";
}

function scrollBar(parent, content, frame){
	  
	  //don't bother if it doesn't need to scroll
	  //alert(content.getSize().y + '/' + frame.getSize().y);
	  if(content.getSize().y <= frame.getSize().y) { return false;}
	  
	  //this will create a vertical scrolling element with auto and bar scroll for use by the menu and other windows
	  var offset = { x:10, y:0 };
	  
	  var frameHeight = frame.getSize().y;
	  
	  var holder = document.createElement('div');
	  holder.id = 'holder';
	  holder.style.width = '20px';
	  holder.style.height = frame.getSize().y + 'px';
	  holder.style.background = 'none';
	  holder.style.visibility = 'hidden';
	  holder.style.position = 'relative';
	  holder.style.float = 'left';
	  holder.style.zIndex = indexLevel;
	  //holder.style.top = frame.getPosition(parent).y + offset.y + 'px';
	  //holder.style.top = - frame.getSize().y - frame.getPosition(parent).y + offset.y + 'px';
	  //alert('parent:y=' + parent.getSize().y + '/' + frame.getPosition(parent).y);
	  holder.style.top = - parent.getSize().y + frame.getPosition(parent).y + offset.y + 'px';
	  holder.style.left = content.getPosition(parent).x + content.getSize().x + offset.x + 'px';
	  
	  var track = document.createElement('div');
	  track.id='track';
	  track.style.height = frame.getSize().y + 'px';
	  track.style.width = '5px';
	  track.style.margin = 'auto';
	  track.style.background = '#b4b4b4';
	  track.style.position = 'relative';
	  track.style.top = 0;
	  
	  
	  var scrollerHeight = Math.round(frameHeight * frameHeight / (content.getSize().y));
	  
	  var scroller = document.createElement('div');
	  scroller.className = 'scroller';
	  scroller.style.height = scrollerHeight + 'px';
	  scroller.style.width = '5px';
	  scroller.style.backgroundColor = '#000';
	  scroller.style.margin = 'auto';

	  
	  var scrollHolder = document.createElement('div');
	  scrollHolder.style.height = scrollerHeight + 'px';
	  scrollHolder.style.width = '20px';
	  scrollHolder.style.background = 'none';
	  
	  addEventToObject(scrollHolder,"onmouseover", function(){ scroller.style.backgroundColor = '#D1232A'; holder.set('opacity',1); });
	  addEventToObject(scrollHolder,"onmouseout", function(){ scroller.style.backgroundColor = '#000'; holder.set('opacity',0.6); });
	  
	  scrollHolder.appendChild(scroller);
	  //holder.appendChild(track);
	  holder.appendChild(scrollHolder);
	  parent.appendChild(holder);
	  
	  var fader = new Fx.Morph(holder, {duration:300});
	  var myScrollFx = new Fx.Scroll(frame);
	  
	  this.show = function(){
		  
		  var test = content.getSize().y - frame.getSize().y + 15;

			fader.start({'opacity': [0, 0.6], 'visibilty':['hidden', 'visible']});

			myScrollFx.start();
			
			var mySlide = new Slider(holder, scrollHolder, {
				steps: test,
				mode: 'vertical',
				wheel:true,
				onChange: function(step){ myScrollFx.set(0,step); }
			}).set(0);
			
			var scroll2 = new Scroller(frame, {
				area: 70, 
				velocity: 0.5, 
				onChange: function(x, y){ mySlide.set(y);}
			});
			
			frame.addEvent('mouseover', scroll2.start.bind(scroll2));
			frame.addEvent('mouseout', scroll2.stop.bind(scroll2));
		
		};
		
		this.hide = function(){
		
			if(track.get('opacity') != 0){
				fader.start({'opacity': [0.6, 0]});
			}
			
		};
		
		this.remove = function() {
			myScrollFx.toTop();
			for(var i=0; parent.children[i]; i++){
				if(parent.children[i].id == 'holder') parent.removeChild(holder);
			}
		};
}