// rod.rant-on.net | rodmorelos@msn.com
// keep these two lines and you're free to use this code
// compilation of lib_animations.js,lib_basic.js,lib_common.js,v4.js
function createObjectById(id){
	this.el=document.getElementById?document.getElementById(id):null;
	if(!this.el) throw new Error('Element with "'+id+'" id not found.');
	this.css=this.el.style;
	this.i=createObjectById.registry.length;
	createObjectById.registry[this.i]=this;
	this.w=this.el.offsetWidth?this.el.offsetWidth:0;
	this.h=this.el.offsetHeight?this.el.offsetHeight:0;
	this.x=this.el.offsetLeft?this.el.offsetLeft:0;
	this.y=this.el.offsetTop?this.el.offsetTop:0;
	this.o=100;
}
createObjectById.registry=[];
createObjectById.prototype.update=function(){
	this.w=this.el.offsetWidth?this.el.offsetWidth:0;
	this.h=this.el.offsetHeight?this.el.offsetHeight:0;
	this.x=this.el.offsetLeft?this.el.offsetLeft:0;
	this.y=this.el.offsetTop?this.el.offsetTop:0;
}
createObjectById.prototype.show=function(){this.css.visibility='visible';}
createObjectById.prototype.hide=function(){this.css.visibility='hidden';}
createObjectById.prototype.display=function(d){this.css.display=d;}
createObjectById.prototype.fg=function(f){this.css.color=f;}
createObjectById.prototype.bg=function(b){this.css.backgroundColor=b;}
createObjectById.prototype.setOpacity=function(o){
	if(typeof this.css.MozOpacity!='undefined'){this.css.MozOpacity=(o/100);this.o=o;}
	else if(this.el.filters){this.css.filter='alpha(opacity='+o+')';this.o=o;}
}
createObjectById.prototype.moveTo=function(x,y){
	if(x!=null && typeof x=='number'){
		x=Math.round(x);
		this.x=x;
		this.css.left=x+'px';
	}
	if(y!=null && typeof y=='number'){
		y=Math.round(y);
		this.y=y;
		this.css.top=y+'px';
	}
}
createObjectById.prototype.setSize=function(w,h){
	if(w!=null && typeof w=='number'){
		if(w<0) w=0;
		w=Math.round(w);
		this.css.width=w+'px';
	}
	if(h!=null && typeof h=='number'){
		if(h<0) h=0;
		h=Math.round(h);
		this.css.height=h+'px';
	}
	this.update();
}
createObjectById.prototype.clipTo=function(t,r,b,l){
	if(t<0) t=0;if(r<0) r=0;if(b<0) b=0;if(l<0) l=0;
	this.css.clip='rect('+t+'px,'+r+'px,'+b+'px,'+l+'px)';
}
createObjectById.prototype.write=function(text){
	if(typeof this.el.innerHTML!='undefined'){
		this.el.innerHTML=text;
		this.update();
	}
}
function addEvent(object,eventType,functionName,capture){
	if(object.addEventListener){
		object.addEventListener(eventType,functionName,capture);
		return true;
	}
	else if(object.attachEvent){
		var ae=object.attachEvent('on'+eventType,functionName);
		return ae;
	}
	else{object['on'+eventType]=functionName;}
}
function removeEvent(object,eventType,functionName,capture){
	if(object.removeEventListener){
		object.removeEventListener(eventType,functionName,capture);
		return true;
	}
	else if(object.detachEvent){
		var re=object.detachEvent('on'+eventType,functionName);
		return re;
	}
	else{object['on'+eventType]=null;}
}
function fixEvent(e,currentTarget){
	if(!e) e=event;
	if(!e.target) e.target=e.srcElement;
	if(!e.currentTarget) e.currentTarget=currentTarget;
	if(typeof e.layerX=='undefined') e.layerX=e.offsetX;
	if(typeof e.layerY=='undefined') e.layerY=e.offsetY;
	if(typeof e.clientX=='undefined') e.clientX=e.pageX;
	if(typeof e.clientY=='undefined') e.clientY=e.pageY;
	if(!e.stopPropagation) e.stopPropagation=function(){this.cancelBubble=true;}
	if(!e.preventDefault) e.preventDefault=function(){this.returnValue=false;}
	return e;
}
function browserCheck(){
	this.ua=navigator.userAgent.toLowerCase();
	this.dom=document.getElementById?1:0;
	this.op7=(this.dom && this.ua.indexOf('opera 7')>-1 || this.ua.indexOf('opera/7')>-1)?1:0;
	this.ie5=(this.dom && this.ua.indexOf('msie 5')>-1)?1:0;
	this.ie6=(this.dom && this.ua.indexOf('msie 6')>-1)?1:0;
	this.moz=(this.dom && this.ua.indexOf('mozilla')>-1 && this.ua.indexOf('gecko')>-1)?1:0;
	return this;
}
function rand(x,y){return (Math.round(Math.random()*(y-x))+x);}
var bw=browserCheck();
createObjectById.prototype.slideTimer=0;
createObjectById.prototype.resizeTimer=0;
createObjectById.prototype.fadeTimer=0;
createObjectById.prototype.slideTo=function(x,y,duration,acc,fn){
	clearInterval(this.slideTimer);
	if(!acc) acc=0;
	if(!fn) fn=false;
	var startTime=new Date().getTime();
	var endTime=startTime+duration;
	this.slideTimer=setInterval('createObjectById.registry['+this.i+'].slide('+this.x+','+this.y+','+x+','+y+','+acc+','+startTime+','+endTime+','+fn+')',10);
}
createObjectById.prototype.onSlide=new Function();
createObjectById.prototype.onSlideEnd=new Function();
createObjectById.prototype.slide=function(startX,startY,endX,endY,acc,startTime,endTime,fn){
	var currentTime=new Date().getTime();
	if(currentTime<endTime){
		var percent=(currentTime-startTime)/(endTime-startTime);
		var c1=new createObjectById.coord(1,1);
		var c2=new createObjectById.coord(0,0);
		if(acc!=0) var c3=new createObjectById.coord(0.5+(acc/2),0.5-(acc/2));else c3=null;
		var pos=createObjectById.getBezier(percent,c1,c2,c3);
		var x=((endX-startX)*pos.y)+startX;
		var y=((endY-startY)*pos.y)+startY;
		this.moveTo(x,y);
		this.onSlide(x,y);
	}
	else{
		clearInterval(this.slideTimer);
		this.moveTo(endX,endY);
		this.onSlide(endX,endY);
		if(fn) this.onSlideEnd(endX,endY);
	}
}
createObjectById.prototype.bezierSlide=function(x,y,c1x,c1y,c2x,c2y,duration,acc,fn){
	clearInterval(this.slideTimer);
	if(!acc) acc=0;
	if(!fn) fn=false;
	var startTime=new Date().getTime();
	var endTime=startTime+duration;
	this.slideTimer=setInterval('createObjectById.registry['+this.i+'].slideBezier('+this.x+','+this.y+','+x+','+y+','+c1x+','+c1y+','+c2x+','+c2y+','+acc+','+startTime+','+endTime+','+fn+')',10);
}
createObjectById.prototype.slideBezier=function(startX,startY,endX,endY,c1x,c1y,c2x,c2y,acc,startTime,endTime,fn){
	var currentTime=new Date().getTime();
	if(currentTime<endTime){
		var percent=(currentTime-startTime)/(endTime-startTime);
		var startPos=new createObjectById.coord(0,0);
		var endPos=new createObjectById.coord(1,1);	
		if(acc!=0) var c1=new createObjectById.coord(0.5-(acc/2),0.5+(acc/2));else c1=null;
		var pos=createObjectById.getBezier(percent,startPos,endPos,c1);
		var stage=pos.y;
		var c1=new createObjectById.coord(startX,startY);
		var c2=new createObjectById.coord(endX,endY);
		var c3=new createObjectById.coord(c1x,c1y);
		var c4=new createObjectById.coord(c2x,c2y);
		var pos=createObjectById.getBezier(stage,c1,c2,c3,c4);
		this.moveTo(pos.x,pos.y);
		this.onSlide(pos.x,pos.y);
	}
	else{
		clearInterval(this.slideTimer);
		this.moveTo(endX,endY);
		this.onSlide(endX,endY);
		if(fn) this.onSlideEnd(endX,endY);
	}
}
createObjectById.prototype.resizeTo=function(w,h,duration,acc,fn){
	clearInterval(this.resizeTimer);
	if(!acc) acc=0;
	if(!fn) fn=false;
	var startTime=new Date().getTime();
	var endTime=startTime+duration;
	this.resizeTimer=setInterval('createObjectById.registry['+this.i+'].resize('+this.w+','+this.h+','+w+','+h+','+acc+','+startTime+','+endTime+','+fn+')',10);
}
createObjectById.prototype.onResize=new Function();
createObjectById.prototype.onResizeEnd=new Function();
createObjectById.prototype.resize=function(startW,startH,endW,endH,acc,startTime,endTime,fn){
	var currentTime=new Date().getTime();
	if(currentTime<endTime){
		var percent=(currentTime-startTime)/(endTime-startTime);
		var c1=new createObjectById.coord(1,1);
		var c2=new createObjectById.coord(0,0);
		if(acc!=0) var c3=new createObjectById.coord(0.5+(acc/2),0.5-(acc/2));else c3=null;
		var pos=createObjectById.getBezier(percent,c1,c2,c3);
		var w=((endW-startW)*pos.y)+startW;
		var h=((endH-startH)*pos.y)+startH;
		this.setSize(w,h);
		this.onResize(w,h);
	}
	else{
		clearInterval(this.resizeTimer);
		this.setSize(endW,endH);
		this.onResize(endW,endH);
		if(fn) this.onResizeEnd(endW,endH);
	}
}
createObjectById.prototype.fadeTo=function(o,duration,acc,fn){
	clearInterval(this.fadeTimer);
	if(!acc) acc=0;
	if(!fn) fn=false;
	var startTime=new Date().getTime();
	var endTime=startTime+duration;
	this.fadeTimer=setInterval('createObjectById.registry['+this.i+'].fade('+this.o+','+o+','+acc+','+startTime+','+endTime+','+fn+')',10);
}
createObjectById.prototype.onFade=new Function();
createObjectById.prototype.onFadeEnd=new Function();
createObjectById.prototype.fade=function(startO,endO,acc,startTime,endTime,fn){
	var currentTime=new Date().getTime();
	if(currentTime<endTime){
		var percent=(currentTime-startTime)/(endTime-startTime);
		var c1=new createObjectById.coord(1,1);
		var c2=new createObjectById.coord(0,0);
		if(acc!=0) var c3=new createObjectById.coord(0.5+(acc/2),0.5-(acc/2));else c3=null;
		var pos=createObjectById.getBezier(percent,c1,c2,c3);
		var o=((endO-startO)*pos.y)+startO;
		this.setOpacity(o);
		this.onFade(o);
	}
	else{
		clearInterval(this.fadeTimer);
		this.setOpacity(endO);
		this.onFade(endO);
		if(fn) this.onFadeEnd(endO);
	}
}
createObjectById.b1=function(t){return(t*t*t);}
createObjectById.b2=function(t){return(3*t*t*(1-t));}
createObjectById.b3=function(t){return(3*t*(1-t)*(1-t));}
createObjectById.b4=function(t){return((1-t)*(1-t)*(1-t));}
createObjectById.coord=function(x,y){
	if(!x) var x=0;
	if(!y) var y=0;
	return{x:x,y:y}
}
createObjectById.getBezier=function(percent,c1,c2,c3,c4){
	if(!c4 && !c3) var c4=new createObjectById.coord(c1.x+3*(c2.x-c1.x)/4,c1.y+3*(c2.y-c1.y)/4);
	if(!c4) var c4=c3;
	if(!c3) var c3=new createObjectById.coord(c1.x+(c2.x-c1.x)/4,c1.y+(c2.y-c1.y)/4);
	var pos=new createObjectById.coord();
	pos.x=c1.x*createObjectById.b1(percent)+c3.x*createObjectById.b2(percent)+c4.x*createObjectById.b3(percent)+c2.x*createObjectById.b4(percent);
	pos.y=c1.y*createObjectById.b1(percent)+c3.y*createObjectById.b2(percent)+c4.y*createObjectById.b3(percent)+c2.y*createObjectById.b4(percent);
	return pos;
}
var ms={
	scrollables:8,
	active:0,
	step:30,
	speed:7,
	wheelSpeed:30,
	wheelScrolled:false,
	timer:0,
	contentY:0,
	dragY:0,
	clickY:0,
	mouseDown:function(e){
		e=fixEvent(e);
		var mouseY=e.clientY;
		var target=(e.target.nodeType==3 || e.target.tagName.toLowerCase()=='img')?e.target.parentNode:e.target;
		ms.wheelScrolled=false;
		if(target.id==ms.bar.el.id){
			clearInterval(ms.bar.slideTimer);
			ms.bar.grab=true;
			ms.clickY=e.clientY-ms.bar.y;
			e.preventDefault();
		}
		else if(target.id==ms.track.el.id){
			if(ms.content[ms.active].h>ms.container[ms.active].h){
			ms.track.grab=true;
			ms.dragY=e.layerY-(ms.bar.h/2);
			if(ms.dragY<0) ms.dragY=0;
			if(ms.dragY>ms.track.h-ms.bar.h) ms.dragY=ms.track.h-ms.bar.h;
			ms.bar.slideTo(0,ms.dragY,300,-1);
			e.preventDefault(e);
			}
		}
	},
	mouseUp:function(e){
		ms.bar.grab=false;
		ms.track.grab=false;
		clearTimeout(ms.timer);
	},
	mouseMove:function(e){
		if(ms.bar.grab && ms.content[ms.active].h>ms.container[ms.active].h){
			e=fixEvent(e);
			var mouseY=e.clientY;
			ms.dragY=e.clientY-ms.clickY;
			if(ms.dragY<0) ms.dragY=0;
			if(ms.dragY>ms.track.h-ms.bar.h) ms.dragY=ms.track.h-ms.bar.h;
			ms.contentY=0-(ms.dragY*(ms.content[ms.active].h-ms.container[ms.active].h)/Math.round(ms.track.h-ms.bar.h));
			ms.content[ms.active].moveTo(0,ms.contentY);
			ms.bar.moveTo(0,ms.dragY);
			e.preventDefault();
		}
	},
	scroll:function(num,speed){
		if(ms.content[num].y<0 || ms.content[num].y>-ms.content[num].h+ms.container[ms.active].h){
			clearInterval(ms.content[ms.active].slideTimer);
			clearInterval(ms.bar.slideTimer);
			ms.contentY=ms.content[num].y+speed;
			if(ms.contentY<-(ms.content[num].h-ms.container[ms.active].h)) ms.contentY=-ms.content[num].h+ms.container[ms.active].h;
			else if(ms.contentY>0) ms.contentY=0;
			ms.content[num].moveTo(0,ms.contentY);
			ms.dragY=0-(ms.content[num].y*Math.round(ms.track.h-ms.bar.h)/(ms.content[num].h-ms.container[ms.active].h));
			ms.bar.moveTo(0,ms.dragY);
			if(!ms.wheelScrolled) ms.timer=setTimeout('ms.scroll('+num+','+speed+')',ms.step);
		}
	},
	wheelScroll:function(e){
		e=fixEvent(e);
		if(window.event.wheelDelta<=-120){
			ms.wheelScrolled=true;
			ms.scroll(ms.active,-ms.wheelSpeed);
		}
		else if(window.event.wheelDelta>=120){
			ms.wheelScrolled=true;
			ms.scroll(ms.active,ms.wheelSpeed);
		}
		e.preventDefault();
	},
	swapTo:function(num,load){
		clearInterval(ms.bar.slideTimer);
		ms.container[ms.active].hide();
		ms.header[ms.active].hide();
		ms.active=num;
		ms.content[ms.active].update();
		ms.bar.moveTo(0,0);
		ms.track.show();
		if(ms.content[ms.active].h>ms.container[ms.active].h){
			ms.bar.show();
		}
		else{
			ms.bar.hide();
		}
		ms.content[ms.active].moveTo(0,0);
		ms.container[ms.active].show();
		ms.header[ms.active].show();
	},
//update after font mod
	mod:function(){
		for(var i=0;i<ms.scrollables;i++){
			ms.content[i].update();
		}
		ms.bar.moveTo(0,0);
		ms.track.show();
		if(ms.content[ms.active].h>ms.container[ms.active].h){
			ms.bar.show();
		}
		else{
			ms.bar.hide();
		}
		ms.content[ms.active].moveTo(0,0);
		ms.container[ms.active].show();
		ms.header[ms.active].show();
	},
	rambFx:function(){
		ms.content[ms.active].update();
		ms.bar.moveTo(0,0);
		ms.track.show();
		if(ms.content[ms.active].h>ms.container[ms.active].h){
			ms.bar.show();
		}
		else{
			ms.bar.hide();
		}
		ms.content[ms.active].moveTo(0,0);
		ms.container[ms.active].show();
		ms.header[ms.active].show();
	},
	init:function(){
		ms.bar=new createObjectById('scroll_bar');
		ms.track=new createObjectById('content_scroller');
		ms.container=new Array();
		ms.content=new Array();
		ms.header=new Array();
		for(var i=0;i<ms.scrollables;i++){
			ms.header[i]=new createObjectById('content_title_'+i);
			ms.container[i]=new createObjectById('content_window_'+i);
			ms.content[i]=new createObjectById('content_'+i);
			ms.content[i].setSize(ms.container[i].w,null);
		}
		ms.bar.grab=false;
		ms.track.grab=false;
		ms.bar.onSlide=function(x,y){
			ms.contentY=0-(y*(ms.content[ms.active].h-ms.container[ms.active].h)/Math.round(ms.track.h-ms.bar.h));
			ms.content[ms.active].moveTo(0,ms.contentY);
		}
		if(bw.ie6) addEvent(document,'mousewheel',ms.wheelScroll,false);
		addEvent(document,'mousemove',ms.mouseMove,false);
		addEvent(document,'mousedown',ms.mouseDown,false);
		addEvent(document,'mouseup',ms.mouseUp,false);
		ms.swapTo(ms.active,1);
	}
}